@elice/material-runbox 1.260820.1 → 1.260825.0-runboxusability.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.
- package/cjs/components/material-runbox/MaterialRunboxContent.js +1 -2
- package/cjs/components/material-runbox/MaterialRunboxHeader.js +12 -29
- package/cjs/components/material-runbox/actions/MaterialRunboxActionMenu.d.ts +3 -1
- package/cjs/components/material-runbox/actions/MaterialRunboxActionMenu.js +17 -1
- package/cjs/components/material-runbox/hooks/index.d.ts +1 -0
- package/cjs/components/material-runbox/hooks/index.js +4 -0
- package/cjs/components/material-runbox/hooks/useRunboxSessionEndWarning.d.ts +18 -0
- package/cjs/components/material-runbox/hooks/useRunboxSessionEndWarning.js +67 -0
- package/cjs/components/material-runbox/locales/en.json.js +1 -1
- package/cjs/components/material-runbox/locales/ja.json.js +1 -1
- package/cjs/components/material-runbox/locales/ko.json.js +1 -1
- package/cjs/components/material-runbox/locales/th.json.js +1 -1
- package/cjs/components/material-runbox/status/MaterialRunboxStatusButton.d.ts +18 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusButton.js +88 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusConnectionItem.d.ts +11 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusConnectionItem.js +32 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusPopover.d.ts +17 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusPopover.js +134 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusResourceItem.d.ts +11 -0
- package/cjs/components/material-runbox/status/MaterialRunboxStatusResourceItem.js +42 -0
- package/cjs/components/material-runbox/status/index.d.ts +4 -0
- package/cjs/components/material-runbox/status/index.js +9 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaAlmostEndDialog.d.ts +11 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaAlmostEndDialog.js +116 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaAmount.d.ts +13 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaAmount.js +56 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaPerSessionAlmostEndDialog.d.ts +12 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaPerSessionAlmostEndDialog.js +117 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaTimePart.d.ts +15 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxQuotaTimePart.js +50 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxTimer.d.ts +6 -0
- package/cjs/components/material-runbox/timer/MaterialRunboxTimer.js +20 -16
- package/cjs/components/material-runbox/timer/MaterialRunboxTimerDetailPopover.js +19 -81
- package/es/components/material-runbox/MaterialRunboxContent.js +1 -2
- package/es/components/material-runbox/MaterialRunboxHeader.js +13 -30
- package/es/components/material-runbox/actions/MaterialRunboxActionMenu.d.ts +3 -1
- package/es/components/material-runbox/actions/MaterialRunboxActionMenu.js +19 -3
- package/es/components/material-runbox/hooks/index.d.ts +1 -0
- package/es/components/material-runbox/hooks/index.js +1 -0
- package/es/components/material-runbox/hooks/useRunboxSessionEndWarning.d.ts +18 -0
- package/es/components/material-runbox/hooks/useRunboxSessionEndWarning.js +63 -0
- package/es/components/material-runbox/locales/en.json.js +1 -1
- package/es/components/material-runbox/locales/ja.json.js +1 -1
- package/es/components/material-runbox/locales/ko.json.js +1 -1
- package/es/components/material-runbox/locales/th.json.js +1 -1
- package/es/components/material-runbox/status/MaterialRunboxStatusButton.d.ts +18 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusButton.js +80 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusConnectionItem.d.ts +11 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusConnectionItem.js +28 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusPopover.d.ts +17 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusPopover.js +130 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusResourceItem.d.ts +11 -0
- package/es/components/material-runbox/status/MaterialRunboxStatusResourceItem.js +38 -0
- package/es/components/material-runbox/status/index.d.ts +4 -0
- package/es/components/material-runbox/status/index.js +2 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaAlmostEndDialog.d.ts +11 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaAlmostEndDialog.js +112 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaAmount.d.ts +13 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaAmount.js +52 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaPerSessionAlmostEndDialog.d.ts +12 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaPerSessionAlmostEndDialog.js +113 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaTimePart.d.ts +15 -0
- package/es/components/material-runbox/timer/MaterialRunboxQuotaTimePart.js +46 -0
- package/es/components/material-runbox/timer/MaterialRunboxTimer.d.ts +6 -0
- package/es/components/material-runbox/timer/MaterialRunboxTimer.js +19 -15
- package/es/components/material-runbox/timer/MaterialRunboxTimerDetailPopover.js +15 -77
- package/package.json +8 -8
- package/cjs/assets/runbox_logo.png.js +0 -7
- package/cjs/components/material-runbox/MaterialRunboxFooter.d.ts +0 -4
- package/cjs/components/material-runbox/MaterialRunboxFooter.js +0 -64
- package/cjs/components/material-runbox/timer/MaterialRunboxAlmostEndSnackbars.d.ts +0 -6
- package/cjs/components/material-runbox/timer/MaterialRunboxAlmostEndSnackbars.js +0 -90
- package/es/assets/runbox_logo.png.js +0 -3
- package/es/components/material-runbox/MaterialRunboxFooter.d.ts +0 -4
- package/es/components/material-runbox/MaterialRunboxFooter.js +0 -56
- package/es/components/material-runbox/timer/MaterialRunboxAlmostEndSnackbars.d.ts +0 -6
- package/es/components/material-runbox/timer/MaterialRunboxAlmostEndSnackbars.js +0 -86
|
@@ -9,6 +9,12 @@ export interface MaterialRunboxTimerProps {
|
|
|
9
9
|
* @default false
|
|
10
10
|
*/
|
|
11
11
|
hideTimerPopover?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Tutoring mode? Session-end warnings are for the learner, not for the tutor
|
|
14
|
+
* looking at their runbox.
|
|
15
|
+
* @default false
|
|
16
|
+
*/
|
|
17
|
+
isTutoring?: boolean;
|
|
12
18
|
}
|
|
13
19
|
declare const MaterialRunboxTimer: React.FC<MaterialRunboxTimerProps>;
|
|
14
20
|
export default MaterialRunboxTimer;
|
|
@@ -12,7 +12,9 @@ var muiElements = require('@elice/mui-elements');
|
|
|
12
12
|
var runboxClient = require('@elice/runbox-client');
|
|
13
13
|
var proSolidSvgIcons = require('@fortawesome/pro-solid-svg-icons');
|
|
14
14
|
var material = require('@mui/material');
|
|
15
|
-
var
|
|
15
|
+
var useRunboxSessionEndWarning = require('../hooks/useRunboxSessionEndWarning.js');
|
|
16
|
+
var MaterialRunboxQuotaAlmostEndDialog = require('./MaterialRunboxQuotaAlmostEndDialog.js');
|
|
17
|
+
var MaterialRunboxQuotaPerSessionAlmostEndDialog = require('./MaterialRunboxQuotaPerSessionAlmostEndDialog.js');
|
|
16
18
|
var MaterialRunboxTimerDetailPopover = require('./MaterialRunboxTimerDetailPopover.js');
|
|
17
19
|
var time = require('../../../utils/time.js');
|
|
18
20
|
|
|
@@ -21,10 +23,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
|
21
23
|
var _styled__default = /*#__PURE__*/_interopDefaultCompat(_styled);
|
|
22
24
|
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
23
25
|
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
var QUOTA_ALMOST_END_MINUTES = 30;
|
|
28
26
|
//
|
|
29
27
|
//
|
|
30
28
|
//
|
|
@@ -46,13 +44,21 @@ var MaterialRunboxTimer = function MaterialRunboxTimer(_ref3) {
|
|
|
46
44
|
headerElement = _ref3.headerElement,
|
|
47
45
|
stopRuntime = _ref3.stopRuntime,
|
|
48
46
|
_ref3$hideTimerPopove = _ref3.hideTimerPopover,
|
|
49
|
-
hideTimerPopover = _ref3$hideTimerPopove === void 0 ? false : _ref3$hideTimerPopove
|
|
47
|
+
hideTimerPopover = _ref3$hideTimerPopove === void 0 ? false : _ref3$hideTimerPopove,
|
|
48
|
+
_ref3$isTutoring = _ref3.isTutoring,
|
|
49
|
+
isTutoring = _ref3$isTutoring === void 0 ? false : _ref3$isTutoring;
|
|
50
50
|
var intl$1 = intl.useRawEliceIntl();
|
|
51
51
|
var _useEliceRunboxRunnin = runboxClient.useEliceRunboxRunning(),
|
|
52
52
|
status = _useEliceRunboxRunnin.status;
|
|
53
53
|
var isRunboxRunning = status === 'running';
|
|
54
54
|
var _useEliceRunboxQuota = runboxClient.useEliceRunboxQuota(),
|
|
55
55
|
quotaInfo = _useEliceRunboxQuota.quotaInfo;
|
|
56
|
+
var _useRunboxSessionEndW = useRunboxSessionEndWarning.useRunboxSessionEndWarning({
|
|
57
|
+
runboxId: runboxId,
|
|
58
|
+
disabled: isTutoring || !isRunboxRunning
|
|
59
|
+
}),
|
|
60
|
+
warning = _useRunboxSessionEndW.warning,
|
|
61
|
+
dismiss = _useRunboxSessionEndW.dismiss;
|
|
56
62
|
var _React$useState = React__default.default.useState(false),
|
|
57
63
|
_React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
|
|
58
64
|
isTimerDetailPopoverOpen = _React$useState2[0],
|
|
@@ -82,7 +88,7 @@ var MaterialRunboxTimer = function MaterialRunboxTimer(_ref3) {
|
|
|
82
88
|
var hoursString = hours.toString().padStart(2, '0');
|
|
83
89
|
var minutesString = minutes.toString().padStart(2, '0');
|
|
84
90
|
var timeString = "".concat(hoursString, " : ").concat(minutesString);
|
|
85
|
-
var isAlmostEnd = !quotaInfo.isUnlimited && quotaInfo.remainingQuota <= QUOTA_ALMOST_END_MINUTES;
|
|
91
|
+
var isAlmostEnd = !quotaInfo.isUnlimited && quotaInfo.remainingQuota <= useRunboxSessionEndWarning.QUOTA_ALMOST_END_MINUTES;
|
|
86
92
|
return jsxRuntime.jsx(material.Tooltip, {
|
|
87
93
|
arrow: true,
|
|
88
94
|
placement: "bottom",
|
|
@@ -160,19 +166,17 @@ var MaterialRunboxTimer = function MaterialRunboxTimer(_ref3) {
|
|
|
160
166
|
}
|
|
161
167
|
});
|
|
162
168
|
};
|
|
163
|
-
var renderAlmostEndSnackbars = function renderAlmostEndSnackbars() {
|
|
164
|
-
return jsxRuntime.jsx(MaterialRunboxAlmostEndSnackbars.default, {
|
|
165
|
-
runboxId: runboxId,
|
|
166
|
-
onClickDetail: function onClickDetail() {
|
|
167
|
-
return setTimerDetailPopoverOpen(true);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
};
|
|
171
169
|
if (!isRunboxRunning) {
|
|
172
170
|
return null;
|
|
173
171
|
}
|
|
174
172
|
return jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
175
|
-
children: [renderTimer(), renderTimerDetailPopover(),
|
|
173
|
+
children: [renderTimer(), renderTimerDetailPopover(), jsxRuntime.jsx(MaterialRunboxQuotaAlmostEndDialog.default, {
|
|
174
|
+
open: warning === 'quota',
|
|
175
|
+
onClose: dismiss
|
|
176
|
+
}), jsxRuntime.jsx(MaterialRunboxQuotaPerSessionAlmostEndDialog.default, {
|
|
177
|
+
open: warning === 'quotaPerSession',
|
|
178
|
+
onClose: dismiss
|
|
179
|
+
})]
|
|
176
180
|
});
|
|
177
181
|
};
|
|
178
182
|
|
|
@@ -13,13 +13,12 @@ var runboxClient = require('@elice/runbox-client');
|
|
|
13
13
|
var proRegularSvgIcons = require('@fortawesome/pro-regular-svg-icons');
|
|
14
14
|
var material = require('@mui/material');
|
|
15
15
|
var reactQuery = require('@tanstack/react-query');
|
|
16
|
-
var
|
|
16
|
+
var useRunboxSessionEndWarning = require('../hooks/useRunboxSessionEndWarning.js');
|
|
17
|
+
var MaterialRunboxQuotaAmount = require('./MaterialRunboxQuotaAmount.js');
|
|
17
18
|
|
|
18
19
|
//
|
|
19
20
|
//
|
|
20
21
|
//
|
|
21
|
-
var QUOTA_ALMOST_END_MINUTES = 30;
|
|
22
|
-
var QUOTA_PER_SESSION_ALMOST_END_MINUTES = 10;
|
|
23
22
|
var QUOTA_POPOVER_NOT_SHOW_ON_START = 'MaterialRunboxTimer.timerDetailPopover.notShowOnStart';
|
|
24
23
|
//
|
|
25
24
|
//
|
|
@@ -118,48 +117,6 @@ var MaterialRunboxTimerDetailPopover = function MaterialRunboxTimerDetailPopover
|
|
|
118
117
|
})]
|
|
119
118
|
});
|
|
120
119
|
};
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
*/
|
|
124
|
-
var formatTimePart = function formatTimePart(value, unit) {
|
|
125
|
-
return intl$1.formatNumber(value, {
|
|
126
|
-
style: 'unit',
|
|
127
|
-
unit: unit,
|
|
128
|
-
unitDisplay: 'short'
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
/**
|
|
132
|
-
*
|
|
133
|
-
*/
|
|
134
|
-
var renderQuotaTimePart = function renderQuotaTimePart(value, unit, color) {
|
|
135
|
-
if (value === 0) {
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
var parts = intl$1.formatNumberToParts(value, {
|
|
139
|
-
style: 'unit',
|
|
140
|
-
unit: unit,
|
|
141
|
-
unitDisplay: 'short'
|
|
142
|
-
});
|
|
143
|
-
return jsxRuntime.jsx(material.Typography, {
|
|
144
|
-
component: "span",
|
|
145
|
-
variant: "h5",
|
|
146
|
-
fontWeight: "extraBold",
|
|
147
|
-
color: color,
|
|
148
|
-
children: parts.map(function (part, index) {
|
|
149
|
-
if (part.type === 'unit') {
|
|
150
|
-
return jsxRuntime.jsx(material.Typography, {
|
|
151
|
-
component: "span",
|
|
152
|
-
variant: "body2",
|
|
153
|
-
fontWeight: "regular",
|
|
154
|
-
children: part.value
|
|
155
|
-
}, index);
|
|
156
|
-
}
|
|
157
|
-
return jsxRuntime.jsx("span", {
|
|
158
|
-
children: part.value
|
|
159
|
-
}, index);
|
|
160
|
-
})
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
120
|
/**
|
|
164
121
|
*
|
|
165
122
|
*/
|
|
@@ -185,15 +142,8 @@ var MaterialRunboxTimerDetailPopover = function MaterialRunboxTimerDetailPopover
|
|
|
185
142
|
})]
|
|
186
143
|
});
|
|
187
144
|
}
|
|
188
|
-
|
|
189
|
-
var
|
|
190
|
-
remainingHours = _getTimeParts.hours,
|
|
191
|
-
remainingMinutes = _getTimeParts.minutes;
|
|
192
|
-
var _getTimeParts2 = time.getTimeParts(quotaInfo.quota * 60),
|
|
193
|
-
totalHours = _getTimeParts2.hours,
|
|
194
|
-
totalMinutes = _getTimeParts2.minutes;
|
|
195
|
-
var quotaColor = quotaInfo.remainingQuota > QUOTA_ALMOST_END_MINUTES ? 'success.main' : 'warning.main';
|
|
196
|
-
var quotaBgColor = quotaInfo.remainingQuota > QUOTA_ALMOST_END_MINUTES ? undefined : 'warning.opacity03';
|
|
145
|
+
var quotaColor = quotaInfo.remainingQuota > useRunboxSessionEndWarning.QUOTA_ALMOST_END_MINUTES ? 'success.main' : 'warning.main';
|
|
146
|
+
var quotaBgColor = quotaInfo.remainingQuota > useRunboxSessionEndWarning.QUOTA_ALMOST_END_MINUTES ? undefined : 'warning.opacity03';
|
|
197
147
|
return jsxRuntime.jsxs(material.Stack, {
|
|
198
148
|
direction: "column",
|
|
199
149
|
gap: "0.5rem",
|
|
@@ -205,15 +155,10 @@ var MaterialRunboxTimerDetailPopover = function MaterialRunboxTimerDetailPopover
|
|
|
205
155
|
children: intl$1.formatMessage({
|
|
206
156
|
id: 'runbox.timer.popover.quota.title'
|
|
207
157
|
})
|
|
208
|
-
}), jsxRuntime.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
display: "inline-flex",
|
|
213
|
-
direction: "row",
|
|
214
|
-
gap: "0.25rem",
|
|
215
|
-
children: [renderQuotaTimePart(remainingHours, 'hour', quotaColor), renderQuotaTimePart(remainingMinutes, 'minute', quotaColor)]
|
|
216
|
-
}), [" / ", totalHours > 0 ? formatTimePart(totalHours, 'hour') : null, totalMinutes > 0 ? formatTimePart(totalMinutes, 'minute') : null].filter(Boolean).join(' ')]
|
|
158
|
+
}), jsxRuntime.jsx(MaterialRunboxQuotaAmount.default, {
|
|
159
|
+
remainingQuota: quotaInfo.remainingQuota,
|
|
160
|
+
quota: quotaInfo.quota,
|
|
161
|
+
color: quotaColor
|
|
217
162
|
})]
|
|
218
163
|
});
|
|
219
164
|
};
|
|
@@ -232,14 +177,8 @@ var MaterialRunboxTimerDetailPopover = function MaterialRunboxTimerDetailPopover
|
|
|
232
177
|
})]
|
|
233
178
|
});
|
|
234
179
|
}
|
|
235
|
-
var
|
|
236
|
-
|
|
237
|
-
remainingMinutes = _getTimeParts3.minutes;
|
|
238
|
-
var _getTimeParts4 = time.getTimeParts(quotaPerSessionInfo.quota * 60),
|
|
239
|
-
totalHours = _getTimeParts4.hours,
|
|
240
|
-
totalMinutes = _getTimeParts4.minutes;
|
|
241
|
-
var perSessionColor = quotaPerSessionInfo.remainingQuota > QUOTA_PER_SESSION_ALMOST_END_MINUTES ? 'success.main' : 'warning.main';
|
|
242
|
-
var perSessionBgColor = quotaPerSessionInfo.remainingQuota > QUOTA_PER_SESSION_ALMOST_END_MINUTES ? undefined : 'warning.opacity03';
|
|
180
|
+
var perSessionColor = quotaPerSessionInfo.remainingQuota > useRunboxSessionEndWarning.QUOTA_PER_SESSION_ALMOST_END_MINUTES ? 'success.main' : 'warning.main';
|
|
181
|
+
var perSessionBgColor = quotaPerSessionInfo.remainingQuota > useRunboxSessionEndWarning.QUOTA_PER_SESSION_ALMOST_END_MINUTES ? undefined : 'warning.opacity03';
|
|
243
182
|
return jsxRuntime.jsxs(material.Stack, {
|
|
244
183
|
direction: "column",
|
|
245
184
|
gap: "0.5rem",
|
|
@@ -251,22 +190,21 @@ var MaterialRunboxTimerDetailPopover = function MaterialRunboxTimerDetailPopover
|
|
|
251
190
|
children: intl$1.formatMessage({
|
|
252
191
|
id: 'runbox.timer.popover.quota_per_session.title'
|
|
253
192
|
})
|
|
254
|
-
}), jsxRuntime.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
display: "inline-flex",
|
|
259
|
-
direction: "row",
|
|
260
|
-
gap: "0.25rem",
|
|
261
|
-
children: [renderQuotaTimePart(remainingHours, 'hour', perSessionColor), renderQuotaTimePart(remainingMinutes, 'minute', perSessionColor)]
|
|
262
|
-
}), [" / ", totalHours > 0 ? formatTimePart(totalHours, 'hour') : null, totalMinutes > 0 ? formatTimePart(totalMinutes, 'minute') : null].filter(Boolean).join(' ')]
|
|
193
|
+
}), jsxRuntime.jsx(MaterialRunboxQuotaAmount.default, {
|
|
194
|
+
remainingQuota: quotaPerSessionInfo.remainingQuota,
|
|
195
|
+
quota: quotaPerSessionInfo.quota,
|
|
196
|
+
color: perSessionColor
|
|
263
197
|
}), jsxRuntime.jsx(material.Typography, {
|
|
264
198
|
variant: "body2",
|
|
265
199
|
color: "text.tertiary",
|
|
266
200
|
children: intl$1.formatMessage({
|
|
267
201
|
id: 'runbox.timer.popover.quota_per_session.description'
|
|
268
202
|
}, {
|
|
269
|
-
time:
|
|
203
|
+
time: intl$1.formatNumber(quotaPerSessionInfo.quota, {
|
|
204
|
+
style: 'unit',
|
|
205
|
+
unit: 'minute',
|
|
206
|
+
unitDisplay: 'short'
|
|
207
|
+
})
|
|
270
208
|
})
|
|
271
209
|
})]
|
|
272
210
|
});
|
|
@@ -11,7 +11,6 @@ import { useQuery } from '@tanstack/react-query';
|
|
|
11
11
|
import MaterialAdminRunboxConfirmDialog from './MaterialAdminRunboxConfirmDialog.js';
|
|
12
12
|
import MaterialRunboxAlert from './MaterialRunboxAlert.js';
|
|
13
13
|
import MaterialRunboxBody from './MaterialRunboxBody.js';
|
|
14
|
-
import MaterialRunboxFooter from './MaterialRunboxFooter.js';
|
|
15
14
|
import MaterialRunboxHeader from './MaterialRunboxHeader.js';
|
|
16
15
|
import { useMaterialRunboxContext } from './contexts/MaterialRunboxContext.js';
|
|
17
16
|
import { useMaterialRunboxApiContext } from './contexts/MaterialRunboxApiContext.js';
|
|
@@ -283,7 +282,7 @@ var MaterialRunboxContent = function MaterialRunboxContent(_ref) {
|
|
|
283
282
|
isTutoring: isTutoring
|
|
284
283
|
}), jsx(MaterialRunboxBody, Object.assign({
|
|
285
284
|
setSnackbarRoot: setSnackbarRoot
|
|
286
|
-
}, props))
|
|
285
|
+
}, props))]
|
|
287
286
|
})
|
|
288
287
|
})
|
|
289
288
|
})
|
|
@@ -9,16 +9,15 @@ import { Tag, EliceIcon } from '@elice/mui-elements';
|
|
|
9
9
|
import { useEliceRunboxRunning } from '@elice/runbox-client';
|
|
10
10
|
import { enums } from '@elice/types';
|
|
11
11
|
import { faEllipsisVertical } from '@fortawesome/pro-solid-svg-icons';
|
|
12
|
-
import {
|
|
12
|
+
import { Stack, Button } from '@mui/material';
|
|
13
13
|
import { useQuery } from '@tanstack/react-query';
|
|
14
|
-
import MaterialRunboxActionAutoShutdown from './actions/MaterialRunboxActionAutoShutdown.js';
|
|
15
14
|
import MaterialRunboxActionDisconnect from './actions/MaterialRunboxActionDisconnect.js';
|
|
16
15
|
import MaterialRunboxActionGrade from './actions/MaterialRunboxActionGrade.js';
|
|
17
16
|
import MaterialRunboxActionMenu from './actions/MaterialRunboxActionMenu.js';
|
|
18
|
-
import img from '../../assets/runbox_logo.png.js';
|
|
19
17
|
import { useMaterialRunboxContext } from './contexts/MaterialRunboxContext.js';
|
|
20
18
|
import { useMaterialRunboxApiContext } from './contexts/MaterialRunboxApiContext.js';
|
|
21
19
|
import MaterialRunboxTimer from './timer/MaterialRunboxTimer.js';
|
|
20
|
+
import MaterialRunboxStatusButton from './status/MaterialRunboxStatusButton.js';
|
|
22
21
|
import MaterialRunboxDiskAlmostFullSnackbar from './disk/MaterialRunboxDiskAlmostFullSnackbar.js';
|
|
23
22
|
import { useRunboxControl } from './hooks/useRunboxControl.js';
|
|
24
23
|
|
|
@@ -138,20 +137,11 @@ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
|
|
|
138
137
|
});
|
|
139
138
|
};
|
|
140
139
|
/**
|
|
141
|
-
*
|
|
140
|
+
* Whether the auto-shutdown toggle is available.
|
|
141
|
+
* The toggle itself lives in the option menu. (PLAT-4181)
|
|
142
142
|
*/
|
|
143
|
-
var
|
|
144
|
-
|
|
145
|
-
if (!enableAutoShutdownToggle || isTutoring || isAidtOrg) {
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
return jsx(MaterialRunboxActionAutoShutdown, {
|
|
149
|
-
runtime: runtime,
|
|
150
|
-
runtimeTemplate: runtimeTemplate,
|
|
151
|
-
courseId: courseId,
|
|
152
|
-
refetch: refetch
|
|
153
|
-
});
|
|
154
|
-
};
|
|
143
|
+
var isAidtOrg = (organization === null || organization === void 0 ? void 0 : organization.organizationType) === enums.OrganizationType.Aidt;
|
|
144
|
+
var enableAutoShutdown = Boolean(enableAutoShutdownToggle) && !isTutoring && !isAidtOrg;
|
|
155
145
|
/**
|
|
156
146
|
*
|
|
157
147
|
*/
|
|
@@ -192,9 +182,11 @@ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
|
|
|
192
182
|
}), jsx(MaterialRunboxActionMenu, {
|
|
193
183
|
runbox: runbox,
|
|
194
184
|
runtime: runtime,
|
|
185
|
+
runtimeTemplate: runtimeTemplate,
|
|
195
186
|
courseId: courseId,
|
|
196
187
|
studentUserId: studentUserId,
|
|
197
188
|
isTutoring: isTutoring,
|
|
189
|
+
enableAutoShutdown: enableAutoShutdown,
|
|
198
190
|
menuAnchorEl: menuAnchorEl,
|
|
199
191
|
refetch: refetch,
|
|
200
192
|
handleMenuClose: handleMenuClose,
|
|
@@ -218,30 +210,21 @@ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
|
|
|
218
210
|
//
|
|
219
211
|
return jsxs(StyledHeader, {
|
|
220
212
|
ref: headerRef,
|
|
221
|
-
children: [jsx(
|
|
222
|
-
component: "img",
|
|
223
|
-
src: img,
|
|
224
|
-
alt: "elice runbox",
|
|
225
|
-
sx: {
|
|
226
|
-
width: 'auto',
|
|
227
|
-
height: '100%',
|
|
228
|
-
imageRendering: 'auto',
|
|
229
|
-
padding: '0.465rem 0'
|
|
230
|
-
}
|
|
231
|
-
}), runtime ? jsx(MaterialRunboxTimer, {
|
|
213
|
+
children: [runtime ? jsx(MaterialRunboxTimer, {
|
|
232
214
|
runboxId: runbox.id,
|
|
233
215
|
userId: userId,
|
|
234
216
|
headerElement: headerRef.current,
|
|
235
217
|
stopRuntime: stopRuntime,
|
|
236
|
-
hideTimerPopover: hideTimerPopover
|
|
237
|
-
|
|
218
|
+
hideTimerPopover: hideTimerPopover,
|
|
219
|
+
isTutoring: isTutoring
|
|
220
|
+
}) : null, jsx(MaterialRunboxStatusButton, {}), jsx(MaterialRunboxDiskAlmostFullSnackbar, {
|
|
238
221
|
runboxId: runbox.id
|
|
239
222
|
}), jsxs(Stack, {
|
|
240
223
|
direction: "row",
|
|
241
224
|
alignItems: "center",
|
|
242
225
|
gap: "0.5rem",
|
|
243
226
|
marginLeft: "auto",
|
|
244
|
-
children: [renderHeaderSubmitInfo(),
|
|
227
|
+
children: [renderHeaderSubmitInfo(), renderOptionMenu(), renderHeaderActionDisconnect(), renderHeaderActionGrade()]
|
|
245
228
|
})]
|
|
246
229
|
});
|
|
247
230
|
};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { RuntimeProps } from '../runtime/Runtime';
|
|
3
|
-
type MaterialRunboxActionMenuProps = Pick<RuntimeProps, 'runbox' | 'runtime' | 'courseId' | 'refetch' | 'studentUserId' | 'isTutoring' | 'getAchievementColor'> & {
|
|
3
|
+
type MaterialRunboxActionMenuProps = Pick<RuntimeProps, 'runbox' | 'runtime' | 'runtimeTemplate' | 'courseId' | 'refetch' | 'studentUserId' | 'isTutoring' | 'getAchievementColor'> & {
|
|
4
4
|
menuAnchorEl: null | HTMLButtonElement;
|
|
5
|
+
/** Whether the auto-shutdown toggle is available. Decided by the header. */
|
|
6
|
+
enableAutoShutdown?: boolean;
|
|
5
7
|
handleMenuClose: () => void;
|
|
6
8
|
};
|
|
7
9
|
declare const MaterialRunboxActionMenu: React.FC<MaterialRunboxActionMenuProps>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { asyncToGenerator as _asyncToGenerator, regenerator as _regenerator } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { getOrgCourseGet } from '@elice/api-client';
|
|
5
5
|
import { useEliceRunboxRunning } from '@elice/runbox-client';
|
|
6
6
|
import { enums } from '@elice/types';
|
|
7
|
-
import { Menu } from '@mui/material';
|
|
7
|
+
import { Menu, Stack, Divider } from '@mui/material';
|
|
8
8
|
import { useQuery } from '@tanstack/react-query';
|
|
9
|
+
import MaterialRunboxActionAutoShutdown from './MaterialRunboxActionAutoShutdown.js';
|
|
9
10
|
import MaterialRunboxActionReset from './MaterialRunboxActionReset.js';
|
|
10
11
|
import MaterialRunboxActionRestart from './MaterialRunboxActionRestart.js';
|
|
11
12
|
import MaterialRunboxActionShare from './MaterialRunboxActionShare.js';
|
|
@@ -17,9 +18,12 @@ import MaterialRunboxActionSubmitLog from './MaterialRunboxActionSubmitLog.js';
|
|
|
17
18
|
var MaterialRunboxActionMenu = function MaterialRunboxActionMenu(_ref) {
|
|
18
19
|
var runbox = _ref.runbox,
|
|
19
20
|
runtime = _ref.runtime,
|
|
21
|
+
runtimeTemplate = _ref.runtimeTemplate,
|
|
20
22
|
courseId = _ref.courseId,
|
|
21
23
|
studentUserId = _ref.studentUserId,
|
|
22
24
|
isTutoring = _ref.isTutoring,
|
|
25
|
+
_ref$enableAutoShutdo = _ref.enableAutoShutdown,
|
|
26
|
+
enableAutoShutdown = _ref$enableAutoShutdo === void 0 ? false : _ref$enableAutoShutdo,
|
|
23
27
|
menuAnchorEl = _ref.menuAnchorEl,
|
|
24
28
|
refetch = _ref.refetch,
|
|
25
29
|
getAchievementColor = _ref.getAchievementColor,
|
|
@@ -80,7 +84,19 @@ var MaterialRunboxActionMenu = function MaterialRunboxActionMenu(_ref) {
|
|
|
80
84
|
horizontal: 'right'
|
|
81
85
|
},
|
|
82
86
|
onClose: handleMenuClose,
|
|
83
|
-
children: [
|
|
87
|
+
children: [enableAutoShutdown ? jsxs(Fragment, {
|
|
88
|
+
children: [jsx(Stack, {
|
|
89
|
+
direction: "row",
|
|
90
|
+
alignItems: "center",
|
|
91
|
+
padding: "0.25rem 1rem",
|
|
92
|
+
children: jsx(MaterialRunboxActionAutoShutdown, {
|
|
93
|
+
runtime: runtime,
|
|
94
|
+
runtimeTemplate: runtimeTemplate,
|
|
95
|
+
courseId: courseId,
|
|
96
|
+
refetch: refetch
|
|
97
|
+
})
|
|
98
|
+
}), jsx(Divider, {})]
|
|
99
|
+
}) : null, jsx(MaterialRunboxActionShare, {
|
|
84
100
|
handleMenuClose: handleMenuClose
|
|
85
101
|
}), jsx(MaterialRunboxActionRestart, {
|
|
86
102
|
runbox: runbox,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { RunboxPreCheckResultType, useRunboxControl } from './useRunboxControl.js';
|
|
2
|
+
export { QUOTA_ALMOST_END_MINUTES, QUOTA_PER_SESSION_ALMOST_END_MINUTES, useRunboxSessionEndWarning } from './useRunboxSessionEndWarning.js';
|
|
2
3
|
export { useRunboxTimer } from './useRunboxTimer.js';
|
|
3
4
|
export { useInfiniteRunboxRunboxIdGrade } from './useInfiniteRunboxRunboxIdGrade.js';
|
|
4
5
|
export { useMaterialRunboxRunboxIdStarterGet } from './useMaterialRunboxRunboxIdStarterGet.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type RunboxSessionEndWarning = 'quota' | 'quotaPerSession';
|
|
2
|
+
interface UseRunboxSessionEndWarningParams {
|
|
3
|
+
runboxId: string;
|
|
4
|
+
/**
|
|
5
|
+
* Suppress every warning.
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface UseRunboxSessionEndWarningReturn {
|
|
11
|
+
warning: RunboxSessionEndWarning | null;
|
|
12
|
+
/** Marks the current warning as seen, which is what closes it. */
|
|
13
|
+
dismiss: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare const QUOTA_ALMOST_END_MINUTES = 30;
|
|
16
|
+
export declare const QUOTA_PER_SESSION_ALMOST_END_MINUTES = 10;
|
|
17
|
+
export declare function useRunboxSessionEndWarning({ runboxId, disabled, }: UseRunboxSessionEndWarningParams): UseRunboxSessionEndWarningReturn;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, defineProperty as _defineProperty } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { useSessionStorage } from 'react-use';
|
|
3
|
+
import { useEliceRunboxQuota } from '@elice/runbox-client';
|
|
4
|
+
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//
|
|
8
|
+
var QUOTA_ALMOST_END_MINUTES = 30;
|
|
9
|
+
var QUOTA_PER_SESSION_ALMOST_END_MINUTES = 10;
|
|
10
|
+
var WAS_WARNED_STORAGE_KEY = 'MaterialRunboxSessionEndWarning.wasWarned';
|
|
11
|
+
//
|
|
12
|
+
//
|
|
13
|
+
//
|
|
14
|
+
/** Remaining minutes while the almost-end warning is due, `null` when it is not. */
|
|
15
|
+
function getAlmostEndRemaining(quotaInfo, thresholdMinutes) {
|
|
16
|
+
var seen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
17
|
+
if (seen || quotaInfo.isUnlimited || quotaInfo.remainingQuota > thresholdMinutes) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return quotaInfo.remainingQuota;
|
|
21
|
+
}
|
|
22
|
+
/** The due warning that runs out soonest, `null` when neither is due. */
|
|
23
|
+
function getSessionEndWarning(quotaInfo, quotaPerSessionInfo, seen) {
|
|
24
|
+
var quota = getAlmostEndRemaining(quotaInfo, QUOTA_ALMOST_END_MINUTES, seen.quota);
|
|
25
|
+
var quotaPerSession = getAlmostEndRemaining(quotaPerSessionInfo, QUOTA_PER_SESSION_ALMOST_END_MINUTES, seen.quotaPerSession);
|
|
26
|
+
if (quota === null) {
|
|
27
|
+
return quotaPerSession === null ? null : 'quotaPerSession';
|
|
28
|
+
}
|
|
29
|
+
if (quotaPerSession === null) {
|
|
30
|
+
return 'quota';
|
|
31
|
+
}
|
|
32
|
+
return quota < quotaPerSession ? 'quota' : 'quotaPerSession';
|
|
33
|
+
}
|
|
34
|
+
//
|
|
35
|
+
//
|
|
36
|
+
//
|
|
37
|
+
function useRunboxSessionEndWarning(_ref) {
|
|
38
|
+
var runboxId = _ref.runboxId,
|
|
39
|
+
_ref$disabled = _ref.disabled,
|
|
40
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled;
|
|
41
|
+
var _a;
|
|
42
|
+
var _useEliceRunboxQuota = useEliceRunboxQuota(),
|
|
43
|
+
quotaInfo = _useEliceRunboxQuota.quotaInfo,
|
|
44
|
+
quotaPerSessionInfo = _useEliceRunboxQuota.quotaPerSessionInfo;
|
|
45
|
+
var _useSessionStorage = useSessionStorage(WAS_WARNED_STORAGE_KEY, {}),
|
|
46
|
+
_useSessionStorage2 = _slicedToArray(_useSessionStorage, 2),
|
|
47
|
+
wasWarned = _useSessionStorage2[0],
|
|
48
|
+
setWasWarned = _useSessionStorage2[1];
|
|
49
|
+
var seen = (_a = wasWarned === null || wasWarned === void 0 ? void 0 : wasWarned[runboxId]) !== null && _a !== void 0 ? _a : {};
|
|
50
|
+
var warning = disabled ? null : getSessionEndWarning(quotaInfo, quotaPerSessionInfo, seen);
|
|
51
|
+
var dismiss = function dismiss() {
|
|
52
|
+
if (warning === null) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
setWasWarned(Object.assign(Object.assign({}, wasWarned), _defineProperty({}, runboxId, Object.assign(Object.assign({}, seen), _defineProperty({}, warning, true)))));
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
warning: warning,
|
|
59
|
+
dismiss: dismiss
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { QUOTA_ALMOST_END_MINUTES, QUOTA_PER_SESSION_ALMOST_END_MINUTES, useRunboxSessionEndWarning };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var messageEn = {"common.cancel":"Cancel","material.tutoring.runbox_confirm_dialog.action.confirm":"Proceed","material.tutoring.runbox_confirm_dialog.content":"The Runbox environment is currently running for the {_termCourseRoleStudent}. If you connect, the remaining total runtime usage time will decrease. Do you want to proceed?","material.tutoring.runbox_confirm_dialog.title":"Running Runbox","runbox.action.autoShutdown.title":"Always on","runbox.action.autoShutdown.tooltip":"This feature is not available for this session, as it's set to automatically shut down upon departure.","runbox.action.grade.dialog.description.error":"There is a problem with the code or submission file.\nPlease check the error message below and verify that the submission format meets the requirements. Then, submit again.","runbox.action.grade.dialog.description.success":"Grading completed successfully.","runbox.action.grade.dialog.title":"Grading result","runbox.action.grade.noti.error":"An error occurred while grading the code.","runbox.action.grade.title":"Submit","runbox.action.grade.tooltip.onProgress":"Grading is in progress. Please wait for a moment. Depending on the {_termLibraryLecturePage}, grading may take up to 3 minutes.","runbox.action.reset.dialog.actions.confirm":"Reset","runbox.action.reset.dialog.isolated.description":"Are you sure you want to reset the runbox code? Your codes will be overwritten to default code of {_termLibraryLecturePage}.\nAfter reset, the runbox session will be refreshed.","runbox.action.reset.dialog.shared.description":"Do you want to reset the Runbox code? If you reset, the code written by team members will also be overwritten with the default code. The Runbox session will be refreshed after resetting.","runbox.action.reset.noti.error":"An error occurred while initializing the runbox code.","runbox.action.reset.title":"Reset code","runbox.action.restart.dialog.actions.confirm":"Restart","runbox.action.restart.dialog.isolated.description":"Are you sure you want to restart the runbox?","runbox.action.restart.dialog.shared.description":"The Runbox will also restart on your teammates' screens. Do you want to restart the Runbox?","runbox.action.restart.title":"Restart runbox","runbox.action.share.snackbar.copied.fail":"Copying the runbox URL failed, please try again","runbox.action.share.snackbar.copied.success":"The runbox URL was copied successfully.","runbox.action.share.title":"Share runbox URL","runbox.action.submitCountInfo.dialog.description":"You have exceeded the submission count limit","runbox.action.submitCountInfo.dialog.title":"Limit the number of submissions","runbox.action.submitCountInfo.tooltip.disabled":"The submission count has been used up","runbox.action.submitLog.dialog.download.tooltip":"Download submitted file","runbox.action.submitLog.dialog.title":"Submission History","runbox.action.submitLog.empty":"No submission history exists.","runbox.action.submitLog.title":"Runbox Submission History","runbox.action.disconnect.dialog.title":"Disconnect Runbox","runbox.action.disconnect.dialog.description":"You are currently in a practice session. Do you want to disconnect Runbox?\nIf you have any unsaved work, please save it first.","runbox.action.disconnect.dialog.disconnect":"Disconnect","runbox.action.disconnect.title":"Disconnect","runbox.action.menu.title":"More","runbox.alert.title":"You are connected to the student's currently running environment, and the total runtime usage time is being deducted. Please note that even if the student exits Runbox, time will continue to be deducted as long as tutoring continues.","runbox.common.close":"Close","runbox.common.retry":"Retry","runbox.common.score":"{score} points","runbox.common.support":"Support","runbox.common.connect":"Connect","runbox.context.command.ping.error":"An error occurred while processing task.","runbox.header.submitInfo":"{isIndividual, select, true {} other {Team}} submission count | {remainCount}/{totalCount} times left {isDailyLimitEnabled, select, true {today} other {}}","runbox.timer.title":"Remaining Time","runbox.timer.unlimited":"Unlimited","runbox.timer.tooltip.title":"View time information","runbox.timer.popover.title":"Runbox Usage Time Guide","runbox.timer.popover.description":"This is the total Runbox usage time for {user}.\nTime continues to decrease while connected. Disconnect or leave the course to stop the deduction.","runbox.timer.popover.quota.title":"Total Available Time","runbox.timer.popover.quota_per_session.title":"Time
|
|
1
|
+
var messageEn = {"common.cancel":"Cancel","material.tutoring.runbox_confirm_dialog.action.confirm":"Proceed","material.tutoring.runbox_confirm_dialog.content":"The Runbox environment is currently running for the {_termCourseRoleStudent}. If you connect, the remaining total runtime usage time will decrease. Do you want to proceed?","material.tutoring.runbox_confirm_dialog.title":"Running Runbox","runbox.action.autoShutdown.title":"Always on","runbox.action.autoShutdown.tooltip":"This feature is not available for this session, as it's set to automatically shut down upon departure.","runbox.action.grade.dialog.description.error":"There is a problem with the code or submission file.\nPlease check the error message below and verify that the submission format meets the requirements. Then, submit again.","runbox.action.grade.dialog.description.success":"Grading completed successfully.","runbox.action.grade.dialog.title":"Grading result","runbox.action.grade.noti.error":"An error occurred while grading the code.","runbox.action.grade.title":"Submit","runbox.action.grade.tooltip.onProgress":"Grading is in progress. Please wait for a moment. Depending on the {_termLibraryLecturePage}, grading may take up to 3 minutes.","runbox.action.reset.dialog.actions.confirm":"Reset","runbox.action.reset.dialog.isolated.description":"Are you sure you want to reset the runbox code? Your codes will be overwritten to default code of {_termLibraryLecturePage}.\nAfter reset, the runbox session will be refreshed.","runbox.action.reset.dialog.shared.description":"Do you want to reset the Runbox code? If you reset, the code written by team members will also be overwritten with the default code. The Runbox session will be refreshed after resetting.","runbox.action.reset.noti.error":"An error occurred while initializing the runbox code.","runbox.action.reset.title":"Reset code","runbox.action.restart.dialog.actions.confirm":"Restart","runbox.action.restart.dialog.isolated.description":"Are you sure you want to restart the runbox?","runbox.action.restart.dialog.shared.description":"The Runbox will also restart on your teammates' screens. Do you want to restart the Runbox?","runbox.action.restart.title":"Restart runbox","runbox.action.share.snackbar.copied.fail":"Copying the runbox URL failed, please try again","runbox.action.share.snackbar.copied.success":"The runbox URL was copied successfully.","runbox.action.share.title":"Share runbox URL","runbox.action.submitCountInfo.dialog.description":"You have exceeded the submission count limit","runbox.action.submitCountInfo.dialog.title":"Limit the number of submissions","runbox.action.submitCountInfo.tooltip.disabled":"The submission count has been used up","runbox.action.submitLog.dialog.download.tooltip":"Download submitted file","runbox.action.submitLog.dialog.title":"Submission History","runbox.action.submitLog.empty":"No submission history exists.","runbox.action.submitLog.title":"Runbox Submission History","runbox.action.disconnect.dialog.title":"Disconnect Runbox","runbox.action.disconnect.dialog.description":"You are currently in a practice session. Do you want to disconnect Runbox?\nIf you have any unsaved work, please save it first.","runbox.action.disconnect.dialog.disconnect":"Disconnect","runbox.action.disconnect.title":"Disconnect","runbox.action.menu.title":"More","runbox.alert.title":"You are connected to the student's currently running environment, and the total runtime usage time is being deducted. Please note that even if the student exits Runbox, time will continue to be deducted as long as tutoring continues.","runbox.common.close":"Close","runbox.common.retry":"Retry","runbox.common.score":"{score} points","runbox.common.support":"Support","runbox.common.connect":"Connect","runbox.context.command.ping.error":"An error occurred while processing task.","runbox.header.submitInfo":"{isIndividual, select, true {} other {Team}} submission count | {remainCount}/{totalCount} times left {isDailyLimitEnabled, select, true {today} other {}}","runbox.timer.title":"Remaining Time","runbox.timer.unlimited":"Unlimited","runbox.timer.tooltip.title":"View time information","runbox.timer.popover.title":"Runbox Usage Time Guide","runbox.timer.popover.description":"This is the total Runbox usage time for {user}.\nTime continues to decrease while connected. Disconnect or leave the course to stop the deduction.","runbox.timer.popover.quota.title":"Total Available Time","runbox.timer.popover.quota_per_session.title":"Time Available for This Connection","runbox.timer.popover.quota_per_session.description":"Each connection can last up to {time}. If total available time remains, you can reconnect and continue practicing.","runbox.timer.popover.quota.disconnect":"Disconnect","runbox.timer.popover.do_not_open":"Don't show this popup when starting a session","runbox.timer.almost_end.dialog.quota.title":"{time} of total available time remaining.","runbox.timer.almost_end.dialog.quota.description":"When the total available time runs out, the practice session ends and you cannot reconnect.\nPlease save your work before it ends. Unsaved work may be lost.","runbox.timer.almost_end.dialog.quota_per_session.title":"{time} remaining in this connection.","runbox.timer.almost_end.dialog.quota_per_session.description":"When the connection time runs out, you will be disconnected. If total available time remains, you can reconnect and continue practicing.\nPlease save your work before it ends. Saved files are kept when you reconnect, but unsaved work may be lost.","runbox.timer.almost_end.dialog.confirm":"Continue","runbox.disk.almost_full.snackbar.almost_full":"The remaining disk space is {capacity}. If the space runs out, the session will end, so please save your ongoing work now.","runbox.runtime.message.lxp_plan_required":"Your institution currently does not support Runbox course materials.\nPlease contact your institution administrator for more details.","runbox.runtime.message.runbox_unavailable":"Runbox Unavailable","runbox.runtime.message.startError":"There was an error starting the runbox.","runbox.runtime.overlay.assigned.description":"(3 of 3)\nRunbox is running.\nPlease wait!","runbox.runtime.overlay.assigned.description_timeout":"(3 of 3)\nRunning the runbox is taking longer than we expected.\nPlease wait a little longer without refreshing!","runbox.runtime.overlay.queued.description":"(2 of 3)\nCurrently queued {waiters} times...","runbox.runtime.overlay.queued.description_zero":"(2 of 3)\nRunbox will run soon","runbox.runtime.overlay.terminated.description.default":"To continue your Runbox practice session, please click the Connect button.","runbox.runtime.overlay.terminated.description.os_disk_is_full":"The disk space has been completely used up, and the practice session has ended.","runbox.runtime.overlay.terminated.description.quota_exceeded":"The runtime has been terminated because the usage time has expired.","runbox.runtime.overlay.terminated.description.quota_per_session_exceeded":"The runtime has been terminated because the per-session usage time has expired.\nTo reconnect to Runbox, please click the button below.","runbox.runtime.overlay.terminated.title":"Runtime disconnected","runbox.runtime.overlay.terminated.connect":"Connect","runbox.runtime.overlay.terminated.unlimited":"Unlimited","runbox.runtime.overlay.terminated.contact":"Contact Customer Service","runbox.runtime.overlay.terminated.quota.total":"Total Available Time","runbox.runtime.overlay.terminated.quota.used":"Total Time Used","runbox.runtime.overlay.terminated.disk.total":"Total Disk","runbox.runtime.overlay.terminated.disk.used":"Total Disk Used","runbox.runtime.overlay.conflicted.description":"Connecting to this Runbox exercise will terminate the Runbox in another course material.\nPlease save any unsaved work first.","runbox.runtime.overlay.conflicted.title":"A Runbox is currently connected to another course material","runbox.runtime.dialog.change_material.title":"Notice of Runbox Connection Change","runbox.runtime.dialog.change_material.description":"Connecting to this Runbox exercise will terminate the Runbox in another course material. Do you want to continue?","runbox.status.button.title":"Connection & resources","runbox.status.network":"Network status","runbox.status.runtime.connected":"Runtime connected","runbox.status.runtime.disconnected":"Runtime disconnected"};
|
|
2
2
|
|
|
3
3
|
export { messageEn as default };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var ja = {"common.cancel":"キャンセル","material.tutoring.runbox_confirm_dialog.action.confirm":"進行","material.tutoring.runbox_confirm_dialog.content":"現在、{_termCourseRoleStudent} が実行中のランボックス環境です。接続すると、残りのランタイム使用時間が減少します。続行しますか?","material.tutoring.runbox_confirm_dialog.title":"実行中のランボックス","runbox.action.autoShutdown.title":"常にオン","runbox.action.autoShutdown.tooltip":"現在のセッションは離脱時に自動終了するため、この機能は使用できません。","runbox.action.grade.dialog.description.error":"コードまたは提出ファイルに問題があります。\n以下のエラーメッセージを確認し、提出形式が要件を満たしていることを確認してください。その後、再度提出してください。","runbox.action.grade.dialog.description.success":"成績評価が成功裏に完了しました。","runbox.action.grade.dialog.title":"成績結果","runbox.action.grade.noti.error":"コードの採点中にエラーが発生しました。","runbox.action.grade.title":"提出","runbox.action.grade.tooltip.onProgress":"採点中です。しばらくお待ちください。{_termLibraryLecturePage}によって、採点には最大3分かかる場合があります。","runbox.action.reset.dialog.actions.confirm":"リセット","runbox.action.reset.dialog.isolated.description":"ランボックスのコードをリセットしてもよろしいですか? あなたのコードは {_termLibraryLecturePage} のデフォルトコードに上書きされます。\nリセット後、ランボックスのセッションがリフレッシュされます。","runbox.action.reset.dialog.shared.description":"Runboxのコードを初期化しますか?初期化すると、チームメンバーの画面でもコードがデフォルトに上書きされます。初期化後、Runboxセッションがリフレッシュされます。","runbox.action.reset.noti.error":"ランボックスコードの初期化中にエラーが発生しました。","runbox.action.reset.title":"リセットコード","runbox.action.restart.dialog.actions.confirm":"再起動","runbox.action.restart.dialog.isolated.description":"再起動してもよろしいですか?","runbox.action.restart.dialog.shared.description":"チームメンバーの画面でもRunboxが再起動されます。Runboxを再起動しますか?","runbox.action.restart.title":"ランボックスを再起動してください","runbox.action.share.snackbar.copied.fail":"ランボックスのURLをコピーすることに失敗しました。もう一度お試しください。","runbox.action.share.snackbar.copied.success":"ランボックスのURLが正常にコピーされました。","runbox.action.share.title":"ランボックスのURLを共有してください。","runbox.action.submitCountInfo.dialog.description":"提出回数の制限を超えています","runbox.action.submitCountInfo.dialog.title":"投稿の数を制限してください。","runbox.action.submitCountInfo.tooltip.disabled":"提出回数が使い果たされました。","runbox.action.submitLog.dialog.download.tooltip":"提出ファイルをダウンロード","runbox.action.submitLog.dialog.title":"提出履歴","runbox.action.submitLog.empty":"提出履歴が存在しません。","runbox.action.submitLog.title":"ランボックス提出履歴","runbox.action.disconnect.dialog.title":"Runboxの接続を解除","runbox.action.disconnect.dialog.description":"現在、実習を進行中です。Runboxの接続を解除しますか?\n保存していない内容がある場合は、先に保存してください。","runbox.action.disconnect.dialog.disconnect":"接続解除","runbox.action.disconnect.title":"接続解除","runbox.action.menu.title":"その他","runbox.alert.title":"現在、学生が実行中の環境に接続しているため、ランタイムの全使用時間が減少しています。学生がランボックスを終了しても、チュータリングを続ける限り、時間が引き続き減少するのでご注意ください。","runbox.common.close":"閉じる","runbox.common.retry":"リトライ","runbox.common.score":"{score}点","runbox.common.support":"サポート","runbox.common.connect":"接続する","runbox.context.command.ping.error":"タスクの処理中にエラーが発生しました。","runbox.header.submitInfo":"{isIndividual, select, true {個人} other {チーム}}の提出回数 | {remainCount}/{totalCount} 回残っています {isDailyLimitEnabled, select, true {今日} other {}}","runbox.timer.title":"残り時間","runbox.timer.unlimited":"無制限","runbox.timer.tooltip.title":"時間の案内を見る","runbox.timer.popover.title":"ランボックス使用時間の案内","runbox.timer.popover.description":"{user}のランボックス総使用時間です。\n接続中は時間が減り続けます。接続を解除するか授業を退出すると減少が止まります。","runbox.timer.popover.quota.title":"総使用可能時間","runbox.timer.popover.quota_per_session.title":"
|
|
1
|
+
var ja = {"common.cancel":"キャンセル","material.tutoring.runbox_confirm_dialog.action.confirm":"進行","material.tutoring.runbox_confirm_dialog.content":"現在、{_termCourseRoleStudent} が実行中のランボックス環境です。接続すると、残りのランタイム使用時間が減少します。続行しますか?","material.tutoring.runbox_confirm_dialog.title":"実行中のランボックス","runbox.action.autoShutdown.title":"常にオン","runbox.action.autoShutdown.tooltip":"現在のセッションは離脱時に自動終了するため、この機能は使用できません。","runbox.action.grade.dialog.description.error":"コードまたは提出ファイルに問題があります。\n以下のエラーメッセージを確認し、提出形式が要件を満たしていることを確認してください。その後、再度提出してください。","runbox.action.grade.dialog.description.success":"成績評価が成功裏に完了しました。","runbox.action.grade.dialog.title":"成績結果","runbox.action.grade.noti.error":"コードの採点中にエラーが発生しました。","runbox.action.grade.title":"提出","runbox.action.grade.tooltip.onProgress":"採点中です。しばらくお待ちください。{_termLibraryLecturePage}によって、採点には最大3分かかる場合があります。","runbox.action.reset.dialog.actions.confirm":"リセット","runbox.action.reset.dialog.isolated.description":"ランボックスのコードをリセットしてもよろしいですか? あなたのコードは {_termLibraryLecturePage} のデフォルトコードに上書きされます。\nリセット後、ランボックスのセッションがリフレッシュされます。","runbox.action.reset.dialog.shared.description":"Runboxのコードを初期化しますか?初期化すると、チームメンバーの画面でもコードがデフォルトに上書きされます。初期化後、Runboxセッションがリフレッシュされます。","runbox.action.reset.noti.error":"ランボックスコードの初期化中にエラーが発生しました。","runbox.action.reset.title":"リセットコード","runbox.action.restart.dialog.actions.confirm":"再起動","runbox.action.restart.dialog.isolated.description":"再起動してもよろしいですか?","runbox.action.restart.dialog.shared.description":"チームメンバーの画面でもRunboxが再起動されます。Runboxを再起動しますか?","runbox.action.restart.title":"ランボックスを再起動してください","runbox.action.share.snackbar.copied.fail":"ランボックスのURLをコピーすることに失敗しました。もう一度お試しください。","runbox.action.share.snackbar.copied.success":"ランボックスのURLが正常にコピーされました。","runbox.action.share.title":"ランボックスのURLを共有してください。","runbox.action.submitCountInfo.dialog.description":"提出回数の制限を超えています","runbox.action.submitCountInfo.dialog.title":"投稿の数を制限してください。","runbox.action.submitCountInfo.tooltip.disabled":"提出回数が使い果たされました。","runbox.action.submitLog.dialog.download.tooltip":"提出ファイルをダウンロード","runbox.action.submitLog.dialog.title":"提出履歴","runbox.action.submitLog.empty":"提出履歴が存在しません。","runbox.action.submitLog.title":"ランボックス提出履歴","runbox.action.disconnect.dialog.title":"Runboxの接続を解除","runbox.action.disconnect.dialog.description":"現在、実習を進行中です。Runboxの接続を解除しますか?\n保存していない内容がある場合は、先に保存してください。","runbox.action.disconnect.dialog.disconnect":"接続解除","runbox.action.disconnect.title":"接続解除","runbox.action.menu.title":"その他","runbox.alert.title":"現在、学生が実行中の環境に接続しているため、ランタイムの全使用時間が減少しています。学生がランボックスを終了しても、チュータリングを続ける限り、時間が引き続き減少するのでご注意ください。","runbox.common.close":"閉じる","runbox.common.retry":"リトライ","runbox.common.score":"{score}点","runbox.common.support":"サポート","runbox.common.connect":"接続する","runbox.context.command.ping.error":"タスクの処理中にエラーが発生しました。","runbox.header.submitInfo":"{isIndividual, select, true {個人} other {チーム}}の提出回数 | {remainCount}/{totalCount} 回残っています {isDailyLimitEnabled, select, true {今日} other {}}","runbox.timer.title":"残り時間","runbox.timer.unlimited":"無制限","runbox.timer.tooltip.title":"時間の案内を見る","runbox.timer.popover.title":"ランボックス使用時間の案内","runbox.timer.popover.description":"{user}のランボックス総使用時間です。\n接続中は時間が減り続けます。接続を解除するか授業を退出すると減少が止まります。","runbox.timer.popover.quota.title":"総使用可能時間","runbox.timer.popover.quota_per_session.title":"今回の接続で使用できる時間","runbox.timer.popover.quota_per_session.description":"一度接続すると最大{time}まで使用できます。総利用可能時間が残っていれば、再接続して実習を続けられます。","runbox.timer.popover.quota.disconnect":"接続を解除","runbox.timer.popover.do_not_open":"ランボックス実習時にこのポップアップを表示しない","runbox.timer.almost_end.dialog.quota.title":"総利用可能時間が残り{time}です。","runbox.timer.almost_end.dialog.quota.description":"総利用可能時間をすべて使い切ると実習が終了し、再接続できなくなります。\n作業中の内容は保存してから終了してください。保存していない内容は失われる可能性があります。","runbox.timer.almost_end.dialog.quota_per_session.title":"今回の接続時間が残り{time}です。","runbox.timer.almost_end.dialog.quota_per_session.description":"接続時間が終了すると接続が切断されます。総利用可能時間が残っていれば、再接続して実習を続けられます。\n作業中の内容は保存してから終了してください。保存したファイルは再接続後も維持されますが、保存していない内容は失われる可能性があります。","runbox.timer.almost_end.dialog.confirm":"続ける","runbox.disk.almost_full.snackbar.almost_full":"ディスクの残り容量は {capacity} です。容量がすべてなくなると実習は終了しますので、進行中の作業を今すぐ保存してください。","runbox.runtime.message.lxp_plan_required":"現在、所属機関ではRunboxの学習資料を利用できません。\n詳細については機関の管理者にお問い合わせください。","runbox.runtime.message.runbox_unavailable":"Runboxは利用できません","runbox.runtime.message.startError":"ランボックスの起動中にエラーが発生しました。","runbox.runtime.overlay.assigned.description":"Runbox が実行中です。\nお待ちください!","runbox.runtime.overlay.assigned.description_timeout":"ランボックスを実行する時間が私たちの予想よりも長くかかっています。\n更新せずにもう少し待ってください!","runbox.runtime.overlay.queued.description":"現在{waiters}回待機中...","runbox.runtime.overlay.queued.description_zero":"Runboxはもうすぐ実行されます。","runbox.runtime.overlay.terminated.description.default":"Runboxの実習を続けるには、「接続」ボタンをクリックしてください。","runbox.runtime.overlay.terminated.description.os_disk_is_full":"ディスク容量をすべて使い切ったため、実習は終了しました。","runbox.runtime.overlay.terminated.description.quota_exceeded":"ランタイムの利用時間が終了したため、ランタイムは停止されました。","runbox.runtime.overlay.terminated.description.quota_per_session_exceeded":"Runboxセッションごとの利用時間が終了したため、ランタイムは停止されました。\nRunboxに再接続するには、下のボタンをクリックしてください。","runbox.runtime.overlay.terminated.title":"接続解除","runbox.runtime.overlay.terminated.connect":"接続","runbox.runtime.overlay.terminated.unlimited":"無制限","runbox.runtime.overlay.terminated.contact":"カスタマーサービスにお問い合わせ","runbox.runtime.overlay.terminated.quota.total":"利用可能時間の合計","runbox.runtime.overlay.terminated.quota.used":"総利用時間","runbox.runtime.overlay.terminated.disk.total":"ディスク合計","runbox.runtime.overlay.terminated.disk.used":"使用済みディスク合計","runbox.runtime.overlay.conflicted.description":"このランボックス演習に接続すると、他の教材のランボックスは終了します。\n保存していない内容がある場合は、先に保存してください。","runbox.runtime.overlay.conflicted.title":"現在、他の教材にランボックスが接続されています","runbox.runtime.dialog.change_material.title":"ランボックス接続変更のお知らせ","runbox.runtime.dialog.change_material.description":"このランボックス演習に接続すると、他の教材のランボックスは終了します。続行しますか?","runbox.status.button.title":"接続状態とリソース","runbox.status.network":"ネットワーク状態","runbox.status.runtime.connected":"ランタイム接続済み","runbox.status.runtime.disconnected":"ランタイム未接続"};
|
|
2
2
|
|
|
3
3
|
export { ja as default };
|