@elice/material-exercise 1.230516.0-helpidialogue.1 → 1.230516.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.
@@ -37,6 +37,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
37
37
  * Material exercise.
38
38
  */
39
39
  var MaterialExercise = React.forwardRef(function (props, ref) {
40
+ var _api = React__default["default"].useRef({});
40
41
  var _useRecoilValue = recoil.useRecoilValue(recoil$1.exerciseContainerSizeState),
41
42
  width = _useRecoilValue.width,
42
43
  height = _useRecoilValue.height;
@@ -44,7 +45,6 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
44
45
  var exerciseFileTreeOpened = recoil.useRecoilValue(recoil$1.exerciseFileTreeOpenedState);
45
46
  var exercisePreviewType = recoil.useRecoilValue(recoil$1.exercisePreviewTypeState(props.materialExerciseId));
46
47
  var exercisePreviewDisplayMode = recoil.useRecoilValue(recoil$1.exercisePreviewDisplayModeState);
47
- var exerciseMonacoEditorApis = recoil.useRecoilValue(recoil$1.exerciseMonacoEditorApisState);
48
48
  /**
49
49
  * File tree
50
50
  */
@@ -126,16 +126,12 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
126
126
  //
127
127
  //
128
128
  //
129
+ _api.current.sendTextToRunner = function (text) {
130
+ subjects.exerciseRunnerTextSend$.next(text);
131
+ };
129
132
  React__default["default"].useImperativeHandle(ref, function () {
130
- return {
131
- sendTextToRunner: function sendTextToRunner(text) {
132
- subjects.exerciseRunnerTextSend$.next(text);
133
- },
134
- getMonacoEditorApis: function getMonacoEditorApis() {
135
- return exerciseMonacoEditorApis;
136
- }
137
- };
138
- }, [exerciseMonacoEditorApis]);
133
+ return _api.current;
134
+ });
139
135
  //
140
136
  //
141
137
  //
@@ -8,7 +8,6 @@ var React = require('react');
8
8
  var reactUse = require('react-use');
9
9
  var apiClient = require('@elice/api-client');
10
10
  var blocks = require('@elice/blocks');
11
- var materialSharedUtils = require('@elice/material-shared-utils');
12
11
  var recoil = require('recoil');
13
12
  var styled = require('styled-components');
14
13
  var context = require('./context.js');
@@ -38,9 +37,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
38
37
  onDefaultExerciseRoomIdSet = _a.onDefaultExerciseRoomIdSet,
39
38
  exerciseImageEmptyOptions = _a.exerciseImageEmptyOptions,
40
39
  contextProps = tslib.__rest(_a, ["children", "materialExerciseId", "exerciseRoomId", "exerciseRoomUserId", "onDefaultExerciseRoomIdSet", "exerciseImageEmptyOptions"]);
41
- //
42
- var _useMaterialConfig = materialSharedUtils.useMaterialConfig(),
43
- orgNameShort = _useMaterialConfig.orgNameShort;
44
40
  // user
45
41
  var user = recoil.useRecoilValue(recoil$1.exerciseUserState);
46
42
  // exercise
@@ -55,7 +51,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
55
51
  // etc
56
52
  var activeFilename = recoil.useRecoilValue(recoil$1.exerciseActiveFilenameState);
57
53
  var setConatinerSize = recoil.useSetRecoilState(recoil$1.exerciseContainerSizeState);
58
- var setAibotInfoEnable = recoil.useSetRecoilState(recoil$1.exerciseAibotInfoEnableState);
59
54
  // wrap container size
60
55
  var _useMeasure = reactUse.useMeasure(),
61
56
  _useMeasure2 = _rollupPluginBabelHelpers.slicedToArray(_useMeasure, 2),
@@ -131,26 +126,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
131
126
  // eslint-disable-next-line react-hooks/exhaustive-deps
132
127
  [width, height]);
133
128
  //
134
- // update
135
- //
136
- React__default["default"].useEffect(function () {
137
- if (!(lecture === null || lecture === void 0 ? void 0 : lecture.courseId)) {
138
- return;
139
- }
140
- void Promise.all([apiClient.getGlobalOrganizationGet({
141
- organizationNameShort: orgNameShort
142
- }), apiClient.getOrgCourseGet({
143
- courseId: lecture.courseId
144
- })]).then(function (_ref) {
145
- var _ref2 = _rollupPluginBabelHelpers.slicedToArray(_ref, 2),
146
- organization = _ref2[0].organization,
147
- course = _ref2[1].course;
148
- var isAibotInfoEnabled = organization.aibotInfo.isEnabled && course.aibotInfo.isEnabled;
149
- setAibotInfoEnable(isAibotInfoEnabled);
150
- });
151
- // eslint-disable-next-line react-hooks/exhaustive-deps
152
- }, [lecture, orgNameShort]);
153
- //
154
129
  //
