@elice/material-exercise 1.231107.0-gstta.0 → 1.231127.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 (87) hide show
  1. package/cjs/components/material-exercise/MaterialExercise.js +46 -2
  2. package/cjs/components/material-exercise/MaterialExercise.styled.js +2 -1
  3. package/cjs/components/material-exercise/context/ExerciseIntlProvider.js +17 -0
  4. package/cjs/components/material-exercise/context/ExerciseProviderNoImage.js +17 -5
  5. package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +163 -0
  6. package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +41 -0
  7. package/cjs/components/material-exercise/exercise-code-history/locales/en.json.js +7 -0
  8. package/cjs/components/material-exercise/exercise-code-history/locales/ko.json.js +7 -0
  9. package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +99 -0
  10. package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.en.json.js +7 -0
  11. package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.ko.json.js +7 -0
  12. package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.js +47 -0
  13. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +39 -0
  14. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +146 -0
  15. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +146 -0
  16. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuReset.js +105 -0
  17. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +202 -0
  18. package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +61 -0
  19. package/cjs/components/material-exercise/exercise-menu/locales/en.json.js +7 -0
  20. package/cjs/components/material-exercise/exercise-menu/locales/ko.json.js +7 -0
  21. package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +66 -0
  22. package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +18 -0
  23. package/cjs/components/material-exercise/exercise-room/ExerciseRoom.js +41 -0
  24. package/cjs/components/material-exercise/exercise-room/ExerciseRoom.styled.js +46 -0
  25. package/cjs/components/material-exercise/exercise-room/ExerciseRoomDetail.js +592 -0
  26. package/cjs/components/material-exercise/exercise-room/ExerciseRoomList.js +224 -0
  27. package/cjs/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +30 -0
  28. package/cjs/components/material-exercise/exercise-room/locales/en.json.js +7 -0
  29. package/cjs/components/material-exercise/exercise-room/locales/ko.json.js +7 -0
  30. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +451 -0
  31. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +45 -0
  32. package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +115 -0
  33. package/cjs/components/material-exercise/exercise-submit-history/locales/en.json.js +7 -0
  34. package/cjs/components/material-exercise/exercise-submit-history/locales/ko.json.js +7 -0
  35. package/cjs/components/shared/exercise-version-list/ExerciseVersionList.js +17 -0
  36. package/cjs/components/shared/exercise-version-list/ExerciseVersionList.styled.js +16 -0
  37. package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.js +24 -0
  38. package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +33 -0
  39. package/cjs/components/shared/material-modal/MaterialModal.js +39 -0
  40. package/cjs/components/shared/material-modal/MaterialModal.styled.js +33 -0
  41. package/cjs/constants/arduino.js +4 -2
  42. package/cjs/hooks/useExerciseFile.js +17 -0
  43. package/cjs/hooks/useUsercodeHistory.js +172 -0
  44. package/es/components/material-exercise/MaterialExercise.js +49 -5
  45. package/es/components/material-exercise/MaterialExercise.styled.js +2 -2
  46. package/es/components/material-exercise/context/ExerciseIntlProvider.js +18 -2
  47. package/es/components/material-exercise/context/ExerciseProviderNoImage.js +17 -5
  48. package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +154 -0
  49. package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +26 -0
  50. package/es/components/material-exercise/exercise-code-history/locales/en.json.js +3 -0
  51. package/es/components/material-exercise/exercise-code-history/locales/ko.json.js +3 -0
  52. package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +90 -0
  53. package/es/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.en.json.js +3 -0
  54. package/es/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.ko.json.js +3 -0
  55. package/es/components/material-exercise/exercise-menu/ExerciseMenu.js +38 -0
  56. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +31 -0
  57. package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +138 -0
  58. package/es/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +138 -0
  59. package/es/components/material-exercise/exercise-menu/ExerciseMenuReset.js +97 -0
  60. package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +194 -0
  61. package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +42 -0
  62. package/es/components/material-exercise/exercise-menu/locales/en.json.js +3 -0
  63. package/es/components/material-exercise/exercise-menu/locales/ko.json.js +3 -0
  64. package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +58 -0
  65. package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +10 -0
  66. package/es/components/material-exercise/exercise-room/ExerciseRoom.js +33 -0
  67. package/es/components/material-exercise/exercise-room/ExerciseRoom.styled.js +32 -0
  68. package/es/components/material-exercise/exercise-room/ExerciseRoomDetail.js +582 -0
  69. package/es/components/material-exercise/exercise-room/ExerciseRoomList.js +215 -0
  70. package/es/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +26 -0
  71. package/es/components/material-exercise/exercise-room/locales/en.json.js +3 -0
  72. package/es/components/material-exercise/exercise-room/locales/ko.json.js +3 -0
  73. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +442 -0
  74. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +30 -0
  75. package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +106 -0
  76. package/es/components/material-exercise/exercise-submit-history/locales/en.json.js +3 -0
  77. package/es/components/material-exercise/exercise-submit-history/locales/ko.json.js +3 -0
  78. package/es/components/shared/exercise-version-list/ExerciseVersionList.js +9 -0
  79. package/es/components/shared/exercise-version-list/ExerciseVersionList.styled.js +8 -0
  80. package/es/components/shared/exercise-version-list/ExerciseVersionListItem.js +16 -0
  81. package/es/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +22 -0
  82. package/es/components/shared/material-modal/MaterialModal.js +31 -0
  83. package/es/components/shared/material-modal/MaterialModal.styled.js +21 -0
  84. package/es/constants/arduino.js +2 -1
  85. package/es/hooks/useExerciseFile.js +18 -2
  86. package/es/hooks/useUsercodeHistory.js +168 -0
  87. package/package.json +4 -4
