@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.
Files changed (395) hide show
  1. package/cjs/components/material-exercise/MaterialExercise.i18n.js +2 -4
  2. package/cjs/components/material-exercise/MaterialExercise.js +54 -59
  3. package/cjs/components/material-exercise/MaterialExercise.styled.js +14 -20
  4. package/cjs/components/material-exercise/MaterialExerciseMobile.js +8 -15
  5. package/cjs/components/material-exercise/context/ExerciseIntlProvider.js +14 -18
  6. package/cjs/components/material-exercise/context/ExerciseProvider.js +58 -66
  7. package/cjs/components/material-exercise/context/ExerciseProviderNoImage.js +19 -24
  8. package/cjs/components/material-exercise/context/context.js +1 -7
  9. package/cjs/components/material-exercise/context/locales/noImage.en.json.js +1 -1
  10. package/cjs/components/material-exercise/context/locales/noImage.ko.json.js +1 -1
  11. package/cjs/components/material-exercise/context/recoil.js +293 -544
  12. package/cjs/components/material-exercise/context/recoilTypes.js +0 -2
  13. package/cjs/components/material-exercise/context/subjects.js +3 -5
  14. package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +60 -67
  15. package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -14
  16. package/cjs/components/material-exercise/exercise-code-history/locales/en.json.js +1 -1
  17. package/cjs/components/material-exercise/exercise-code-history/locales/ko.json.js +1 -1
  18. package/cjs/components/material-exercise/exercise-file/ExerciseFile.js +17 -21
  19. package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +133 -203
  20. package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +8 -12
  21. package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +24 -40
  22. package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +38 -52
  23. package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +5 -9
  24. package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.en.json.js +1 -1
  25. package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.ko.json.js +1 -1
  26. package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +189 -328
  27. package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +5 -9
  28. package/cjs/components/material-exercise/exercise-file-tree/locales/en.json.js +1 -1
  29. package/cjs/components/material-exercise/exercise-file-tree/locales/ko.json.js +1 -1
  30. package/cjs/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +14 -17
  31. package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.js +11 -15
  32. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +7 -11
  33. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +44 -65
  34. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +32 -61
  35. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuReset.js +19 -35
  36. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +48 -62
  37. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -18
  38. package/cjs/components/material-exercise/exercise-menu/locales/en.json.js +1 -1
  39. package/cjs/components/material-exercise/exercise-menu/locales/ko.json.js +1 -1
  40. package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +21 -32
  41. package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +4 -8
  42. package/cjs/components/material-exercise/exercise-preview/ExercisePreview.js +23 -27
  43. package/cjs/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +7 -17
  44. package/cjs/components/material-exercise/exercise-preview/locales/en.json.js +1 -1
  45. package/cjs/components/material-exercise/exercise-preview/locales/ko.json.js +1 -1
  46. package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +23 -32
  47. package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +7 -15
  48. package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +79 -86
  49. package/cjs/components/material-exercise/exercise-rightpane/locales/en.json.js +1 -1
  50. package/cjs/components/material-exercise/exercise-rightpane/locales/ko.json.js +1 -1
  51. package/cjs/components/material-exercise/exercise-room/ExerciseRoom.js +11 -22
  52. package/cjs/components/material-exercise/exercise-room/ExerciseRoom.styled.js +12 -20
  53. package/cjs/components/material-exercise/exercise-room/ExerciseRoomDetail.js +180 -288
  54. package/cjs/components/material-exercise/exercise-room/ExerciseRoomList.js +82 -116
  55. package/cjs/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -4
  56. package/cjs/components/material-exercise/exercise-room/locales/en.json.js +1 -1
  57. package/cjs/components/material-exercise/exercise-room/locales/ko.json.js +1 -1
  58. package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +125 -181
  59. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -7
  60. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerController.js +13 -17
  61. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +43 -58
  62. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +15 -27
  63. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +65 -68
  64. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +23 -32
  65. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +58 -92
  66. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +3 -7
  67. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +11 -16
  68. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +18 -29
  69. package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
  70. package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
  71. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +162 -282
  72. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -14
  73. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +41 -54
  74. package/cjs/components/material-exercise/exercise-submit-history/locales/en.json.js +1 -1
  75. package/cjs/components/material-exercise/exercise-submit-history/locales/ko.json.js +1 -1
  76. package/cjs/components/shared/exercise-menu-button/ExerciseMenuButton.js +15 -21
  77. package/cjs/components/shared/exercise-shimmer/ExerciseFileShimmer.js +14 -19
  78. package/cjs/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +16 -21
  79. package/cjs/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +5 -10
  80. package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +18 -23
  81. package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +10 -21
  82. package/cjs/components/shared/exercise-version-list/ExerciseVersionList.js +5 -8
  83. package/cjs/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -7
  84. package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.js +8 -11
  85. package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +5 -15
  86. package/cjs/components/shared/file-icon/FileIcon.js +17 -23
  87. package/cjs/components/shared/file-tabs/FileTab.js +30 -36
  88. package/cjs/components/shared/file-tabs/FileTab.styled.js +15 -25
  89. package/cjs/components/shared/file-tabs/FileTabs.js +38 -63
  90. package/cjs/components/shared/file-tabs/FileTabs.styled.js +2 -8
  91. package/cjs/components/shared/file-tabs/util.js +14 -29
  92. package/cjs/components/shared/file-tree/FileTree.js +12 -17
  93. package/cjs/components/shared/file-tree/FileTreeConfig.js +22 -25
  94. package/cjs/components/shared/file-tree/FileTreeList.js +37 -39
  95. package/cjs/components/shared/file-tree/FileTreeListItemContent.js +61 -75
  96. package/cjs/components/shared/file-tree/FileTreeListItemContent.styled.js +21 -31
  97. package/cjs/components/shared/file-tree/FileTreeListItemContentInput.js +64 -72
  98. package/cjs/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -12
  99. package/cjs/components/shared/file-tree/FileTreeListItemContentMenu.js +63 -74
  100. package/cjs/components/shared/file-tree/FileTreeListItems.js +136 -151
  101. package/cjs/components/shared/file-tree/FileTreeListItems.styled.js +2 -8
  102. package/cjs/components/shared/file-tree/FileTreeToolbar.js +31 -32
  103. package/cjs/components/shared/file-tree/FileTreeToolbar.styled.js +1 -7
  104. package/cjs/components/shared/file-tree/context/FileTreeContext.js +76 -97
  105. package/cjs/components/shared/file-tree/locales/en.json.js +1 -1
  106. package/cjs/components/shared/file-tree/locales/ko.json.js +1 -1
  107. package/cjs/components/shared/file-tree/utils/fileTreeFiles.js +20 -26
  108. package/cjs/components/shared/file-tree/utils/fileTreeGenerator.js +146 -195
  109. package/cjs/components/shared/file-tree/utils/fileTreeInput.js +0 -2
  110. package/cjs/components/shared/file-tree/utils/fileTreeItem.js +1 -3
  111. package/cjs/components/shared/file-tree/utils/fileTreePath.js +6 -7
  112. package/cjs/components/shared/file-viewer/FileViewer.js +37 -61
  113. package/cjs/components/shared/file-viewer/FileViewerCsv.js +108 -172
  114. package/cjs/components/shared/file-viewer/FileViewerImage.js +8 -12
  115. package/cjs/components/shared/file-viewer/FileViewerIpynb.js +10 -23
  116. package/cjs/components/shared/file-viewer/FileViewerNonViewable.js +33 -42
  117. package/cjs/components/shared/file-viewer/FileViewerText.js +12 -24
  118. package/cjs/components/shared/file-viewer/locales/en.json.js +1 -1
  119. package/cjs/components/shared/file-viewer/locales/ko.json.js +1 -1
  120. package/cjs/components/shared/file-viewer/locales/nonViewable.en.json.js +1 -1
  121. package/cjs/components/shared/file-viewer/locales/nonViewable.ko.json.js +1 -1
  122. package/cjs/components/shared/material-modal/MaterialModal.js +11 -14
  123. package/cjs/components/shared/material-modal/MaterialModal.styled.js +5 -11
  124. package/cjs/components/shared/monaco-editor/MonacoEditor.js +74 -99
  125. package/cjs/components/shared/monaco-editor/MonacoEditorLazy.js +6 -12
  126. package/cjs/components/shared/monaco-editor/MonacoEditorMobile.js +36 -50
  127. package/cjs/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +91 -110
  128. package/cjs/components/shared/monaco-editor/constants/grammars/JSON.tmLanguage.json.js +1 -1
  129. package/cjs/components/shared/monaco-editor/constants/grammars/MagicPython.tmLanguage.json.js +1 -1
  130. package/cjs/components/shared/monaco-editor/constants/grammars/TypeScriptReact.tmLanguage.json.js +1 -1
  131. package/cjs/components/shared/monaco-editor/constants/grammars/asp-vb-net.tmlanguage.json.js +1 -1
  132. package/cjs/components/shared/monaco-editor/constants/grammars/c.tmLanguage.json.js +1 -1
  133. package/cjs/components/shared/monaco-editor/constants/grammars/cpp.tmLanguage.json.js +1 -1
  134. package/cjs/components/shared/monaco-editor/constants/grammars/csharp.tmLanguage.json.js +1 -1
  135. package/cjs/components/shared/monaco-editor/constants/grammars/css.tmLanguage.json.js +1 -1
  136. package/cjs/components/shared/monaco-editor/constants/grammars/dart.tmLanguage.json.js +1 -1
  137. package/cjs/components/shared/monaco-editor/constants/grammars/fsharp.tmLanguage.json.js +1 -1
  138. package/cjs/components/shared/monaco-editor/constants/grammars/go.tmLanguage.json.js +1 -1
  139. package/cjs/components/shared/monaco-editor/constants/grammars/html.tmLanguage.json.js +1 -1
  140. package/cjs/components/shared/monaco-editor/constants/grammars/index.js +28 -84
  141. package/cjs/components/shared/monaco-editor/constants/grammars/java.tmLanguage.json.js +1 -1
  142. package/cjs/components/shared/monaco-editor/constants/grammars/lua.tmLanguage.json.js +1 -1
  143. package/cjs/components/shared/monaco-editor/constants/grammars/objective-c.tmLanguage.json.js +1 -1
  144. package/cjs/components/shared/monaco-editor/constants/grammars/php.tmLanguage.json.js +1 -1
  145. package/cjs/components/shared/monaco-editor/constants/grammars/r.tmLanguage.json.js +1 -1
  146. package/cjs/components/shared/monaco-editor/constants/grammars/ruby.tmLanguage.json.js +1 -1
  147. package/cjs/components/shared/monaco-editor/constants/grammars/rust.tmLanguage.json.js +1 -1
  148. package/cjs/components/shared/monaco-editor/constants/grammars/scss.tmLanguage.json.js +1 -1
  149. package/cjs/components/shared/monaco-editor/constants/grammars/sql.tmLanguage.json.js +1 -1
  150. package/cjs/components/shared/monaco-editor/constants/grammars/swift.tmLanguage.json.js +1 -1
  151. package/cjs/components/shared/monaco-editor/constants/grammars/xml.tmLanguage.json.js +1 -1
  152. package/cjs/components/shared/monaco-editor/constants/grammars/yaml.tmLanguage.json.js +1 -1
  153. package/cjs/components/shared/monaco-editor/constants/monaco/preferences.js +5 -7
  154. package/cjs/components/shared/monaco-editor/constants/themes/abyss.json.js +1 -1
  155. package/cjs/components/shared/monaco-editor/constants/themes/elice.json.js +1 -1
  156. package/cjs/components/shared/monaco-editor/constants/themes/index.js +17 -51
  157. package/cjs/components/shared/monaco-editor/constants/themes/kimbie-dark.json.js +1 -1
  158. package/cjs/components/shared/monaco-editor/constants/themes/monokai.json.js +1 -1
  159. package/cjs/components/shared/monaco-editor/constants/themes/quietlight.json.js +1 -1
  160. package/cjs/components/shared/monaco-editor/constants/themes/red.json.js +1 -1
  161. package/cjs/components/shared/monaco-editor/constants/themes/solarized-dark.json.js +1 -1
  162. package/cjs/components/shared/monaco-editor/constants/themes/solarized-light.json.js +1 -1
  163. package/cjs/components/shared/monaco-editor/constants/themes/tomorrow-night-blue.json.js +1 -1
  164. package/cjs/components/shared/monaco-editor/constants/themes/vs-dark-plus.json.js +1 -1
  165. package/cjs/components/shared/monaco-editor/constants/themes/vs-dark.json.js +1 -1
  166. package/cjs/components/shared/monaco-editor/constants/themes/vs-hc-black.json.js +1 -1
  167. package/cjs/components/shared/monaco-editor/constants/themes/vs-hc-light.json.js +1 -1
  168. package/cjs/components/shared/monaco-editor/constants/themes/vs-light-plus.json.js +1 -1
  169. package/cjs/components/shared/monaco-editor/constants/themes/vs-light.json.js +1 -1
  170. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -13
  171. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -17
  172. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -11
  173. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +30 -36
  174. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +7 -11
  175. package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +6 -8
  176. package/cjs/components/shared/monaco-editor/editor-languages/css/formatter.js +11 -52
  177. package/cjs/components/shared/monaco-editor/editor-languages/css/index.js +7 -8
  178. package/cjs/components/shared/monaco-editor/editor-languages/html/formatter.js +11 -52
  179. package/cjs/components/shared/monaco-editor/editor-languages/html/index.js +5 -6
  180. package/cjs/components/shared/monaco-editor/editor-languages/index.js +4 -4
  181. package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -3
  182. package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/express.js +1 -1
  183. package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/propTypes.js +1 -1
  184. package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/react.js +1 -1
  185. package/cjs/components/shared/monaco-editor/editor-languages/typescript/formatter.js +11 -56
  186. package/cjs/components/shared/monaco-editor/editor-languages/typescript/index.js +17 -18
  187. package/cjs/components/shared/monaco-editor/hooks/useEditorOptions.js +5 -13
  188. package/cjs/components/shared/monaco-editor/locales/en.json.js +1 -1
  189. package/cjs/components/shared/monaco-editor/locales/ko.json.js +1 -1
  190. package/cjs/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +12 -12
  191. package/cjs/components/shared/monaco-editor/utils/emmet/emmet.js +0 -2
  192. package/cjs/components/shared/monaco-editor/utils/emmet/registerProvider.js +6 -14
  193. package/cjs/components/shared/monaco-editor/utils/grammar/index.js +25 -69
  194. package/cjs/components/shared/monaco-editor/utils/grammar/onigasm.js +6 -27
  195. package/cjs/components/shared/monaco-editor/utils/grammar/textmate.js +38 -73
  196. package/cjs/components/shared/monaco-editor/utils/monacoLanguage.js +8 -11
  197. package/cjs/components/shared/monaco-editor/utils/monacoPreference.js +4 -8
  198. package/cjs/components/shared/monaco-editor/utils/prettier/config.js +2 -4
  199. package/cjs/components/shared/monaco-editor/utils/prettier/index.js +8 -46
  200. package/cjs/components/shared/monaco-editor/utils/theme/convert.js +14 -26
  201. package/cjs/components/shared/monaco-editor/utils/theme/index.js +3 -24
  202. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +56 -79
  203. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +68 -84
  204. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +93 -122
  205. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +133 -158
  206. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +92 -106
  207. package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -4
  208. package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +6 -3
  209. package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -4
  210. package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +158 -179
  211. package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -5
  212. package/cjs/components/shared/no-vnc/NoVnc.js +57 -86
  213. package/cjs/components/shared/no-vnc/NoVncLazy.js +5 -11
  214. package/cjs/components/shared/preview-container/PreviewContainer.js +11 -15
  215. package/cjs/components/shared/web-browser/WebBrowser.js +37 -53
  216. package/cjs/components/shared/xterm/Xterm.js +58 -81
  217. package/cjs/components/shared/xterm/XtermLazy.js +5 -11
  218. package/cjs/components/shared/xterm/locales/en.json.js +1 -1
  219. package/cjs/components/shared/xterm/locales/ko.json.js +1 -1
  220. package/cjs/components/shared/xterm/utils/index.js +0 -2
  221. package/cjs/constants/arduino.js +10 -12
  222. package/cjs/constants/shortcutKeyMap.js +2 -4
  223. package/cjs/constants/stylesheets.js +5 -9
  224. package/cjs/hooks/useArduino.js +141 -284
  225. package/cjs/hooks/useExerciseFile.js +22 -26
  226. package/cjs/hooks/useExericseShortcut.js +4 -8
  227. package/cjs/hooks/useMaterialExerciseFileUrl.js +33 -57
  228. package/cjs/hooks/useRunnerRoomWebSocket.js +27 -53
  229. package/cjs/hooks/useStdioTextConcator.js +10 -22
  230. package/cjs/hooks/useStdioWebSocket.js +28 -34
  231. package/cjs/hooks/useUsercodeEditWebSocket.js +158 -240
  232. package/cjs/hooks/useUsercodeHistory.js +63 -117
  233. package/cjs/index.js +4 -6
  234. package/cjs/utils/arduino.js +11 -25
  235. package/cjs/utils/exerciseFile.js +10 -10
  236. package/cjs/utils/runner.js +15 -31
  237. package/es/components/material-exercise/MaterialExercise.i18n.js +2 -2
  238. package/es/components/material-exercise/MaterialExercise.js +34 -35
  239. package/es/components/material-exercise/MaterialExercise.styled.js +14 -14
  240. package/es/components/material-exercise/MaterialExerciseMobile.js +6 -9
  241. package/es/components/material-exercise/context/ExerciseIntlProvider.js +10 -8
  242. package/es/components/material-exercise/context/ExerciseProvider.js +52 -55
  243. package/es/components/material-exercise/context/ExerciseProviderNoImage.js +10 -10
  244. package/es/components/material-exercise/context/context.js +1 -1
  245. package/es/components/material-exercise/context/recoil.js +290 -535
  246. package/es/components/material-exercise/context/subjects.js +3 -3
  247. package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +51 -53
  248. package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -8
  249. package/es/components/material-exercise/exercise-file/ExerciseFile.js +9 -8
  250. package/es/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +127 -193
  251. package/es/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +5 -4
  252. package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +20 -31
  253. package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +35 -44
  254. package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +1 -1
  255. package/es/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +181 -315
  256. package/es/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +1 -1
  257. package/es/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +11 -10
  258. package/es/components/material-exercise/exercise-menu/ExerciseMenu.js +7 -6
  259. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +3 -3
  260. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +25 -42
  261. package/es/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +26 -51
  262. package/es/components/material-exercise/exercise-menu/ExerciseMenuReset.js +11 -23
  263. package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +21 -31
  264. package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -12
  265. package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +19 -26
  266. package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +1 -1
  267. package/es/components/material-exercise/exercise-preview/ExercisePreview.js +15 -14
  268. package/es/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +5 -11
  269. package/es/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +11 -15
  270. package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +5 -9
  271. package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +78 -80
  272. package/es/components/material-exercise/exercise-room/ExerciseRoom.js +6 -13
  273. package/es/components/material-exercise/exercise-room/ExerciseRoom.styled.js +12 -14
  274. package/es/components/material-exercise/exercise-room/ExerciseRoomDetail.js +134 -236
  275. package/es/components/material-exercise/exercise-room/ExerciseRoomList.js +65 -94
  276. package/es/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -2
  277. package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +116 -167
  278. package/es/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -1
  279. package/es/components/material-exercise/exercise-runner/ExerciseRunnerController.js +8 -7
  280. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +17 -27
  281. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +11 -18
  282. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +52 -50
  283. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +10 -14
  284. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +46 -75
  285. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +2 -2
  286. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +4 -4
  287. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +15 -21
  288. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +138 -253
  289. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -8
  290. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +29 -37
  291. package/es/components/shared/exercise-menu-button/ExerciseMenuButton.js +12 -13
  292. package/es/components/shared/exercise-shimmer/ExerciseFileShimmer.js +2 -2
  293. package/es/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +12 -12
  294. package/es/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +2 -2
  295. package/es/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +14 -14
  296. package/es/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +9 -15
  297. package/es/components/shared/exercise-version-list/ExerciseVersionList.js +3 -2
  298. package/es/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -1
  299. package/es/components/shared/exercise-version-list/ExerciseVersionListItem.js +6 -5
  300. package/es/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +5 -9
  301. package/es/components/shared/file-icon/FileIcon.js +15 -17
  302. package/es/components/shared/file-tabs/FileTab.js +22 -24
  303. package/es/components/shared/file-tabs/FileTab.styled.js +15 -19
  304. package/es/components/shared/file-tabs/FileTabs.js +35 -55
  305. package/es/components/shared/file-tabs/FileTabs.styled.js +2 -2
  306. package/es/components/shared/file-tabs/util.js +14 -27
  307. package/es/components/shared/file-tree/FileTree.js +3 -3
  308. package/es/components/shared/file-tree/FileTreeConfig.js +18 -15
  309. package/es/components/shared/file-tree/FileTreeList.js +33 -29
  310. package/es/components/shared/file-tree/FileTreeListItemContent.js +45 -55
  311. package/es/components/shared/file-tree/FileTreeListItemContent.styled.js +21 -25
  312. package/es/components/shared/file-tree/FileTreeListItemContentInput.js +60 -64
  313. package/es/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -6
  314. package/es/components/shared/file-tree/FileTreeListItemContentMenu.js +39 -46
  315. package/es/components/shared/file-tree/FileTreeListItems.js +134 -145
  316. package/es/components/shared/file-tree/FileTreeListItems.styled.js +2 -2
  317. package/es/components/shared/file-tree/FileTreeToolbar.js +25 -22
  318. package/es/components/shared/file-tree/FileTreeToolbar.styled.js +1 -1
  319. package/es/components/shared/file-tree/context/FileTreeContext.js +74 -89
  320. package/es/components/shared/file-tree/utils/fileTreeFiles.js +20 -20
  321. package/es/components/shared/file-tree/utils/fileTreeGenerator.js +146 -193
  322. package/es/components/shared/file-tree/utils/fileTreeItem.js +1 -1
  323. package/es/components/shared/file-tree/utils/fileTreePath.js +6 -5
  324. package/es/components/shared/file-viewer/FileViewer.js +21 -38
  325. package/es/components/shared/file-viewer/FileViewerCsv.js +70 -129
  326. package/es/components/shared/file-viewer/FileViewerImage.js +4 -3
  327. package/es/components/shared/file-viewer/FileViewerIpynb.js +7 -14
  328. package/es/components/shared/file-viewer/FileViewerNonViewable.js +15 -18
  329. package/es/components/shared/file-viewer/FileViewerText.js +9 -17
  330. package/es/components/shared/material-modal/MaterialModal.js +8 -7
  331. package/es/components/shared/material-modal/MaterialModal.styled.js +5 -5
  332. package/es/components/shared/monaco-editor/MonacoEditor.js +67 -87
  333. package/es/components/shared/monaco-editor/MonacoEditorLazy.js +2 -4
  334. package/es/components/shared/monaco-editor/MonacoEditorMobile.js +31 -41
  335. package/es/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +52 -66
  336. package/es/components/shared/monaco-editor/constants/grammars/index.js +28 -82
  337. package/es/components/shared/monaco-editor/constants/monaco/preferences.js +5 -5
  338. package/es/components/shared/monaco-editor/constants/themes/index.js +17 -49
  339. package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -11
  340. package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -15
  341. package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -9
  342. package/es/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +30 -34
  343. package/es/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +7 -9
  344. package/es/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +6 -6
  345. package/es/components/shared/monaco-editor/editor-languages/css/formatter.js +10 -33
  346. package/es/components/shared/monaco-editor/editor-languages/html/formatter.js +10 -33
  347. package/es/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -1
  348. package/es/components/shared/monaco-editor/editor-languages/typescript/formatter.js +10 -37
  349. package/es/components/shared/monaco-editor/editor-languages/typescript/index.js +3 -3
  350. package/es/components/shared/monaco-editor/hooks/useEditorOptions.js +5 -11
  351. package/es/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +12 -10
  352. package/es/components/shared/monaco-editor/utils/emmet/registerProvider.js +6 -12
  353. package/es/components/shared/monaco-editor/utils/grammar/index.js +24 -68
  354. package/es/components/shared/monaco-editor/utils/grammar/onigasm.js +6 -25
  355. package/es/components/shared/monaco-editor/utils/grammar/textmate.js +35 -67
  356. package/es/components/shared/monaco-editor/utils/monacoLanguage.js +5 -5
  357. package/es/components/shared/monaco-editor/utils/monacoPreference.js +4 -6
  358. package/es/components/shared/monaco-editor/utils/prettier/config.js +2 -2
  359. package/es/components/shared/monaco-editor/utils/prettier/index.js +7 -27
  360. package/es/components/shared/monaco-editor/utils/theme/convert.js +13 -19
  361. package/es/components/shared/monaco-editor/utils/theme/index.js +3 -22
  362. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +56 -77
  363. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +68 -82
  364. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +93 -120
  365. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +130 -152
  366. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +92 -104
  367. package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -2
  368. package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +6 -1
  369. package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -2
  370. package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +157 -172
  371. package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -3
  372. package/es/components/shared/no-vnc/NoVnc.js +42 -59
  373. package/es/components/shared/no-vnc/NoVncLazy.js +2 -4
  374. package/es/components/shared/preview-container/PreviewContainer.js +8 -7
  375. package/es/components/shared/web-browser/WebBrowser.js +29 -40
  376. package/es/components/shared/xterm/Xterm.js +51 -69
  377. package/es/components/shared/xterm/XtermLazy.js +2 -4
  378. package/es/constants/arduino.js +10 -10
  379. package/es/constants/shortcutKeyMap.js +1 -3
  380. package/es/constants/stylesheets.js +5 -7
  381. package/es/hooks/useArduino.js +141 -278
  382. package/es/hooks/useExerciseFile.js +22 -24
  383. package/es/hooks/useExericseShortcut.js +4 -6
  384. package/es/hooks/useMaterialExerciseFileUrl.js +34 -52
  385. package/es/hooks/useRunnerRoomWebSocket.js +27 -51
  386. package/es/hooks/useStdioTextConcator.js +10 -16
  387. package/es/hooks/useStdioWebSocket.js +28 -32
  388. package/es/hooks/useUsercodeEditWebSocket.js +157 -232
  389. package/es/hooks/useUsercodeHistory.js +63 -115
  390. package/es/utils/arduino.js +11 -23
  391. package/es/utils/exerciseFile.js +10 -8
  392. package/es/utils/runner.js +15 -29
  393. package/package.json +11 -7
  394. package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -521
  395. package/es/_virtual/_rollupPluginBabelHelpers.js +0 -499
