@elice/material-exercise 1.260429.0-improvetimerpopoverui.0 → 1.260430.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 (187) hide show
  1. package/cjs/components/material-exercise/context/index.js +0 -7
  2. package/cjs/components/material-exercise/context/recoil.d.ts +0 -44
  3. package/cjs/components/material-exercise/context/recoil.js +0 -108
  4. package/cjs/components/material-exercise/context/recoilTypes.d.ts +0 -7
  5. package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.d.ts +1 -1
  6. package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.js +1 -18
  7. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +2 -4
  8. package/cjs/components/material-exercise/exercise-menu/locales/en.json.js +1 -1
  9. package/cjs/components/material-exercise/exercise-menu/locales/ko.json.js +1 -1
  10. package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +27 -57
  11. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerController.js +34 -7
  12. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.d.ts +1 -1
  13. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +13 -219
  14. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.d.ts +2 -2
  15. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionCancel.d.ts +3 -0
  16. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionCancel.js +44 -0
  17. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionGrade.d.ts +3 -0
  18. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionGrade.js +58 -0
  19. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionRun.d.ts +3 -0
  20. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionRun.js +44 -0
  21. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionSyncRequest.d.ts +3 -0
  22. package/cjs/components/material-exercise/exercise-runner/action/ControllerActionSyncRequest.js +44 -0
  23. package/cjs/components/material-exercise/exercise-runner/action/index.d.ts +5 -0
  24. package/cjs/components/material-exercise/exercise-runner/action/index.js +15 -0
  25. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionCancel.d.ts +14 -0
  26. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionCancel.js +52 -0
  27. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionGrade.d.ts +16 -0
  28. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionGrade.js +74 -0
  29. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionRun.d.ts +14 -0
  30. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionRun.js +65 -0
  31. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionSyncRequest.d.ts +15 -0
  32. package/cjs/components/material-exercise/exercise-runner/action/useControllerActionSyncRequest.js +68 -0
  33. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialog.d.ts +3 -0
  34. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialog.js +163 -0
  35. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogNativeMock.d.ts +3 -0
  36. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogNativeMock.js +188 -0
  37. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogSteps.d.ts +3 -0
  38. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogSteps.js +128 -0
  39. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionCompile.d.ts +3 -0
  40. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionCompile.js +78 -0
  41. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionUpload.d.ts +3 -0
  42. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionUpload.js +98 -0
  43. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerButtonGroup.d.ts +3 -0
  44. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerButtonGroup.js +24 -0
  45. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerStatusMessage.d.ts +3 -0
  46. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoControllerStatusMessage.js +201 -0
  47. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoErrorDialog.d.ts +3 -0
  48. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoErrorDialog.js +125 -0
  49. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialog.d.ts +3 -0
  50. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialog.js +179 -0
  51. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogButton.d.ts +3 -0
  52. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogButton.js +29 -0
  53. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogChecklist.d.ts +3 -0
  54. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogChecklist.js +94 -0
  55. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProvider.d.ts +16 -0
  56. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProvider.js +105 -0
  57. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderApiBinder.d.ts +12 -0
  58. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderApiBinder.js +94 -0
  59. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderFlashWriter.d.ts +7 -0
  60. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderFlashWriter.js +95 -0
  61. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderSessionWriter.d.ts +7 -0
  62. package/cjs/components/material-exercise/exercise-runner/arduino/ArduinoProviderSessionWriter.js +70 -0
  63. package/cjs/components/material-exercise/exercise-runner/arduino/_context.d.ts +35 -0
  64. package/cjs/components/material-exercise/exercise-runner/arduino/_context.js +18 -0
  65. package/cjs/components/material-exercise/exercise-runner/arduino/index.d.ts +6 -0
  66. package/cjs/components/material-exercise/exercise-runner/arduino/index.js +13 -0
  67. package/cjs/components/material-exercise/exercise-runner/arduino/useArduinoRunIntent.d.ts +9 -0
  68. package/cjs/components/material-exercise/exercise-runner/arduino/useArduinoRunIntent.js +38 -0
  69. package/cjs/components/material-exercise/exercise-runner/arduino/useArduinoTerminalWriter.d.ts +10 -0
  70. package/cjs/components/material-exercise/exercise-runner/arduino/useArduinoTerminalWriter.js +33 -0
  71. package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
  72. package/cjs/components/material-exercise/exercise-runner/locales/ja.json.js +1 -1
  73. package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
  74. package/cjs/components/material-exercise/exercise-runner/locales/th.json.js +1 -1
  75. package/cjs/components/shared/monaco-editor/utils/prettier/config.d.ts +1 -1
  76. package/cjs/components/shared/monaco-editor/utils/prettier/config.js +1 -1
  77. package/cjs/hooks/index.d.ts +0 -1
  78. package/cjs/hooks/index.js +0 -2
  79. package/es/components/material-exercise/context/index.js +1 -1
  80. package/es/components/material-exercise/context/recoil.d.ts +0 -44
  81. package/es/components/material-exercise/context/recoil.js +1 -102
  82. package/es/components/material-exercise/context/recoilTypes.d.ts +0 -7
  83. package/es/components/material-exercise/exercise-menu/ExerciseMenu.d.ts +1 -1
  84. package/es/components/material-exercise/exercise-menu/ExerciseMenu.js +2 -18
  85. package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +3 -3
  86. package/es/components/material-exercise/exercise-menu/locales/en.json.js +1 -1
  87. package/es/components/material-exercise/exercise-menu/locales/ko.json.js +1 -1
  88. package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +28 -58
  89. package/es/components/material-exercise/exercise-runner/ExerciseRunnerController.js +34 -7
  90. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.d.ts +1 -1
  91. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +13 -214
  92. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.d.ts +2 -2
  93. package/es/components/material-exercise/exercise-runner/action/ControllerActionCancel.d.ts +3 -0
  94. package/es/components/material-exercise/exercise-runner/action/ControllerActionCancel.js +40 -0
  95. package/es/components/material-exercise/exercise-runner/action/ControllerActionGrade.d.ts +3 -0
  96. package/es/components/material-exercise/exercise-runner/action/ControllerActionGrade.js +54 -0
  97. package/es/components/material-exercise/exercise-runner/action/ControllerActionRun.d.ts +3 -0
  98. package/es/components/material-exercise/exercise-runner/action/ControllerActionRun.js +40 -0
  99. package/es/components/material-exercise/exercise-runner/action/ControllerActionSyncRequest.d.ts +3 -0
  100. package/es/components/material-exercise/exercise-runner/action/ControllerActionSyncRequest.js +40 -0
  101. package/es/components/material-exercise/exercise-runner/action/index.d.ts +5 -0
  102. package/es/components/material-exercise/exercise-runner/action/index.js +5 -0
  103. package/es/components/material-exercise/exercise-runner/action/useControllerActionCancel.d.ts +14 -0
  104. package/es/components/material-exercise/exercise-runner/action/useControllerActionCancel.js +46 -0
  105. package/es/components/material-exercise/exercise-runner/action/useControllerActionGrade.d.ts +16 -0
  106. package/es/components/material-exercise/exercise-runner/action/useControllerActionGrade.js +68 -0
  107. package/es/components/material-exercise/exercise-runner/action/useControllerActionRun.d.ts +14 -0
  108. package/es/components/material-exercise/exercise-runner/action/useControllerActionRun.js +59 -0
  109. package/es/components/material-exercise/exercise-runner/action/useControllerActionSyncRequest.d.ts +15 -0
  110. package/es/components/material-exercise/exercise-runner/action/useControllerActionSyncRequest.js +62 -0
  111. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialog.d.ts +3 -0
  112. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialog.js +148 -0
  113. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogNativeMock.d.ts +3 -0
  114. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogNativeMock.js +177 -0
  115. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogSteps.d.ts +3 -0
  116. package/es/components/material-exercise/exercise-runner/arduino/ArduinoConnectionGuideDialogSteps.js +118 -0
  117. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionCompile.d.ts +3 -0
  118. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionCompile.js +70 -0
  119. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionUpload.d.ts +3 -0
  120. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerActionUpload.js +90 -0
  121. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerButtonGroup.d.ts +3 -0
  122. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerButtonGroup.js +20 -0
  123. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerStatusMessage.d.ts +3 -0
  124. package/es/components/material-exercise/exercise-runner/arduino/ArduinoControllerStatusMessage.js +197 -0
  125. package/es/components/material-exercise/exercise-runner/arduino/ArduinoErrorDialog.d.ts +3 -0
  126. package/es/components/material-exercise/exercise-runner/arduino/ArduinoErrorDialog.js +112 -0
  127. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialog.d.ts +3 -0
  128. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialog.js +161 -0
  129. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogButton.d.ts +3 -0
  130. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogButton.js +25 -0
  131. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogChecklist.d.ts +3 -0
  132. package/es/components/material-exercise/exercise-runner/arduino/ArduinoHelpDialogChecklist.js +84 -0
  133. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProvider.d.ts +16 -0
  134. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProvider.js +97 -0
  135. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderApiBinder.d.ts +12 -0
  136. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderApiBinder.js +86 -0
  137. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderFlashWriter.d.ts +7 -0
  138. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderFlashWriter.js +87 -0
  139. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderSessionWriter.d.ts +7 -0
  140. package/es/components/material-exercise/exercise-runner/arduino/ArduinoProviderSessionWriter.js +62 -0
  141. package/es/components/material-exercise/exercise-runner/arduino/_context.d.ts +35 -0
  142. package/es/components/material-exercise/exercise-runner/arduino/_context.js +15 -0
  143. package/es/components/material-exercise/exercise-runner/arduino/index.d.ts +6 -0
  144. package/es/components/material-exercise/exercise-runner/arduino/index.js +4 -0
  145. package/es/components/material-exercise/exercise-runner/arduino/useArduinoRunIntent.d.ts +9 -0
  146. package/es/components/material-exercise/exercise-runner/arduino/useArduinoRunIntent.js +32 -0
  147. package/es/components/material-exercise/exercise-runner/arduino/useArduinoTerminalWriter.d.ts +10 -0
  148. package/es/components/material-exercise/exercise-runner/arduino/useArduinoTerminalWriter.js +27 -0
  149. package/es/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
  150. package/es/components/material-exercise/exercise-runner/locales/ja.json.js +1 -1
  151. package/es/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
  152. package/es/components/material-exercise/exercise-runner/locales/th.json.js +1 -1
  153. package/es/components/shared/monaco-editor/utils/prettier/config.d.ts +1 -1
  154. package/es/components/shared/monaco-editor/utils/prettier/config.js +1 -1
  155. package/es/hooks/index.d.ts +0 -1
  156. package/es/hooks/index.js +0 -1
  157. package/package.json +15 -11
  158. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.d.ts +0 -3
  159. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +0 -33
  160. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.d.ts +0 -3
  161. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +0 -178
  162. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.d.ts +0 -3
  163. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +0 -169
  164. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.d.ts +0 -3
  165. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +0 -120
  166. package/cjs/constants/arduino.d.ts +0 -35
  167. package/cjs/constants/arduino.js +0 -73
  168. package/cjs/hooks/useArduino.d.ts +0 -14
  169. package/cjs/hooks/useArduino.js +0 -589
  170. package/cjs/typings/arduino.d.ts +0 -77
  171. package/cjs/utils/arduino.d.ts +0 -43
  172. package/cjs/utils/arduino.js +0 -82
  173. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.d.ts +0 -3
  174. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +0 -29
  175. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.d.ts +0 -3
  176. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +0 -170
  177. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.d.ts +0 -3
  178. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +0 -161
  179. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.d.ts +0 -3
  180. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +0 -112
  181. package/es/constants/arduino.d.ts +0 -35
  182. package/es/constants/arduino.js +0 -62
  183. package/es/hooks/useArduino.d.ts +0 -14
  184. package/es/hooks/useArduino.js +0 -583
  185. package/es/typings/arduino.d.ts +0 -77
  186. package/es/utils/arduino.d.ts +0 -43
  187. package/es/utils/arduino.js +0 -75