@@ -6,11 +6,13 @@ var React = require('react');
6
6
  var reactIntl = require('react-intl');
7
7
  var apiClient = require('@elice/api-client');
8
8
  var blocks = require('@elice/blocks');
9
+ var icons = require('@elice/icons');
9
10
  var materialSharedUtils = require('@elice/material-shared-utils');
10
11
  var recoil = require('recoil');
11
12
  var stylesheets = require('../../constants/stylesheets.js');
13
+ var ExerciseFileTabsFileTreeButton = require('./exercise-file-tabs/ExerciseFileTabsFileTreeButton.js');
12
14
  var recoil$1 = require('./context/recoil.js');
13
- require('./context/context.js');
15
+ var context = require('./context/context.js');
14
16
  var recoilTypes = require('./context/recoilTypes.js');
15
17
  var subjects = require('./context/subjects.js');
16
18
  var ExerciseProvider = require('./context/ExerciseProvider.js');
@@ -19,6 +21,9 @@ require('./exercise-file-tabs/ExerciseFileTabs.js');
19
21
  var ExerciseFileTabsLazy = require('./exercise-file-tabs/ExerciseFileTabsLazy.js');
20
22
  require('./exercise-file-tree/ExerciseFileTree.js');
21
23
  var ExerciseFileTreeLazy = require('./exercise-file-tree/ExerciseFileTreeLazy.js');
24
+ var ExerciseMenu = require('./exercise-menu/ExerciseMenu.js');
25
+ require('react-use');
26
+ var ExerciseMultilangDropdownLazy = require('./exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js');
22
27
  var ExercisePreview = require('./exercise-preview/ExercisePreview.js');
23
28
  var ExerciseRightpane = require('./exercise-rightpane/ExerciseRightpane.js');
24
29
  var ExerciseRunner = require('./exercise-runner/ExerciseRunner.js');
@@ -36,6 +41,9 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
36
41
  * Material exercise.
37
42
  */
38
43
  var MaterialExercise = React.forwardRef(function (props, ref) {
44
+ var intl = reactIntl.useIntl();
45
+ var _React$useContext = React__default["default"].useContext(context.ExerciseContext),
46
+ onReferenceDocsToggle = _React$useContext.onReferenceDocsToggle;
39
47
  var _useRecoilValue = recoil.useRecoilValue(recoil$1.exerciseContainerSizeState),
40
48
  width = _useRecoilValue.width,
41
49
  height = _useRecoilValue.height;
@@ -56,12 +64,48 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
56
64
  resizeHandles: ['e']
57
65
  }), React__default["default"].createElement(MaterialExercise_styled.StyledExerciseFileTreeWrap, null, React__default["default"].createElement(ExerciseFileTreeLazy["default"], null))));
58
66
  };
67
+ /**
68
+ * File tree toggle button
69
+ */
70
+ var renderExerciseFileTreeButton = function renderExerciseFileTreeButton() {
71
+ return React__default["default"].createElement(ExerciseFileTabsFileTreeButton["default"], null);
72
+ };
59
73
  /**
60
74
  * File tabs
61
75
  */
62
76
  var renderExerciseFileTabs = function renderExerciseFileTabs() {
63
77
  return React__default["default"].createElement(MaterialExercise_styled.StyledExerciseTabsWrap, null, React__default["default"].createElement(ExerciseFileTabsLazy["default"], null));
64
78
  };
