x-star-design 0.0.90 → 0.0.92

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.
@@ -187,7 +187,9 @@ var GeneralConfigItem = function GeneralConfigItem(_ref) {
187
187
  value: 'afterApproval'
188
188
  }, t('DISPLAY_AFTER_TEACHER_CONFIRMATION')), /*#__PURE__*/React.createElement(Radio, {
189
189
  value: 'scheduled'
190
- }, t('TIMED_DISPLAY')))), /*#__PURE__*/React.createElement(TimingFormItem, {
190
+ }, t('TIMED_DISPLAY')), /*#__PURE__*/React.createElement(Radio, {
191
+ value: 'started'
192
+ }, t('After_Contest_Start')))), /*#__PURE__*/React.createElement(TimingFormItem, {
191
193
  field: 'answerRelease',
192
194
  name: 'answerTime',
193
195
  label: t('ANSWER_DISPLAY_TIME')
@@ -62,7 +62,9 @@ var ProgramConfigItem = function ProgramConfigItem(_ref) {
62
62
  value: 'scheduled'
63
63
  }, t('TIMED_DISPLAY')), /*#__PURE__*/React.createElement(Radio, {
64
64
  value: 'always'
65
- }, t('Always_Visible')))), /*#__PURE__*/React.createElement(TimingFormItem, {
65
+ }, t('Always_Visible')), /*#__PURE__*/React.createElement(Radio, {
66
+ value: 'started'
67
+ }, t('After_Contest_Start')))), /*#__PURE__*/React.createElement(TimingFormItem, {
66
68
  field: 'tipRelease',
67
69
  name: 'tipTime',
68
70
  label: t('TIPS_DISPLAY_TIME')
@@ -1,12 +1,14 @@
1
1
  import { DatePicker, Form } from 'antd';
2
2
  import React from 'react';
3
+ import ContestTimeInput from "../contest-time-input";
3
4
  import { useLocale } from "../locales";
4
5
  var TimingFormItem = function TimingFormItem(_ref) {
5
6
  var field = _ref.field,
6
7
  name = _ref.name,
7
8
  label = _ref.label;
8
9
  var _useLocale = useLocale('AcConfig'),
9
- locale = _useLocale.locale;
10
+ locale = _useLocale.locale,
11
+ t = _useLocale.format;
10
12
  var lang = {
11
13
  zh_CN: 'zh',
12
14
  en_US: 'en'
@@ -28,14 +30,15 @@ var TimingFormItem = function TimingFormItem(_ref) {
28
30
  }, function (_ref2) {
29
31
  var getFieldValue = _ref2.getFieldValue;
30
32
  // 成绩发布定时发布时显示
31
- var isVisible = getFieldValue(field) === 'scheduled';
33
+ var isVisible = getFieldValue(field) === 'scheduled' || getFieldValue(field) === 'started';
34
+ var isStarted = getFieldValue(field) === 'started';
32
35
  return /*#__PURE__*/React.createElement(React.Fragment, null, isVisible && /*#__PURE__*/React.createElement(Form.Item, {
33
36
  name: name,
34
- label: label,
37
+ label: isStarted ? t('After_Contest_Start_N') : label,
35
38
  rules: [{
36
39
  required: true
37
40
  }]
38
- }, /*#__PURE__*/React.createElement(DatePicker, {
41
+ }, isStarted ? /*#__PURE__*/React.createElement(ContestTimeInput, null) : /*#__PURE__*/React.createElement(DatePicker, {
39
42
  showTime: {
40
43
  use12Hours: lang === 'en',
41
44
  format: showTimeFormat
@@ -1,5 +1,6 @@
1
1
  import { Dayjs } from 'dayjs';
2
- export type ConfigStatus = 'afterExam' | 'afterApproval' | 'scheduled' | 'afterGradeRelease';
2
+ import { ContestTimeInputValue } from '../contest-time-input';
3
+ export type ConfigStatus = 'afterExam' | 'afterApproval' | 'scheduled' | 'afterGradeRelease' | 'always' | 'started';
3
4
  export type SubmissionConfigStatus = 'noEarlySubmission' | 'allowEarlySubmission';
4
5
  export type restrictionStatus = {
5
6
  type: 'never' | 'beforeHomeworkExam';
@@ -61,7 +62,7 @@ export interface RawConfig {
61
62
  gradeTime: Dayjs;
62
63
  rankListTime: Dayjs;
63
64
  paperTime: Dayjs;
64
- answerTime: Dayjs;
65
+ answerTime: Dayjs | ContestTimeInputValue;
65
66
  gradeRelease: GeneralConfigStatus<'Grade'>['type'];
66
67
  rankListRelease: GeneralConfigStatus<'Ranklist'>['type'];
67
68
  paperRelease: GeneralConfigStatus['type'];
@@ -24,7 +24,7 @@ export var getConfigData = function getConfigData(_ref) {
24
24
  return _defineProperty({}, release, {
25
25
  type: status,
26
26
  scheduled: {
27
- releaseTime: status === 'scheduled' ? (rawData === null || rawData === void 0 ? void 0 : rawData[timeType]).second(0).unix().valueOf() : undefined
27
+ releaseTime: status === 'scheduled' ? (rawData === null || rawData === void 0 ? void 0 : rawData[timeType]).second(0).unix().valueOf() : status === 'started' ? ((rawData === null || rawData === void 0 ? void 0 : rawData[timeType]).limitHour || 0) * 60 + ((rawData === null || rawData === void 0 ? void 0 : rawData[timeType]).limitMinute || 0) : undefined
28
28
  }
29
29
  });
30
30
  };
@@ -88,7 +88,7 @@ export var getConfigData = function getConfigData(_ref) {
88
88
  return updateConfig;
89
89
  };
90
90
  var AcConfig = /*#__PURE__*/forwardRef(function (_ref3, ref) {
91
- var _initialValues$contes, _initialValues$contes2, _gradeRelease$schedul, _rankListRelease$sche, _paperRelease$schedul, _answerRelease$schedu, _tipRelease$scheduled;
91
+ var _initialValues$contes, _initialValues$contes2, _gradeRelease$schedul, _rankListRelease$sche, _paperRelease$schedul, _answerRelease$schedu, _answerRelease$schedu2, _answerRelease$schedu3, _tipRelease$scheduled, _tipRelease$scheduled2, _tipRelease$scheduled3;
92
92
  var _ref3$type = _ref3.type,
93
93
  type = _ref3$type === void 0 ? 'advanced' : _ref3$type,
94
94
  _ref3$contestType = _ref3.contestType,
@@ -157,7 +157,10 @@ var AcConfig = /*#__PURE__*/forwardRef(function (_ref3, ref) {
157
157
  paperRelease: paperRelease === null || paperRelease === void 0 ? void 0 : paperRelease.type,
158
158
  paperTime: dayjs.unix((paperRelease === null || paperRelease === void 0 ? void 0 : (_paperRelease$schedul = paperRelease.scheduled) === null || _paperRelease$schedul === void 0 ? void 0 : _paperRelease$schedul.releaseTime) || dayjs().valueOf() / 1000),
159
159
  answerRelease: answerRelease === null || answerRelease === void 0 ? void 0 : answerRelease.type,
160
- answerTime: dayjs.unix((answerRelease === null || answerRelease === void 0 ? void 0 : (_answerRelease$schedu = answerRelease.scheduled) === null || _answerRelease$schedu === void 0 ? void 0 : _answerRelease$schedu.releaseTime) || dayjs().valueOf() / 1000),
160
+ answerTime: (answerRelease === null || answerRelease === void 0 ? void 0 : answerRelease.type) === 'started' ? {
161
+ limitHour: Math.floor(((answerRelease === null || answerRelease === void 0 ? void 0 : (_answerRelease$schedu = answerRelease.scheduled) === null || _answerRelease$schedu === void 0 ? void 0 : _answerRelease$schedu.releaseTime) || 0) / 60),
162
+ limitMinute: ((answerRelease === null || answerRelease === void 0 ? void 0 : (_answerRelease$schedu2 = answerRelease.scheduled) === null || _answerRelease$schedu2 === void 0 ? void 0 : _answerRelease$schedu2.releaseTime) || 0) % 60
163
+ } : dayjs.unix((answerRelease === null || answerRelease === void 0 ? void 0 : (_answerRelease$schedu3 = answerRelease.scheduled) === null || _answerRelease$schedu3 === void 0 ? void 0 : _answerRelease$schedu3.releaseTime) || dayjs().valueOf() / 1000),
161
164
  rankListShowRealName: rankListShowRealName,
162
165
  rankShowUserLabel: rankShowUserLabel,
163
166
  submission: submission === null || submission === void 0 ? void 0 : submission.type,
@@ -168,7 +171,10 @@ var AcConfig = /*#__PURE__*/forwardRef(function (_ref3, ref) {
168
171
  lang: lang,
169
172
  personalScoreVisibility: personalScoreVisibility,
170
173
  tipRelease: tipRelease === null || tipRelease === void 0 ? void 0 : tipRelease.type,
171
- tipTime: dayjs.unix((tipRelease === null || tipRelease === void 0 ? void 0 : (_tipRelease$scheduled = tipRelease.scheduled) === null || _tipRelease$scheduled === void 0 ? void 0 : _tipRelease$scheduled.releaseTime) || dayjs().valueOf() / 1000),
174
+ tipTime: (tipRelease === null || tipRelease === void 0 ? void 0 : tipRelease.type) === 'started' ? {
175
+ limitHour: Math.floor(((tipRelease === null || tipRelease === void 0 ? void 0 : (_tipRelease$scheduled = tipRelease.scheduled) === null || _tipRelease$scheduled === void 0 ? void 0 : _tipRelease$scheduled.releaseTime) || 0) / 60),
176
+ limitMinute: ((tipRelease === null || tipRelease === void 0 ? void 0 : (_tipRelease$scheduled2 = tipRelease.scheduled) === null || _tipRelease$scheduled2 === void 0 ? void 0 : _tipRelease$scheduled2.releaseTime) || 0) % 60
177
+ } : dayjs.unix((tipRelease === null || tipRelease === void 0 ? void 0 : (_tipRelease$scheduled3 = tipRelease.scheduled) === null || _tipRelease$scheduled3 === void 0 ? void 0 : _tipRelease$scheduled3.releaseTime) || dayjs().valueOf() / 1000),
172
178
  scoreTypeInMatch: scoreTypeInMatch,
173
179
  rankingMethod: rankingMethod,
174
180
  highScoreProgramVisibility: highScoreProgramVisibility,
@@ -0,0 +1,3 @@
1
+ import { RawConfig } from '../ac-config/define';
2
+ export type ContestType = 'OI' | 'XCPC' | 'IOI' | 'HOMEWORK1' | 'HOMEWORK2';
3
+ export declare const CONTEST_TEMPLATES: Record<ContestType, Partial<RawConfig>>;
@@ -0,0 +1,163 @@
1
+ import dayjs from 'dayjs';
2
+ export var CONTEST_TEMPLATES = {
3
+ OI: {
4
+ gradeTime: dayjs(),
5
+ rankListTime: dayjs(),
6
+ paperTime: dayjs(),
7
+ answerTime: dayjs(),
8
+ tipTime: dayjs(),
9
+ gradeRelease: 'afterExam',
10
+ rankListRelease: 'afterGradeRelease',
11
+ paperRelease: 'afterExam',
12
+ answerRelease: 'afterExam',
13
+ tipRelease: 'afterExam',
14
+ submission: 'noEarlySubmission',
15
+ restriction: 'beforeHomeworkExam',
16
+ disorder: [],
17
+ personalScoreVisibility: 'afterExam',
18
+ rankingMethod: 'score',
19
+ highScoreProgramVisibility: 'never',
20
+ downloadDataEnable: false,
21
+ downloadDataCount: 0,
22
+ scoreTypeInMatch: 'latestSubmit',
23
+ lang: ['gcc', 'g++', 'g++11', 'g++14', 'g++17', 'python2.7', 'python3.8', 'java8', 'fpc'],
24
+ showTopNSubmission: false,
25
+ showTopNSubmissionCount: 0,
26
+ rankListShowRealName: false,
27
+ rankShowUserLabel: false,
28
+ submissionLimitTime: {
29
+ limitHour: 0,
30
+ limitMinute: 0
31
+ }
32
+ },
33
+ XCPC: {
34
+ gradeTime: dayjs(),
35
+ rankListTime: dayjs(),
36
+ paperTime: dayjs(),
37
+ answerTime: dayjs(),
38
+ tipTime: dayjs(),
39
+ gradeRelease: 'afterExam',
40
+ rankListRelease: 'always',
41
+ paperRelease: 'afterExam',
42
+ answerRelease: 'afterExam',
43
+ tipRelease: 'afterExam',
44
+ submission: 'allowEarlySubmission',
45
+ restriction: 'beforeHomeworkExam',
46
+ disorder: [],
47
+ personalScoreVisibility: 'always',
48
+ rankingMethod: 'acNumber',
49
+ highScoreProgramVisibility: 'afterExam',
50
+ downloadDataEnable: false,
51
+ downloadDataCount: 0,
52
+ scoreTypeInMatch: 'maxScore',
53
+ lang: ['gcc', 'g++', 'g++11', 'g++14', 'g++17', 'python2.7', 'python3.8', 'java8', 'fpc'],
54
+ showTopNSubmission: false,
55
+ showTopNSubmissionCount: 0,
56
+ rankListShowRealName: false,
57
+ rankShowUserLabel: false,
58
+ submissionLimitTime: {
59
+ limitHour: 0,
60
+ limitMinute: 0
61
+ }
62
+ },
63
+ IOI: {
64
+ gradeTime: dayjs().add(1, 'day'),
65
+ rankListTime: dayjs().add(1, 'day'),
66
+ paperTime: dayjs(),
67
+ answerTime: dayjs(),
68
+ tipTime: dayjs(),
69
+ gradeRelease: 'afterExam',
70
+ rankListRelease: 'afterGradeRelease',
71
+ paperRelease: 'afterGradeRelease',
72
+ answerRelease: 'afterApproval',
73
+ tipRelease: 'afterExam',
74
+ submission: 'noEarlySubmission',
75
+ restriction: 'never',
76
+ disorder: [],
77
+ personalScoreVisibility: 'always',
78
+ rankingMethod: 'score',
79
+ highScoreProgramVisibility: 'afterExam',
80
+ downloadDataEnable: false,
81
+ downloadDataCount: 0,
82
+ scoreTypeInMatch: 'maxScore',
83
+ lang: ['gcc', 'g++', 'g++11', 'g++14', 'g++17', 'python2.7', 'python3.8', 'java8', 'fpc'],
84
+ showTopNSubmission: false,
85
+ showTopNSubmissionCount: 0,
86
+ rankListShowRealName: false,
87
+ rankShowUserLabel: false,
88
+ submissionLimitTime: {
89
+ limitHour: 0,
90
+ limitMinute: 0
91
+ }
92
+ },
93
+ HOMEWORK1: {
94
+ contestTime: 'noLimit',
95
+ gradeTime: dayjs(),
96
+ rankListTime: dayjs(),
97
+ paperTime: dayjs(),
98
+ answerTime: dayjs(),
99
+ tipTime: dayjs(),
100
+ gradeRelease: 'afterExam',
101
+ rankListRelease: 'afterGradeRelease',
102
+ paperRelease: 'afterExam',
103
+ answerRelease: 'afterExam',
104
+ tipRelease: 'always',
105
+ submission: 'allowEarlySubmission',
106
+ restriction: 'never',
107
+ disorder: [],
108
+ personalScoreVisibility: 'always',
109
+ rankingMethod: 'score',
110
+ highScoreProgramVisibility: 'never',
111
+ downloadDataEnable: true,
112
+ downloadDataCount: 5,
113
+ scoreTypeInMatch: 'maxScore',
114
+ lang: ['gcc', 'g++', 'g++11', 'g++14', 'g++17'],
115
+ showTopNSubmission: false,
116
+ showTopNSubmissionCount: 0,
117
+ rankListShowRealName: true,
118
+ rankShowUserLabel: false,
119
+ submissionLimitTime: {
120
+ limitHour: 0,
121
+ limitMinute: 0
122
+ },
123
+ limitTime: {
124
+ limitHour: 0,
125
+ limitMinute: 0
126
+ }
127
+ },
128
+ HOMEWORK2: {
129
+ contestTime: 'limitTime',
130
+ gradeTime: dayjs(),
131
+ rankListTime: dayjs(),
132
+ paperTime: dayjs(),
133
+ answerTime: dayjs(),
134
+ tipTime: dayjs(),
135
+ gradeRelease: 'afterExam',
136
+ rankListRelease: 'afterGradeRelease',
137
+ paperRelease: 'afterExam',
138
+ answerRelease: 'afterExam',
139
+ tipRelease: 'always',
140
+ submission: 'allowEarlySubmission',
141
+ restriction: 'never',
142
+ disorder: [],
143
+ personalScoreVisibility: 'always',
144
+ rankingMethod: 'score',
145
+ highScoreProgramVisibility: 'never',
146
+ downloadDataEnable: true,
147
+ downloadDataCount: 5,
148
+ scoreTypeInMatch: 'maxScore',
149
+ lang: ['gcc', 'g++', 'g++11', 'g++14', 'g++17'],
150
+ showTopNSubmission: false,
151
+ showTopNSubmissionCount: 0,
152
+ rankListShowRealName: true,
153
+ rankShowUserLabel: false,
154
+ submissionLimitTime: {
155
+ limitHour: 0,
156
+ limitMinute: 0
157
+ },
158
+ limitTime: {
159
+ limitHour: 2,
160
+ limitMinute: 0
161
+ }
162
+ }
163
+ };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { RawConfig } from '../ac-config/define';
3
+ import { ContestType } from './define';
4
+ interface ConfigTemplateProps {
5
+ onSelect?: (config: Partial<RawConfig>, configType: ContestType) => void;
6
+ }
7
+ declare const ConfigTemplate: ({ onSelect }: ConfigTemplateProps) => React.JSX.Element;
8
+ export default ConfigTemplate;
@@ -0,0 +1,146 @@
1
+ import { Card, Col, message, Popconfirm, Row, Space, Typography } from 'antd';
2
+ import React from 'react';
3
+ import { useLocale } from "../locales";
4
+ import { prefix } from "../utils/global";
5
+ import { CONTEST_TEMPLATES } from "./define";
6
+ var Text = Typography.Text;
7
+ var ConfigTemplate = function ConfigTemplate(_ref) {
8
+ var onSelect = _ref.onSelect;
9
+ var _useLocale = useLocale('ConfigTemplate'),
10
+ t = _useLocale.format;
11
+ var template = [{
12
+ type: 'OI',
13
+ title: t('OI')
14
+ }, {
15
+ type: 'XCPC',
16
+ title: t('XCPC')
17
+ }, {
18
+ type: 'IOI',
19
+ title: t('IOI')
20
+ }, {
21
+ type: 'HOMEWORK1',
22
+ title: t('Homework_Mode_1')
23
+ }, {
24
+ type: 'HOMEWORK2',
25
+ title: t('Homework_Mode_2')
26
+ }];
27
+ var templateConfig = {
28
+ OI: {
29
+ title: t('OI'),
30
+ features: [{
31
+ text: t('Score_Rank'),
32
+ icon: '►'
33
+ }, {
34
+ text: t('No_Submission_Result_In_Contest'),
35
+ icon: '►'
36
+ }, {
37
+ text: t('Submit_By_Last_Submission'),
38
+ icon: '►'
39
+ }]
40
+ },
41
+ XCPC: {
42
+ title: t('XCPC'),
43
+ features: [{
44
+ text: t('AC_Rank'),
45
+ icon: '►'
46
+ }, {
47
+ text: t('Penalty_Rank'),
48
+ icon: '►'
49
+ }, {
50
+ text: t('Show_Submission_Result'),
51
+ icon: '►'
52
+ }, {
53
+ text: t('Rank_List_Visible'),
54
+ icon: '►'
55
+ }]
56
+ },
57
+ IOI: {
58
+ title: t('IOI'),
59
+ features: [{
60
+ text: t('Score_Rank'),
61
+ icon: '►'
62
+ }, {
63
+ text: t('Submit_By_Highest_Score'),
64
+ icon: '►'
65
+ }, {
66
+ text: t('Show_Submission_Result'),
67
+ icon: '►'
68
+ }]
69
+ },
70
+ HOMEWORK1: {
71
+ title: t('Homework_Mode_1'),
72
+ features: [{
73
+ text: t('No_Homework_Time_Limit'),
74
+ icon: '►'
75
+ }, {
76
+ text: t('Submit_By_Highest_Score'),
77
+ icon: '►'
78
+ }, {
79
+ text: t('Personal_Score_Visibility'),
80
+ icon: '►'
81
+ }, {
82
+ text: t('Tip_Visibility'),
83
+ icon: '►'
84
+ }]
85
+ },
86
+ HOMEWORK2: {
87
+ title: t('Homework_Mode_2'),
88
+ features: [{
89
+ text: t('Homework_Time_Limit_120_Minutes'),
90
+ icon: '►'
91
+ }, {
92
+ text: t('Submit_By_Highest_Score'),
93
+ icon: '►'
94
+ }, {
95
+ text: t('Personal_Score_Visibility'),
96
+ icon: '►'
97
+ }, {
98
+ text: t('Tip_Visibility'),
99
+ icon: '►'
100
+ }]
101
+ }
102
+ };
103
+ return /*#__PURE__*/React.createElement(Row, {
104
+ gutter: [16, 16]
105
+ }, template.map(function (item) {
106
+ return /*#__PURE__*/React.createElement(Col, {
107
+ span: 8,
108
+ key: item.type
109
+ }, /*#__PURE__*/React.createElement(Popconfirm, {
110
+ title: t('Current_Operation_Hint'),
111
+ "data-testid": "popconfirm",
112
+ onConfirm: function onConfirm() {
113
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(CONTEST_TEMPLATES[item.type], item.type);
114
+ message.success({
115
+ key: 'success',
116
+ content: t('Cover_successfully')
117
+ });
118
+ }
119
+ }, /*#__PURE__*/React.createElement(Card, {
120
+ className: "".concat(prefix, "-templateCard"),
121
+ hoverable: true,
122
+ "data-testid": "templateCard"
123
+ }, /*#__PURE__*/React.createElement(Space, {
124
+ direction: "vertical",
125
+ size: "small",
126
+ style: {
127
+ width: '100%'
128
+ }
129
+ }, /*#__PURE__*/React.createElement("div", {
130
+ className: "".concat(prefix, "-type")
131
+ }, item.type), /*#__PURE__*/React.createElement(Text, {
132
+ strong: true,
133
+ className: "".concat(prefix, "-title")
134
+ }, templateConfig[item.type].title), /*#__PURE__*/React.createElement("div", {
135
+ className: "".concat(prefix, "-features")
136
+ }, templateConfig[item.type].features.map(function (feature, index) {
137
+ return /*#__PURE__*/React.createElement("div", {
138
+ key: index,
139
+ className: "".concat(prefix, "-featureItem")
140
+ }, /*#__PURE__*/React.createElement(Text, {
141
+ className: "".concat(prefix, "-icon")
142
+ }, feature.icon), /*#__PURE__*/React.createElement(Text, null, feature.text));
143
+ }))))));
144
+ }));
145
+ };
146
+ export default ConfigTemplate;
package/dist/index.d.ts CHANGED
@@ -11,6 +11,9 @@ export type { CodeDetailModalProps } from './code-detail-modal';
11
11
  export { default as CodeMirrorWrapper } from './code-mirror-wrapper';
12
12
  export type { CodeMirrorWrapperProps } from './code-mirror-wrapper';
13
13
  export { LangId, Language, Theme } from './code-mirror-wrapper/define';
14
+ export { default as ConfigTemplate } from './config-template';
15
+ export { CONTEST_TEMPLATES } from './config-template/define';
16
+ export type { ContestType } from './config-template/define';
14
17
  export { default as ContactButton } from './contact-button';
15
18
  export { default as ContestDurationInput } from './contest-duration-input';
16
19
  export { default as ContestTimeInput } from './contest-time-input';
package/dist/index.js CHANGED
@@ -5,6 +5,8 @@ export { default as AnchorXTabs } from "./anchor-x-tabs";
5
5
  export { default as CodeDetailModal } from "./code-detail-modal";
6
6
  export { default as CodeMirrorWrapper } from "./code-mirror-wrapper";
7
7
  export { LangId, Language, Theme } from "./code-mirror-wrapper/define";
8
+ export { default as ConfigTemplate } from "./config-template";
9
+ export { CONTEST_TEMPLATES } from "./config-template/define";
8
10
  export { default as ContactButton } from "./contact-button";
9
11
  export { default as ContestDurationInput } from "./contest-duration-input";
10
12
  export { default as ContestTimeInput } from "./contest-time-input";
@@ -156,6 +156,8 @@ declare const _default: {
156
156
  readonly Show_Top_N_Submissions: "Top N Submissions Display";
157
157
  readonly Show_Top_N_Submissions_Extra: "For single problem";
158
158
  readonly Top_N_Submissions: "Top N";
159
+ readonly After_Contest_Start: "Display after N mins of contest start";
160
+ readonly After_Contest_Start_N: "N mins of contest start";
159
161
  };
160
162
  readonly ScoreReport: {
161
163
  readonly In_Game_Total_Score: "Timed Score";
@@ -193,5 +195,29 @@ declare const _default: {
193
195
  readonly Input_Format: "Input Format: 2025-03-12 12:00";
194
196
  readonly Duration: "Duration:";
195
197
  };
198
+ readonly ConfigTemplate: {
199
+ readonly OI: "OI";
200
+ readonly XCPC: "XCPC";
201
+ readonly IOI: "IOI";
202
+ readonly Homework_Mode_1: "Homework Mode 1";
203
+ readonly Homework_Mode_2: "Homework Mode 2";
204
+ readonly Score_Rank: "Rank by score";
205
+ readonly AC_Rank: "Rank by AC number";
206
+ readonly Penalty_Rank: "Same score, rank by penalty";
207
+ readonly Show_Submission_Result: "Show submission result in contest";
208
+ readonly Rank_List_Visible: "Rank list always valid";
209
+ readonly No_Homework_Time_Limit: "No homework time limit";
210
+ readonly Submit_By_Highest_Score: "Submit by highest score";
211
+ readonly Personal_Score_Visibility: "Personal score always visible";
212
+ readonly Tip_Visibility: "Tip always visible";
213
+ readonly Cover_successfully: "Cover successfully";
214
+ readonly Current_Homework_Mode_Hint: "Current is homework mode and the configuration does not match, are you sure to cover it?";
215
+ readonly Current_Contest_Mode_Hint: "Current is contest mode and the configuration does not match, are you sure to cover it?";
216
+ readonly Current_Operation_Hint: "Current operation will cover the original configuration, are you sure?";
217
+ readonly Homework_Time_Limit_120_Minutes: "Homework time limit 120 minutes";
218
+ readonly Same_Score_First_AC: "Same score, rank by first AC time";
219
+ readonly No_Submission_Result_In_Contest: "No submission result in contest";
220
+ readonly Submit_By_Last_Submission: "Submit by last submission";
221
+ };
196
222
  };
197
223
  export default _default;
@@ -155,7 +155,9 @@ export default {
155
155
  Duration_Cannot_Be_Set_To_Zero: 'Duration Cannot Be Set To Zero',
156
156
  Show_Top_N_Submissions: 'Top N Submissions Display',
157
157
  Show_Top_N_Submissions_Extra: 'For single problem',
158
- Top_N_Submissions: 'Top N'
158
+ Top_N_Submissions: 'Top N',
159
+ After_Contest_Start: 'Display after N mins of contest start',
160
+ After_Contest_Start_N: 'N mins of contest start'
159
161
  },
160
162
  ScoreReport: {
161
163
  In_Game_Total_Score: 'Timed Score',
@@ -192,5 +194,29 @@ export default {
192
194
  Please_Enter_Start_Time: 'Please Enter Start Time',
193
195
  Input_Format: 'Input Format: 2025-03-12 12:00',
194
196
  Duration: 'Duration:'
197
+ },
198
+ ConfigTemplate: {
199
+ OI: 'OI',
200
+ XCPC: 'XCPC',
201
+ IOI: 'IOI',
202
+ Homework_Mode_1: 'Homework Mode 1',
203
+ Homework_Mode_2: 'Homework Mode 2',
204
+ Score_Rank: 'Rank by score',
205
+ AC_Rank: 'Rank by AC number',
206
+ Penalty_Rank: 'Same score, rank by penalty',
207
+ Show_Submission_Result: 'Show submission result in contest',
208
+ Rank_List_Visible: 'Rank list always valid',
209
+ No_Homework_Time_Limit: 'No homework time limit',
210
+ Submit_By_Highest_Score: 'Submit by highest score',
211
+ Personal_Score_Visibility: 'Personal score always visible',
212
+ Tip_Visibility: 'Tip always visible',
213
+ Cover_successfully: 'Cover successfully',
214
+ Current_Homework_Mode_Hint: 'Current is homework mode and the configuration does not match, are you sure to cover it?',
215
+ Current_Contest_Mode_Hint: 'Current is contest mode and the configuration does not match, are you sure to cover it?',
216
+ Current_Operation_Hint: 'Current operation will cover the original configuration, are you sure?',
217
+ Homework_Time_Limit_120_Minutes: 'Homework time limit 120 minutes',
218
+ Same_Score_First_AC: 'Same score, rank by first AC time',
219
+ No_Submission_Result_In_Contest: 'No submission result in contest',
220
+ Submit_By_Last_Submission: 'Submit by last submission'
195
221
  }
196
222
  };
@@ -7,7 +7,7 @@ export interface LocaleProviderProps {
7
7
  }
8
8
  export declare const LocaleProvider: ({ children, locale, }: LocaleProviderProps) => React.JSX.Element;
9
9
  type MessageMap = typeof zh_CN | typeof en_US;
10
- export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton" | "CodeDetailModal" | "ContactButton" | "ErrorPage" | "Feedback" | "MicroApp" | "ContestTimeInput" | "AcConfig" | "ScoreReport" | "SchoolInput" | "ZipCodeSearchInput" | "ContestDurationInput">(slice: T) => {
10
+ export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton" | "CodeDetailModal" | "ContactButton" | "ErrorPage" | "Feedback" | "MicroApp" | "ContestTimeInput" | "AcConfig" | "ScoreReport" | "SchoolInput" | "ZipCodeSearchInput" | "ContestDurationInput" | "ConfigTemplate">(slice: T) => {
11
11
  locale: string;
12
12
  format: <U extends keyof MessageMap[T]>(key: U) => ({
13
13
  readonly VisualDataConfig: {
@@ -167,6 +167,8 @@ export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton
167
167
  readonly Show_Top_N_Submissions: "赛中仅显示前n项提交";
168
168
  readonly Show_Top_N_Submissions_Extra: "针对单题生效";
169
169
  readonly Top_N_Submissions: "前n项";
170
+ readonly After_Contest_Start: "比赛开始后N分钟后显示";
171
+ readonly After_Contest_Start_N: "比赛开始N分钟";
170
172
  };
171
173
  readonly ScoreReport: {
172
174
  readonly In_Game_Total_Score: "赛中总分";
@@ -204,6 +206,30 @@ export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton
204
206
  readonly Input_Format: "输入格式:2025-03-12 12:00";
205
207
  readonly Duration: "持续时间:";
206
208
  };
209
+ readonly ConfigTemplate: {
210
+ readonly OI: "信息学奥林匹克";
211
+ readonly XCPC: "ACM程序设计竞赛";
212
+ readonly IOI: "国际信息学奥林匹克";
213
+ readonly Homework_Mode_1: "作业模式1";
214
+ readonly Homework_Mode_2: "作业模式2";
215
+ readonly Score_Rank: "按照分数排名";
216
+ readonly AC_Rank: "按照AC题数排名";
217
+ readonly Penalty_Rank: "相同分数按罚时排名";
218
+ readonly Show_Submission_Result: "赛中显示提交结果";
219
+ readonly Rank_List_Visible: "排行榜一直可见";
220
+ readonly No_Homework_Time_Limit: "无作业时长限制";
221
+ readonly Submit_By_Highest_Score: "提交按最高分计分";
222
+ readonly Personal_Score_Visibility: "个人分数始终可见";
223
+ readonly Tip_Visibility: "提示一直可见";
224
+ readonly Cover_successfully: "覆盖成功";
225
+ readonly Current_Homework_Mode_Hint: "当前为作业模式,相关配置不匹配,你确定要覆盖吗?";
226
+ readonly Current_Contest_Mode_Hint: "当前为考试模式,相关配置不匹配,你确定要覆盖吗?";
227
+ readonly Current_Operation_Hint: "当前操作将覆盖原有配置,你确定吗?";
228
+ readonly Homework_Time_Limit_120_Minutes: "作业时长限制120分钟";
229
+ readonly Same_Score_First_AC: "同分按首次AC时间排名";
230
+ readonly No_Submission_Result_In_Contest: "比赛中不显示提交结果";
231
+ readonly Submit_By_Last_Submission: "提交按最后一次提交时间计分";
232
+ };
207
233
  } | {
208
234
  readonly VisualDataConfig: {
209
235
  readonly Time_MS: "Time Limit(MS)";
@@ -362,6 +388,8 @@ export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton
362
388
  readonly Show_Top_N_Submissions: "Top N Submissions Display";
363
389
  readonly Show_Top_N_Submissions_Extra: "For single problem";
364
390
  readonly Top_N_Submissions: "Top N";
391
+ readonly After_Contest_Start: "Display after N mins of contest start";
392
+ readonly After_Contest_Start_N: "N mins of contest start";
365
393
  };
366
394
  readonly ScoreReport: {
367
395
  readonly In_Game_Total_Score: "Timed Score";
@@ -399,6 +427,30 @@ export declare const useLocale: <T extends "VisualDataConfig" | "TranslateButton
399
427
  readonly Input_Format: "Input Format: 2025-03-12 12:00";
400
428
  readonly Duration: "Duration:";
401
429
  };
430
+ readonly ConfigTemplate: {
431
+ readonly OI: "OI";
432
+ readonly XCPC: "XCPC";
433
+ readonly IOI: "IOI";
434
+ readonly Homework_Mode_1: "Homework Mode 1";
435
+ readonly Homework_Mode_2: "Homework Mode 2";
436
+ readonly Score_Rank: "Rank by score";
437
+ readonly AC_Rank: "Rank by AC number";
438
+ readonly Penalty_Rank: "Same score, rank by penalty";
439
+ readonly Show_Submission_Result: "Show submission result in contest";
440
+ readonly Rank_List_Visible: "Rank list always valid";
441
+ readonly No_Homework_Time_Limit: "No homework time limit";
442
+ readonly Submit_By_Highest_Score: "Submit by highest score";
443
+ readonly Personal_Score_Visibility: "Personal score always visible";
444
+ readonly Tip_Visibility: "Tip always visible";
445
+ readonly Cover_successfully: "Cover successfully";
446
+ readonly Current_Homework_Mode_Hint: "Current is homework mode and the configuration does not match, are you sure to cover it?";
447
+ readonly Current_Contest_Mode_Hint: "Current is contest mode and the configuration does not match, are you sure to cover it?";
448
+ readonly Current_Operation_Hint: "Current operation will cover the original configuration, are you sure?";
449
+ readonly Homework_Time_Limit_120_Minutes: "Homework time limit 120 minutes";
450
+ readonly Same_Score_First_AC: "Same score, rank by first AC time";
451
+ readonly No_Submission_Result_In_Contest: "No submission result in contest";
452
+ readonly Submit_By_Last_Submission: "Submit by last submission";
453
+ };
402
454
  })[T][U];
403
455
  };
404
456
  export {};
@@ -156,6 +156,8 @@ declare const _default: {
156
156
  readonly Show_Top_N_Submissions: "赛中仅显示前n项提交";
157
157
  readonly Show_Top_N_Submissions_Extra: "针对单题生效";
158
158
  readonly Top_N_Submissions: "前n项";
159
+ readonly After_Contest_Start: "比赛开始后N分钟后显示";
160
+ readonly After_Contest_Start_N: "比赛开始N分钟";
159
161
  };
160
162
  readonly ScoreReport: {
161
163
  readonly In_Game_Total_Score: "赛中总分";
@@ -193,5 +195,29 @@ declare const _default: {
193
195
  readonly Input_Format: "输入格式:2025-03-12 12:00";
194
196
  readonly Duration: "持续时间:";
195
197
  };
198
+ readonly ConfigTemplate: {
199
+ readonly OI: "信息学奥林匹克";
200
+ readonly XCPC: "ACM程序设计竞赛";
201
+ readonly IOI: "国际信息学奥林匹克";
202
+ readonly Homework_Mode_1: "作业模式1";
203
+ readonly Homework_Mode_2: "作业模式2";
204
+ readonly Score_Rank: "按照分数排名";
205
+ readonly AC_Rank: "按照AC题数排名";
206
+ readonly Penalty_Rank: "相同分数按罚时排名";
207
+ readonly Show_Submission_Result: "赛中显示提交结果";
208
+ readonly Rank_List_Visible: "排行榜一直可见";
209
+ readonly No_Homework_Time_Limit: "无作业时长限制";
210
+ readonly Submit_By_Highest_Score: "提交按最高分计分";
211
+ readonly Personal_Score_Visibility: "个人分数始终可见";
212
+ readonly Tip_Visibility: "提示一直可见";
213
+ readonly Cover_successfully: "覆盖成功";
214
+ readonly Current_Homework_Mode_Hint: "当前为作业模式,相关配置不匹配,你确定要覆盖吗?";
215
+ readonly Current_Contest_Mode_Hint: "当前为考试模式,相关配置不匹配,你确定要覆盖吗?";
216
+ readonly Current_Operation_Hint: "当前操作将覆盖原有配置,你确定吗?";
217
+ readonly Homework_Time_Limit_120_Minutes: "作业时长限制120分钟";
218
+ readonly Same_Score_First_AC: "同分按首次AC时间排名";
219
+ readonly No_Submission_Result_In_Contest: "比赛中不显示提交结果";
220
+ readonly Submit_By_Last_Submission: "提交按最后一次提交时间计分";
221
+ };
196
222
  };
197
223
  export default _default;
@@ -155,7 +155,9 @@ export default {
155
155
  Duration_Cannot_Be_Set_To_Zero: '持续时间不能设置为0',
156
156
  Show_Top_N_Submissions: '赛中仅显示前n项提交',
157
157
  Show_Top_N_Submissions_Extra: '针对单题生效',
158
- Top_N_Submissions: '前n项'
158
+ Top_N_Submissions: '前n项',
159
+ After_Contest_Start: '比赛开始后N分钟后显示',
160
+ After_Contest_Start_N: '比赛开始N分钟'
159
161
  },
160
162
  ScoreReport: {
161
163
  In_Game_Total_Score: '赛中总分',
@@ -192,5 +194,29 @@ export default {
192
194
  Please_Enter_Start_Time: '请输入开始时间',
193
195
  Input_Format: '输入格式:2025-03-12 12:00',
194
196
  Duration: '持续时间:'
197
+ },
198
+ ConfigTemplate: {
199
+ OI: '信息学奥林匹克',
200
+ XCPC: 'ACM程序设计竞赛',
201
+ IOI: '国际信息学奥林匹克',
202
+ Homework_Mode_1: '作业模式1',
203
+ Homework_Mode_2: '作业模式2',
204
+ Score_Rank: '按照分数排名',
205
+ AC_Rank: '按照AC题数排名',
206
+ Penalty_Rank: '相同分数按罚时排名',
207
+ Show_Submission_Result: '赛中显示提交结果',
208
+ Rank_List_Visible: '排行榜一直可见',
209
+ No_Homework_Time_Limit: '无作业时长限制',
210
+ Submit_By_Highest_Score: '提交按最高分计分',
211
+ Personal_Score_Visibility: '个人分数始终可见',
212
+ Tip_Visibility: '提示一直可见',
213
+ Cover_successfully: '覆盖成功',
214
+ Current_Homework_Mode_Hint: '当前为作业模式,相关配置不匹配,你确定要覆盖吗?',
215
+ Current_Contest_Mode_Hint: '当前为考试模式,相关配置不匹配,你确定要覆盖吗?',
216
+ Current_Operation_Hint: '当前操作将覆盖原有配置,你确定吗?',
217
+ Homework_Time_Limit_120_Minutes: '作业时长限制120分钟',
218
+ Same_Score_First_AC: '同分按首次AC时间排名',
219
+ No_Submission_Result_In_Contest: '比赛中不显示提交结果',
220
+ Submit_By_Last_Submission: '提交按最后一次提交时间计分'
195
221
  }
196
222
  };
@@ -780,3 +780,37 @@
780
780
  font-size: 14px;
781
781
  color: rgba(0, 0, 0, 0.4509803922);
782
782
  }
783
+
784
+ .x-star-design-templateCard {
785
+ height: 100%;
786
+ transition: all 0.3s;
787
+ cursor: pointer;
788
+ }
789
+ .x-star-design-templateCard:hover {
790
+ transform: translateY(-2px);
791
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
792
+ }
793
+ .x-star-design-templateCard.selected {
794
+ border: 2px solid #1990fe;
795
+ }
796
+ .x-star-design-templateCard .x-star-design-type {
797
+ padding: 2px 8px;
798
+ width: fit-content;
799
+ border-radius: 4px;
800
+ color: #1990fe;
801
+ background-color: #e6f4ff;
802
+ }
803
+ .x-star-design-templateCard .x-star-design-title {
804
+ display: block;
805
+ margin-bottom: 12px;
806
+ font-size: 16px;
807
+ }
808
+ .x-star-design-templateCard .x-star-design-features .x-star-design-featureItem {
809
+ display: flex;
810
+ align-items: center;
811
+ margin-bottom: 8px;
812
+ }
813
+ .x-star-design-templateCard .x-star-design-features .x-star-design-featureItem .x-star-design-icon {
814
+ margin-right: 8px;
815
+ color: #1990fe;
816
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "x-star-design",
3
- "version": "0.0.90",
3
+ "version": "0.0.92",
4
4
  "description": "A react component library developed by turingstar",
5
5
  "license": "MIT",
6
6
  "module": "dist/index.js",