@@ -648,107 +648,6 @@ var exerciseMultilangEnvironmentState = atomFamily({
648
648
  }
649
649
  });
650
650
  //
651
- // =============== arduino ===============
652
- //
653
- var ARDUINO_ACCOUNT_PREFERENCE_KEY = 'material.exercise.arduino.preference';
654
- var DEFAULT_ARDUINO_PREFERENCE = {
655
- baudRate: 9600,
656
- port: ''
657
- };
658
- /**
659
- * Arduino preference.
660
- */
661
- var exerciseArduinoPreferenceState = atom({
662
- key: "".concat(KEY_PREFIX, "/Arduino/Preference"),
663
- "default": DEFAULT_ARDUINO_PREFERENCE,
664
- effects: [function (_ref26) {
665
- var trigger = _ref26.trigger,
666
- setSelf = _ref26.setSelf,
667
- onSet = _ref26.onSet;
668
- var get = /*#__PURE__*/function () {
669
- var _ref27 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {
670
- var _t8;
671
- return _regenerator().w(function (_context1) {
672
- while (1) switch (_context1.n) {
673
- case 0:
674
- _t8 = setSelf;
675
- _context1.n = 1;
676
- return getGlobalAccountPreferenceGet({
677
- pkey: ARDUINO_ACCOUNT_PREFERENCE_KEY
678
- }).then(function (res) {
679
- return Object.assign(Object.assign({}, DEFAULT_ARDUINO_PREFERENCE), res.pvalue);
680
- })["catch"](function () {
681
- return DEFAULT_ARDUINO_PREFERENCE;
682
- });
683
- case 1:
684
- _t8(_context1.v);
685
- case 2:
686
- return _context1.a(2);
687
- }
688
- }, _callee1);
689
- }));
690
- return function get() {
691
- return _ref27.apply(this, arguments);
692
- };
693
- }();
694
- if (trigger === 'get') {
695
- void get();
696
- }
697
- onSet(function (newPreference, prevPreference, isReset) {
698
- if (!isEqual(newPreference, prevPreference) && !isReset) {
699
- void postGlobalAccountPreferenceEdit({
700
- pkey: ARDUINO_ACCOUNT_PREFERENCE_KEY,
701
- pvalue: Object.assign(Object.assign({}, DEFAULT_ARDUINO_PREFERENCE), newPreference)
702
- });
703
- }
704
- });
705
- }]
706
- });
707
- /**
708
- * Arduino ports.
709
- */
710
- var exerciseArduinoPortsState = atom({
711
- key: "".concat(KEY_PREFIX, "/Arduino/Ports"),
712
- "default": []
713
- });
714
- /**
715
- * Opened arduino port.
716
- */
717
- var exerciseArduinoOpenedPortNameState = atom({
718
- key: "".concat(KEY_PREFIX, "/Arduino/OpenedPortName"),
719
- "default": null
720
- });
721
- /**
722
- * Arduino port open handler.
723
- */
724
- var exerciseArduinoOnSelectPortState = atom({
725
- key: "".concat(KEY_PREFIX, "/Arduino/OnSelectPort"),
726
- "default": function _default(_) {
727
- // do nothing.
728
- }
729
- });
730
- /**
731
- * Arduino agent connection status.
732
- */
733
- var exerciseArduinoAgentConnectionState = atom({
734
- key: "".concat(KEY_PREFIX, "/Arduino/AgentConnection"),
735
- "default": 'disconnected'
736
- });
737
- /**
738
- * Arduino upload progress.
739
- */
740
- var exerciseArduinoUploadProgressState = atom({
741
- key: "".concat(KEY_PREFIX, "/Arduino/UploadProgressState"),
742
- "default": 'ready'
743
- });
744
- /**
745
- * Arduino agent modal open status.
746
- */
747
- var exerciseArduinoAgentModalState = atom({
748
- key: "".concat(KEY_PREFIX, "/Arduino/AgentModalState"),
749
- "default": false
750
- });
751
- //
752
651
  // =============== others ===============
