@elice/material-exercise 1.231227.0 → 1.240112.0-cloud.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, toConsumableArray as _toConsumableArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { useIntl } from 'react-intl';
|
|
4
3
|
import { useEvent } from 'react-use';
|
|
@@ -33,51 +32,52 @@ import phrasesKo from './locales/ko.json.js';
|
|
|
33
32
|
import { ExerciseRunnerContext } from './ExerciseRunnerContext.js';
|
|
34
33
|
import ExerciseRunnerController from './ExerciseRunnerController.js';
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
const EXERCISE_RUNNER_HORIZONTAL_RATIO = {
|
|
37
36
|
PREVIEW: 0.3,
|
|
38
37
|
XTERM: 0.7
|
|
39
38
|
};
|
|
40
|
-
|
|
39
|
+
const StyledExerciseRunner = styled.div.withConfig({
|
|
41
40
|
componentId: "sc-mp78g-0"
|
|
42
41
|
})(["display:flex;flex-direction:column;width:100%;height:100%;background-color:", ";min-height:0;"], base.color.navy8);
|
|
43
42
|
/**
|
|
44
43
|
*
|
|
45
44
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const ExerciseRunner = ({
|
|
46
|
+
exercisePreview
|
|
47
|
+
}) => {
|
|
48
48
|
var _a, _b, _c;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
onCodeHelpRequest
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
const intl = useIntl();
|
|
50
|
+
const {
|
|
51
|
+
onCodeHelpRequest
|
|
52
|
+
} = React.useContext(ExerciseContext);
|
|
53
|
+
const {
|
|
54
|
+
materialExerciseId,
|
|
55
|
+
exerciseRoomId,
|
|
56
|
+
locale,
|
|
57
|
+
onSubmit,
|
|
58
|
+
onError
|
|
59
|
+
} = React.useContext(ExerciseContext);
|
|
60
|
+
const exercise = useRecoilValue(exerciseState(materialExerciseId));
|
|
61
|
+
const {
|
|
62
|
+
fontSize: editorPreferenceFontSize
|
|
63
|
+
} = useRecoilValue(exerciseEditorPreferenceState);
|
|
61
64
|
// runner states
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
setRunnerRunTypeState = _useRecoilState2[1];
|
|
68
|
-
var setExerciseRunnerRoomConnectionInfo = useSetRecoilState(exerciseRunnerRoomConnectionInfoState);
|
|
69
|
-
var setRunnerStdioFilesState = useSetRecoilState(exerciseRunnerStdioFilesState);
|
|
65
|
+
const setRunnerSubmitting = useSetRecoilState(exerciseRunnerSubmittingState);
|
|
66
|
+
const setRunnerRunning = useSetRecoilState(exerciseRunnerRunningState);
|
|
67
|
+
const [runnerRunTypeState, setRunnerRunTypeState] = useRecoilState(exerciseRunnerRunTypeState);
|
|
68
|
+
const setExerciseRunnerRoomConnectionInfo = useSetRecoilState(exerciseRunnerRoomConnectionInfoState);
|
|
69
|
+
const setRunnerStdioFilesState = useSetRecoilState(exerciseRunnerStdioFilesState);
|
|
70
70
|
// preview states
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
const exercisePreviewType = useRecoilValue(exercisePreviewTypeState(materialExerciseId));
|
|
72
|
+
const exercisePreviewDisplayMode = useRecoilValue(exercisePreviewDisplayModeState);
|
|
73
73
|
// monaco editor value
|
|
74
|
-
|
|
74
|
+
const exerciseMonacoEditorApis = useRecoilValue(exerciseMonacoEditorApisState);
|
|
75
75
|
// websockets
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
const setRunnerRoomWebSocketState = useSetRecoilState(exerciseWebsocketQuery('runnerRoom'));
|
|
77
|
+
const setStdioWebSocketState = useSetRecoilState(exerciseWebsocketQuery('stdio'));
|
|
78
|
+
const handleAiHelpibotError = text => {
|
|
79
79
|
var _a, _b, _c;
|
|
80
|
-
|
|
80
|
+
const error = getProgrammingErrorResult(text);
|
|
81
81
|
if (!!error && typeof onCodeHelpRequest === 'function') {
|
|
82
82
|
onCodeHelpRequest({
|
|
83
83
|
code: error.errorCode,
|
|
@@ -88,33 +88,31 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
};
|
|
91
|
-
|
|
92
|
-
updateStdioTextConcator
|
|
91
|
+
const {
|
|
92
|
+
updateStdioTextConcator
|
|
93
|
+
} = useStdioTextConcator(handleAiHelpibotError);
|
|
93
94
|
// etc
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
var arduinoTextBuffer = React.useRef('');
|
|
100
|
-
var runnerRunTypeRef = React.useRef(runnerRunTypeState);
|
|
101
|
-
var xterm = React.useRef(null);
|
|
95
|
+
const exerciseContainerSize = useRecoilValue(exerciseContainerSizeState);
|
|
96
|
+
const [runnerSubmitErrorDialog, setRunnerSubmitErrorDialog] = React.useState(null);
|
|
97
|
+
const arduinoTextBuffer = React.useRef('');
|
|
98
|
+
const runnerRunTypeRef = React.useRef(runnerRunTypeState);
|
|
99
|
+
const xterm = React.useRef(null);
|
|
102
100
|
/**
|
|
103
101
|
* Handle text received from arduino serial output.
|
|
104
102
|
*/
|
|
105
|
-
|
|
103
|
+
const handleArduinoDigitalOutput = text => {
|
|
106
104
|
var _a;
|
|
107
105
|
(_a = xterm.current) === null || _a === void 0 ? void 0 : _a.write(text);
|
|
108
106
|
};
|
|
109
107
|
// Arduino
|
|
110
|
-
|
|
108
|
+
const arduino = useArduino({
|
|
111
109
|
writeTerminal: handleArduinoDigitalOutput
|
|
112
110
|
});
|
|
113
|
-
|
|
111
|
+
const isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
|
|
114
112
|
/**
|
|
115
113
|
* Handle destroy arduino client.
|
|
116
114
|
*/
|
|
117
|
-
|
|
115
|
+
const handleArduinoDistroy = React.useCallback(() => {
|
|
118
116
|
if (isArduinoExercise) {
|
|
119
117
|
arduino.destroy();
|
|
120
118
|
}
|
|
@@ -122,7 +120,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
122
120
|
/**
|
|
123
121
|
* Handle text received from stdio websocket.
|
|
124
122
|
*/
|
|
125
|
-
|
|
123
|
+
const handleWsStdioTextReceive = (type, text) => {
|
|
126
124
|
var _a, _b, _c;
|
|
127
125
|
switch (type) {
|
|
128
126
|
case 'text':
|
|
@@ -140,7 +138,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
140
138
|
/**
|
|
141
139
|
* Handle file received from stdio websocket.
|
|
142
140
|
*/
|
|
143
|
-
|
|
141
|
+
const handleWsStdioFileReceive = stdioFile => {
|
|
144
142
|
// arduino exercise
|
|
145
143
|
if (isArduinoExercise) {
|
|
146
144
|
if ('filename' in stdioFile && stdioFile.filename.startsWith('firmware') && stdioFile.filename.endsWith('hex')) {
|
|
@@ -149,20 +147,18 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
149
147
|
return;
|
|
150
148
|
}
|
|
151
149
|
// normal exercise
|
|
152
|
-
setRunnerStdioFilesState(
|
|
153
|
-
return [].concat(_toConsumableArray(prevFiles), [stdioFile]);
|
|
154
|
-
});
|
|
150
|
+
setRunnerStdioFilesState(prevFiles => [...prevFiles, stdioFile]);
|
|
155
151
|
};
|
|
156
152
|
/**
|
|
157
153
|
* Runner room websocket
|
|
158
154
|
*/
|
|
159
|
-
|
|
160
|
-
exerciseRoomId
|
|
155
|
+
const wsRunnerRoom = useRunnerRoomWebSocket({
|
|
156
|
+
exerciseRoomId
|
|
161
157
|
});
|
|
162
158
|
/**
|
|
163
159
|
* Stdio websocket
|
|
164
160
|
*/
|
|
165
|
-
|
|
161
|
+
const wsStdio = useStdioWebSocket({
|
|
166
162
|
wsUri: (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.wsUri,
|
|
167
163
|
roomToken: (_b = wsRunnerRoom.roomConnectionInfo) === null || _b === void 0 ? void 0 : _b.roomToken,
|
|
168
164
|
isTty: (_c = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage) === null || _c === void 0 ? void 0 : _c.isTty,
|
|
@@ -172,7 +168,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
172
168
|
/**
|
|
173
169
|
* Handle submit code error.
|
|
174
170
|
*/
|
|
175
|
-
|
|
171
|
+
const handleRunnerSubmitError = err => {
|
|
176
172
|
var _a, _b;
|
|
177
173
|
switch ((_a = err.detail) === null || _a === void 0 ? void 0 : _a.failCode) {
|
|
178
174
|
case 'room_type_mismatch':
|
|
@@ -188,9 +184,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
188
184
|
action: intl.formatMessage({
|
|
189
185
|
id: 'exerciseRunner.submitErrorDialog.action.reload'
|
|
190
186
|
}),
|
|
191
|
-
onAction:
|
|
192
|
-
return window.location.reload();
|
|
193
|
-
}
|
|
187
|
+
onAction: () => window.location.reload()
|
|
194
188
|
});
|
|
195
189
|
break;
|
|
196
190
|
case 'invalid_room_token':
|
|
@@ -202,9 +196,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
202
196
|
action: intl.formatMessage({
|
|
203
197
|
id: 'exerciseRunner.submitErrorDialog.action.reload'
|
|
204
198
|
}),
|
|
205
|
-
onAction:
|
|
206
|
-
return window.location.reload();
|
|
207
|
-
}
|
|
199
|
+
onAction: () => window.location.reload()
|
|
208
200
|
});
|
|
209
201
|
break;
|
|
210
202
|
case 'not_for_submit_grade':
|
|
@@ -227,9 +219,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
227
219
|
action: intl.formatMessage({
|
|
228
220
|
id: 'exerciseRunner.submitErrorDialog.action.reload'
|
|
229
221
|
}),
|
|
230
|
-
onAction:
|
|
231
|
-
return window.location.reload();
|
|
232
|
-
}
|
|
222
|
+
onAction: () => window.location.reload()
|
|
233
223
|
});
|
|
234
224
|
break;
|
|
235
225
|
case 'not_prepared_room_forwarder':
|
|
@@ -282,89 +272,60 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
282
272
|
/**
|
|
283
273
|
* Handle submit code to runner and run / grade.
|
|
284
274
|
*/
|
|
285
|
-
|
|
286
|
-
var
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
setRunnerSubmitting(false);
|
|
314
|
-
handleRunnerSubmitError(err);
|
|
315
|
-
if (typeof onError === 'function') {
|
|
316
|
-
onError(err);
|
|
317
|
-
}
|
|
318
|
-
}));
|
|
319
|
-
case 8:
|
|
320
|
-
case "end":
|
|
321
|
-
return _context.stop();
|
|
322
|
-
}
|
|
323
|
-
}, _callee);
|
|
324
|
-
}));
|
|
325
|
-
return function handleRunnerSubmit(_x) {
|
|
326
|
-
return _ref2.apply(this, arguments);
|
|
327
|
-
};
|
|
328
|
-
}();
|
|
275
|
+
const handleRunnerSubmit = async runType => {
|
|
276
|
+
var _a, _b, _c;
|
|
277
|
+
const readyExerciseImage = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage;
|
|
278
|
+
const roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
|
|
279
|
+
if (!readyExerciseImage || !roomToken) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
setRunnerStdioFilesState([]);
|
|
283
|
+
setRunnerRunTypeState(runType);
|
|
284
|
+
setRunnerSubmitting(true);
|
|
285
|
+
return postOrgMaterialExerciseExerciseRunningSubmit({
|
|
286
|
+
roomToken,
|
|
287
|
+
runType,
|
|
288
|
+
exerciseImageId: readyExerciseImage.id,
|
|
289
|
+
vncWidth: readyExerciseImage.isVnc ? Math.max((_b = readyExerciseImage.defaultVncWidth) !== null && _b !== void 0 ? _b : 0, 640) : undefined,
|
|
290
|
+
vncHeight: readyExerciseImage.isVnc ? Math.max((_c = readyExerciseImage.defaultVncHeight) !== null && _c !== void 0 ? _c : 0, 480) : undefined
|
|
291
|
+
}).then(res => {
|
|
292
|
+
if (typeof onSubmit === 'function') {
|
|
293
|
+
onSubmit(res);
|
|
294
|
+
}
|
|
295
|
+
}).catch(err => {
|
|
296
|
+
setRunnerSubmitting(false);
|
|
297
|
+
handleRunnerSubmitError(err);
|
|
298
|
+
if (typeof onError === 'function') {
|
|
299
|
+
onError(err);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
};
|
|
329
303
|
/**
|
|
330
304
|
* Handle runner to cancel running.
|
|
331
305
|
*/
|
|
332
|
-
|
|
333
|
-
var
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
roomToken: roomToken
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
case 2:
|
|
345
|
-
case "end":
|
|
346
|
-
return _context2.stop();
|
|
347
|
-
}
|
|
348
|
-
}, _callee2);
|
|
349
|
-
}));
|
|
350
|
-
return function handleRunnerCancel() {
|
|
351
|
-
return _ref3.apply(this, arguments);
|
|
352
|
-
};
|
|
353
|
-
}();
|
|
306
|
+
const handleRunnerCancel = async () => {
|
|
307
|
+
var _a;
|
|
308
|
+
const roomToken = (_a = wsRunnerRoom.roomConnectionInfo) === null || _a === void 0 ? void 0 : _a.roomToken;
|
|
309
|
+
if (roomToken) {
|
|
310
|
+
void postOrgMaterialExerciseExerciseRunningCancel({
|
|
311
|
+
roomToken
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
};
|
|
354
315
|
/**
|
|
355
316
|
* Handle runner to request code sync.
|
|
356
317
|
*/
|
|
357
|
-
|
|
318
|
+
const handleRunnerSyncRequest = () => {
|
|
358
319
|
wsStdio.sendSync();
|
|
359
320
|
};
|
|
360
321
|
/**
|
|
361
322
|
* Handle input requests for arduino.
|
|
362
323
|
*/
|
|
363
|
-
|
|
324
|
+
const handleXtermArduinoInputRequest = char => {
|
|
364
325
|
var _a, _b, _c;
|
|
365
326
|
switch (char) {
|
|
366
327
|
// backspace
|
|
367
|
-
case
|
|
328
|
+
case '\u007f':
|
|
368
329
|
(_a = xterm.current) === null || _a === void 0 ? void 0 : _a.write(' ');
|
|
369
330
|
arduinoTextBuffer.current = arduinoTextBuffer.current.slice(0, -1);
|
|
370
331
|
break;
|
|
@@ -379,14 +340,14 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
379
340
|
// any char
|
|
380
341
|
default:
|
|
381
342
|
(_c = xterm.current) === null || _c === void 0 ? void 0 : _c.write(char);
|
|
382
|
-
arduinoTextBuffer.current =
|
|
343
|
+
arduinoTextBuffer.current = `${arduinoTextBuffer.current}${char}`;
|
|
383
344
|
break;
|
|
384
345
|
}
|
|
385
346
|
};
|
|
386
347
|
/**
|
|
387
348
|
* Handle input requests.
|
|
388
349
|
*/
|
|
389
|
-
|
|
350
|
+
const handleXtermInputRequest = text => {
|
|
390
351
|
if (isArduinoExercise) {
|
|
391
352
|
handleXtermArduinoInputRequest(text);
|
|
392
353
|
} else {
|
|
@@ -396,12 +357,12 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
396
357
|
//
|
|
397
358
|
// Initialize Arduino devices.
|
|
398
359
|
//
|
|
399
|
-
React.useEffect(
|
|
360
|
+
React.useEffect(() => {
|
|
400
361
|
if (!isArduinoExercise) {
|
|
401
362
|
return;
|
|
402
363
|
}
|
|
403
364
|
void arduino.init();
|
|
404
|
-
return
|
|
365
|
+
return () => {
|
|
405
366
|
void arduino.destroy();
|
|
406
367
|
};
|
|
407
368
|
},
|
|
@@ -414,17 +375,13 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
414
375
|
//
|
|
415
376
|
// Update runner room websocket state.
|
|
416
377
|
//
|
|
417
|
-
React.useEffect(
|
|
418
|
-
return setRunnerRoomWebSocketState(wsRunnerRoom.readyState);
|
|
419
|
-
},
|
|
378
|
+
React.useEffect(() => setRunnerRoomWebSocketState(wsRunnerRoom.readyState),
|
|
420
379
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
421
380
|
[wsRunnerRoom.readyState]);
|
|
422
381
|
//
|
|
423
382
|
// Update stdio websocket state.
|
|
424
383
|
//
|
|
425
|
-
React.useEffect(
|
|
426
|
-
return setStdioWebSocketState(wsStdio.readyState);
|
|
427
|
-
},
|
|
384
|
+
React.useEffect(() => setStdioWebSocketState(wsStdio.readyState),
|
|
428
385
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
429
386
|
[wsStdio.readyState]);
|
|
430
387
|
//
|
|
@@ -432,17 +389,15 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
432
389
|
// whenever runner room's running status is changed.
|
|
433
390
|
// (assume that sumbitting done when running status is changed)
|
|
434
391
|
//
|
|
435
|
-
React.useEffect(
|
|
436
|
-
return setRunnerSubmitting(false);
|
|
437
|
-
},
|
|
392
|
+
React.useEffect(() => setRunnerSubmitting(false),
|
|
438
393
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
439
394
|
[wsRunnerRoom.isRunning]);
|
|
440
395
|
//
|
|
441
396
|
// Auto focus terminal when running.
|
|
442
397
|
//
|
|
443
|
-
React.useEffect(
|
|
398
|
+
React.useEffect(() => {
|
|
444
399
|
if (wsRunnerRoom.isRunning) {
|
|
445
|
-
setTimeout(
|
|
400
|
+
setTimeout(() => {
|
|
446
401
|
var _a;
|
|
447
402
|
return (_a = xterm.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
448
403
|
}, 100);
|
|
@@ -453,31 +408,27 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
453
408
|
//
|
|
454
409
|
// Bind runner run type to ref.
|
|
455
410
|
//
|
|
456
|
-
React.useEffect(
|
|
411
|
+
React.useEffect(() => {
|
|
457
412
|
runnerRunTypeRef.current = runnerRunTypeState;
|
|
458
413
|
}, [runnerRunTypeState]);
|
|
459
414
|
//
|
|
460
415
|
// Update room connection info.
|
|
461
416
|
//
|
|
462
|
-
React.useEffect(
|
|
463
|
-
return setRunnerRunning(wsRunnerRoom.isRunning);
|
|
464
|
-
},
|
|
417
|
+
React.useEffect(() => setRunnerRunning(wsRunnerRoom.isRunning),
|
|
465
418
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
466
419
|
[wsRunnerRoom.isRunning]);
|
|
467
420
|
//
|
|
468
421
|
// Update room connection info.
|
|
469
422
|
//
|
|
470
|
-
React.useEffect(
|
|
471
|
-
return setExerciseRunnerRoomConnectionInfo(wsRunnerRoom.roomConnectionInfo);
|
|
472
|
-
},
|
|
423
|
+
React.useEffect(() => setExerciseRunnerRoomConnectionInfo(wsRunnerRoom.roomConnectionInfo),
|
|
473
424
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
474
425
|
[wsRunnerRoom.roomConnectionInfo]);
|
|
475
426
|
//
|
|
476
427
|
// handle send text request to runner stdio.
|
|
477
428
|
//
|
|
478
|
-
React.useEffect(
|
|
479
|
-
|
|
480
|
-
return
|
|
429
|
+
React.useEffect(() => {
|
|
430
|
+
const textSendSub = exerciseRunnerTextSend$.subscribe(wsStdio.sendText);
|
|
431
|
+
return () => {
|
|
481
432
|
textSendSub.unsubscribe();
|
|
482
433
|
};
|
|
483
434
|
},
|
|
@@ -486,7 +437,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
486
437
|
/**
|
|
487
438
|
* Preview.
|
|
488
439
|
*/
|
|
489
|
-
|
|
440
|
+
const renderPreview = () => {
|
|
490
441
|
if (exercisePreviewType === ExercisePreviewType.None) {
|
|
491
442
|
return null;
|
|
492
443
|
}
|
|
@@ -503,9 +454,9 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
503
454
|
/**
|
|
504
455
|
* Xterm
|
|
505
456
|
*/
|
|
506
|
-
|
|
457
|
+
const renderXterm = () => {
|
|
507
458
|
// show system message when...
|
|
508
|
-
|
|
459
|
+
const showSystemMessage =
|
|
509
460
|
// - run type is grade
|
|
510
461
|
runnerRunTypeState === enums.ExerciseRunType.Grade ||
|
|
511
462
|
// - not an arduino exercise
|
|
@@ -523,7 +474,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
523
474
|
/**
|
|
524
475
|
* Runner submit error dialog.
|
|
525
476
|
*/
|
|
526
|
-
|
|
477
|
+
const renderRunnerSubmitErrorDialog = () => {
|
|
527
478
|
if (!runnerSubmitErrorDialog) {
|
|
528
479
|
return null;
|
|
529
480
|
}
|
|
@@ -532,13 +483,11 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
|
|
|
532
483
|
title: intl.formatMessage({
|
|
533
484
|
id: 'exerciseRunner.submitErrorDialog.title'
|
|
534
485
|
}),
|
|
535
|
-
body:
|
|
536
|
-
onHide:
|
|
537
|
-
return setRunnerSubmitErrorDialog(null);
|
|
538
|
-
}
|
|
486
|
+
body: `${runnerSubmitErrorDialog.message}\n(error code: ${runnerSubmitErrorDialog.code})`,
|
|
487
|
+
onHide: () => setRunnerSubmitErrorDialog(null)
|
|
539
488
|
}, React.createElement(Dialog.ActionButton, {
|
|
540
489
|
children: runnerSubmitErrorDialog.action,
|
|
541
|
-
onClick:
|
|
490
|
+
onClick: () => {
|
|
542
491
|
if (typeof runnerSubmitErrorDialog.onAction === 'function') {
|
|
543
492
|
runnerSubmitErrorDialog.onAction();
|
|
544
493
|
}
|
|
@@ -16,15 +16,16 @@ import ExerciseRunnerControllerRunningInfo from './ExerciseRunnerControllerRunni
|
|
|
16
16
|
import ExerciseRunnerControllerStatusMessage from './ExerciseRunnerControllerStatusMessage.js';
|
|
17
17
|
import ExerciseRunnerControllerTimer from './ExerciseRunnerControllerTimer.js';
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const RUNNER_CONTROLLER_HEIGHT = 50;
|
|
20
|
+
const StyledController = styled.div.withConfig({
|
|
21
21
|
componentId: "sc-1fvokag-0"
|
|
22
22
|
})(["display:flex;justify-content:space-between;align-items:center;padding:0.5rem 1rem;height:", "px;border-bottom:", ";"], RUNNER_CONTROLLER_HEIGHT, MATERIAL_DIVIDER_BORDER_VALUE);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
materialExerciseId
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
const ExerciseRunnerController = () => {
|
|
24
|
+
const {
|
|
25
|
+
materialExerciseId
|
|
26
|
+
} = React.useContext(ExerciseContext);
|
|
27
|
+
const exercise = useRecoilValue(exerciseState(materialExerciseId));
|
|
28
|
+
const isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
|
|
28
29
|
return React.createElement(StyledController, null, React.createElement(Flex, {
|
|
29
30
|
align: "center"
|
|
30
31
|
}, React.createElement(ExerciseRunnerControllerButtonGroup, null), React.createElement(Hspace, {
|
package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { useIntl, FormattedMessage } from 'react-intl';
|
|
4
3
|
import { Modal, Vspace, Text, Flex, Button, Icon, Hspace } from '@elice/blocks';
|
|
@@ -11,31 +10,28 @@ import '../context/recoilTypes.js';
|
|
|
11
10
|
import '../context/subjects.js';
|
|
12
11
|
import '../context/ExerciseProvider.js';
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
setOpen = _useRecoilState2[1];
|
|
25
|
-
React.useEffect(function () {
|
|
26
|
-
var isConfirmed = localStorage.getItem(ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_KEY) === ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_VALUE;
|
|
13
|
+
const ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_KEY = 'elice-material-exercise-arduino-agent-modal-closed';
|
|
14
|
+
const ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_VALUE = 'true';
|
|
15
|
+
const ARDUINO_AGENT_MAC_DOWNLOAD_URL = 'https://eli.so/arduino-agent-mac';
|
|
16
|
+
const ARDUINO_AGENT_WIN_DOWNLOAD_URL = 'https://eli.so/arduino-agent-win';
|
|
17
|
+
const ARDUINO_AGENT_MANUAL_URL = 'https://eli.so/arduino-faq';
|
|
18
|
+
const ExerciseRunnerControllerArduinoAgentModal = () => {
|
|
19
|
+
const intl = useIntl();
|
|
20
|
+
const [open, setOpen] = useRecoilState(exerciseArduinoAgentModalState);
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
const isConfirmed = localStorage.getItem(ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_KEY) === ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_VALUE;
|
|
27
23
|
if (!isConfirmed) {
|
|
28
24
|
setOpen(true);
|
|
29
25
|
}
|
|
30
26
|
}, [setOpen]);
|
|
31
|
-
|
|
27
|
+
const handleClose = () => {
|
|
32
28
|
setOpen(false);
|
|
33
29
|
localStorage.setItem(ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_KEY, ELICE_MATERIAL_EXERCISE_ARDUINO_AGENT_MODAL_VALUE);
|
|
34
30
|
};
|
|
35
|
-
|
|
31
|
+
const handleDownload = fileUrl => {
|
|
36
32
|
FileSaver.saveAs(fileUrl);
|
|
37
33
|
};
|
|
38
|
-
|
|
34
|
+
const renderAgentInstallInstruction = () => {
|
|
39
35
|
return React.createElement(React.Fragment, null, React.createElement(Text, {
|
|
40
36
|
bold: true,
|
|
41
37
|
role: "gray0"
|
|
@@ -58,9 +54,7 @@ var ExerciseRunnerControllerArduinoAgentModal = function ExerciseRunnerControlle
|
|
|
58
54
|
size: "huge"
|
|
59
55
|
}),
|
|
60
56
|
iconAlign: "left",
|
|
61
|
-
onClick:
|
|
62
|
-
return handleDownload(ARDUINO_AGENT_WIN_DOWNLOAD_URL);
|
|
63
|
-
}
|
|
57
|
+
onClick: () => handleDownload(ARDUINO_AGENT_WIN_DOWNLOAD_URL)
|
|
64
58
|
}, React.createElement(FormattedMessage, {
|
|
65
59
|
id: "exerciseRunner.controller.arduino.agent.instruction.install.window"
|
|
66
60
|
})), React.createElement(Hspace, {
|
|
@@ -72,14 +66,12 @@ var ExerciseRunnerControllerArduinoAgentModal = function ExerciseRunnerControlle
|
|
|
72
66
|
icon: eisMac
|
|
73
67
|
}),
|
|
74
68
|
iconAlign: "left",
|
|
75
|
-
onClick:
|
|
76
|
-
return handleDownload(ARDUINO_AGENT_MAC_DOWNLOAD_URL);
|
|
77
|
-
}
|
|
69
|
+
onClick: () => handleDownload(ARDUINO_AGENT_MAC_DOWNLOAD_URL)
|
|
78
70
|
}, React.createElement(FormattedMessage, {
|
|
79
71
|
id: "exerciseRunner.controller.arduino.agent.instruction.install.mac"
|
|
80
72
|
}))));
|
|
81
73
|
};
|
|
82
|
-
|
|
74
|
+
const renderAgentConnectionInstruction = () => {
|
|
83
75
|
return React.createElement(React.Fragment, null, React.createElement(Text, {
|
|
84
76
|
role: "gray0",
|
|
85
77
|
bold: true
|
|
@@ -102,9 +94,7 @@ var ExerciseRunnerControllerArduinoAgentModal = function ExerciseRunnerControlle
|
|
|
102
94
|
iconAlign: "right",
|
|
103
95
|
size: "tiny",
|
|
104
96
|
role: "secondary",
|
|
105
|
-
onClick:
|
|
106
|
-
return window.open(ARDUINO_AGENT_MANUAL_URL);
|
|
107
|
-
}
|
|
97
|
+
onClick: () => window.open(ARDUINO_AGENT_MANUAL_URL)
|
|
108
98
|
}, React.createElement(FormattedMessage, {
|
|
109
99
|
id: "exerciseRunner.controller.arduino.agent.instruction.connect.button"
|
|
110
100
|
})));
|