79
+ /**
80
+ * reference docs toggle button
81
+ */
82
+ var renderExerciseReferenceDocsToggleButton = function renderExerciseReferenceDocsToggleButton() {
83
+ if (typeof onReferenceDocsToggle !== 'function') {
84
+ return null;
85
+ }
86
+ return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(blocks.Button, {
87
+ size: "micro",
88
+ role: "navy3",
89
+ style: {
90
+ width: '100%'
91
+ },
92
+ onClick: onReferenceDocsToggle
93
+ }, React__default["default"].createElement(blocks.Icon, {
94
+ icon: icons.eilClassroom
95
+ }), React__default["default"].createElement(blocks.Hspace, {
96
+ width: 0.25
97
+ }), intl.formatMessage({
98
+ id: 'materialExercise.button.referenceDocs'
99
+ })), React__default["default"].createElement(blocks.Hspace, {
100
+ width: 0.5
101
+ }));
102
+ };
103
+ /**
104
+ * Menu
105
+ */
106
+ var renderExerciseMenu = function renderExerciseMenu() {
107
+ return React__default["default"].createElement(MaterialExercise_styled.StyledExerciseTabMenuWrap, null, renderExerciseReferenceDocsToggleButton(), React__default["default"].createElement(ExerciseMultilangDropdownLazy["default"], null), React__default["default"].createElement(ExerciseMenu["default"], null));
108
+ };
65
109
  /**
66
110
  * Code editor and file viewer
67
111
  */
@@ -92,7 +136,7 @@ var MaterialExercise = React.forwardRef(function (props, ref) {
92
136
  if (exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig.isEditorDisabled) {
93
137
  return null;
94
138
  }
95
- return React__default["default"].createElement(MaterialExercise_styled.StyledExerciseMain, null, renderExerciseFileTree(), React__default["default"].createElement(MaterialExercise_styled.StyledExerciseFileAndTabWrap, null, React__default["default"].createElement(MaterialExercise_styled.StyledExerciseTabBar, null, renderExerciseFileTabs()), renderExerciseFile()), React__default["default"].createElement(ExerciseRightpane["default"], null));
139
+ return React__default["default"].createElement(MaterialExercise_styled.StyledExerciseMain, null, renderExerciseFileTree(), React__default["default"].createElement(MaterialExercise_styled.StyledExerciseFileAndTabWrap, null, React__default["default"].createElement(MaterialExercise_styled.StyledExerciseTabBar, null, renderExerciseFileTreeButton(), renderExerciseFileTabs(), renderExerciseMenu()), renderExerciseFile()), React__default["default"].createElement(ExerciseRightpane["default"], null));
96
140
  };
97
141
  /**
98
142
  * Exercise Runner
@@ -55,7 +55,7 @@ var StyledExerciseTabBar = styled__default["default"].div.withConfig({
55
55
  var StyledExerciseTabsWrap = styled__default["default"].div.withConfig({
56
56
  componentId: "sc-9joi7g-5"
57
57
  })(["flex:1;min-width:0;"]);
58
- styled__default["default"].div.withConfig({
58
+ var StyledExerciseTabMenuWrap = styled__default["default"].div.withConfig({
59
59
  componentId: "sc-9joi7g-6"
60
60
  })(["display:flex;justify-content:center;align-items:center;padding:0 0.5rem 0 1rem;background-color:", ";"], designTokens.base.color.navy8);
61
61
  // ========== Exercise FileTree ==========
@@ -81,5 +81,6 @@ exports.StyledExerciseFileWrap = StyledExerciseFileWrap;
81
81
  exports.StyledExerciseMain = StyledExerciseMain;
82
82
  exports.StyledExerciseRunnerWrap = StyledExerciseRunnerWrap;
83
83
  exports.StyledExerciseTabBar = StyledExerciseTabBar;
84
+ exports.StyledExerciseTabMenuWrap = StyledExerciseTabMenuWrap;
84
85
  exports.StyledExerciseTabsWrap = StyledExerciseTabsWrap;
85
86
  exports.StyledxerciseFileTreeContaner = StyledxerciseFileTreeContaner;
@@ -27,5 +27,22 @@ var withExerciseIntlProvider = function withExerciseIntlProvider(Component, phra
27
27
  });
28
28
  };
29
29
  };
30
+ /**
31
+ *
32
+ */
33
+ var withForwardRefExerciseIntlProvider = function withForwardRefExerciseIntlProvider(Component, phrases) {
34
+ return React.forwardRef(function (props, ref) {
35
+ var _useContext2 = React.useContext(context.ExerciseContext),
36
+ locale = _useContext2.locale;
37
+ return React__default["default"].createElement(materialSharedUtils.MaterialIntlProvider, {
38
+ children: React__default["default"].createElement(Component, Object.assign({}, props, {
39
+ ref: ref
40
+ })),
41
+ locale: locale,
42
+ phrases: phrases
43
+ });
44
+ });
45
+ };
30
46
 
31
47
  exports.withExerciseIntlProvider = withExerciseIntlProvider;
48
+ exports.withForwardRefExerciseIntlProvider = withForwardRefExerciseIntlProvider;
@@ -26,6 +26,22 @@ var ExerciseProviderNoImage = function ExerciseProviderNoImage(_ref) {
26
26
  buttonText = _ref.buttonText,
27
27
  onButtonClick = _ref.onButtonClick;
28
28
  var intl = reactIntl.useIntl();
29
+ /**
30
+ * render action button
31
+ */
32
+ var renderActionButton = function renderActionButton() {
33
+ if (typeof onButtonClick !== 'function') {
34
+ return null;
35
+ }
36
+ return React__default["default"].createElement(blocks.Button, {
37
+ onClick: onButtonClick
38
+ }, buttonText || intl.formatMessage({
39
+ id: 'exerciseContext.provider.noImage.button'
40
+ }));
41
+ };
42
+ //
43
+ //
44
+ //
29
45
  return React__default["default"].createElement(StyledProviderNoImage, null, React__default["default"].createElement(blocks.SafeImage, {
30
46
  src: imageSrc,
31
47
  defaultSrc: "https://static.elice.io/elice-material/exercise/empty-code-purple.png",
@@ -40,11 +56,7 @@ var ExerciseProviderNoImage = function ExerciseProviderNoImage(_ref) {
40
56
  role: "white"
41
57
  }, text || intl.formatMessage({
42
58
  id: 'exerciseContext.provider.noImage.title'
43
- }))), React__default["default"].createElement(blocks.Button, {
44
- onClick: onButtonClick
45
- }, buttonText || intl.formatMessage({
46
- id: 'exerciseContext.provider.noImage.button'
47
- })));
59
+ }))), renderActionButton());
48
60
  };