@@ -1,4 +1,3 @@
1
- import { slicedToArray as _slicedToArray, createForOfIteratorHelper as _createForOfIteratorHelper, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime, typeof as _typeof } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import React from 'react';
3
2
  import { getOrgMaterialExerciseExerciseImageExerciseFileGet } from '@elice/api-client';
4
3
  import { Flex } from '@elice/blocks';
@@ -14,7 +13,6 @@ import FileViewerNonViewable from '../../shared/file-viewer/FileViewerNonViewabl
14
13
  import MonacoEditorLazy from '../../shared/monaco-editor/MonacoEditorLazy.js';
15
14
  import '../../shared/monaco-editor/MonacoEditorPerferenceForm.js';
16
15
  import 'monaco-editor/esm/vs/editor/editor.api';
17
- import '../../shared/monaco-editor/constants/monaco/preferences.js';
18
16
  import 'react-use';
19
17
  import 'socket.io-client';
20
18
  import { exerciseState, exerciseRoomState, exerciseLectureState, exerciseEditorPreferenceState, exerciseActiveFilenameState, exerciseWebsocketQuery, exerciseFileEditorCursorState, exerciseFileEditorCursorSelectionValueState, exerciseMonacoEditorApisState } from '../context/recoil.js';
@@ -37,45 +35,37 @@ import ExerciseFileReadOnlyBanner from './ExerciseFileReadOnlyBanner.js';
37
35
  /**
38
36
  * Exercise file (code) editor for editable files
39
37
  */