753
652
  //
754
653
  /**
@@ -808,4 +707,4 @@ var exerciseMonacoEditorApisState = atom({
808
707
  dangerouslyAllowMutability: true
809
708
  });
810
709
 
811
- export { exerciseActiveFilenameState, exerciseAibotInfoEnableState, exerciseArduinoAgentConnectionState, exerciseArduinoAgentModalState, exerciseArduinoOnSelectPortState, exerciseArduinoOpenedPortNameState, exerciseArduinoPortsState, exerciseArduinoPreferenceState, exerciseArduinoUploadProgressState, exerciseContainerSizeState, exerciseEditorPreferenceState, exerciseFileEditorCursorSelectionValueState, exerciseFileEditorCursorState, exerciseFileTabsOpenedState, exerciseFileTreeOpenedState, exerciseLectureState, exerciseMonacoEditorApisState, exerciseMultilangEnvironmentState, exerciseMultilangLanguagesState, exercisePreviewDisplayModeState, exercisePreviewTypeState, exerciseRightpaneActiveState, exerciseRoomState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerRunTypeState, exerciseRunnerRunningState, exerciseRunnerStdioFilesState, exerciseRunnerSubmittingState, exerciseState, exerciseUserState, exerciseWebSocketTotalStatusQuery, exerciseWebsocketQuery, exerciseWebsocketStates };
710
+ export { exerciseActiveFilenameState, exerciseAibotInfoEnableState, exerciseContainerSizeState, exerciseEditorPreferenceState, exerciseFileEditorCursorSelectionValueState, exerciseFileEditorCursorState, exerciseFileTabsOpenedState, exerciseFileTreeOpenedState, exerciseLectureState, exerciseMonacoEditorApisState, exerciseMultilangEnvironmentState, exerciseMultilangLanguagesState, exercisePreviewDisplayModeState, exercisePreviewTypeState, exerciseRightpaneActiveState, exerciseRoomState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerRunTypeState, exerciseRunnerRunningState, exerciseRunnerStdioFilesState, exerciseRunnerSubmittingState, exerciseState, exerciseUserState, exerciseWebSocketTotalStatusQuery, exerciseWebsocketQuery, exerciseWebsocketStates };
@@ -76,13 +76,6 @@ export type AtomMultilangEnvironmentJson = MultilangEnvironmentJson | null;
76
76
  * - `MultilangLanguagesJson`: Ready.
77
77
  */