49
61
  //
50
62
  //
@@ -0,0 +1,163 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var reactIntl = require('react-intl');
7
+ var blocks = require('@elice/blocks');
8
+ var dayjs = require('dayjs');
9
+ var recoil = require('recoil');
10
+ var ExerciseVersionList = require('../../shared/exercise-version-list/ExerciseVersionList.js');
11
+ var ExerciseVersionListItem = require('../../shared/exercise-version-list/ExerciseVersionListItem.js');
12
+ var MaterialModal = require('../../shared/material-modal/MaterialModal.js');
13
+ var MonacoEditorLazy = require('../../shared/monaco-editor/MonacoEditorLazy.js');
14
+ require('../../shared/monaco-editor/MonacoEditorPerferenceForm.js');
15
+ require('monaco-editor/esm/vs/editor/editor.api');
16
+ require('../../shared/monaco-editor/constants/monaco/preferences.js');
17
+ require('react-use');
18
+ require('socket.io-client');
19
+ var recoil$1 = require('../context/recoil.js');
20
+ var context = require('../context/context.js');
21
+ require('../context/recoilTypes.js');
22
+ require('../context/subjects.js');
23
+ require('../context/ExerciseProvider.js');
24
+ require('../../../constants/arduino.js');
25
+ require('@elice/api-client');
26
+ require('@elice/material-shared-utils');
27
+ require('@elice/websocket');
28
+ require('humps');
29
+ var useUsercodeHistory = require('../../../hooks/useUsercodeHistory.js');
30
+ require('lodash/debounce');
31
+ require('ot-text-unicode');
32
+ require('random-words');
33
+ require('unicount');
34
+ var ExerciseIntlProvider = require('../context/ExerciseIntlProvider.js');
35
+ var en = require('./locales/en.json.js');
36
+ var ko = require('./locales/ko.json.js');
37
+ var ExerciseCodeHistory_styled = require('./ExerciseCodeHistory.styled.js');
38
+
39
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
40
+
41
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
42
+ var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
43
+
44
+ var ExerciseCodeHistory = function ExerciseCodeHistory(_ref) {
45
+ var onHide = _ref.onHide,
46
+ onLoadVersionButtonClick = _ref.onLoadVersionButtonClick;
47
+ var intl = reactIntl.useIntl();
48
+ var _React$useContext = React__default["default"].useContext(context.ExerciseContext),
49
+ exerciseRoomId = _React$useContext.exerciseRoomId;
50
+ var activeFilename = recoil.useRecoilValue(recoil$1.exerciseActiveFilenameState);
51
+ var preference = recoil.useRecoilValue(recoil$1.exerciseEditorPreferenceState);
52
+ var _useUsercodeHistory = useUsercodeHistory.useUsercodeHistory(exerciseRoomId, activeFilename),
53
+ doc = _useUsercodeHistory.doc,
54
+ ops = _useUsercodeHistory.ops,
55
+ version = _useUsercodeHistory.version,
56
+ latestVersion = _useUsercodeHistory.latestVersion,
57
+ hasMoreVersion = _useUsercodeHistory.hasMoreVersion,
58
+ changeVersion = _useUsercodeHistory.changeVersion,
59
+ loadMoreVersions = _useUsercodeHistory.loadMoreVersions;
60
+ /**
61
+ *
62
+ */
63
+ var renderVersionList = function renderVersionList() {
64
+ return React__default["default"].createElement(ExerciseVersionList["default"], null, ops.map(function (op) {
65
+ return React__default["default"].createElement(ExerciseVersionListItem["default"], {
66
+ key: op.version,
67
+ selected: version === op.version,
68
+ onClick: function onClick() {
69
+ changeVersion(op.version);
70
+ }
71
+ }, React__default["default"].createElement(blocks.Text, {
72
+ role: "gray3",
73
+ size: "small"
74
+ }, intl.formatMessage({
75
+ id: 'exerciseCodeHistory.op.version'
76
+ }, {
77
+ version: op.version,
78
+ datetime: dayjs__default["default"](op.createdDatetime).format('YYYY.M.DD hh:mm a')
79
+ })));
80
+ }), hasMoreVersion ? React__default["default"].createElement(ExerciseVersionListItem["default"], {
81
+ onClick: loadMoreVersions,
82
+ style: {
83
+ justifyContent: 'center'
84
+ }
85
+ }, React__default["default"].createElement(blocks.Text, {
86
+ role: "white",
87
+ size: "small"
88
+ }, intl.formatMessage({
89
+ id: 'exerciseCodeHistory.button.load.more'
90
+ }))) : null);
91
+ };
92
+ /**
93
+ *
94
+ */
95
+ var rednerVersionControlColumn = function rednerVersionControlColumn() {
96
+ return React__default["default"].createElement(ExerciseCodeHistory_styled.StyledVersionsWrapper, null, React__default["default"].createElement(ExerciseCodeHistory_styled.StyledVersionRangeInputWrapper, null, React__default["default"].createElement(ExerciseCodeHistory_styled.StyledVersionRangeInput, {
97
+ type: "range",
98
+ min: latestVersion ? latestVersion - ops.length + 1 : 0,
99
+ max: latestVersion !== null && latestVersion !== void 0 ? latestVersion : 0,
100
+ value: version !== null && version !== void 0 ? version : 0,
101
+ onChange: function onChange(e) {
102
+ changeVersion(parseInt(e.target.value, 10));
103
+ }
104
+ })), renderVersionList());
105
+ };
106
+ /**
107
+ *
108
+ */
109
+ var renderEditorColumn = function renderEditorColumn() {
110
+ if (!activeFilename) {
111
+ return null;
112
+ }
113
+ var uniqueFilePath = "code-history/".concat(exerciseRoomId, "/v").concat(version !== null && version !== void 0 ? version : 0);
114
+ var editorFilename = "".concat(uniqueFilePath, "/").concat(activeFilename);
115
+ return React__default["default"].createElement(ExerciseCodeHistory_styled.StyledEditorWrapper, null, React__default["default"].createElement(ExerciseCodeHistory_styled.StyledFileNameBox, {
116
+ role: "white"
117
+ }, activeFilename), React__default["default"].createElement(MonacoEditorLazy["default"], {
118
+ key: editorFilename,
119
+ defaultValue: doc,
120
+ filename: editorFilename,
121
+ preference: Object.assign(Object.assign({}, preference), {
122
+ readOnly: true,
123
+ scrollBeyondLastLine: false
124
+ })
125
+ }));
126
+ };
127
+ /**
128
+ *
129
+ */
130
+ var renderFooterButton = function renderFooterButton() {
131
+ if (typeof onLoadVersionButtonClick !== 'function') {
132
+ return;
133
+ }
134
+ return React__default["default"].createElement(blocks.Button, {
135
+ size: "small",
136
+ role: "primary",
137
+ onClick: function onClick() {
138
+ onLoadVersionButtonClick(doc);
139
+ }
140
+ }, intl.formatMessage({
141
+ id: 'exerciseCodeHistory.button.load.selectedVersions'
142
+ }));
143
+ };
144
+ //
145
+ //
146
+ //
147
+ return React__default["default"].createElement(MaterialModal["default"], {
148
+ title: intl.formatMessage({
149
+ id: 'exerciseCodeHistory.title'
150
+ }),
151
+ onHide: onHide,
152
+ footer: renderFooterButton()
153
+ }, React__default["default"].createElement(ExerciseCodeHistory_styled.StyledModalContent, null, rednerVersionControlColumn(), renderEditorColumn()));
154
+ };
155
+ //
156
+ //
157
+ //
158
+ var ExerciseCodeHistory$1 = ExerciseIntlProvider.withExerciseIntlProvider(ExerciseCodeHistory, {
159
+ en: en["default"],
160
+ ko: ko["default"]
161
+ });
162
+
163
+ exports["default"] = ExerciseCodeHistory$1;
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var blocks = require('@elice/blocks');
6
+ var designTokens = require('@elice/design-tokens');
7
+ var styled = require('styled-components');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
12
+
13
+ var cssInputRangeTrack = styled.css(["width:100%;height:0.375rem;cursor:pointer;transition:all 0.2s ease;"]);
14
+ var cssInputRangeThumb = styled.css(["height:1rem;width:1rem;border-radius:50%;background:", ";cursor:pointer;"], designTokens.base.color.primary6);
15
+ var StyledModalContent = styled__default["default"](blocks.Flex).withConfig({
16
+ componentId: "sc-1auppml-0"
17
+ })(["position:absolute;width:100%;height:100%;overflow:hidden;"]);
18
+ var StyledVersionRangeInput = styled__default["default"].input.withConfig({
19
+ componentId: "sc-1auppml-1"
20
+ })(["-webkit-appearance:none;margin:0.5rem 0;width:100%;cursor:pointer;&:focus{outline:none;}&::-webkit-slider-runnable-track{background:", ";", ";}&::-webkit-slider-thumb{-webkit-appearance:none;margin-top:calc((0.375rem - 1rem) / 2);", ";}&:focus::-webkit-slider-runnable-track{background:rgba(", ",0.05);}&::-moz-range-track{background:", ";", ";}&::-moz-range-thumb{", ";}"], designTokens.base.color.navy9, cssInputRangeTrack, cssInputRangeThumb, designTokens.base.color.navy9, designTokens.base.color.navy9, cssInputRangeTrack, cssInputRangeThumb);
21
+ var StyledVersionsWrapper = styled__default["default"](blocks.Flex).withConfig({
22
+ componentId: "sc-1auppml-2"
23
+ })(["flex-direction:column;flex:1 1.75 25rem;position:relative;height:100%;border-right:1px solid ", ";"], designTokens.base.color.navy9);
24
+ var StyledVersionRangeInputWrapper = styled__default["default"](blocks.Flex).withConfig({
25
+ componentId: "sc-1auppml-3"
26
+ })(["height:3rem;padding:1rem;border-bottom:1px solid ", ";"], designTokens.base.color.navy9);
27
+ var StyledEditorWrapper = styled__default["default"](blocks.Flex).withConfig({
28
+ componentId: "sc-1auppml-4"
29
+ })(["flex-direction:column;flex:1 1 auto;width:100%;height:100%;overflow:scroll;"]);
30
+ var StyledFileNameBox = styled__default["default"](blocks.Text).withConfig({
31
+ componentId: "sc-1auppml-5"
32
+ })(["min-height:3rem;height:3rem;line-height:3rem;padding-left:1rem;border-bottom:1px solid ", ";"], designTokens.base.color.navy9);
33
+
34
+ exports.StyledEditorWrapper = StyledEditorWrapper;
35
+ exports.StyledFileNameBox = StyledFileNameBox;
36
+ exports.StyledModalContent = StyledModalContent;
37
+ exports.StyledVersionRangeInput = StyledVersionRangeInput;
38
+ exports.StyledVersionRangeInputWrapper = StyledVersionRangeInputWrapper;
39
+ exports.StyledVersionsWrapper = StyledVersionsWrapper;
40
+ exports.cssInputRangeThumb = cssInputRangeThumb;
41
+ exports.cssInputRangeTrack = cssInputRangeTrack;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var phrasesEn = {"exerciseCodeHistory.button.load.more":"Load more","exerciseCodeHistory.button.load.selectedVersions":"Load selected versions","exerciseCodeHistory.op.version":"Version {version} {datetime}","exerciseCodeHistory.title":"Code revision history"};
6
+
7
+ exports["default"] = phrasesEn;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var phrasesKo = {"exerciseCodeHistory.button.load.more":"더 불러오기","exerciseCodeHistory.button.load.selectedVersions":"선택 버전 불러오기","exerciseCodeHistory.op.version":"버전 {version} {datetime}","exerciseCodeHistory.title":"코드 수정 이력"};
6
+
7
+ exports["default"] = phrasesKo;
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
+ var React = require('react');
7
+ var reactIntl = require('react-intl');
8
+ var reactUse = require('react-use');
9
+ var blocks = require('@elice/blocks');
10
+ var designTokens = require('@elice/design-tokens');
11
+ var icons = require('@elice/icons');
12
+ var types = require('@elice/types');
13
+ var utils = require('@elice/utils');
14
+ var recoil = require('recoil');
15
+ var styled = require('styled-components');
16
+ var recoil$1 = require('../context/recoil.js');
17
+ var context = require('../context/context.js');
18
+ require('../context/recoilTypes.js');
19
+ require('../context/subjects.js');
20
+ require('../context/ExerciseProvider.js');
21
+ var ExerciseIntlProvider = require('../context/ExerciseIntlProvider.js');
22
+ var fileTreeButton_en = require('./locales/fileTreeButton.en.json.js');
23
+ var fileTreeButton_ko = require('./locales/fileTreeButton.ko.json.js');
24
+
25
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
+
27
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
29
+
30
+ var ICON_BUTTON_SIZE = '2.25rem';
31
+ var StyledFileTreeButton = styled__default["default"](blocks.IconButton).withConfig({
32
+ componentId: "sc-ohtsjn-0"
33
+ })(["width:", " !important;height:", " !important;border-right:1px solid ", " !important;background-color:", " !important;&:hover{background-color:", " !important;}"], ICON_BUTTON_SIZE, ICON_BUTTON_SIZE, designTokens.base.color.navy7, function (props) {
34
+ return props.active ? designTokens.base.color.navy8 : designTokens.base.color.navy8;
35
+ }, designTokens.base.color.navy9);
36
+ var ExerciseFileTabsFileTreeButton = React.forwardRef(function (_, ref) {
37
+ var intl = reactIntl.useIntl();
38
+ var _React$useContext = React__default["default"].useContext(context.ExerciseContext),
39
+ materialExerciseId = _React$useContext.materialExerciseId;
40
+ var exercise = recoil.useRecoilValue(recoil$1.exerciseState(materialExerciseId));
41
+ var _useRecoilState = recoil.useRecoilState(recoil$1.exerciseFileTreeOpenedState),
42
+ _useRecoilState2 = _rollupPluginBabelHelpers.slicedToArray(_useRecoilState, 2),
43
+ exerciseFileTreeOpened = _useRecoilState2[0],
44
+ setExerciseFileTreeOpened = _useRecoilState2[1];
45
+ /**
46
+ * Handle click.
47
+ */
48
+ var handleClick = function handleClick() {
49
+ setExerciseFileTreeOpened(function (prev) {
50
+ return !prev;
51
+ });
52
+ };
53
+ //
54
+ // apply default file tree opened state.
55
+ //
56
+ React__default["default"].useEffect(function () {
57
+ var _a;
58
+ var exerciseUiConfig = utils.eliceApiUiConfigNormalizeHelper('materialExercise', (_a = exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig) !== null && _a !== void 0 ? _a : {});
59
+ setExerciseFileTreeOpened(exerciseUiConfig.editorFileTreeDefaultStatus === types.enums.ExerciseUiConfigEditorFileTreeDefaultStatus.Open);
60
+ },
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
62
+ [exercise]);
63
+ //
64
+ //
65
+ //
66
+ var _useHover = reactUse.useHover(function (isHovering) {
67
+ return React__default["default"].createElement("div", null, React__default["default"].createElement(blocks.Tooltip, {
68
+ title: exerciseFileTreeOpened ? intl.formatMessage({
69
+ id: 'exerciseFileTab.fileTreeButton.tooltip.close'
70
+ }) : intl.formatMessage({
71
+ id: 'exerciseFileTab.fileTreeButton.tooltip.open'
72
+ }),
73
+ placement: "bottom-start"
74
+ }, React__default["default"].createElement(StyledFileTreeButton, {
75
+ icon: isHovering ? icons.eilArrowRightwardsDouble : icons.eilFolder,
76
+ iconRotate: !isHovering ? 0 : exerciseFileTreeOpened ? 180 : 0,
77
+ role: "gray3",
78
+ size: "tiny",
79
+ transparent: true,
80
+ border: false,
81
+ hasBorderRadius: false,
82
+ active: exerciseFileTreeOpened,
83
+ onClick: handleClick,
84
+ ref: ref
85
+ })));
86
+ }),
87
+ _useHover2 = _rollupPluginBabelHelpers.slicedToArray(_useHover, 1),
88
+ el = _useHover2[0];
89
+ return (exercise === null || exercise === void 0 ? void 0 : exercise.uiConfig.editorFileTreeDefaultStatus) === types.enums.ExerciseUiConfigEditorFileTreeDefaultStatus.Hide ? null : el;
90
+ });
91
+ //
92
+ //
93
+ //
94
+ var ExerciseFileTabsFileTreeButton$1 = ExerciseIntlProvider.withForwardRefExerciseIntlProvider(ExerciseFileTabsFileTreeButton, {
95
+ en: fileTreeButton_en["default"],
96
+ ko: fileTreeButton_ko["default"]
97
+ });
98
+
99
+ exports["default"] = ExerciseFileTabsFileTreeButton$1;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var phrasesEn = {"exerciseFileTab.fileTreeButton.tooltip.close":"Close Filetree","exerciseFileTab.fileTreeButton.tooltip.open":"Open Filetree"};
6
+
7
+ exports["default"] = phrasesEn;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var phrasesKo = {"exerciseFileTab.fileTreeButton.tooltip.close":"파일 트리 닫기","exerciseFileTab.fileTreeButton.tooltip.open":"파일 트리 열기"};
6
+
7
+ exports["default"] = phrasesKo;
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var designTokens = require('@elice/design-tokens');
7
+ var types = require('@elice/types');
8
+ var recoil = require('recoil');
9
+ var styled = require('styled-components');
10
+ var recoil$1 = require('../context/recoil.js');
11
+ var context = require('../context/context.js');
12
+ require('../context/recoilTypes.js');
13
+ require('../context/subjects.js');
14
+ require('../context/ExerciseProvider.js');
15
+ var ExerciseIntlProvider = require('../context/ExerciseIntlProvider.js');
16
+ var en = require('./locales/en.json.js');
17
+ var ko = require('./locales/ko.json.js');
18
+ var ExerciseMenuArduinoAgentModalButton = require('./ExerciseMenuArduinoAgentModalButton.js');
19
+ var ExerciseMenuArduinoSettings = require('./ExerciseMenuArduinoSettings.js');
20
+ var ExerciseMenuDropdown = require('./ExerciseMenuDropdown.js');
21
+ var ExerciseMenuReset = require('./ExerciseMenuReset.js');
22
+ var ExerciseMenuStdioFileBrowser = require('./ExerciseMenuStdioFileBrowser.js');
23
+
24
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
+
26
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
27
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
28
+
29
+ var StyledExerciseMenuWrapper = styled__default["default"].div.withConfig({
30
+ componentId: "sc-1gf6m87-0"
31
+ })(["display:flex;justify-content:center;align-items:center;padding:0 0.5rem 0 1rem;height:2.25rem;gap:0.5rem;background-color:", ";"], designTokens.base.color.navy8);
32
+ var ExerciseMenu = function ExerciseMenu() {
33
+ var _React$useContext = React__default["default"].useContext(context.ExerciseContext),
34
+ materialExerciseId = _React$useContext.materialExerciseId;
35
+ var exercise = recoil.useRecoilValue(recoil$1.exerciseState(materialExerciseId));
36
+ var isArduinoExercise = (exercise === null || exercise === void 0 ? void 0 : exercise.envType) === types.enums.ExerciseEnvType.Arduino;
37
+ //
38
+ //
39
+ //
40
+ return React__default["default"].createElement(StyledExerciseMenuWrapper, null, isArduinoExercise ? React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(ExerciseMenuArduinoAgentModalButton["default"], null), React__default["default"].createElement(ExerciseMenuArduinoSettings["default"], null)) : React__default["default"].createElement(ExerciseMenuStdioFileBrowser["default"], null), React__default["default"].createElement(ExerciseMenuReset["default"], null), React__default["default"].createElement(ExerciseMenuDropdown["default"], null));
41
+ };
42
+ var ExerciseMenu$1 = ExerciseIntlProvider.withExerciseIntlProvider(ExerciseMenu, {
43
+ en: en["default"],
44
+ ko: ko["default"]
45
+ });
46
+
47
+ exports["default"] = ExerciseMenu$1;
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var reactIntl = require('react-intl');
7
+ var blocks = require('@elice/blocks');
8
+ var icons = require('@elice/icons');
9
+ var recoil = require('recoil');
10
+ var recoil$1 = require('../context/recoil.js');
11
+ require('../context/context.js');
12
+ require('../context/recoilTypes.js');
13
+ require('../context/subjects.js');
14
+ require('../context/ExerciseProvider.js');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
+
18
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
19
+
20
+ var ExerciseMenuArduinoAgentModalButton = function ExerciseMenuArduinoAgentModalButton() {
21
+ var setOpen = recoil.useSetRecoilState(recoil$1.exerciseArduinoAgentModalState);
22
+ var handleClick = function handleClick() {
23
+ setOpen(true);
24
+ };
25
+ return React__default["default"].createElement(blocks.Button, {
26
+ size: "micro",
27
+ role: "warning",
28
+ icon: React__default["default"].createElement(blocks.Icon, {
29
+ icon: icons.eilStatusDanger
30
+ }),
31
+ iconAlign: "left",
32
+ border: false,
33
+ onClick: handleClick
34
+ }, React__default["default"].createElement(reactIntl.FormattedMessage, {
35
+ id: "exerciseMenu.arduino.agent.button"
36
+ }));
37
+ };
38
+
39
+ exports["default"] = ExerciseMenuArduinoAgentModalButton;