155
130
  //
156
131
  return React__default["default"].createElement(StyledMaterialExercise, {
@@ -139,10 +139,6 @@ export declare const exerciseRightpaneActiveState: import("recoil").RecoilState<
139
139
  *
140
140
  */
141
141
  export declare const exerciseContainerSizeState: import("recoil").RecoilState<AtomContainerSizeState>;
142
- /**
143
- *
144
- */
145
- export declare const exerciseAibotInfoEnableState: import("recoil").RecoilState<boolean>;
146
142
  /**
147
143
  *
148
144
  */
@@ -794,13 +794,6 @@ var exerciseContainerSizeState = recoil.atom({
794
794
  height: 0
795
795
  }
796
796
  });
797
- /**
798
- *
799
- */
800
- var exerciseAibotInfoEnableState = recoil.atom({
801
- key: "".concat(KEY_PREFIX, "/AibotInfoEnable"),
802
- default: false
803
- });
804
797
  /**
805
798
  *
806
799
  */
@@ -828,7 +821,6 @@ var exerciseMonacoEditorApisState = recoil.atom({
828
821
  });
829
822
 
830
823
  exports.exerciseActiveFilenameState = exerciseActiveFilenameState;
831
- exports.exerciseAibotInfoEnableState = exerciseAibotInfoEnableState;
832
824
  exports.exerciseArduinoAgentConnectionState = exerciseArduinoAgentConnectionState;
833
825
  exports.exerciseArduinoAgentModalState = exerciseArduinoAgentModalState;
834
826
  exports.exerciseArduinoOnSelectPortState = exerciseArduinoOnSelectPortState;
@@ -1,7 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { MaterialCommponentCommonProps } from '@elice/material-shared-utils';
3
3
  import type { GetOrgMaterialExerciseExerciseRunningListResponses, PostOrgMaterialExerciseExerciseRunningSubmitResponses } from '@elice/types';
4
- import type { MonacoEditorApis } from "../../shared/monaco-editor";
5
4
  import type { CodeHelperError } from "../../../utils";
6
5
  import type { ExerciseProviderNoImageProps } from './ExerciseProviderNoImage';
7
6
  /**
@@ -18,16 +17,11 @@ EA extends Record<string, unknown> = {}> = MaterialExerciseCommonComponent<EP, E
18
17
  */
19
18
  export interface MaterialExerciseCommonApis {
20
19
  sendTextToRunner: MaterialExerciseCommonApiSendTextToTerminal;
21
- getMonacoEditorApis: MaterialExerciseCommonApiGetMonacoEditorApis;
22
20
  }
23
21
  /**
24
22
  * Send text to terminal.
25
23
  */
26
24
  export declare type MaterialExerciseCommonApiSendTextToTerminal = (text: string) => void;
27
- /**
28
- * Get monaco editor apis.
29
- */
30
- export declare type MaterialExerciseCommonApiGetMonacoEditorApis = () => MonacoEditorApis | null;
31
25
  /**
32
26
  * [External]
33
27
  * Common exposed props for `MaterialExercise*` components.
@@ -5,15 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
6
  var React = require('react');
7
7
  var reactIntl = require('react-intl');
8
+ var apiClient = require('@elice/api-client');
8
9
  var blocks = require('@elice/blocks');
9
10
  var icons = require('@elice/icons');
10
- var recoil = require('recoil');
11
+ var materialSharedUtils = require('@elice/material-shared-utils');
11
12
  var styled = require('styled-components');
12
- var recoil$1 = require('../context/recoil.js');
13
- require('../context/context.js');
14
- require('../context/recoilTypes.js');
15
- require('../context/subjects.js');
16
- require('../context/ExerciseProvider.js');
17
13
 
18
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
15
 
@@ -26,20 +22,34 @@ var StyledControllerButton = styled__default["default"](blocks.Button).withConfi
26
22
  componentId: "sc-10grd0k-0"
27
23
  })(["position:relative;transition:none;"]);
28
24
  var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].forwardRef(function (props, ref) {
25
+ var _useMaterialConfig = materialSharedUtils.useMaterialConfig(),
26
+ orgNameShort = _useMaterialConfig.orgNameShort;
29
27
  var _React$useState = React__default["default"].useState(false),
30
28
  _React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
31
29
  isTooltipHidden = _React$useState2[0],
32
30
  setIsTooltipHidden = _React$useState2[1];
33
- var isAibotInfoEnabled = recoil.useRecoilValue(recoil$1.exerciseAibotInfoEnableState);
34
- //
35
31
  //
36
32
  //
33
+ // Get ai info from organization and check all resovle below conditions.
34
+ // - isEnable is true.
35
+ // - quotaPerDay is upper than zero.
36
+ // - tooltip hidden is false.
37
37
  React__default["default"].useEffect(function () {
38
38
  var isTooltipHidden = sessionStorage.getItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY) === ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE;
39
39
  if (isTooltipHidden) {
40
40
  setIsTooltipHidden(true);
41
41
  return;
42
42
  }
43
+ apiClient.getGlobalOrganizationGet({
44
+ organizationNameShort: orgNameShort
45
+ }).then(function (res) {
46
+ var aibotInfo = res.organization.aibotInfo;
47
+ var isHidden = !aibotInfo.isEnabled || aibotInfo.quotaPerDay <= 0;
48
+ setIsTooltipHidden(isHidden);
49
+ }).catch(function () {
50
+ setIsTooltipHidden(true);
51
+ });
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
53
  }, []);
44
54
  //
45
55
  //
@@ -57,18 +67,18 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
57
67
  size: "tiny",
58
68
  bold: true
59
69
  }, "NEW")), React__default["default"].createElement(blocks.Hspace, {
60
- width: 0.625
70
+ width: 0.25
61
71
  }), React__default["default"].createElement(blocks.Text, {
62
- role: "gray9",
72
+ role: "gray7",
63
73
  size: "small",
64
74
  bold: true
65
75
  }, React__default["default"].createElement(reactIntl.FormattedMessage, {
66
76
  id: "exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp"
67
77
  })), React__default["default"].createElement(blocks.Hspace, {
68
- width: 0.625
78
+ width: 0.25
69
79
  }), React__default["default"].createElement(blocks.IconButton, {
70
80
  size: "tiny",
71
- role: "primary",
81
+ role: "gray6",
72
82
  hasPadding: false,
73
83
  border: false,
74
84
  icon: icons.eilMathsignMultiplyBasic,
@@ -78,7 +88,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
78
88
  }
79
89
  }));
80
90
  };
81
- return isAibotInfoEnabled ? React__default["default"].createElement(blocks.Tooltip, {
91
+ return React__default["default"].createElement(blocks.Tooltip, {
82
92
  placement: "top",
83
93
  dark: false,
84
94
  visible: !isTooltipHidden,
@@ -93,7 +103,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React__default["default"].fo
93
103
  iconAlign: "right"
94
104
  }), React__default["default"].createElement(reactIntl.FormattedMessage, {
95
105
  id: "exerciseRunner.controller.buttonGroup.button.helpRequest"
96
- }))) : null;
106
+ })));
97
107
  });
98
108
 
99
109
  exports["default"] = ExerciseRunnerControllerCodeHelpRequestButton;
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Ask Helpy a question","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"Ask any questions you may have.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
5
+ var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Help me","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"A function to get help from AI has been added.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
6
6
 
7
7
  exports["default"] = phrasesEn;
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"헬피에게 질문하기","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"궁금한 사항을 질문해 보세요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
5
+ var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"도와주세요","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"AI에게 도움받기 기능이 추가되었어요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
6
6
 
7
7
  exports["default"] = phrasesKo;
@@ -5,7 +5,7 @@ import { withForwardRefMaterial } from '@elice/material-shared-utils';
5
5
  import { useRecoilValue } from 'recoil';
6
6
  import { MATERIAL_RESIZABLE_COMMON_PROPS } from '../../constants/stylesheets.js';
7
7
  import ExerciseFileTabsFileTreeButton from './exercise-file-tabs/ExerciseFileTabsFileTreeButton.js';
8
- import { exerciseContainerSizeState, exerciseState, exerciseFileTreeOpenedState, exercisePreviewTypeState, exercisePreviewDisplayModeState, exerciseMonacoEditorApisState } from './context/recoil.js';
8
+ import { exerciseContainerSizeState, exerciseState, exerciseFileTreeOpenedState, exercisePreviewTypeState, exercisePreviewDisplayModeState } from './context/recoil.js';
9
9
  import './context/context.js';
10
10
  import { ExercisePreviewType, ExercisePreviewDisplayMode } from './context/recoilTypes.js';
11
11
  import { exerciseRunnerTextSend$ } from './context/subjects.js';
@@ -29,6 +29,7 @@ import { StyledExerciseContainer, EXERCISE_PREVIEW_MIN_WIDTH, EXERCISE_HORIZONTA
29
29
  * Material exercise.
30
30
  */
31
31
  var MaterialExercise = forwardRef(function (props, ref) {
32
+ var _api = React.useRef({});
32
33
  var _useRecoilValue = useRecoilValue(exerciseContainerSizeState),
33
34
  width = _useRecoilValue.width,
34
35
  height = _useRecoilValue.height;
@@ -36,7 +37,6 @@ var MaterialExercise = forwardRef(function (props, ref) {
36
37
  var exerciseFileTreeOpened = useRecoilValue(exerciseFileTreeOpenedState);
37
38
  var exercisePreviewType = useRecoilValue(exercisePreviewTypeState(props.materialExerciseId));
38
39
  var exercisePreviewDisplayMode = useRecoilValue(exercisePreviewDisplayModeState);
39
- var exerciseMonacoEditorApis = useRecoilValue(exerciseMonacoEditorApisState);
40
40
  /**
41
41
  * File tree
42
42
  */
@@ -118,16 +118,12 @@ var MaterialExercise = forwardRef(function (props, ref) {
118
118
  //
119
119
  //
120
120
  //
121
+ _api.current.sendTextToRunner = function (text) {
122
+ exerciseRunnerTextSend$.next(text);
123
+ };
121
124
  React.useImperativeHandle(ref, function () {
122
- return {
123
- sendTextToRunner: function sendTextToRunner(text) {
124
- exerciseRunnerTextSend$.next(text);
125
- },
126
- getMonacoEditorApis: function getMonacoEditorApis() {
127
- return exerciseMonacoEditorApis;
128
- }
129
- };
130
- }, [exerciseMonacoEditorApis]);
125
+ return _api.current;
126
+ });
131
127
  //
132
128
  //
133
129
  //
@@ -2,14 +2,13 @@ import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPlugin
2
2
  import { __rest } from 'tslib';
3
3
  import React from 'react';
4
4
  import { useMeasure } from 'react-use';
5
- import { getOrgMaterialExerciseDefaultRoomGet, getGlobalOrganizationGet, getOrgCourseGet } from '@elice/api-client';
5
+ import { getOrgMaterialExerciseDefaultRoomGet } from '@elice/api-client';
6
6
  import { Flex, Spinner } from '@elice/blocks';
7
- import { useMaterialConfig } from '@elice/material-shared-utils';
8
7
  import { useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil';
9
8
  import styled from 'styled-components';
10
9
  import { ExerciseContext } from './context.js';
11
10
  import MaterialExerciseNoImage from './ExerciseProviderNoImage.js';
12
- import { exerciseUserState, exerciseState, exerciseRoomState, exerciseLectureState, exerciseMultilangLanguagesState, exerciseActiveFilenameState, exerciseContainerSizeState, exerciseAibotInfoEnableState } from './recoil.js';
11
+ import { exerciseUserState, exerciseState, exerciseRoomState, exerciseLectureState, exerciseMultilangLanguagesState, exerciseActiveFilenameState, exerciseContainerSizeState } from './recoil.js';
13
12
 
14
13
  var RECOIL_RESET_DELAY = 10;
15
14
  var StyledMaterialExercise = styled.div.withConfig({
@@ -29,9 +28,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
29
28
  onDefaultExerciseRoomIdSet = _a.onDefaultExerciseRoomIdSet,
30
29
  exerciseImageEmptyOptions = _a.exerciseImageEmptyOptions,
31
30
  contextProps = __rest(_a, ["children", "materialExerciseId", "exerciseRoomId", "exerciseRoomUserId", "onDefaultExerciseRoomIdSet", "exerciseImageEmptyOptions"]);
32
- //
33
- var _useMaterialConfig = useMaterialConfig(),
34
- orgNameShort = _useMaterialConfig.orgNameShort;
35
31
  // user
36
32
  var user = useRecoilValue(exerciseUserState);
37
33
  // exercise
@@ -46,7 +42,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
46
42
  // etc
47
43
  var activeFilename = useRecoilValue(exerciseActiveFilenameState);
48
44
  var setConatinerSize = useSetRecoilState(exerciseContainerSizeState);
49
- var setAibotInfoEnable = useSetRecoilState(exerciseAibotInfoEnableState);
50
45
  // wrap container size
51
46
  var _useMeasure = useMeasure(),
52
47
  _useMeasure2 = _slicedToArray(_useMeasure, 2),
@@ -122,26 +117,6 @@ var ExerciseProvider = function ExerciseProvider(_a) {
122
117
  // eslint-disable-next-line react-hooks/exhaustive-deps
123
118
  [width, height]);
124
119
  //
125
- // update
126
- //
127
- React.useEffect(function () {
128
- if (!(lecture === null || lecture === void 0 ? void 0 : lecture.courseId)) {
129
- return;
130
- }
131
- void Promise.all([getGlobalOrganizationGet({
132
- organizationNameShort: orgNameShort
133
- }), getOrgCourseGet({
134
- courseId: lecture.courseId
135
- })]).then(function (_ref) {
136
- var _ref2 = _slicedToArray(_ref, 2),
137
- organization = _ref2[0].organization,
138
- course = _ref2[1].course;
139
- var isAibotInfoEnabled = organization.aibotInfo.isEnabled && course.aibotInfo.isEnabled;
140
- setAibotInfoEnable(isAibotInfoEnabled);
141
- });
142
- // eslint-disable-next-line react-hooks/exhaustive-deps
143
- }, [lecture, orgNameShort]);
144
- //
145
120
  //
146
121
  //
147
122
  return React.createElement(StyledMaterialExercise, {
@@ -139,10 +139,6 @@ export declare const exerciseRightpaneActiveState: import("recoil").RecoilState<
139
139
  *
140
140
  */
141
141
  export declare const exerciseContainerSizeState: import("recoil").RecoilState<AtomContainerSizeState>;
142
- /**
143
- *
144
- */
145
- export declare const exerciseAibotInfoEnableState: import("recoil").RecoilState<boolean>;
146
142
  /**
147
143
  *
148
144
  */
@@ -786,13 +786,6 @@ var exerciseContainerSizeState = atom({
786
786
  height: 0
787
787
  }
788
788
  });
789
- /**
790
- *
791
- */
792
- var exerciseAibotInfoEnableState = atom({
793
- key: "".concat(KEY_PREFIX, "/AibotInfoEnable"),
794
- default: false
795
- });
796
789
  /**
797
790
  *
798
791
  */
@@ -819,4 +812,4 @@ var exerciseMonacoEditorApisState = atom({
819
812
  dangerouslyAllowMutability: true
820
813
  });
821
814
 
822
- 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, exerciseRunnerWebSocketStatusQuery, exerciseState, exerciseUserState, exerciseWebsocketQuery, exerciseWebsocketStates };
815
+ export { exerciseActiveFilenameState, 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, exerciseRunnerWebSocketStatusQuery, exerciseState, exerciseUserState, exerciseWebsocketQuery, exerciseWebsocketStates };
@@ -1,7 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { MaterialCommponentCommonProps } from '@elice/material-shared-utils';
3
3
  import type { GetOrgMaterialExerciseExerciseRunningListResponses, PostOrgMaterialExerciseExerciseRunningSubmitResponses } from '@elice/types';
4
- import type { MonacoEditorApis } from "../../shared/monaco-editor";
5
4
  import type { CodeHelperError } from "../../../utils";
6
5
  import type { ExerciseProviderNoImageProps } from './ExerciseProviderNoImage';
7
6
  /**
@@ -18,16 +17,11 @@ EA extends Record<string, unknown> = {}> = MaterialExerciseCommonComponent<EP, E
18
17
  */
19
18
  export interface MaterialExerciseCommonApis {
20
19
  sendTextToRunner: MaterialExerciseCommonApiSendTextToTerminal;
21
- getMonacoEditorApis: MaterialExerciseCommonApiGetMonacoEditorApis;
22
20
  }
23
21
  /**
24
22
  * Send text to terminal.
25
23
  */
26
24
  export declare type MaterialExerciseCommonApiSendTextToTerminal = (text: string) => void;
27
- /**
28
- * Get monaco editor apis.
29
- */
30
- export declare type MaterialExerciseCommonApiGetMonacoEditorApis = () => MonacoEditorApis | null;
31
25
  /**
32
26
  * [External]
33
27
  * Common exposed props for `MaterialExercise*` components.
@@ -1,15 +1,11 @@
1
1
  import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import React from 'react';
3
3
  import { FormattedMessage } from 'react-intl';
4
+ import { getGlobalOrganizationGet } from '@elice/api-client';
4
5
  import { Button, Tooltip, Flex, BadgeNext, Text, Hspace, IconButton, Icon } from '@elice/blocks';
5
6
  import { eilMathsignMultiplyBasic, eilArrowRightwardsBasic } from '@elice/icons';
6
- import { useRecoilValue } from 'recoil';
7
+ import { useMaterialConfig } from '@elice/material-shared-utils';
7
8
  import styled from 'styled-components';
8
- import { exerciseAibotInfoEnableState } from '../context/recoil.js';
9
- import '../context/context.js';
10
- import '../context/recoilTypes.js';
11
- import '../context/subjects.js';
12
- import '../context/ExerciseProvider.js';
13
9
 
14
10
  var ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY = 'elice-material-exercise-aibot-tooltip-hidden';
15
11
  var ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE = 'true';
@@ -17,20 +13,34 @@ var StyledControllerButton = styled(Button).withConfig({
17
13
  componentId: "sc-10grd0k-0"
18
14
  })(["position:relative;transition:none;"]);
19
15
  var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (props, ref) {
16
+ var _useMaterialConfig = useMaterialConfig(),
17
+ orgNameShort = _useMaterialConfig.orgNameShort;
20
18
  var _React$useState = React.useState(false),
21
19
  _React$useState2 = _slicedToArray(_React$useState, 2),
22
20
  isTooltipHidden = _React$useState2[0],
23
21
  setIsTooltipHidden = _React$useState2[1];
24
- var isAibotInfoEnabled = useRecoilValue(exerciseAibotInfoEnableState);
25
- //
26
22
  //
27
23
  //
24
+ // Get ai info from organization and check all resovle below conditions.
25
+ // - isEnable is true.
26
+ // - quotaPerDay is upper than zero.
27
+ // - tooltip hidden is false.
28
28
  React.useEffect(function () {
29
29
  var isTooltipHidden = sessionStorage.getItem(ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_KEY) === ELICE_MATERIAL_EXERCISE_AI_BOT_TOOLTIP_VALUE;
30
30
  if (isTooltipHidden) {
31
31
  setIsTooltipHidden(true);
32
32
  return;
33
33
  }
34
+ getGlobalOrganizationGet({
35
+ organizationNameShort: orgNameShort
36
+ }).then(function (res) {
37
+ var aibotInfo = res.organization.aibotInfo;
38
+ var isHidden = !aibotInfo.isEnabled || aibotInfo.quotaPerDay <= 0;
39
+ setIsTooltipHidden(isHidden);
40
+ }).catch(function () {
41
+ setIsTooltipHidden(true);
42
+ });
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
34
44
  }, []);
35
45
  //
36
46
  //
@@ -48,18 +58,18 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
48
58
  size: "tiny",
49
59
  bold: true
50
60
  }, "NEW")), React.createElement(Hspace, {
51
- width: 0.625
61
+ width: 0.25
52
62
  }), React.createElement(Text, {
53
- role: "gray9",
63
+ role: "gray7",
54
64
  size: "small",
55
65
  bold: true
56
66
  }, React.createElement(FormattedMessage, {
57
67
  id: "exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp"
58
68
  })), React.createElement(Hspace, {
59
- width: 0.625
69
+ width: 0.25
60
70
  }), React.createElement(IconButton, {
61
71
  size: "tiny",
62
- role: "primary",
72
+ role: "gray6",
63
73
  hasPadding: false,
64
74
  border: false,
65
75
  icon: eilMathsignMultiplyBasic,
@@ -69,7 +79,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
69
79
  }
70
80
  }));
71
81
  };
72
- return isAibotInfoEnabled ? React.createElement(Tooltip, {
82
+ return React.createElement(Tooltip, {
73
83
  placement: "top",
74
84
  dark: false,
75
85
  visible: !isTooltipHidden,
@@ -84,7 +94,7 @@ var ExerciseRunnerControllerCodeHelpRequestButton = React.forwardRef(function (p
84
94
  iconAlign: "right"
85
95
  }), React.createElement(FormattedMessage, {
86
96
  id: "exerciseRunner.controller.buttonGroup.button.helpRequest"
87
- }))) : null;
97
+ })));
88
98
  });
89
99
 
90
100
  export { ExerciseRunnerControllerCodeHelpRequestButton as default };
@@ -1,3 +1,3 @@
1
- var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Ask Helpy a question","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"Ask any questions you may have.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
1
+ var phrasesEn = {"exerciseRunner.controller.arduino.connectionStatus.connected":"Connected to Arduino","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"Connected to {device}","exerciseRunner.controller.arduino.connectionStatus.connecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.disconnected":"Disconnected from Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.noDevice":"No connected device","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"Connecting to Elice Arduino Agent","exerciseRunner.controller.arduino.connectionStatus.uploading":"Uploading...","exerciseRunner.controller.arduino.agent.title":"Connect to Agent","exerciseRunner.controller.arduino.agent.instruction.install":"1. Install Elice arduino agent","exerciseRunner.controller.arduino.agent.instruction.install.detail":"Install 'elice-arduino-agent' program to connect to arduino.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Download for Windows","exerciseRunner.controller.arduino.agent.instruction.install.mac":"Download for MacOS","exerciseRunner.controller.arduino.agent.instruction.connect":"2. Connect to arduino","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"After the download is completed, it should be connected to exercise environment. If connection is unavailable, please follow the manual.\nClick the button below to read the manual.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"Go to Manual","exerciseRunner.controller.arduino.agent.instruction.close":"Close","exerciseRunner.controller.buttonGroup.button.compile":"Compile","exerciseRunner.controller.buttonGroup.button.helpRequest":"Help me","exerciseRunner.controller.buttonGroup.button.run":"Run","exerciseRunner.controller.buttonGroup.button.stop":"Stop","exerciseRunner.controller.buttonGroup.button.submit":"Submit","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"Exercise without submission","exerciseRunner.controller.buttonGroup.button.syncRequest":"Sync code","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"A function to get help from AI has been added.","exerciseRunner.controller.runningInfo.error.fetch":"An error occurred while fetching running info","exerciseRunner.controller.runningInfo.lastRunningDatetime":"Last running datetime","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"Last submit datetime","exerciseRunner.controller.runningInfo.lastSubmitScore":"Last submit score","exerciseRunner.controller.runningInfo.score":"{score}","exerciseRunner.controller.statusMessage.closed":"Editor disconnected","exerciseRunner.controller.statusMessage.connecting":"Connecting to editor...","exerciseRunner.controller.statusMessage.open":"Editor connected","exerciseRunner.controller.timer.runningRemainingTime":"Remaining: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"OK","exerciseRunner.submitErrorDialog.action.reload":"Reload page","exerciseRunner.submitErrorDialog.body.commonError":"An error occurred while running the code.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"You have exceeded the allowed number of lab submissions.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"The exercise image has been updated.\nPlease refresh and try again.","exerciseRunner.submitErrorDialog.body.networkError":"An error occurred while running the code.\nPlease refresh and try again.\nIf the problem persists, please check the network status.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"This exercise is not allowed to be submitted.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"The exercise room is being prepared.\nPlease try again later.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"The exercise room is running.\nPlease wait a moment.","exerciseRunner.submitErrorDialog.body.unknown":"An error occurred while running the code.\nPlease try again later.","exerciseRunner.submitErrorDialog.title":"Unable to run the code"};
2
2
 
3
3
  export { phrasesEn as default };
@@ -1,3 +1,3 @@
1
- var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"헬피에게 질문하기","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"궁금한 사항을 질문해 보세요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
1
+ var phrasesKo = {"exerciseRunner.controller.arduino.connectionStatus.connected":"아두이노 기기 연결됨","exerciseRunner.controller.arduino.connectionStatus.connectedDevice":"{device} 연결됨","exerciseRunner.controller.arduino.connectionStatus.connecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.disconnected":"엘리스 아두이노 에이전트 연결 끊김","exerciseRunner.controller.arduino.connectionStatus.noDevice":"연결된 기기 없음","exerciseRunner.controller.arduino.connectionStatus.reconnecting":"엘리스 아두이노 에이전트 연결 중","exerciseRunner.controller.arduino.connectionStatus.uploading":"업로드 중","exerciseRunner.controller.arduino.agent.title":"에이전트 연결","exerciseRunner.controller.arduino.agent.instruction.install":"1. 엘리스 아두이노 에이전트 설치하기","exerciseRunner.controller.arduino.agent.instruction.install.detail":"아두이노와 연결하기 위해 ‘엘리스 아두이노 에이전트'를 설치해주세요.","exerciseRunner.controller.arduino.agent.instruction.install.window":"Windows 용 설치","exerciseRunner.controller.arduino.agent.instruction.install.mac":"MacOS 용 설치","exerciseRunner.controller.arduino.agent.instruction.connect":"2. 연결하기","exerciseRunner.controller.arduino.agent.instruction.connect.detail":"다운로드를 완료하였다면 실습 환경과 연결이 필요합니다. 연결되지 않을 경우 매뉴얼을 확인하세요.\n아래 버튼을 클릭해 매뉴얼을 확인하실 수 있습니다.","exerciseRunner.controller.arduino.agent.instruction.connect.button":"매뉴얼 이동","exerciseRunner.controller.arduino.agent.instruction.close":"닫기","exerciseRunner.controller.buttonGroup.button.compile":"컴파일","exerciseRunner.controller.buttonGroup.button.helpRequest":"도와주세요","exerciseRunner.controller.buttonGroup.button.run":"실행","exerciseRunner.controller.buttonGroup.button.stop":"정지","exerciseRunner.controller.buttonGroup.button.submit":"제출","exerciseRunner.controller.buttonGroup.button.submit.tooltip.noSubmit":"실행만 가능한 실습입니다.","exerciseRunner.controller.buttonGroup.button.syncRequest":"코드 동기화","exerciseRunner.controller.buttonGroup.button.tooltip.aiHelp":"AI에게 도움받기 기능이 추가되었어요.","exerciseRunner.controller.runningInfo.error.fetch":"최종 실행 내역을 가져오는데 문제가 발생하였습니다.","exerciseRunner.controller.runningInfo.lastRunningDatetime":"최종 실행 시간","exerciseRunner.controller.runningInfo.lastSubmitDatetime":"최종 제출 시간","exerciseRunner.controller.runningInfo.lastSubmitScore":"최종 제출 점수","exerciseRunner.controller.runningInfo.score":"{score} 점","exerciseRunner.controller.statusMessage.closed":"에디터 연결 끊김","exerciseRunner.controller.statusMessage.connecting":"에디터 연결 중...","exerciseRunner.controller.statusMessage.open":"에디터 연결됨","exerciseRunner.controller.timer.runningRemainingTime":"실행 제한시간: {remainingTime}","exerciseRunner.submitErrorDialog.action.confirm":"확인","exerciseRunner.submitErrorDialog.action.reload":"새로고침","exerciseRunner.submitErrorDialog.body.commonError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.exceedSubmitGradeLimit":"실습 제출 허용 횟수를 초과했습니다.","exerciseRunner.submitErrorDialog.body.expiredExerciseImage":"실습환경이 업데이트 되었습니다.\n새로고침 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.networkError":"코드 실행 중 오류가 발생했습니다.\n새로고침 후 다시 시도해주세요.\n문제가 계속되면 네트워크 상태를 확인해주세요.","exerciseRunner.submitErrorDialog.body.notForSubmitGrade":"제출이 허용되지 않은 실습입니다.","exerciseRunner.submitErrorDialog.body.notPreparedRoom":"실습환경이 준비 중입니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.body.roomIsBusy":"실습을 실행하고 있습니다.\n잠시만 기다려주세요.","exerciseRunner.submitErrorDialog.body.unknown":"코드 실행 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.","exerciseRunner.submitErrorDialog.title":"실습을 실행할 수 없습니다"};
2
2
 
3
3
  export { phrasesKo as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elice/material-exercise",
3
- "version": "1.230516.0-helpidialogue.1",
3
+ "version": "1.230516.0",
4
4
  "description": "User view and editing components of Elice material exercise",
5
5
  "repository": "https://git.elicer.io/elice/frontend/library/elice-material",
6
6
  "license": "UNLICENSED",
@@ -29,14 +29,14 @@
29
29
  "clean": "del-cli \"es/*\" \"cjs/*\" \"dist/*\""
30
30
  },
31
31
  "peerDependencies": {
32
- "@elice/api-client": "^1.230509.0-helpidialogue.2",
33
- "@elice/blocks": "^1.230515.0-helpidialogue.1",
32
+ "@elice/api-client": "^1.230413.0",
33
+ "@elice/blocks": "^1.220803.0",
34
34
  "@elice/design-tokens": "^1.220803.0",
35
35
  "@elice/icons": "^1.220803.0",
36
36
  "@elice/markdown": "^1.220803.0",
37
37
  "@elice/material-shared-types": "*",
38
38
  "@elice/material-shared-utils": "*",
39
- "@elice/types": "1.230509.0-helpidialogue.3",
39
+ "@elice/types": "^1.230417.0",
40
40
  "@elice/websocket": "^1.220803.0",
41
41
  "humps": "^2.0.1",
42
42
  "lodash": "^4.17.21",
@@ -74,14 +74,14 @@
74
74
  "xterm-addon-fit": "^0.5.0"
75
75
  },
76
76
  "devDependencies": {
77
- "@elice/api-client": "^1.230509.0-helpidialogue.2",
78
- "@elice/blocks": "^1.230515.0-helpidialogue.1",
77
+ "@elice/api-client": "^1.230413.0",
78
+ "@elice/blocks": "^1.220803.0",
79
79
  "@elice/design-tokens": "^1.220803.0",
80
80
  "@elice/icons": "^1.220803.0",
81
81
  "@elice/markdown": "^1.220803.0",
82
- "@elice/material-shared-types": "1.230504.0",
83
- "@elice/material-shared-utils": "1.230504.0",
84
- "@elice/types": "1.230509.0-helpidialogue.3",
82
+ "@elice/material-shared-types": "1.230516.0",
83
+ "@elice/material-shared-utils": "1.230516.0",
84
+ "@elice/types": "^1.230417.0",
85
85
  "@elice/websocket": "^1.220803.0",
86
86
  "@types/classnames": "^2.3.1",
87
87
  "@types/color": "^3.0.3",
@@ -102,5 +102,5 @@
102
102
  "recoil": "^0.6.1",
103
103
  "styled-components": "^5.2.0"
104
104
  },
105
- "gitHead": "80c1a47908b6b3eb8f12206815625bcee10a4a9d"
105
+ "gitHead": "25ce2729a6fe7ea386fb77736edbab0590ae44a0"
106
106
  }