78
78
  export type AtomMultilangEnvironmentState = MultilangLanguagesJson | undefined | null;
79
- /**
80
- * Arduino preference.
81
- */
82
- export type AtomArduinoPreferenceState = Required<{
83
- baudRate: number;
84
- port: string;
85
- }>;
86
79
  /**
87
80
  *
88
81
  */
@@ -1,4 +1,4 @@
1
- import React from 'react';
2
1
  import type { WithIntlComponentBuilderProps as EliceIntlProps } from '@elice/intl';
2
+ import type React from 'react';
3
3
  declare const _default: React.ForwardRefExoticComponent<Omit<import("@elice/intl").IntlComponentExtraProps & Omit<EliceIntlProps, keyof import("@elice/intl").IntlComponentExtraProps | "__intl">, "ref"> & React.RefAttributes<any>>;
4
4
  export default _default;
@@ -1,38 +1,22 @@
1
1
  import _styled from '@emotion/styled/base';
2
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
- import React from 'react';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
3
  import { base } from '@elice/design-tokens';
5
4
  import { IntlComponentBuilder, RawEliceIntlProvider } from '@elice/intl';
6
- import { enums } from '@elice/types';
7
- import { useRecoilValue } from 'recoil';
8
- import ExerciseMenuArduinoAgentModalButton from './ExerciseMenuArduinoAgentModalButton.js';
9
- import ExerciseMenuArduinoSettings from './ExerciseMenuArduinoSettings.js';
10
5
  import ExerciseMenuDropdown from './ExerciseMenuDropdown.js';
11
6
  import ExerciseMenuReset from './ExerciseMenuReset.js';
12
7
  import ExerciseMenuStdioFileBrowser from './ExerciseMenuStdioFileBrowser.js';
13
8
  import messageEn from './locales/en.json.js';
14
9
  import messageKo from './locales/ko.json.js';
15
- import { ExerciseContext } from '../context/context.js';
16
- import { exerciseState } from '../context/recoil.js';
17
10
 
18
11
  var StyledExerciseMenuWrapper = /*#__PURE__*/_styled("div", {
19
12
  target: "e16oipg60"
20
13
  })("display:flex;justify-content:center;align-items:center;padding:0 0.5rem 0 1rem;height:2.25rem;gap:0.5rem;background-color:", base.color.navy8, ";");