40
- var ExerciseFileEditor = function ExerciseFileEditor() {
41
- var _React$useContext = React.useContext(ExerciseContext),
42
- materialExerciseId = _React$useContext.materialExerciseId,
43
- exerciseRoomId = _React$useContext.exerciseRoomId,
44
- readOnlyEditor = _React$useContext.readOnlyEditor,
45
- readOnlyActiveFile = _React$useContext.readOnlyActiveFile,
46
- locale = _React$useContext.locale;
47
- var exercise = useRecoilValue(exerciseState(materialExerciseId));
48
- var exerciseRoom = useRecoilValue(exerciseRoomState(exerciseRoomId));
49
- var lecture = useRecoilValue(exerciseLectureState(exercise === null || exercise === void 0 ? void 0 : exercise._lectureId));
50
- var preference = useRecoilValue(exerciseEditorPreferenceState);
51
- var activeFilename = useRecoilValue(exerciseActiveFilenameState);
52
- var readOnly = readOnlyEditor || readOnlyActiveFile;
53
- var setUsercodeWebSocketState = useSetRecoilState(exerciseWebsocketQuery('usercodeEdit'));
54
- var setFileEditorCursorState = useSetRecoilState(exerciseFileEditorCursorState);
55
- var setFileEditorCursorSelectionValueState = useSetRecoilState(exerciseFileEditorCursorSelectionValueState);
38
+ const ExerciseFileEditor = () => {
39
+ const {
40
+ materialExerciseId,
41
+ exerciseRoomId,
42
+ readOnlyEditor,
43
+ readOnlyActiveFile,
44
+ locale
45
+ } = React.useContext(ExerciseContext);
46
+ const exercise = useRecoilValue(exerciseState(materialExerciseId));
47
+ const exerciseRoom = useRecoilValue(exerciseRoomState(exerciseRoomId));
48
+ const lecture = useRecoilValue(exerciseLectureState(exercise === null || exercise === void 0 ? void 0 : exercise._lectureId));
49
+ const preference = useRecoilValue(exerciseEditorPreferenceState);
50
+ const activeFilename = useRecoilValue(exerciseActiveFilenameState);
51
+ const readOnly = readOnlyEditor || readOnlyActiveFile;
52
+ const setUsercodeWebSocketState = useSetRecoilState(exerciseWebsocketQuery('usercodeEdit'));
53
+ const setFileEditorCursorState = useSetRecoilState(exerciseFileEditorCursorState);
54
+ const setFileEditorCursorSelectionValueState = useSetRecoilState(exerciseFileEditorCursorSelectionValueState);
56
55
  // editor
57
- var editorApis = React.useRef(null);
58
- var editorDocHistories = React.useRef({});
59
- var serverInitiatedVersions = React.useRef([]);
56
+ const editorApis = React.useRef(null);
57
+ const editorDocHistories = React.useRef({});
58
+ const serverInitiatedVersions = React.useRef([]);
60
59
  // ready state
61
- var _React$useState = React.useState(false),
62
- _React$useState2 = _slicedToArray(_React$useState, 2),
63
- isEditorReady = _React$useState2[0],
64
- setEditorReady = _React$useState2[1];
65
- var _React$useState3 = React.useState(false),
66
- _React$useState4 = _slicedToArray(_React$useState3, 2),
67
- isWebSocketReady = _React$useState4[0],
68
- setWebSocketReady = _React$useState4[1];
69
- var isReady = isEditorReady && isWebSocketReady;
70
- var _React$useState5 = React.useState(checkExerciseFileResettable(activeFilename, {
71
- exercise: exercise,
72
- exerciseRoom: exerciseRoom
73
- })),
74
- _React$useState6 = _slicedToArray(_React$useState5, 2),
75
- isFileResettable = _React$useState6[0],
76
- setFileResettable = _React$useState6[1];
77
- var setExerciseMonacoEditorApisState = useSetRecoilState(exerciseMonacoEditorApisState);
78
- React.useEffect(function () {
60
+ const [isEditorReady, setEditorReady] = React.useState(false);
61
+ const [isWebSocketReady, setWebSocketReady] = React.useState(false);
62
+ const isReady = isEditorReady && isWebSocketReady;
63
+ const [isFileResettable, setFileResettable] = React.useState(checkExerciseFileResettable(activeFilename, {
64
+ exercise,
65
+ exerciseRoom
66
+ }));
67
+ const setExerciseMonacoEditorApisState = useSetRecoilState(exerciseMonacoEditorApisState);
68
+ React.useEffect(() => {
79
69
  if (editorApis.current) {
80
70
  setExerciseMonacoEditorApisState(editorApis.current);
81
71
  }
@@ -84,78 +74,48 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
84
74
  /**
85
75
  * Set value of current file.
86
76
  */
87
- var setValue = /*#__PURE__*/function () {
88
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(content) {
89
- var _a, readyExerciseImage;
90
- return _regeneratorRuntime().wrap(function _callee$(_context) {
91
- while (1) switch (_context.prev = _context.next) {
92
- case 0:
93
- if (isFileResettable) {
94
- _context.next = 3;
95
- break;
96
- }
97
- console.warn('Cannot reset file since not resettable.');
98
- return _context.abrupt("return");
99
- case 3:
100
- if (activeFilename) {
101
- _context.next = 6;
102
- break;
103
- }
104
- console.warn('Cannot reset file since no file selected.');
105
- return _context.abrupt("return");
106
- case 6:
107
- if (!content) {
108
- _context.next = 10;
109
- break;
110
- }
111
- (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
112
- _context.next = 15;
113
- break;
114
- case 10:
115
- if (!(content === null)) {
116
- _context.next = 15;
117
- break;
118
- }
119
- readyExerciseImage = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage;
120
- if (!(!editorApis.current || !readyExerciseImage)) {
121
- _context.next = 14;
122
- break;
123
- }
124
- return _context.abrupt("return");
125
- case 14:
126
- return _context.abrupt("return", getOrgMaterialExerciseExerciseImageExerciseFileGet({
127
- exerciseImageId: readyExerciseImage.id,
128
- filename: activeFilename
129
- }).then(function (res) {
130
- return res.exerciseFile.content;
131
- }).then(function (content) {
132
- var _a;
133
- if (typeof content === 'string') {
134
- (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
135
- } else {
136
- setFileResettable(false);
137
- }
138
- }));
139
- case 15:
140
- case "end":
141
- return _context.stop();
77
+ const setValue = async content => {
78
+ var _a;
79
+ if (!isFileResettable) {
80
+ console.warn('Cannot reset file since not resettable.');
81
+ return;
82
+ }
83
+ if (!activeFilename) {
84
+ console.warn('Cannot reset file since no file selected.');
85
+ return;
86
+ }
87
+ if (content) {
88
+ (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
89
+ }
90
+ // reset as initial value on `null` received.
91
+ else if (content === null) {
92
+ const readyExerciseImage = exercise === null || exercise === void 0 ? void 0 : exercise.readyExerciseImage;
93
+ if (!editorApis.current || !readyExerciseImage) {
94
+ return;
95
+ }
96
+ return getOrgMaterialExerciseExerciseImageExerciseFileGet({
97
+ exerciseImageId: readyExerciseImage.id,
98
+ filename: activeFilename
99
+ }).then(res => res.exerciseFile.content).then(content => {
100
+ var _a;
101
+ if (typeof content === 'string') {
102
+ (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.setValue(content);
103
+ } else {
104
+ setFileResettable(false);
142
105
  }
143
- }, _callee);
144
- }));
145
- return function setValue(_x) {
146
- return _ref.apply(this, arguments);
147
- };
148
- }();
106
+ });
107
+ }
108
+ };
149
109
  /**
150
110
  * Update editor document history.
151
111
  */
152
- var pushEditorDocHistories = function pushEditorDocHistories() {
153
- var _editorApis = editorApis.current;
112
+ const pushEditorDocHistories = () => {
113
+ const _editorApis = editorApis.current;
154
114
  if (!_editorApis) {
155
115
  return;
156
116
  }
157
117
  if (typeof _editorApis.getMonacoModel === 'function') {
158
- var model = _editorApis.getMonacoModel();
118
+ const model = _editorApis.getMonacoModel();
159
119
  if (model) {
160
120
  editorDocHistories.current[model.getVersionId()] = model.getValue();
161
121
  }
@@ -165,102 +125,82 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
165
125
  * Handle usercode edit websocket received `WRITE_NOTI` message,
166
126
  * move cursor or insert / delete content.
167
127
  */
168
- var handleWebsocketUsercodeWriteNoti = function handleWebsocketUsercodeWriteNoti(ots) {
128
+ const handleWebsocketUsercodeWriteNoti = ots => {
169
129
  var _a, _b, _c;
170
- var cursor = 0;
171
- var _iterator = _createForOfIteratorHelper(ots),
172
- _step;
173
- try {
174
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
175
- var ot = _step.value;
176
- var model = (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.getMonacoModel();
177
- if (!model) {
178
- continue;
179
- }
180
- // remove previous versions.
181
- if (serverInitiatedVersions.current.length > 100) {
182
- serverInitiatedVersions.current.splice(0, 50);
183
- }
184
- switch (_typeof(ot)) {
185
- // cursor changed...
186
- case 'number':
187
- cursor += ot;
188
- break;
189
- // insertion
190
- case 'string':
191
- serverInitiatedVersions.current.push(model.getVersionId());
192
- (_b = editorApis.current) === null || _b === void 0 ? void 0 : _b.insertValue(cursor, ot);
193
- cursor += ot.length;
194
- break;
195
- // deletion
196
- default:
197
- serverInitiatedVersions.current.push(model.getVersionId());
198
- (_c = editorApis.current) === null || _c === void 0 ? void 0 : _c.removeValue(cursor, cursor + (typeof ot.d === 'number' ? ot.d : ot.d.length));
199
- break;
200
- }
130
+ let cursor = 0;
131
+ for (const ot of ots) {
132
+ const model = (_a = editorApis.current) === null || _a === void 0 ? void 0 : _a.getMonacoModel();
133
+ if (!model) {
134
+ continue;
135
+ }
136
+ // remove previous versions.
137
+ if (serverInitiatedVersions.current.length > 100) {
138
+ serverInitiatedVersions.current.splice(0, 50);
139
+ }
140
+ switch (typeof ot) {
141
+ // cursor changed...
142
+ case 'number':
143
+ cursor += ot;
144
+ break;
145
+ // insertion
146
+ case 'string':
147
+ serverInitiatedVersions.current.push(model.getVersionId());
148
+ (_b = editorApis.current) === null || _b === void 0 ? void 0 : _b.insertValue(cursor, ot);
149
+ cursor += ot.length;
150
+ break;
151
+ // deletion
152
+ default:
153
+ serverInitiatedVersions.current.push(model.getVersionId());
154
+ (_c = editorApis.current) === null || _c === void 0 ? void 0 : _c.removeValue(cursor, cursor + (typeof ot.d === 'number' ? ot.d : ot.d.length));
155
+ break;
201
156
  }
202
- } catch (err) {
203
- _iterator.e(err);
204
- } finally {
205
- _iterator.f();
206
157
  }
207
158
  };
208
159
  /**
209
160
  * Usercode edit web socket.
210
161
  */
211
- var wsUsercode = useUsercodeEditWebSocket({
212
- exerciseRoomId: exerciseRoomId,
162
+ const wsUsercode = useUsercodeEditWebSocket({
163
+ exerciseRoomId,
213
164
  filename: activeFilename,
214
- onInit: function onInit() {
215
- return setWebSocketReady(true);
216
- },
165
+ onInit: () => setWebSocketReady(true),
217
166
  onWriteNoti: handleWebsocketUsercodeWriteNoti
218
167
  });
219
168
  /**
220
169
  *
221
170
  */
222
- var handleChange = function handleChange(e) {
223
- var index = serverInitiatedVersions.current.indexOf(e.versionId - 1);
171
+ const handleChange = e => {
172
+ const index = serverInitiatedVersions.current.indexOf(e.versionId - 1);
224
173
  if (index !== -1) {
225
174
  serverInitiatedVersions.current.splice(index, 1);
226
175
  return;
227
176
  }
228
177
  // get previous model doc
229
- var prevDoc = editorDocHistories.current[e.versionId - 1];
178
+ const prevDoc = editorDocHistories.current[e.versionId - 1];
230
179
  // send OTs to server
231
- var _iterator2 = _createForOfIteratorHelper(e.changes),
232
- _step2;
233
- try {
234
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
235
- var change = _step2.value;
236
- // insertion
237
- if (change.rangeLength === 0 && !readOnly) {
238
- wsUsercode.sendOTs(change.rangeOffset > 0 ? [change.rangeOffset, change.text] : [change.text]);
180
+ for (const change of e.changes) {
181
+ // insertion
182
+ if (change.rangeLength === 0 && !readOnly) {
183
+ wsUsercode.sendOTs(change.rangeOffset > 0 ? [change.rangeOffset, change.text] : [change.text]);
184
+ }
185
+ // deletion
186
+ else {
187
+ if (prevDoc && !readOnly) {
188
+ wsUsercode.sendOTs([change.rangeOffset || null, {
189
+ d: prevDoc.slice(change.rangeOffset, change.rangeOffset + change.rangeLength)
190
+ }].filter(Boolean));
239
191
  }
240
- // deletion
241
- else {
242
- if (prevDoc && !readOnly) {
243
- wsUsercode.sendOTs([change.rangeOffset || null, {
244
- d: prevDoc.slice(change.rangeOffset, change.rangeOffset + change.rangeLength)
245
- }].filter(Boolean));
246
- }
247
- // replace
248
- if (change.text.length > 0 && !readOnly) {
249
- wsUsercode.sendOTs(change.rangeOffset > 0 ? [change.rangeOffset, change.text] : [change.text]);
250
- }
192
+ // replace
193
+ if (change.text.length > 0 && !readOnly) {
194
+ wsUsercode.sendOTs(change.rangeOffset > 0 ? [change.rangeOffset, change.text] : [change.text]);
251
195
  }
252
196
  }
253
- } catch (err) {
254
- _iterator2.e(err);
255
- } finally {
256
- _iterator2.f();
257
197
  }
258
198
  delete editorDocHistories.current[e.versionId - 1];
259
199
  };
260
200
  /**
261
201
  * Handle editor cursor change.
262
202
  */
263
- var handleEditorCursor = function handleEditorCursor(range) {
203
+ const handleEditorCursor = range => {
264
204
  var _a, _b;
265
205
  if (!readOnly) {
266
206
  wsUsercode.sendCursor(range);
@@ -271,34 +211,34 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
271
211
  /**
272
212
  * Handle editor save shortcut emitted.
273
213
  */
274
- var handleSave = function handleSave() {
214
+ const handleSave = () => {
275
215
  exerciseFileEditorSaveAction$.next();
276
216
  };
277
217
  //
278
218
  // Handle editor content change.
279
219
  //
280
- React.useEffect(function () {
220
+ React.useEffect(() => {
281
221
  var _a, _b;
282
- var _editorApis = editorApis.current;
222
+ const _editorApis = editorApis.current;
283
223
  if (!_editorApis || !isReady) {
284
224
  return;
285
225
  }
286
226
  _editorApis.setValue(wsUsercode.doc);
287
227
  pushEditorDocHistories();
288
- var subscription = undefined;
228
+ let subscription = undefined;
289
229
  if (FlutterApp.checkWebview()) {
290
- subscription = (_a = _editorApis.editor) === null || _a === void 0 ? void 0 : _a.onDidChangeModelContent(function (e) {
230
+ subscription = (_a = _editorApis.editor) === null || _a === void 0 ? void 0 : _a.onDidChangeModelContent(e => {
291
231
  pushEditorDocHistories();
292
232
  handleChange(e);
293
233
  FlutterApp.onDidChangeContent();
294
234
  });
295
235
  } else {
296
- subscription = (_b = _editorApis.editor) === null || _b === void 0 ? void 0 : _b.onDidChangeModelContent(function (e) {
236
+ subscription = (_b = _editorApis.editor) === null || _b === void 0 ? void 0 : _b.onDidChangeModelContent(e => {
297
237
  pushEditorDocHistories();
298
238
  handleChange(e);
299
239
  });
300
240
  }
301
- return function () {
241
+ return () => {
302
242
  if (subscription) {
303
243
  subscription.dispose();
304
244
  }
@@ -309,21 +249,17 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
309
249
  //
310
250
  // Handle websocket status change.
311
251
  //
312
- React.useEffect(function () {
313
- return setUsercodeWebSocketState(wsUsercode.readyState);
314
- },
252
+ React.useEffect(() => setUsercodeWebSocketState(wsUsercode.readyState),
315
253
  // eslint-disable-next-line react-hooks/exhaustive-deps
316
254
  [wsUsercode.readyState]);
317
255
  //
318
256
  // handle content change request to code editor.
319
257
  //
320
- React.useEffect(function () {
321
- var contentChangeSub = exerciseFileEditorContentChange$.subscribe(function (v) {
322
- setValue(v).catch(function () {
323
- return void 0;
324
- });
258
+ React.useEffect(() => {
259
+ const contentChangeSub = exerciseFileEditorContentChange$.subscribe(v => {
260
+ setValue(v).catch(() => void 0);
325
261
  });
326
- return function () {
262
+ return () => {
327
263
  contentChangeSub.unsubscribe();
328
264
  };
329
265
  },
@@ -347,8 +283,8 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
347
283
  if (!isWebSocketReady) {
348
284
  return React.createElement(ExerciseFileShimmer, null);
349
285
  }
350
- var uniqueFilePath = "code/".concat(exerciseRoomId);
351
- var editorFilename = "".concat(uniqueFilePath, "/").concat(activeFilename);
286
+ const uniqueFilePath = `code/${exerciseRoomId}`;
287
+ const editorFilename = `${uniqueFilePath}/${activeFilename}`;
352
288
  return React.createElement(Flex, {
353
289
  column: true,
354
290
  width: "100%",
@@ -359,13 +295,11 @@ var ExerciseFileEditor = function ExerciseFileEditor() {
359
295
  filename: editorFilename,
360
296
  markers: wsUsercode.markers,
361
297
  preference: Object.assign(Object.assign({}, preference), {
362
- readOnly: readOnly
298
+ readOnly
363
299
  }),
364
300
  noLanguageIntellisense: (lecture === null || lecture === void 0 ? void 0 : lecture.lectureType) === enums.LectureType.Test,
365
301
  locale: locale,
366
- onLoad: function onLoad() {
367
- return setEditorReady(true);
368
- },
302
+ onLoad: () => setEditorReady(true),
369
303
  onCursor: handleEditorCursor,
370
304
  onSave: handleSave,
371
305
  ref: editorApis
@@ -9,15 +9,16 @@ import '../context/recoilTypes.js';
9
9
  import '../context/subjects.js';
10
10
  import '../context/ExerciseProvider.js';
11
11
 
12
- var StyledEditorReadOnlyBanner = styled.div.withConfig({
12
+ const StyledEditorReadOnlyBanner = styled.div.withConfig({
13
13
  componentId: "sc-kh9iw2-0"
14
14
  })(["flex:0 0 auto;display:flex;align-items:center;margin:0.75rem;padding:0 1rem;height:2rem;border:1px solid ", ";border-radius:2px;"], base.color.navy5);
15
15
  /**
16
16
  * Banner for readonly exercise file.
17
17
  */
18
- var ExerciseFileReadOnlyBanner = function ExerciseFileReadOnlyBanner() {
19
- var _React$useContext = React.useContext(ExerciseContext),
20
- readOnlyActiveFile = _React$useContext.readOnlyActiveFile;
18
+ const ExerciseFileReadOnlyBanner = () => {
19
+ const {
20
+ readOnlyActiveFile
21
+ } = React.useContext(ExerciseContext);
21
22
  if (!readOnlyActiveFile) {
22
23
  return null;
23
24
  }
@@ -1,4 +1,3 @@
1
- import { slicedToArray as _slicedToArray, toConsumableArray as _toConsumableArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import React from 'react';
3
2
  import { useRecoilState } from 'recoil';
4
3
  import styled from 'styled-components';
@@ -13,49 +12,39 @@ import '../context/recoilTypes.js';
13
12
  import '../context/subjects.js';
14
13
  import '../context/ExerciseProvider.js';
15
14
 
16
- var AsyncFileTabs = React.lazy(function () {
17
- return import('../../shared/file-tabs/FileTabs.js');
18
- });
19
- var StyledFileTabsWrapper = styled.div.withConfig({
15
+ const AsyncFileTabs = React.lazy(() => import('../../shared/file-tabs/FileTabs.js'));
16
+ const StyledFileTabsWrapper = styled.div.withConfig({
20
17
  componentId: "sc-11fdoyl-0"
21
18
  })(["flex:0 0 3rem;"]);
22
- var ExerciseFileTabs = function ExerciseFileTabs() {
23
- var _React$useContext = React.useContext(ExerciseContext),
24
- exerciseRoomId = _React$useContext.exerciseRoomId,
25
- materialExerciseId = _React$useContext.materialExerciseId;
26
- var _useRecoilState = useRecoilState(exerciseActiveFilenameState),
27
- _useRecoilState2 = _slicedToArray(_useRecoilState, 2),
28
- activeFilename = _useRecoilState2[0],
29
- setActiveFilename = _useRecoilState2[1];
30
- var _useRecoilState3 = useRecoilState(exerciseFileTabsOpenedState({
31
- materialExerciseId: materialExerciseId,
32
- exerciseRoomId: exerciseRoomId
33
- })),
34
- _useRecoilState4 = _slicedToArray(_useRecoilState3, 2),
35
- openedTabs = _useRecoilState4[0],
36
- setOpenedTabs = _useRecoilState4[1];
37
- var handleCloseTab = function handleCloseTab(path) {
38
- var updatedTabs = openedTabs.filter(function (tab) {
39
- return tab !== path;
40
- });
19
+ const ExerciseFileTabs = () => {
20
+ const {
21
+ exerciseRoomId,
22
+ materialExerciseId
23
+ } = React.useContext(ExerciseContext);
24
+ const [activeFilename, setActiveFilename] = useRecoilState(exerciseActiveFilenameState);
25
+ const [openedTabs, setOpenedTabs] = useRecoilState(exerciseFileTabsOpenedState({
26
+ materialExerciseId,
27
+ exerciseRoomId
28
+ }));
29
+ const handleCloseTab = path => {
30
+ const updatedTabs = openedTabs.filter(tab => tab !== path);
41
31
  setOpenedTabs(updatedTabs);
42
32
  if (activeFilename === path) {
43
33
  setActiveFilename(updatedTabs.length > 0 ? updatedTabs[0] : '');
44
34
  }
45
35
  };
46
- var handleTabOrderChange = function handleTabOrderChange(currentIndex, movedIndex) {
47
- var newOpenedTabs = _toConsumableArray(openedTabs);
48
- var movingTab = newOpenedTabs.splice(currentIndex, 1);
49
- newOpenedTabs.splice.apply(newOpenedTabs, [movedIndex, 0].concat(_toConsumableArray(movingTab)));
36
+ const handleTabOrderChange = (currentIndex, movedIndex) => {
37
+ const newOpenedTabs = [...openedTabs];
38
+ const movingTab = newOpenedTabs.splice(currentIndex, 1);
39
+ newOpenedTabs.splice(movedIndex, 0, ...movingTab);
50
40
  setOpenedTabs(newOpenedTabs);
51
41
  };
52
- var handleActivePathChange = function handleActivePathChange(path) {
53
- var isDirectory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
42
+ const handleActivePathChange = (path, isDirectory = false) => {
54
43
  if (isDirectory) {
55
44
  return;
56
45
  }
57
46
  if (!openedTabs.includes(path)) {
58
- setOpenedTabs([].concat(_toConsumableArray(openedTabs), [path]));
47
+ setOpenedTabs([...openedTabs, path]);
59
48
  }
60
49
  setActiveFilename(path);
61
50
  };
@@ -1,4 +1,3 @@
1
- import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
1
  import React, { forwardRef } from 'react';
3
2
  import { useIntl } from 'react-intl';
4
3
  import { useHover } from 'react-use';
@@ -18,35 +17,29 @@ import { withForwardRefExerciseIntlProvider } from '../context/ExerciseIntlProvi
18
17
  import phrasesEn from './locales/fileTreeButton.en.json.js';
19
18
  import phrasesKo from './locales/fileTreeButton.ko.json.js';
20
19
 
21
- var ICON_BUTTON_SIZE = '2.25rem';
22
- var StyledFileTreeButton = styled(IconButton).withConfig({
20
+ const ICON_BUTTON_SIZE = '2.25rem';
21
+ const StyledFileTreeButton = styled(IconButton).withConfig({
23
22
  componentId: "sc-ohtsjn-0"
24
- })(["width:", " !important;height:", " !important;border-right:1px solid ", " !important;background-color:", " !important;&:hover{background-color:", " !important;}"], ICON_BUTTON_SIZE, ICON_BUTTON_SIZE, base.color.navy7, function (props) {
25
- return props.active ? base.color.navy8 : base.color.navy8;
26
- }, base.color.navy9);
27
- var ExerciseFileTabsFileTreeButton = forwardRef(function (_, ref) {
28
- var intl = useIntl();
29
- var _React$useContext = React.useContext(ExerciseContext),
30
- materialExerciseId = _React$useContext.materialExerciseId;
31
- var exercise = useRecoilValue(exerciseState(materialExerciseId));
32
- var _useRecoilState = useRecoilState(exerciseFileTreeOpenedState),
33
- _useRecoilState2 = _slicedToArray(_useRecoilState, 2),
34
- exerciseFileTreeOpened = _useRecoilState2[0],
35
- setExerciseFileTreeOpened = _useRecoilState2[1];
23
+ })(["width:", " !important;height:", " !important;border-right:1px solid ", " !important;background-color:", " !important;&:hover{background-color:", " !important;}"], ICON_BUTTON_SIZE, ICON_BUTTON_SIZE, base.color.navy7, props => props.active ? base.color.navy8 : base.color.navy8, base.color.navy9);
24
+ const ExerciseFileTabsFileTreeButton = forwardRef((_, ref) => {
25
+ const intl = useIntl();
26
+ const {
27
+ materialExerciseId
28
+ } = React.useContext(ExerciseContext);
29
+ const exercise = useRecoilValue(exerciseState(materialExerciseId));
30
+ const [exerciseFileTreeOpened, setExerciseFileTreeOpened] = useRecoilState(exerciseFileTreeOpenedState);
36
31
  /**
37
32
  * Handle click.
38
33
  */
39
- var handleClick = function handleClick() {
40
- setExerciseFileTreeOpened(function (prev) {
41
- return !prev;
42
- });
34
+ const handleClick = () => {
35
+ setExerciseFileTreeOpened(prev => !prev);
43
36
  };
44
37
  //
45
38
  // apply default file tree opened state.
46
39
  //
47
- React.useEffect(function () {
40
+ React.useEffect(() => {
48
41
  var _a;
49
- var exerciseUiConfig = eliceApiUiConfigNormalizeHelper('materialExercise', (_a = exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig) !== null && _a !== void 0 ? _a : {});
42
+ const exerciseUiConfig = eliceApiUiConfigNormalizeHelper('materialExercise', (_a = exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig) !== null && _a !== void 0 ? _a : {});
50
43
  setExerciseFileTreeOpened(exerciseUiConfig.editorFileTreeDefaultStatus === enums.ExerciseUiConfigEditorFileTreeDefaultStatus.Open);
51
44
  },
52
45
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -54,29 +47,27 @@ var ExerciseFileTabsFileTreeButton = forwardRef(function (_, ref) {
54
47
  //
55
48
  //
56
49
  //
57
- var _useHover = useHover(function (isHovering) {
58
- return React.createElement("div", null, React.createElement(Tooltip, {
59
- title: exerciseFileTreeOpened ? intl.formatMessage({
60
- id: 'exerciseFileTab.fileTreeButton.tooltip.close'
61
- }) : intl.formatMessage({
62
- id: 'exerciseFileTab.fileTreeButton.tooltip.open'
63
- }),
64
- placement: "bottom-start"
65
- }, React.createElement(StyledFileTreeButton, {
66
- icon: isHovering ? eilArrowRightwardsDouble : eilFolder,
67
- iconRotate: !isHovering ? 0 : exerciseFileTreeOpened ? 180 : 0,
68
- role: "gray3",
69
- size: "tiny",
70
- transparent: true,
71
- border: false,
72
- hasBorderRadius: false,
73
- active: exerciseFileTreeOpened,
74
- onClick: handleClick,
75
- ref: ref
76
- })));
77
- }),
78
- _useHover2 = _slicedToArray(_useHover, 1),
79
- el = _useHover2[0];
50
+ const [el] = useHover(isHovering => {
51
+ return React.createElement("div", null, React.createElement(Tooltip, {
52
+ title: exerciseFileTreeOpened ? intl.formatMessage({
53
+ id: 'exerciseFileTab.fileTreeButton.tooltip.close'
54
+ }) : intl.formatMessage({
55
+ id: 'exerciseFileTab.fileTreeButton.tooltip.open'
56
+ }),
57
+ placement: "bottom-start"
58
+ }, React.createElement(StyledFileTreeButton, {
59
+ icon: isHovering ? eilArrowRightwardsDouble : eilFolder,
60
+ iconRotate: !isHovering ? 0 : exerciseFileTreeOpened ? 180 : 0,
61
+ role: "gray3",
62
+ size: "tiny",
63
+ transparent: true,
64
+ border: false,
65
+ hasBorderRadius: false,
66
+ active: exerciseFileTreeOpened,
67
+ onClick: handleClick,
68
+ ref: ref
69
+ })));
70
+ });
80
71
  return (exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig.editorFileTreeDefaultStatus) === enums.ExerciseUiConfigEditorFileTreeDefaultStatus.Hide ? null : el;
81
72
  });
82
73
  //