@elice/material-exercise 1.230328.0 → 1.230418.1

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