21
14
  var ExerciseMenu = function ExerciseMenu(_ref) {
22
15
  var __intl = _ref.__intl;
23
- var _React$useContext = React.useContext(ExerciseContext),
24
- materialExerciseId = _React$useContext.materialExerciseId;
25
- var exercise = useRecoilValue(exerciseState(materialExerciseId));
26
- var isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
27
- //
28
- //
29
- //
30
16
  return jsx(RawEliceIntlProvider, {
31
17
  value: __intl,
32
18
  children: jsxs(StyledExerciseMenuWrapper, {
33
- children: [isArduinoExercise ? jsxs(Fragment, {
34
- children: [jsx(ExerciseMenuArduinoAgentModalButton, {}), jsx(ExerciseMenuArduinoSettings, {})]
35
- }) : jsx(ExerciseMenuStdioFileBrowser, {}), jsx(ExerciseMenuReset, {}), jsx(ExerciseMenuDropdown, {})]
19
+ children: [jsx(ExerciseMenuStdioFileBrowser, {}), jsx(ExerciseMenuReset, {}), jsx(ExerciseMenuDropdown, {})]
36
20
  })
37
21
  });
38
22
  };
@@ -68,7 +68,7 @@ var StyledFilePopoverBodyListItemContentImage = /*#__PURE__*/_styled("img", {
68
68
  styles: "width:100%;max-height:128px;object-fit:contain;cursor:zoom-in",
69
69
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
70
70
  });
