@elice/material-exercise 1.231227.0 → 1.231228.0
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/cjs/components/material-exercise/MaterialExercise.i18n.js +2 -4
- package/cjs/components/material-exercise/MaterialExercise.js +54 -59
- package/cjs/components/material-exercise/MaterialExercise.styled.js +14 -20
- package/cjs/components/material-exercise/MaterialExerciseMobile.js +8 -15
- package/cjs/components/material-exercise/context/ExerciseIntlProvider.js +14 -18
- package/cjs/components/material-exercise/context/ExerciseProvider.js +58 -66
- package/cjs/components/material-exercise/context/ExerciseProviderNoImage.js +19 -24
- package/cjs/components/material-exercise/context/context.js +1 -7
- package/cjs/components/material-exercise/context/locales/noImage.en.json.js +1 -1
- package/cjs/components/material-exercise/context/locales/noImage.ko.json.js +1 -1
- package/cjs/components/material-exercise/context/recoil.js +293 -544
- package/cjs/components/material-exercise/context/recoilTypes.js +0 -2
- package/cjs/components/material-exercise/context/subjects.js +3 -5
- package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +60 -67
- package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -14
- package/cjs/components/material-exercise/exercise-code-history/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-code-history/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-file/ExerciseFile.js +17 -21
- package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +133 -203
- package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +8 -12
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +24 -40
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +38 -52
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +5 -9
- package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +189 -328
- package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +5 -9
- package/cjs/components/material-exercise/exercise-file-tree/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-file-tree/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +14 -17
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.js +11 -15
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +7 -11
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +44 -65
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +32 -61
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuReset.js +19 -35
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +48 -62
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -18
- package/cjs/components/material-exercise/exercise-menu/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-menu/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +21 -32
- package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +4 -8
- package/cjs/components/material-exercise/exercise-preview/ExercisePreview.js +23 -27
- package/cjs/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +7 -17
- package/cjs/components/material-exercise/exercise-preview/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-preview/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +23 -32
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +7 -15
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +79 -86
- package/cjs/components/material-exercise/exercise-rightpane/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-rightpane/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-room/ExerciseRoom.js +11 -22
- package/cjs/components/material-exercise/exercise-room/ExerciseRoom.styled.js +12 -20
- package/cjs/components/material-exercise/exercise-room/ExerciseRoomDetail.js +180 -288
- package/cjs/components/material-exercise/exercise-room/ExerciseRoomList.js +82 -116
- package/cjs/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -4
- package/cjs/components/material-exercise/exercise-room/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-room/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +125 -181
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -7
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerController.js +13 -17
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +43 -58
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +15 -27
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +65 -68
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +23 -32
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +58 -92
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +3 -7
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +11 -16
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +18 -29
- package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +162 -282
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -14
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +41 -54
- package/cjs/components/material-exercise/exercise-submit-history/locales/en.json.js +1 -1
- package/cjs/components/material-exercise/exercise-submit-history/locales/ko.json.js +1 -1
- package/cjs/components/shared/exercise-menu-button/ExerciseMenuButton.js +15 -21
- package/cjs/components/shared/exercise-shimmer/ExerciseFileShimmer.js +14 -19
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +16 -21
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +5 -10
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +18 -23
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +10 -21
- package/cjs/components/shared/exercise-version-list/ExerciseVersionList.js +5 -8
- package/cjs/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -7
- package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.js +8 -11
- package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +5 -15
- package/cjs/components/shared/file-icon/FileIcon.js +17 -23
- package/cjs/components/shared/file-tabs/FileTab.js +30 -36
- package/cjs/components/shared/file-tabs/FileTab.styled.js +15 -25
- package/cjs/components/shared/file-tabs/FileTabs.js +38 -63
- package/cjs/components/shared/file-tabs/FileTabs.styled.js +2 -8
- package/cjs/components/shared/file-tabs/util.js +14 -29
- package/cjs/components/shared/file-tree/FileTree.js +12 -17
- package/cjs/components/shared/file-tree/FileTreeConfig.js +22 -25
- package/cjs/components/shared/file-tree/FileTreeList.js +37 -39
- package/cjs/components/shared/file-tree/FileTreeListItemContent.js +61 -75
- package/cjs/components/shared/file-tree/FileTreeListItemContent.styled.js +21 -31
- package/cjs/components/shared/file-tree/FileTreeListItemContentInput.js +64 -72
- package/cjs/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -12
- package/cjs/components/shared/file-tree/FileTreeListItemContentMenu.js +63 -74
- package/cjs/components/shared/file-tree/FileTreeListItems.js +136 -151
- package/cjs/components/shared/file-tree/FileTreeListItems.styled.js +2 -8
- package/cjs/components/shared/file-tree/FileTreeToolbar.js +31 -32
- package/cjs/components/shared/file-tree/FileTreeToolbar.styled.js +1 -7
- package/cjs/components/shared/file-tree/context/FileTreeContext.js +76 -97
- package/cjs/components/shared/file-tree/locales/en.json.js +1 -1
- package/cjs/components/shared/file-tree/locales/ko.json.js +1 -1
- package/cjs/components/shared/file-tree/utils/fileTreeFiles.js +20 -26
- package/cjs/components/shared/file-tree/utils/fileTreeGenerator.js +146 -195
- package/cjs/components/shared/file-tree/utils/fileTreeInput.js +0 -2
- package/cjs/components/shared/file-tree/utils/fileTreeItem.js +1 -3
- package/cjs/components/shared/file-tree/utils/fileTreePath.js +6 -7
- package/cjs/components/shared/file-viewer/FileViewer.js +37 -61
- package/cjs/components/shared/file-viewer/FileViewerCsv.js +108 -172
- package/cjs/components/shared/file-viewer/FileViewerImage.js +8 -12
- package/cjs/components/shared/file-viewer/FileViewerIpynb.js +10 -23
- package/cjs/components/shared/file-viewer/FileViewerNonViewable.js +33 -42
- package/cjs/components/shared/file-viewer/FileViewerText.js +12 -24
- package/cjs/components/shared/file-viewer/locales/en.json.js +1 -1
- package/cjs/components/shared/file-viewer/locales/ko.json.js +1 -1
- package/cjs/components/shared/file-viewer/locales/nonViewable.en.json.js +1 -1
- package/cjs/components/shared/file-viewer/locales/nonViewable.ko.json.js +1 -1
- package/cjs/components/shared/material-modal/MaterialModal.js +11 -14
- package/cjs/components/shared/material-modal/MaterialModal.styled.js +5 -11
- package/cjs/components/shared/monaco-editor/MonacoEditor.js +74 -99
- package/cjs/components/shared/monaco-editor/MonacoEditorLazy.js +6 -12
- package/cjs/components/shared/monaco-editor/MonacoEditorMobile.js +36 -50
- package/cjs/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +91 -110
- package/cjs/components/shared/monaco-editor/constants/grammars/JSON.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/MagicPython.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/TypeScriptReact.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/asp-vb-net.tmlanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/c.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/cpp.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/csharp.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/css.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/dart.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/fsharp.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/go.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/html.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/index.js +28 -84
- package/cjs/components/shared/monaco-editor/constants/grammars/java.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/lua.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/objective-c.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/php.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/r.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/ruby.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/rust.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/scss.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/sql.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/swift.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/xml.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/grammars/yaml.tmLanguage.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/monaco/preferences.js +5 -7
- package/cjs/components/shared/monaco-editor/constants/themes/abyss.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/elice.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/index.js +17 -51
- package/cjs/components/shared/monaco-editor/constants/themes/kimbie-dark.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/monokai.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/quietlight.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/red.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/solarized-dark.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/solarized-light.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/tomorrow-night-blue.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-dark-plus.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-dark.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-hc-black.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-hc-light.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-light-plus.json.js +1 -1
- package/cjs/components/shared/monaco-editor/constants/themes/vs-light.json.js +1 -1
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -13
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -17
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -11
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +30 -36
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +7 -11
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +6 -8
- package/cjs/components/shared/monaco-editor/editor-languages/css/formatter.js +11 -52
- package/cjs/components/shared/monaco-editor/editor-languages/css/index.js +7 -8
- package/cjs/components/shared/monaco-editor/editor-languages/html/formatter.js +11 -52
- package/cjs/components/shared/monaco-editor/editor-languages/html/index.js +5 -6
- package/cjs/components/shared/monaco-editor/editor-languages/index.js +4 -4
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -3
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/express.js +1 -1
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/propTypes.js +1 -1
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/react.js +1 -1
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/formatter.js +11 -56
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/index.js +17 -18
- package/cjs/components/shared/monaco-editor/hooks/useEditorOptions.js +5 -13
- package/cjs/components/shared/monaco-editor/locales/en.json.js +1 -1
- package/cjs/components/shared/monaco-editor/locales/ko.json.js +1 -1
- package/cjs/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +12 -12
- package/cjs/components/shared/monaco-editor/utils/emmet/emmet.js +0 -2
- package/cjs/components/shared/monaco-editor/utils/emmet/registerProvider.js +6 -14
- package/cjs/components/shared/monaco-editor/utils/grammar/index.js +25 -69
- package/cjs/components/shared/monaco-editor/utils/grammar/onigasm.js +6 -27
- package/cjs/components/shared/monaco-editor/utils/grammar/textmate.js +38 -73
- package/cjs/components/shared/monaco-editor/utils/monacoLanguage.js +8 -11
- package/cjs/components/shared/monaco-editor/utils/monacoPreference.js +4 -8
- package/cjs/components/shared/monaco-editor/utils/prettier/config.js +2 -4
- package/cjs/components/shared/monaco-editor/utils/prettier/index.js +8 -46
- package/cjs/components/shared/monaco-editor/utils/theme/convert.js +14 -26
- package/cjs/components/shared/monaco-editor/utils/theme/index.js +3 -24
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +56 -79
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +68 -84
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +93 -122
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +133 -158
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +92 -106
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -4
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +6 -3
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -4
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +158 -179
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -5
- package/cjs/components/shared/no-vnc/NoVnc.js +57 -86
- package/cjs/components/shared/no-vnc/NoVncLazy.js +5 -11
- package/cjs/components/shared/preview-container/PreviewContainer.js +11 -15
- package/cjs/components/shared/web-browser/WebBrowser.js +37 -53
- package/cjs/components/shared/xterm/Xterm.js +58 -81
- package/cjs/components/shared/xterm/XtermLazy.js +5 -11
- package/cjs/components/shared/xterm/locales/en.json.js +1 -1
- package/cjs/components/shared/xterm/locales/ko.json.js +1 -1
- package/cjs/components/shared/xterm/utils/index.js +0 -2
- package/cjs/constants/arduino.js +10 -12
- package/cjs/constants/shortcutKeyMap.js +2 -4
- package/cjs/constants/stylesheets.js +5 -9
- package/cjs/hooks/useArduino.js +141 -284
- package/cjs/hooks/useExerciseFile.js +22 -26
- package/cjs/hooks/useExericseShortcut.js +4 -8
- package/cjs/hooks/useMaterialExerciseFileUrl.js +33 -57
- package/cjs/hooks/useRunnerRoomWebSocket.js +27 -53
- package/cjs/hooks/useStdioTextConcator.js +10 -22
- package/cjs/hooks/useStdioWebSocket.js +28 -34
- package/cjs/hooks/useUsercodeEditWebSocket.js +158 -240
- package/cjs/hooks/useUsercodeHistory.js +63 -117
- package/cjs/index.js +4 -6
- package/cjs/utils/arduino.js +11 -25
- package/cjs/utils/exerciseFile.js +10 -10
- package/cjs/utils/runner.js +15 -31
- package/es/components/material-exercise/MaterialExercise.i18n.js +2 -2
- package/es/components/material-exercise/MaterialExercise.js +34 -35
- package/es/components/material-exercise/MaterialExercise.styled.js +14 -14
- package/es/components/material-exercise/MaterialExerciseMobile.js +6 -9
- package/es/components/material-exercise/context/ExerciseIntlProvider.js +10 -8
- package/es/components/material-exercise/context/ExerciseProvider.js +52 -55
- package/es/components/material-exercise/context/ExerciseProviderNoImage.js +10 -10
- package/es/components/material-exercise/context/context.js +1 -1
- package/es/components/material-exercise/context/recoil.js +290 -535
- package/es/components/material-exercise/context/subjects.js +3 -3
- package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +51 -53
- package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -8
- package/es/components/material-exercise/exercise-file/ExerciseFile.js +9 -8
- package/es/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +127 -193
- package/es/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +5 -4
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +20 -31
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +35 -44
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +1 -1
- package/es/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +181 -315
- package/es/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +1 -1
- package/es/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +11 -10
- package/es/components/material-exercise/exercise-menu/ExerciseMenu.js +7 -6
- package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +3 -3
- package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +25 -42
- package/es/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +26 -51
- package/es/components/material-exercise/exercise-menu/ExerciseMenuReset.js +11 -23
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +21 -31
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -12
- package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +19 -26
- package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +1 -1
- package/es/components/material-exercise/exercise-preview/ExercisePreview.js +15 -14
- package/es/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +5 -11
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +11 -15
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +5 -9
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +78 -80
- package/es/components/material-exercise/exercise-room/ExerciseRoom.js +6 -13
- package/es/components/material-exercise/exercise-room/ExerciseRoom.styled.js +12 -14
- package/es/components/material-exercise/exercise-room/ExerciseRoomDetail.js +134 -236
- package/es/components/material-exercise/exercise-room/ExerciseRoomList.js +65 -94
- package/es/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -2
- package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +116 -167
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -1
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerController.js +8 -7
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +17 -27
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +11 -18
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +52 -50
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +10 -14
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +46 -75
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +2 -2
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +4 -4
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +15 -21
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +138 -253
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -8
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +29 -37
- package/es/components/shared/exercise-menu-button/ExerciseMenuButton.js +12 -13
- package/es/components/shared/exercise-shimmer/ExerciseFileShimmer.js +2 -2
- package/es/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +12 -12
- package/es/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +2 -2
- package/es/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +14 -14
- package/es/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +9 -15
- package/es/components/shared/exercise-version-list/ExerciseVersionList.js +3 -2
- package/es/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -1
- package/es/components/shared/exercise-version-list/ExerciseVersionListItem.js +6 -5
- package/es/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +5 -9
- package/es/components/shared/file-icon/FileIcon.js +15 -17
- package/es/components/shared/file-tabs/FileTab.js +22 -24
- package/es/components/shared/file-tabs/FileTab.styled.js +15 -19
- package/es/components/shared/file-tabs/FileTabs.js +35 -55
- package/es/components/shared/file-tabs/FileTabs.styled.js +2 -2
- package/es/components/shared/file-tabs/util.js +14 -27
- package/es/components/shared/file-tree/FileTree.js +3 -3
- package/es/components/shared/file-tree/FileTreeConfig.js +18 -15
- package/es/components/shared/file-tree/FileTreeList.js +33 -29
- package/es/components/shared/file-tree/FileTreeListItemContent.js +45 -55
- package/es/components/shared/file-tree/FileTreeListItemContent.styled.js +21 -25
- package/es/components/shared/file-tree/FileTreeListItemContentInput.js +60 -64
- package/es/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -6
- package/es/components/shared/file-tree/FileTreeListItemContentMenu.js +39 -46
- package/es/components/shared/file-tree/FileTreeListItems.js +134 -145
- package/es/components/shared/file-tree/FileTreeListItems.styled.js +2 -2
- package/es/components/shared/file-tree/FileTreeToolbar.js +25 -22
- package/es/components/shared/file-tree/FileTreeToolbar.styled.js +1 -1
- package/es/components/shared/file-tree/context/FileTreeContext.js +74 -89
- package/es/components/shared/file-tree/utils/fileTreeFiles.js +20 -20
- package/es/components/shared/file-tree/utils/fileTreeGenerator.js +146 -193
- package/es/components/shared/file-tree/utils/fileTreeItem.js +1 -1
- package/es/components/shared/file-tree/utils/fileTreePath.js +6 -5
- package/es/components/shared/file-viewer/FileViewer.js +21 -38
- package/es/components/shared/file-viewer/FileViewerCsv.js +70 -129
- package/es/components/shared/file-viewer/FileViewerImage.js +4 -3
- package/es/components/shared/file-viewer/FileViewerIpynb.js +7 -14
- package/es/components/shared/file-viewer/FileViewerNonViewable.js +15 -18
- package/es/components/shared/file-viewer/FileViewerText.js +9 -17
- package/es/components/shared/material-modal/MaterialModal.js +8 -7
- package/es/components/shared/material-modal/MaterialModal.styled.js +5 -5
- package/es/components/shared/monaco-editor/MonacoEditor.js +67 -87
- package/es/components/shared/monaco-editor/MonacoEditorLazy.js +2 -4
- package/es/components/shared/monaco-editor/MonacoEditorMobile.js +31 -41
- package/es/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +52 -66
- package/es/components/shared/monaco-editor/constants/grammars/index.js +28 -82
- package/es/components/shared/monaco-editor/constants/monaco/preferences.js +5 -5
- package/es/components/shared/monaco-editor/constants/themes/index.js +17 -49
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -11
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -15
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -9
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +30 -34
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +7 -9
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +6 -6
- package/es/components/shared/monaco-editor/editor-languages/css/formatter.js +10 -33
- package/es/components/shared/monaco-editor/editor-languages/html/formatter.js +10 -33
- package/es/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -1
- package/es/components/shared/monaco-editor/editor-languages/typescript/formatter.js +10 -37
- package/es/components/shared/monaco-editor/editor-languages/typescript/index.js +3 -3
- package/es/components/shared/monaco-editor/hooks/useEditorOptions.js +5 -11
- package/es/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +12 -10
- package/es/components/shared/monaco-editor/utils/emmet/registerProvider.js +6 -12
- package/es/components/shared/monaco-editor/utils/grammar/index.js +24 -68
- package/es/components/shared/monaco-editor/utils/grammar/onigasm.js +6 -25
- package/es/components/shared/monaco-editor/utils/grammar/textmate.js +35 -67
- package/es/components/shared/monaco-editor/utils/monacoLanguage.js +5 -5
- package/es/components/shared/monaco-editor/utils/monacoPreference.js +4 -6
- package/es/components/shared/monaco-editor/utils/prettier/config.js +2 -2
- package/es/components/shared/monaco-editor/utils/prettier/index.js +7 -27
- package/es/components/shared/monaco-editor/utils/theme/convert.js +13 -19
- package/es/components/shared/monaco-editor/utils/theme/index.js +3 -22
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +56 -77
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +68 -82
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +93 -120
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +130 -152
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +92 -104
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -2
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +6 -1
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -2
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +157 -172
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -3
- package/es/components/shared/no-vnc/NoVnc.js +42 -59
- package/es/components/shared/no-vnc/NoVncLazy.js +2 -4
- package/es/components/shared/preview-container/PreviewContainer.js +8 -7
- package/es/components/shared/web-browser/WebBrowser.js +29 -40
- package/es/components/shared/xterm/Xterm.js +51 -69
- package/es/components/shared/xterm/XtermLazy.js +2 -4
- package/es/constants/arduino.js +10 -10
- package/es/constants/shortcutKeyMap.js +1 -3
- package/es/constants/stylesheets.js +5 -7
- package/es/hooks/useArduino.js +141 -278
- package/es/hooks/useExerciseFile.js +22 -24
- package/es/hooks/useExericseShortcut.js +4 -6
- package/es/hooks/useMaterialExerciseFileUrl.js +34 -52
- package/es/hooks/useRunnerRoomWebSocket.js +27 -51
- package/es/hooks/useStdioTextConcator.js +10 -16
- package/es/hooks/useStdioWebSocket.js +28 -32
- package/es/hooks/useUsercodeEditWebSocket.js +157 -232
- package/es/hooks/useUsercodeHistory.js +63 -115
- package/es/utils/arduino.js +11 -23
- package/es/utils/exerciseFile.js +10 -8
- package/es/utils/runner.js +15 -29
- package/package.json +11 -7
- package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -521
- package/es/_virtual/_rollupPluginBabelHelpers.js +0 -499
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React, { useState, useEffect } from 'react';
|
|
3
2
|
import { useIntl } from 'react-intl';
|
|
4
3
|
import { Flex, Text } from '@elice/blocks';
|
|
@@ -12,24 +11,18 @@ import '../context/subjects.js';
|
|
|
12
11
|
import '../context/ExerciseProvider.js';
|
|
13
12
|
import ExerciseRunnerControllerStatusIndicator from './ExerciseRunnerControllerStatusIndicator.js';
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
const StyledMessageWrapper = styled(Flex).withConfig({
|
|
16
15
|
componentId: "sc-19z7lun-0"
|
|
17
16
|
})(["height:1rem;"]);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
status = _useState4[0],
|
|
28
|
-
setStatus = _useState4[1];
|
|
29
|
-
var arduinoOpenedPort = useRecoilValue(exerciseArduinoOpenedPortNameState);
|
|
30
|
-
var arduinoUploadProgress = useRecoilValue(exerciseArduinoUploadProgressState);
|
|
31
|
-
var arduinoAgentConnectionStatus = useRecoilValue(exerciseArduinoAgentConnectionState);
|
|
32
|
-
useEffect(function () {
|
|
17
|
+
const ExerciseRunnerControllerArduinoStatusMessage = () => {
|
|
18
|
+
const intl = useIntl();
|
|
19
|
+
const ports = useRecoilValue(exerciseArduinoPortsState);
|
|
20
|
+
const [message, setMessage] = useState('');
|
|
21
|
+
const [status, setStatus] = useState('error');
|
|
22
|
+
const arduinoOpenedPort = useRecoilValue(exerciseArduinoOpenedPortNameState);
|
|
23
|
+
const arduinoUploadProgress = useRecoilValue(exerciseArduinoUploadProgressState);
|
|
24
|
+
const arduinoAgentConnectionStatus = useRecoilValue(exerciseArduinoAgentConnectionState);
|
|
25
|
+
useEffect(() => {
|
|
33
26
|
if (arduinoAgentConnectionStatus === 'disconnected') {
|
|
34
27
|
setStatus('error');
|
|
35
28
|
setMessage(intl.formatMessage({
|
|
@@ -72,7 +65,7 @@ var ExerciseRunnerControllerArduinoStatusMessage = function ExerciseRunnerContro
|
|
|
72
65
|
case 'error':
|
|
73
66
|
case 'done':
|
|
74
67
|
default:
|
|
75
|
-
|
|
68
|
+
const device = getPortFromName(ports, arduinoOpenedPort);
|
|
76
69
|
if (device) {
|
|
77
70
|
setMessage(intl.formatMessage({
|
|
78
71
|
id: 'exerciseRunner.controller.arduino.connectionStatus.connectedDevice'
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js
CHANGED
|
@@ -24,67 +24,69 @@ import 'unicount';
|
|
|
24
24
|
import { ExerciseRunnerContext } from './ExerciseRunnerContext.js';
|
|
25
25
|
import ExerciseRunnerControllerCodeHelpRequestButton from './ExerciseRunnerControllerCodeHelpRequestButton.js';
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
const StyledControllerButton = styled(Button).withConfig({
|
|
28
28
|
componentId: "sc-d9xhed-0"
|
|
29
29
|
})(["position:relative;transition:none;"]);
|
|
30
|
-
|
|
30
|
+
const StyledControllerButtonWrap = styled.div.withConfig({
|
|
31
31
|
componentId: "sc-d9xhed-1"
|
|
32
32
|
})(["display:flex;"]);
|
|
33
|
-
|
|
33
|
+
const StyledControllerButtonGroup = styled.div.withConfig({
|
|
34
34
|
componentId: "sc-d9xhed-2"
|
|
35
35
|
})(["display:flex;flex-direction:row;align-items:center;> ", ",> ", "{margin-right:0.5rem;&:last-child{margin-right:0;}}"], StyledControllerButtonWrap, StyledControllerButton);
|
|
36
|
-
|
|
36
|
+
const ExerciseRunnerControllerButtonGroup = () => {
|
|
37
37
|
var _a;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
materialExerciseId
|
|
41
|
-
onCodeHelpRequest
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
const intl = useIntl();
|
|
39
|
+
const {
|
|
40
|
+
materialExerciseId,
|
|
41
|
+
onCodeHelpRequest
|
|
42
|
+
} = React.useContext(ExerciseContext);
|
|
43
|
+
const {
|
|
44
|
+
onSubmit,
|
|
45
|
+
onSyncRequest,
|
|
46
|
+
onCancel
|
|
47
|
+
} = React.useContext(ExerciseRunnerContext);
|
|
48
|
+
const runnerWebsocketStatus = useRecoilValue(exerciseRunnerWebSocketStatusQuery);
|
|
49
|
+
const editorCursorSelectionValue = useRecoilValue(exerciseFileEditorCursorSelectionValueState);
|
|
50
|
+
const exercise = useRecoilValue(exerciseState(materialExerciseId));
|
|
51
|
+
const exerciseRunType = useRecoilValue(exerciseRunnerRunTypeState);
|
|
52
|
+
const exerciseWithNoGrade = Boolean(exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade);
|
|
53
|
+
const lecture = useRecoilValue(exerciseLectureState(exercise === null || exercise === void 0 ? void 0 : exercise._lectureId));
|
|
54
|
+
const isTestLecture = (lecture === null || lecture === void 0 ? void 0 : lecture.lectureType) === enums.LectureType.Test;
|
|
55
|
+
const isTestLectureCompleted = (lecture === null || lecture === void 0 ? void 0 : lecture.testAdmissionStatus) === enums.TestAdmissionStatus.Completed;
|
|
54
56
|
// runner states
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
const isSubmitting = useRecoilValue(exerciseRunnerSubmittingState);
|
|
58
|
+
const isRunning = useRecoilValue(exerciseRunnerRunningState);
|
|
59
|
+
const isConnecting = runnerWebsocketStatus === EliceWebSocket.CONNECTING;
|
|
60
|
+
const isNotReady = runnerWebsocketStatus !== EliceWebSocket.OPEN;
|
|
59
61
|
// arduino
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
const isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
|
|
63
|
+
const arduinoUploadProgress = useRecoilValue(exerciseArduinoUploadProgressState);
|
|
64
|
+
const arduinoOpenedPortName = useRecoilValue(exerciseArduinoOpenedPortNameState);
|
|
63
65
|
// monaco editor apis
|
|
64
|
-
|
|
66
|
+
const exerciseMonacoEditorApis = useRecoilValue(exerciseMonacoEditorApisState);
|
|
65
67
|
//
|
|
66
68
|
// ========= ui states =========
|
|
67
69
|
//
|
|
68
70
|
// submit run
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const isSubmitRunHidden = isRunning;
|
|
72
|
+
const isSubmitRunArduinoDisabled = isArduinoExercise ? arduinoUploadProgress !== 'ready' && arduinoUploadProgress !== 'error' || !arduinoOpenedPortName : false;
|
|
73
|
+
const isSubmitRunDisabled = isSubmitRunHidden || isSubmitRunArduinoDisabled || isNotReady || isConnecting || isSubmitting;
|
|
72
74
|
// submit grade
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
const isSubmitGradeHidden = isRunning;
|
|
76
|
+
const isSubmitGradeDisabled = isSubmitGradeHidden || exerciseWithNoGrade || isTestLecture && isTestLectureCompleted || isNotReady || isConnecting || isSubmitting;
|
|
75
77
|
// cancel
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
const isCancelHidden = !isRunning;
|
|
79
|
+
const isCancelDisabled = isCancelHidden || isNotReady || isConnecting;
|
|
78
80
|
// sync request
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
const isSyncRequestHidden = !isRunning || !((_a = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage) === null || _a === void 0 ? void 0 : _a.httpPort);
|
|
82
|
+
const isSyncRequestDisabled = isSyncRequestHidden || isNotReady || isConnecting;
|
|
81
83
|
//
|
|
82
84
|
//
|
|
83
85
|
//
|
|
84
86
|
/**
|
|
85
87
|
* Submit to run
|
|
86
88
|
*/
|
|
87
|
-
|
|
89
|
+
const handleSubmitRun = () => {
|
|
88
90
|
if (!isSubmitRunDisabled) {
|
|
89
91
|
void onSubmit(enums.ExerciseRunType.Run);
|
|
90
92
|
}
|
|
@@ -92,7 +94,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
92
94
|
/**
|
|
93
95
|
* Submit to grade
|
|
94
96
|
*/
|
|
95
|
-
|
|
97
|
+
const handleSubmitGrade = () => {
|
|
96
98
|
if (!isSubmitGradeDisabled) {
|
|
97
99
|
void onSubmit(enums.ExerciseRunType.Grade);
|
|
98
100
|
}
|
|
@@ -100,7 +102,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
100
102
|
/**
|
|
101
103
|
* Cancel
|
|
102
104
|
*/
|
|
103
|
-
|
|
105
|
+
const handleCancel = () => {
|
|
104
106
|
if (!isCancelDisabled) {
|
|
105
107
|
onCancel();
|
|
106
108
|
}
|
|
@@ -108,7 +110,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
108
110
|
/**
|
|
109
111
|
* Sync request
|
|
110
112
|
*/
|
|
111
|
-
|
|
113
|
+
const handleSyncRequest = () => {
|
|
112
114
|
if (!isSyncRequestDisabled) {
|
|
113
115
|
onSyncRequest();
|
|
114
116
|
}
|
|
@@ -123,9 +125,9 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
123
125
|
//
|
|
124
126
|
// handle save action emitted by file editor
|
|
125
127
|
//
|
|
126
|
-
React.useEffect(
|
|
127
|
-
|
|
128
|
-
return
|
|
128
|
+
React.useEffect(() => {
|
|
129
|
+
const saveActionSub = exerciseFileEditorSaveAction$.subscribe(handleSyncRequest);
|
|
130
|
+
return () => {
|
|
129
131
|
saveActionSub.unsubscribe();
|
|
130
132
|
};
|
|
131
133
|
},
|
|
@@ -134,7 +136,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
134
136
|
/**
|
|
135
137
|
* Submit to run button
|
|
136
138
|
*/
|
|
137
|
-
|
|
139
|
+
const renderSubmitRunButton = () => {
|
|
138
140
|
if (isSubmitRunHidden) {
|
|
139
141
|
return null;
|
|
140
142
|
}
|
|
@@ -152,7 +154,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
152
154
|
/**
|
|
153
155
|
* Submit to grade button
|
|
154
156
|
*/
|
|
155
|
-
|
|
157
|
+
const renderSubmitGradeButton = () => {
|
|
156
158
|
if (isSubmitGradeHidden) {
|
|
157
159
|
return null;
|
|
158
160
|
}
|
|
@@ -175,7 +177,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
175
177
|
/**
|
|
176
178
|
* Cancel button
|
|
177
179
|
*/
|
|
178
|
-
|
|
180
|
+
const renderCancelButton = () => {
|
|
179
181
|
if (isCancelHidden) {
|
|
180
182
|
return null;
|
|
181
183
|
}
|
|
@@ -192,7 +194,7 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
192
194
|
/**
|
|
193
195
|
* Sync request button
|
|
194
196
|
*/
|
|
195
|
-
|
|
197
|
+
const renderSyncRequestButton = () => {
|
|
196
198
|
if (isSyncRequestHidden) {
|
|
197
199
|
return null;
|
|
198
200
|
}
|
|
@@ -209,12 +211,12 @@ var ExerciseRunnerControllerButtonGroup = function ExerciseRunnerControllerButto
|
|
|
209
211
|
/**
|
|
210
212
|
* Code help button
|
|
211
213
|
*/
|
|
212
|
-
|
|
214
|
+
const renderCodeHelpRequestButton = () => {
|
|
213
215
|
if (isRunning || !editorCursorSelectionValue || typeof onCodeHelpRequest !== 'function') {
|
|
214
216
|
return null;
|
|
215
217
|
}
|
|
216
218
|
return React.createElement(ExerciseRunnerControllerCodeHelpRequestButton, {
|
|
217
|
-
onClick:
|
|
219
|
+
onClick: () => {
|
|
218
220
|
var _a, _b, _c;
|
|
219
221
|
onCodeHelpRequest({
|
|
220
222
|
code: editorCursorSelectionValue,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { FormattedMessage } from 'react-intl';
|
|
4
3
|
import { Button, Tooltip, Icon, Flex, BadgeNext, Text, Hspace, IconButton } from '@elice/blocks';
|
|
@@ -11,22 +10,19 @@ import '../context/recoilTypes.js';
|
|
|
11
10
|
import '../context/subjects.js';
|
|
12
11
|
import '../context/ExerciseProvider.js';
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY = 'elice-material-exercise-aibot-tooltip-hidden';
|
|
14
|
+
const ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE = 'true';
|
|
15
|
+
const StyledControllerButton = styled(Button).withConfig({
|
|
17
16
|
componentId: "sc-10grd0k-0"
|
|
18
17
|
})(["position:relative;transition:none;"]);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
isTooltipHidden = _React$useState2[0],
|
|
23
|
-
setIsTooltipHidden = _React$useState2[1];
|
|
24
|
-
var isAibotInfoEnabled = useRecoilValue(exerciseAibotInfoEnableState);
|
|
18
|
+
const ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef((props, ref) => {
|
|
19
|
+
const [isTooltipHidden, setIsTooltipHidden] = React.useState(false);
|
|
20
|
+
const isAibotInfoEnabled = useRecoilValue(exerciseAibotInfoEnableState);
|
|
25
21
|
//
|
|
26
22
|
//
|
|
27
23
|
//
|
|
28
|
-
React.useEffect(
|
|
29
|
-
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
const isTooltipHidden = sessionStorage.getItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY) === ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE;
|
|
30
26
|
if (isTooltipHidden) {
|
|
31
27
|
setIsTooltipHidden(true);
|
|
32
28
|
return;
|
|
@@ -38,7 +34,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
|
|
|
38
34
|
/**
|
|
39
35
|
*
|
|
40
36
|
*/
|
|
41
|
-
|
|
37
|
+
const renderAiBotTooltipTitle = () => {
|
|
42
38
|
return React.createElement(Flex, {
|
|
43
39
|
align: "center"
|
|
44
40
|
}, React.createElement(BadgeNext, {
|
|
@@ -63,7 +59,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
|
|
|
63
59
|
hasPadding: false,
|
|
64
60
|
border: false,
|
|
65
61
|
icon: eilMathsignMultiplyBasic,
|
|
66
|
-
onClick:
|
|
62
|
+
onClick: () => {
|
|
67
63
|
sessionStorage.setItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY, ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE);
|
|
68
64
|
setIsTooltipHidden(true);
|
|
69
65
|
}
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { useIntl, FormattedMessage, FormattedDate } from 'react-intl';
|
|
4
3
|
import { usePrevious } from 'react-use';
|
|
@@ -17,48 +16,40 @@ import '../context/ExerciseProvider.js';
|
|
|
17
16
|
//
|
|
18
17
|
//
|
|
19
18
|
//
|
|
20
|
-
|
|
19
|
+
const StyledHr = styled(Hr).withConfig({
|
|
21
20
|
componentId: "sc-30ywzi-0"
|
|
22
21
|
})(["height:2rem;"]);
|
|
23
|
-
|
|
22
|
+
const StyledRunnerInfoTitle = styled.span.withConfig({
|
|
24
23
|
componentId: "sc-30ywzi-1"
|
|
25
24
|
})(["display:block;color:", ";font-size:11px;line-height:1.25;"], base.color.navy3);
|
|
26
|
-
|
|
25
|
+
const StyledRunnerInfoContent = styled.span.withConfig({
|
|
27
26
|
componentId: "sc-30ywzi-2"
|
|
28
27
|
})(["display:block;color:", ";font-size:12px;line-height:1.25;"], base.color.navy1);
|
|
29
28
|
//
|
|
30
29
|
//
|
|
31
30
|
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
materialExerciseId
|
|
36
|
-
exerciseRoomId
|
|
37
|
-
onExerciseRunningDone
|
|
38
|
-
onError
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
var _React$useState3 = React.useState(null),
|
|
50
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
51
|
-
exerciseLastRunning = _React$useState4[0],
|
|
52
|
-
setExerciseLastRunning = _React$useState4[1];
|
|
53
|
-
var _React$useState5 = React.useState(null),
|
|
54
|
-
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
55
|
-
exerciseLastSubmit = _React$useState6[0],
|
|
56
|
-
setExerciseLastSubmit = _React$useState6[1];
|
|
31
|
+
const ExerciseRunnerControllerRunningInfo = () => {
|
|
32
|
+
const intl = useIntl();
|
|
33
|
+
const {
|
|
34
|
+
materialExerciseId,
|
|
35
|
+
exerciseRoomId,
|
|
36
|
+
onExerciseRunningDone,
|
|
37
|
+
onError
|
|
38
|
+
} = React.useContext(ExerciseContext);
|
|
39
|
+
const isRunning = useRecoilValue(exerciseRunnerRunningState);
|
|
40
|
+
const isPrevRunning = usePrevious(isRunning);
|
|
41
|
+
const isNoRunning = isPrevRunning === undefined;
|
|
42
|
+
const isRunningDone = isPrevRunning === true && !isRunning;
|
|
43
|
+
const exercise = useRecoilValue(exerciseState(materialExerciseId));
|
|
44
|
+
const user = useRecoilValue(exerciseUserState);
|
|
45
|
+
const [course, setCourse] = React.useState();
|
|
46
|
+
const [exerciseLastRunning, setExerciseLastRunning] = React.useState(null);
|
|
47
|
+
const [exerciseLastSubmit, setExerciseLastSubmit] = React.useState(null);
|
|
57
48
|
//
|
|
58
49
|
// Get exercise running list.
|
|
59
50
|
//
|
|
60
|
-
React.useEffect(
|
|
61
|
-
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
const userId = user === null || user === void 0 ? void 0 : user.id;
|
|
62
53
|
if (!userId || !exercise || !exerciseRoomId) {
|
|
63
54
|
return;
|
|
64
55
|
}
|
|
@@ -68,36 +59,21 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
68
59
|
if (!isNoRunning && !isRunningDone) {
|
|
69
60
|
return;
|
|
70
61
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return res.exerciseRunnings;
|
|
87
|
-
}).then(function (exerciseRunnings) {
|
|
88
|
-
var _a;
|
|
89
|
-
return (_a = exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
|
|
90
|
-
}));
|
|
91
|
-
case 1:
|
|
92
|
-
case "end":
|
|
93
|
-
return _context.stop();
|
|
94
|
-
}
|
|
95
|
-
}, _callee);
|
|
96
|
-
}));
|
|
97
|
-
return function _fetch(_x) {
|
|
98
|
-
return _ref.apply(this, arguments);
|
|
99
|
-
};
|
|
100
|
-
}();
|
|
62
|
+
const abortCtrl = new AbortController();
|
|
63
|
+
const _fetch = async runType => {
|
|
64
|
+
return getOrgMaterialExerciseExerciseRunningList({
|
|
65
|
+
exerciseRoomId,
|
|
66
|
+
filterRunType: runType,
|
|
67
|
+
offset: 0,
|
|
68
|
+
count: 1,
|
|
69
|
+
userId
|
|
70
|
+
}, {
|
|
71
|
+
signal: abortCtrl.signal
|
|
72
|
+
}).then(res => res.exerciseRunnings).then(exerciseRunnings => {
|
|
73
|
+
var _a;
|
|
74
|
+
return (_a = exerciseRunnings[0]) !== null && _a !== void 0 ? _a : null;
|
|
75
|
+
});
|
|
76
|
+
};
|
|
101
77
|
Promise.all([
|
|
102
78
|
// running
|
|
103
79
|
// - if exercise is no submit grade, fetch only running
|
|
@@ -106,17 +82,14 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
106
82
|
// submit
|
|
107
83
|
// - if exercise is no submit grade, fetch nothing
|
|
108
84
|
// - else, fetch submit
|
|
109
|
-
exercise.isNoSubmitGrade ? Promise.resolve(null) : _fetch(enums.ExerciseRunType.Grade)]).then(
|
|
110
|
-
var _ref3 = _slicedToArray(_ref2, 2),
|
|
111
|
-
exerciseLastRunning = _ref3[0],
|
|
112
|
-
exerciseLastSubmit = _ref3[1];
|
|
85
|
+
exercise.isNoSubmitGrade ? Promise.resolve(null) : _fetch(enums.ExerciseRunType.Grade)]).then(([exerciseLastRunning, exerciseLastSubmit]) => {
|
|
113
86
|
setExerciseLastRunning(exerciseLastRunning);
|
|
114
87
|
setExerciseLastSubmit(exerciseLastSubmit);
|
|
115
88
|
// callback on running done (last running which includes submit)
|
|
116
89
|
if (isRunningDone && typeof onExerciseRunningDone === 'function') {
|
|
117
90
|
onExerciseRunningDone(exerciseLastRunning);
|
|
118
91
|
}
|
|
119
|
-
}).catch(
|
|
92
|
+
}).catch(err => {
|
|
120
93
|
if (err.name === 'AbortError') {
|
|
121
94
|
return;
|
|
122
95
|
}
|
|
@@ -127,7 +100,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
127
100
|
id: 'exerciseRunner.controller.runningInfo.error.fetch'
|
|
128
101
|
}));
|
|
129
102
|
});
|
|
130
|
-
return
|
|
103
|
+
return () => {
|
|
131
104
|
abortCtrl.abort();
|
|
132
105
|
};
|
|
133
106
|
},
|
|
@@ -136,26 +109,24 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
136
109
|
//
|
|
137
110
|
// Get course
|
|
138
111
|
//
|
|
139
|
-
React.useEffect(
|
|
112
|
+
React.useEffect(() => {
|
|
140
113
|
if (!exercise) {
|
|
141
114
|
return;
|
|
142
115
|
}
|
|
143
|
-
|
|
116
|
+
const abortCtrl = new AbortController();
|
|
144
117
|
getOrgCourseGet({
|
|
145
118
|
courseId: exercise._courseId
|
|
146
119
|
}, {
|
|
147
120
|
signal: abortCtrl.signal
|
|
148
|
-
}).then(
|
|
149
|
-
|
|
150
|
-
}).then(setCourse).catch(console.error);
|
|
151
|
-
return function () {
|
|
121
|
+
}).then(res => res.course).then(setCourse).catch(console.error);
|
|
122
|
+
return () => {
|
|
152
123
|
abortCtrl.abort();
|
|
153
124
|
};
|
|
154
125
|
}, [exercise]);
|
|
155
126
|
/**
|
|
156
127
|
* Last running score.
|
|
157
128
|
*/
|
|
158
|
-
|
|
129
|
+
const renderRunningInfoLastSubmitScore = () => {
|
|
159
130
|
if (exercise === null || exercise === void 0 ? void 0 : exercise.isNoSubmitGrade) {
|
|
160
131
|
return null;
|
|
161
132
|
}
|
|
@@ -182,7 +153,7 @@ var ExerciseRunnerControllerRunningInfo = function ExerciseRunnerControllerRunni
|
|
|
182
153
|
/**
|
|
183
154
|
* Last submit time.
|
|
184
155
|
*/
|
|
185
|
-
|
|
156
|
+
const renderRunningInfoLastRunningTime = () => {
|
|
186
157
|
if (!course || (course === null || course === void 0 ? void 0 : course.courseType) === enums.CourseType.Challenge) {
|
|
187
158
|
return;
|
|
188
159
|
}
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { base } from '@elice/design-tokens';
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const ExerciseRunnerControllerStatusIndicator = styled.div.withConfig({
|
|
5
5
|
componentId: "sc-15703mt-0"
|
|
6
|
-
})(["margin-top:1px;margin-right:0.3rem;width:0.375rem;height:0.375rem;border-radius:50%;vertical-align:middle;background-color:", ";"],
|
|
6
|
+
})(["margin-top:1px;margin-right:0.3rem;width:0.375rem;height:0.375rem;border-radius:50%;vertical-align:middle;background-color:", ";"], props => {
|
|
7
7
|
switch (props.status) {
|
|
8
8
|
case 'success':
|
|
9
9
|
return base.color.green8;
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js
CHANGED
|
@@ -11,15 +11,15 @@ import '../context/subjects.js';
|
|
|
11
11
|
import '../context/ExerciseProvider.js';
|
|
12
12
|
import ExerciseRunnerControllerStatusIndicator from './ExerciseRunnerControllerStatusIndicator.js';
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
const StyledMessageWrapper = styled(Flex).withConfig({
|
|
15
15
|
componentId: "sc-1yqi8o2-0"
|
|
16
16
|
})(["height:1rem;"]);
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const ExerciseRunnerControllerStatusMessage = () => {
|
|
18
|
+
const websocketStatus = useRecoilValue(exerciseRunnerWebSocketStatusQuery);
|
|
19
19
|
/**
|
|
20
20
|
* Websocket state message.
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
const getWebsocketStateMessage = () => {
|
|
23
23
|
switch (websocketStatus) {
|
|
24
24
|
case EliceWebSocket.OPEN:
|
|
25
25
|
return React.createElement(FormattedMessage, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { FormattedMessage } from 'react-intl';
|
|
4
3
|
import { Text } from '@elice/blocks';
|
|
@@ -11,26 +10,21 @@ import '../context/recoilTypes.js';
|
|
|
11
10
|
import '../context/subjects.js';
|
|
12
11
|
import '../context/ExerciseProvider.js';
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
const StyledControllerTimerText = styled(Text).withConfig({
|
|
15
14
|
componentId: "sc-1ez8ns0-0"
|
|
16
15
|
})(["margin-top:-3px;color:", ";"], base.color.secondary4);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
materialExerciseId
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
setExerciseTimeLimit = _React$useState2[1];
|
|
26
|
-
var _React$useState3 = React.useState(0),
|
|
27
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
28
|
-
remainingTime = _React$useState4[0],
|
|
29
|
-
setRemainingTime = _React$useState4[1];
|
|
16
|
+
const ExerciseRunnerControllerTimer = () => {
|
|
17
|
+
const {
|
|
18
|
+
materialExerciseId
|
|
19
|
+
} = React.useContext(ExerciseContext);
|
|
20
|
+
const exercise = useRecoilValue(exerciseState(materialExerciseId));
|
|
21
|
+
const isRunning = useRecoilValue(exerciseRunnerRunningState);
|
|
22
|
+
const [exerciseTimeLimit, setExerciseTimeLimit] = React.useState(0);
|
|
23
|
+
const [remainingTime, setRemainingTime] = React.useState(0);
|
|
30
24
|
//
|
|
31
25
|
// Get time limit from exercise.
|
|
32
26
|
//
|
|
33
|
-
React.useEffect(
|
|
27
|
+
React.useEffect(() => {
|
|
34
28
|
var _a, _b;
|
|
35
29
|
if (isRunning) {
|
|
36
30
|
setExerciseTimeLimit((_b = (_a = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage) === null || _a === void 0 ? void 0 : _a.timeLimit) !== null && _b !== void 0 ? _b : 0);
|
|
@@ -41,17 +35,17 @@ var ExerciseRunnerControllerTimer = function ExerciseRunnerControllerTimer() {
|
|
|
41
35
|
//
|
|
42
36
|
// Calculate remaining time.
|
|
43
37
|
//
|
|
44
|
-
React.useEffect(
|
|
45
|
-
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
const startTime = Date.now();
|
|
46
40
|
setRemainingTime(exerciseTimeLimit);
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
const interval = window.setInterval(() => {
|
|
42
|
+
const newRemainingTime = exerciseTimeLimit - (Date.now() - startTime);
|
|
49
43
|
if (newRemainingTime < 0) {
|
|
50
44
|
window.clearInterval(interval);
|
|
51
45
|
}
|
|
52
46
|
setRemainingTime(Math.max(newRemainingTime, 0));
|
|
53
47
|
}, 100);
|
|
54
|
-
return
|
|
48
|
+
return () => {
|
|
55
49
|
setRemainingTime(0);
|
|
56
50
|
window.clearInterval(interval);
|
|
57
51
|
};
|