71
- var StyledPreferenceBodyItem = /*#__PURE__*/_styled("div", {
71
+ /*#__PURE__*/_styled("div", {
72
72
  target: "e8nx2or1"
73
73
  })("production" === "production" ? {
74
74
  name: "10vug81",
@@ -78,8 +78,8 @@ var StyledPreferenceBodyItem = /*#__PURE__*/_styled("div", {
78
78
  styles: "display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;min-height:2rem;color:white;&:last-child{margin-bottom:0;}",
79
79
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
80
80
  });
81
- var StyledSelect = /*#__PURE__*/_styled(Select, {
81
+ /*#__PURE__*/_styled(Select, {
82
82
  target: "e8nx2or0"
83
83
  })(">div{background:", base.color.navy8, "!important;border-color:", base.color.navy7, "!important;}select{padding:0!important;height:2rem!important;color:#fff!important;>option{background:", base.color.navy8, "!important;}}");
84
84
 
85
- export { StyledFilePopoverBody, StyledFilePopoverBodyList, StyledFilePopoverBodyListItem, StyledFilePopoverBodyListItemContentFile, StyledFilePopoverBodyListItemContentImage, StyledFilePopoverBodyListItemContentImageWrap, StyledFilePopoverBodyListItemDownloadButton, StyledFilePopoverContent, StyledFilePopoverHeader, StyledMenuButtonFileCount, StyledPreferenceBodyItem, StyledSelect };
85
+ export { StyledFilePopoverBody, StyledFilePopoverBodyList, StyledFilePopoverBodyListItem, StyledFilePopoverBodyListItemContentFile, StyledFilePopoverBodyListItemContentImage, StyledFilePopoverBodyListItemContentImageWrap, StyledFilePopoverBodyListItemDownloadButton, StyledFilePopoverContent, StyledFilePopoverHeader, StyledMenuButtonFileCount };
@@ -1,3 +1,3 @@
1
- var messageEn = {"exerciseMenu.dropdown.button.tooltip":"More","exerciseMenu.dropdown.item.codeHistory":"Code Revision History","exerciseMenu.dropdown.item.environment":"Environment","exerciseMenu.dropdown.item.preference":"Editor Preferences","exerciseMenu.dropdown.item.room":"Code Sharing","exerciseMenu.dropdown.item.submitHistory":"Execution/Submission History","exerciseMenu.arduino.agent.button":"Having problem with connecting to Arduino?","exerciseMenu.arduino.setting":"Arduino Setting","exerciseMenu.arduino.setting.device":"Device","exerciseMenu.arduino.setting.noDevice":"No device","exerciseMenu.arduino.setting.selectDevice":"Select device","exerciseMenu.arduino.transferSpeed":"Transfer speed","exerciseMenu.reset.button.tooltip.disabled":"The file cannot be reset","exerciseMenu.reset.button.tooltip.enabled":"Reset the file","exerciseMenu.reset.confirmDialog.body":"Are you sure you want to clear all the code you wrote at current file and reset it?","exerciseMenu.reset.confirmDialog.cancel":"Cancel","exerciseMenu.reset.confirmDialog.confirm":"Confirm","exerciseMenu.reset.confirmDialog.title":"Reset the file","exerciseMenu.stdioFileBrowser.button.tooltip":"File","exerciseMenu.stdioFileBrowser.popover.body.placeholder":"Files sent from your code\nappear here.","exerciseMenu.stdioFileBrowser.popover.header":"File"};
1
+ var messageEn = {"exerciseMenu.dropdown.button.tooltip":"More","exerciseMenu.dropdown.item.codeHistory":"Code Revision History","exerciseMenu.dropdown.item.environment":"Environment","exerciseMenu.dropdown.item.preference":"Editor Preferences","exerciseMenu.dropdown.item.room":"Code Sharing","exerciseMenu.dropdown.item.submitHistory":"Execution/Submission History","exerciseMenu.arduino.setting":"Arduino Setting","exerciseMenu.arduino.transferSpeed":"Transfer speed","exerciseMenu.reset.button.tooltip.disabled":"The file cannot be reset","exerciseMenu.reset.button.tooltip.enabled":"Reset the file","exerciseMenu.reset.confirmDialog.body":"Are you sure you want to clear all the code you wrote at current file and reset it?","exerciseMenu.reset.confirmDialog.cancel":"Cancel","exerciseMenu.reset.confirmDialog.confirm":"Confirm","exerciseMenu.reset.confirmDialog.title":"Reset the file","exerciseMenu.stdioFileBrowser.button.tooltip":"File","exerciseMenu.stdioFileBrowser.popover.body.placeholder":"Files sent from your code\nappear here.","exerciseMenu.stdioFileBrowser.popover.header":"File"};
2
2
 
3
3
  export { messageEn as default };
@@ -1,3 +1,3 @@
1
- var messageKo = {"exerciseMenu.dropdown.button.tooltip":"더 보기","exerciseMenu.dropdown.item.codeHistory":"코드 수정 이력","exerciseMenu.dropdown.item.environment":"실습 환경","exerciseMenu.dropdown.item.preference":"에디터 설정","exerciseMenu.dropdown.item.room":"코드 공유","exerciseMenu.dropdown.item.submitHistory":"실행/제출 이력","exerciseMenu.arduino.agent.button":"아두이노 연결 중 문제가 발생했나요?","exerciseMenu.arduino.setting":"아두이노 세팅","exerciseMenu.arduino.setting.device":"장치","exerciseMenu.arduino.setting.noDevice":"장치 없음","exerciseMenu.arduino.setting.selectDevice":"장치 선택","exerciseMenu.arduino.transferSpeed":"전송 속도","exerciseMenu.reset.button.tooltip.disabled":"해당 파일은 초기화를 할 수 없습니다","exerciseMenu.reset.button.tooltip.enabled":"코드 초기화","exerciseMenu.reset.confirmDialog.body":"작성한 코드를 모두 지우고 초기화하시겠습니까?","exerciseMenu.reset.confirmDialog.cancel":"취소","exerciseMenu.reset.confirmDialog.confirm":"확인","exerciseMenu.reset.confirmDialog.title":"코드 초기화","exerciseMenu.stdioFileBrowser.button.tooltip":"파일","exerciseMenu.stdioFileBrowser.popover.body.placeholder":"코드에서 전송한 파일이\n여기에 표시됩니다.","exerciseMenu.stdioFileBrowser.popover.header":"파일"};
1
+ var messageKo = {"exerciseMenu.dropdown.button.tooltip":"더 보기","exerciseMenu.dropdown.item.codeHistory":"코드 수정 이력","exerciseMenu.dropdown.item.environment":"실습 환경","exerciseMenu.dropdown.item.preference":"에디터 설정","exerciseMenu.dropdown.item.room":"코드 공유","exerciseMenu.dropdown.item.submitHistory":"실행/제출 이력","exerciseMenu.arduino.setting":"아두이노 세팅","exerciseMenu.arduino.transferSpeed":"전송 속도","exerciseMenu.reset.button.tooltip.disabled":"해당 파일은 초기화를 할 수 없습니다","exerciseMenu.reset.button.tooltip.enabled":"코드 초기화","exerciseMenu.reset.confirmDialog.body":"작성한 코드를 모두 지우고 초기화하시겠습니까?","exerciseMenu.reset.confirmDialog.cancel":"취소","exerciseMenu.reset.confirmDialog.confirm":"확인","exerciseMenu.reset.confirmDialog.title":"코드 초기화","exerciseMenu.stdioFileBrowser.button.tooltip":"파일","exerciseMenu.stdioFileBrowser.popover.body.placeholder":"코드에서 전송한 파일이\n여기에 표시됩니다.","exerciseMenu.stdioFileBrowser.popover.header":"파일"};
2
2
 
3
3
  export { messageKo as default };
@@ -1,8 +1,7 @@
1
1
  import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, toConsumableArray as _toConsumableArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import _styled from '@emotion/styled/base';
3
- import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
4
  import React from 'react';
5
- import { useEvent } from 'react-use';
6
5
  import { postOrgMaterialExerciseExerciseRunningSubmit, postOrgMaterialExerciseExerciseRunningCancel } from '@elice/api-client';
7
6
  import { Flex, ResizableNext, Dialog } from '@elice/blocks';
8
7
  import { base } from '@elice/design-tokens';
@@ -16,10 +15,10 @@ import ExerciseRunnerController from './ExerciseRunnerController.js';
16
15
  import messageEn from './locales/en.json.js';
17
16
  import messageKo from './locales/ko.json.js';
18
17
  import { exerciseState, exerciseEditorPreferenceState, exerciseActiveFilenameState, exerciseRunnerSubmittingState, exerciseRunnerRunningState, exerciseRunnerRunTypeState, exerciseRunnerRoomConnectionInfoState, exerciseRunnerStdioFilesState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseMonacoEditorApisState, exerciseWebsocketQuery, exerciseContainerSizeState } from '../context/recoil.js';
19
- import { useArduino } from '../../../hooks/useArduino.js';
20
18
  import { useRunnerRoomWebSocket } from '../../../hooks/useRunnerRoomWebSocket.js';
21
19
  import { useStdioWebSocket } from '../../../hooks/useStdioWebSocket.js';
22
20
  import { exerciseRunnerTextSend$, exerciseFileEditorSyncRequestAction$ } from '../context/subjects.js';
21
+ import ArduinoBridgeProvider from './arduino/ArduinoProvider.js';
23
22
  import XtermLazy from '../../shared/xterm/XtermLazy.js';
24
23
  import { withTimeout } from '../../../utils/async.js';
25
24
  import { getProgrammingErrorResult } from '../../../utils/runner.js';
@@ -102,26 +101,8 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
102
101
  var arduinoTextBuffer = React.useRef('');
103
102
  var runnerRunTypeRef = React.useRef(runnerRunTypeState);
104
103
  var xterm = React.useRef(null);
105
- /**
106
- * Handle text received from arduino serial output.
107
- */
108
- var handleArduinoDigitalOutput = function handleArduinoDigitalOutput(text) {
109
- var _a;
110
- (_a = xterm.current) === null || _a === void 0 ? void 0 : _a.write(text);
111
- };
112
- // Arduino
113
- var arduino = useArduino({
114
- writeTerminal: handleArduinoDigitalOutput
115
- });
104
+ var arduinoBridgeApi = React.useRef(null);
116
105
  var isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
117
- /**
118
- * Handle destroy arduino client.
119
- */
120
- var handleArduinoDistroy = React.useCallback(function () {
121
- if (isArduinoExercise) {
122
- arduino.destroy();
123
- }
124
- }, [isArduinoExercise, arduino]);
125
106
  /**
126
107
  * Handle text received from stdio websocket.
127
108
  */
@@ -144,10 +125,11 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
144
125
  * Handle file received from stdio websocket.
145
126
  */
146
127
  var handleWsStdioFileReceive = function handleWsStdioFileReceive(stdioFile) {
128
+ var _a;
147
129
  // arduino exercise
148
130
  if (isArduinoExercise) {
149
131
  if ('filename' in stdioFile && stdioFile.filename.startsWith('firmware') && stdioFile.filename.endsWith('hex')) {
150
- arduino.uploadHexFile(stdioFile);
132
+ (_a = arduinoBridgeApi.current) === null || _a === void 0 ? void 0 : _a.handleIncomingHex(stdioFile.data);
151
133
  }
152
134
  return;
153
135
  }
@@ -407,7 +389,7 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
407
389
  * Handle input requests for arduino.
408
390
  */
409
391
  var handleXtermArduinoInputRequest = function handleXtermArduinoInputRequest(_char) {
410
- var _a, _b, _c;
392
+ var _a, _b, _c, _d;
411
393
  switch (_char) {
412
394
  // backspace
413
395
  case "\x7F":
@@ -418,13 +400,13 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
418
400
  case '\r':
419
401
  if (arduinoTextBuffer.current.length) {
420
402
  (_b = xterm.current) === null || _b === void 0 ? void 0 : _b.write('\r\n');
421
- arduino.sendText(arduinoTextBuffer.current);
403
+ (_c = arduinoBridgeApi.current) === null || _c === void 0 ? void 0 : _c.sendText(arduinoTextBuffer.current);
422
404
  arduinoTextBuffer.current = '';
423
405
  }
424
406
  break;
425
407
  // any char
426
408
  default:
427
- (_c = xterm.current) === null || _c === void 0 ? void 0 : _c.write(_char);
409
+ (_d = xterm.current) === null || _d === void 0 ? void 0 : _d.write(_char);
428
410
  arduinoTextBuffer.current = "".concat(arduinoTextBuffer.current).concat(_char);
429
411
  break;
430
412
  }
@@ -440,24 +422,6 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
440
422
  }
441
423
  };
442
424
  //
443
- // Initialize Arduino devices.
444
- //
445
- React.useEffect(function () {
446
- if (!isArduinoExercise) {
447
- return;
448
- }
449
- void arduino.init();
450
- return function () {
451
- void arduino.destroy();
452
- };
453
- },
454
- // eslint-disable-next-line react-hooks/exhaustive-deps
455
- [exercise]);
456
- //
457
- // Destroy arduino client when unload window.
458
- //
459
- useEvent('beforeunload', handleArduinoDistroy, window);
460
- //
461
425
  // Update runner room websocket state.
462
426
  //
463
427
  React.useEffect(function () {
@@ -594,23 +558,29 @@ var ExerciseRunner = function ExerciseRunner(_ref) {
594
558
  //
595
559
  //
596
560
  //
561
+ var runnerBody = jsxs(ExerciseRunnerContext.Provider, {
562
+ value: {
563
+ onSubmit: handleRunnerSubmit,
564
+ onCancel: handleRunnerCancel,
565
+ onSyncRequest: handleRunnerSyncRequest
566
+ },
567
+ children: [jsx(ExerciseRunnerController, {}), jsxs(Flex, {
568
+ auto: true,
569
+ style: {
570
+ minHeight: 0
571
+ },
572
+ overflow: "hidden",
573
+ children: [renderPreview(), renderXterm(), renderRunnerSubmitErrorDialog()]
574
+ })]
575
+ });
597
576
  return jsx(RawEliceIntlProvider, {
598
577
  value: __intl,
599
578
  children: jsx(StyledExerciseRunner, {
600
- children: jsxs(ExerciseRunnerContext.Provider, {
601
- value: {
602
- onSubmit: handleRunnerSubmit,
603
- onCancel: handleRunnerCancel,
604
- onSyncRequest: handleRunnerSyncRequest
605
- },
606
- children: [jsx(ExerciseRunnerController, {}), jsxs(Flex, {
607
- auto: true,
608
- style: {
609
- minHeight: 0
610
- },
611
- overflow: "hidden",
612
- children: [renderPreview(), renderXterm(), renderRunnerSubmitErrorDialog()]
613
- })]
579
+ children: jsx(ArduinoBridgeProvider, {
580
+ enabled: isArduinoExercise,
581
+ xtermRef: xterm,
582
+ apiRef: arduinoBridgeApi,
583
+ children: runnerBody
614
584
  })
615
585
  })
616
586
  });
@@ -5,12 +5,12 @@ import { Flex, Hspace } from '@elice/blocks';
5
5
  import { enums } from '@elice/types';
6
6
  import { useRecoilValue } from 'recoil';
7
7
  import { MATERIAL_DIVIDER_BORDER_VALUE } from '../../../constants/stylesheets.js';
8
- import ExerciseRunnerControllerArduinoAgentModal from './ExerciseRunnerControllerArduinoAgentModal.js';
9
- import ExerciseRunnerControllerArduinoStatusMessage from './ExerciseRunnerControllerArduinoStatusMessage.js';
10
8
  import ExerciseRunnerControllerButtonGroup from './ExerciseRunnerControllerButtonGroup.js';
11
9
  import ExerciseRunnerControllerRunningInfo from './ExerciseRunnerControllerRunningInfo.js';
12
10
  import ExerciseRunnerControllerStatusMessage from './ExerciseRunnerControllerStatusMessage.js';
13
11
  import ExerciseRunnerControllerTimer from './ExerciseRunnerControllerTimer.js';
12
+ import ArduinoControllerButtonGroup from './arduino/ArduinoControllerButtonGroup.js';
13
+ import ArduinoControllerStatusMessage from './arduino/ArduinoControllerStatusMessage.js';
14
14
  import { ExerciseContext } from '../context/context.js';
15
15
  import { exerciseState, exerciseActiveFilenameState } from '../context/recoil.js';
16
16
  import { useExerciseFileEditable } from '../../../hooks/useExerciseFile.js';
@@ -23,20 +23,47 @@ var ExerciseRunnerController = function ExerciseRunnerController() {
23
23
  var _React$useContext = React.useContext(ExerciseContext),
24
24
  materialExerciseId = _React$useContext.materialExerciseId;
25
25
  var exercise = useRecoilValue(exerciseState(materialExerciseId));
26
- var isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === enums.ExerciseEnvType.Arduino;
27
26
  var activeFilename = useRecoilValue(exerciseActiveFilenameState);
28
27
  var isFileEditable = useExerciseFileEditable(activeFilename);
28
+ /**
29
+ *
30
+ */
31
+ var renderControllerButtonGroup = function renderControllerButtonGroup() {
32
+ switch (exercise === null || exercise === void 0 ? void 0 : exercise.envType) {
33
+ case enums.ExerciseEnvType.Arduino:
34
+ return jsx(ArduinoControllerButtonGroup, {});
35
+ default:
36
+ return jsx(ExerciseRunnerControllerButtonGroup, {});
37
+ }
38
+ };
39
+ /**
40
+ *
41
+ */
42
+ var renderControllerStatusMessage = function renderControllerStatusMessage() {
43
+ if (!isFileEditable) {
44
+ return null;
45
+ }
46
+ switch (exercise === null || exercise === void 0 ? void 0 : exercise.envType) {
47
+ case enums.ExerciseEnvType.Arduino:
48
+ return jsx(ArduinoControllerStatusMessage, {});
49
+ default:
50
+ return jsx(ExerciseRunnerControllerStatusMessage, {});
51
+ }
52
+ };
53
+ //
54
+ //
55
+ //
29
56
  return jsxs(StyledController, {
30
57
  children: [jsxs(Flex, {
31
58
  align: "center",
32
- children: [jsx(ExerciseRunnerControllerButtonGroup, {}), jsx(Hspace, {
59
+ children: [renderControllerButtonGroup(), jsx(Hspace, {
33
60
  width: 1
34
61
  }), jsx(ExerciseRunnerControllerRunningInfo, {}), jsx(ExerciseRunnerControllerTimer, {})]
35
- }), isFileEditable ? jsxs(Flex, {
62
+ }), jsx(Flex, {
36
63
  column: true,
37
64
  align: "flex-end",
38
- children: [jsx(ExerciseRunnerControllerStatusMessage, {}), isArduinoExercise ? jsx(ExerciseRunnerControllerArduinoStatusMessage, {}) : null]
39
- }) : null, isArduinoExercise ? jsx(ExerciseRunnerControllerArduinoAgentModal, {}) : null]
65
+ children: renderControllerStatusMessage()
66
+ })]
40
67
  });
41
68
  };
42
69
 
@@ -1,3 +1,3 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  declare const ExerciseRunnerControllerButtonGroup: React.VFC;
3
3
  export default ExerciseRunnerControllerButtonGroup;