@team-monolith/cds 1.122.4 → 1.122.6
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/@types/emotion.d.ts +162 -162
- package/README.md +37 -37
- package/dist/CdsProvider.js +4 -4
- package/dist/components/AlertDialog/AlertDialog.js +54 -54
- package/dist/components/AlertDialog/AlertDialogActions.js +7 -7
- package/dist/components/AlertDialog/AlertDialogContent.js +8 -8
- package/dist/components/AlertDialog/AlertDialogTitle.js +34 -34
- package/dist/components/AnimatedButton.js +32 -32
- package/dist/components/Banner.js +51 -51
- package/dist/components/Book/Book.js +174 -174
- package/dist/components/Button.js +179 -179
- package/dist/components/CheckboxInput.js +148 -148
- package/dist/components/FileTypeAlertDialog.js +4 -4
- package/dist/components/Input.js +53 -53
- package/dist/components/InputBase.js +72 -72
- package/dist/components/Modal.js +4 -4
- package/dist/components/OverflowTooltip.js +4 -4
- package/dist/components/Pagination.js +56 -56
- package/dist/components/PinInput.js +64 -64
- package/dist/components/Popover.js +27 -27
- package/dist/components/RadioInput.js +73 -73
- package/dist/components/Slider.js +58 -58
- package/dist/components/SquareButton.js +109 -109
- package/dist/components/Switch.js +69 -69
- package/dist/components/SwitchButton.js +107 -107
- package/dist/components/Tag.js +72 -72
- package/dist/components/Tooltip.js +19 -19
- package/dist/foundation/breakpoints.d.ts +2 -0
- package/dist/foundation/breakpoints.js +18 -16
- package/dist/icons/custom/colored/ai-helper.svg +4 -4
- package/dist/icons/custom/colored/ai-quiz-color.svg +20 -20
- package/dist/icons/custom/colored/ai-socroom-color.svg +14 -14
- package/dist/icons/custom/colored/badge-color.svg +4 -4
- package/dist/icons/custom/colored/badge-gold.svg +11 -11
- package/dist/icons/custom/colored/badge-green.svg +11 -11
- package/dist/icons/custom/colored/badge-silver.svg +11 -11
- package/dist/icons/custom/colored/basic-plus.svg +31 -31
- package/dist/icons/custom/colored/basic.svg +3 -3
- package/dist/icons/custom/colored/board-color.svg +5 -5
- package/dist/icons/custom/colored/cast-cloudy-color.svg +6 -6
- package/dist/icons/custom/colored/cast-partly-color.svg +7 -7
- package/dist/icons/custom/colored/cast-rainbow-color.svg +13 -13
- package/dist/icons/custom/colored/cast-sunny-color.svg +4 -4
- package/dist/icons/custom/colored/clap-bronze.svg +8 -8
- package/dist/icons/custom/colored/clap-gold.svg +8 -8
- package/dist/icons/custom/colored/clap-silver.svg +8 -8
- package/dist/icons/custom/colored/class.svg +13 -13
- package/dist/icons/custom/colored/codap-color.svg +13 -13
- package/dist/icons/custom/colored/ebook-color.svg +5 -5
- package/dist/icons/custom/colored/embedded-color.svg +38 -38
- package/dist/icons/custom/colored/emo-clap-color.svg +252 -252
- package/dist/icons/custom/colored/emo-good-color.svg +68 -68
- package/dist/icons/custom/colored/emo-great-color.svg +67 -67
- package/dist/icons/custom/colored/emo-heart-color.svg +239 -239
- package/dist/icons/custom/colored/emo-hundred-color.svg +194 -194
- package/dist/icons/custom/colored/emo-neutral-color.svg +76 -76
- package/dist/icons/custom/colored/emo-stars-color.svg +121 -121
- package/dist/icons/custom/colored/emo-thumbup-color.svg +238 -238
- package/dist/icons/custom/colored/empty.svg +1 -1
- package/dist/icons/custom/colored/entry-color.svg +4 -4
- package/dist/icons/custom/colored/filename-all-color.svg +4 -4
- package/dist/icons/custom/colored/filename-doc-color.svg +5 -5
- package/dist/icons/custom/colored/filename-hwp-color.svg +6 -6
- package/dist/icons/custom/colored/filename-img-color.svg +6 -6
- package/dist/icons/custom/colored/filename-mp4-color.svg +5 -5
- package/dist/icons/custom/colored/filename-pdf-color.svg +12 -12
- package/dist/icons/custom/colored/filename-ppt-color.svg +6 -6
- package/dist/icons/custom/colored/filename-xls-color.svg +5 -5
- package/dist/icons/custom/colored/filename-zip-color.svg +5 -5
- package/dist/icons/custom/colored/google.svg +13 -13
- package/dist/icons/custom/colored/hand-fill.svg +4 -4
- package/dist/icons/custom/colored/judge-color.svg +6 -6
- package/dist/icons/custom/colored/makecode-color.svg +4 -4
- package/dist/icons/custom/colored/master.svg +12 -12
- package/dist/icons/custom/colored/material.svg +6 -6
- package/dist/icons/custom/colored/medal-bronze.svg +9 -9
- package/dist/icons/custom/colored/medal-gold.svg +9 -9
- package/dist/icons/custom/colored/medal-silver.svg +9 -9
- package/dist/icons/custom/colored/pro.svg +4 -4
- package/dist/icons/custom/colored/problem.svg +7 -7
- package/dist/icons/custom/colored/python-color.svg +4 -4
- package/dist/icons/custom/colored/quiz-color.svg +12 -12
- package/dist/icons/custom/colored/resource-color.svg +13 -13
- package/dist/icons/custom/colored/scratch-color.svg +6 -6
- package/dist/icons/custom/colored/type-helper.svg +9 -9
- package/dist/icons/custom/colored/whale.svg +7 -7
- package/dist/icons/custom/colored/worksheet-color.svg +5 -5
- package/dist/icons/custom/default/ai-quiz.svg +8 -8
- package/dist/icons/custom/default/ai-socroom.svg +13 -13
- package/dist/icons/custom/default/badge.svg +4 -4
- package/dist/icons/custom/default/board.svg +5 -5
- package/dist/icons/custom/default/cast-cloudy.svg +3 -3
- package/dist/icons/custom/default/cast-partly.svg +4 -4
- package/dist/icons/custom/default/cast-rainbow.svg +12 -12
- package/dist/icons/custom/default/cast-sunny.svg +3 -3
- package/dist/icons/custom/default/codap.svg +11 -11
- package/dist/icons/custom/default/ebook.svg +3 -3
- package/dist/icons/custom/default/embedded.svg +4 -4
- package/dist/icons/custom/default/emo-clap.svg +6 -6
- package/dist/icons/custom/default/emo-good.svg +12 -12
- package/dist/icons/custom/default/emo-great.svg +12 -12
- package/dist/icons/custom/default/emo-heart.svg +5 -5
- package/dist/icons/custom/default/emo-hundred.svg +3 -3
- package/dist/icons/custom/default/emo-neutral.svg +14 -14
- package/dist/icons/custom/default/emo-stars.svg +14 -14
- package/dist/icons/custom/default/emo-thumbup.svg +3 -3
- package/dist/icons/custom/default/entry.svg +4 -4
- package/dist/icons/custom/default/fab.svg +10 -10
- package/dist/icons/custom/default/grant-alt.svg +5 -5
- package/dist/icons/custom/default/grant.svg +4 -4
- package/dist/icons/custom/default/hand-line.svg +3 -3
- package/dist/icons/custom/default/judge.svg +3 -3
- package/dist/icons/custom/default/makecode.svg +5 -5
- package/dist/icons/custom/default/pdf.svg +3 -3
- package/dist/icons/custom/default/python.svg +7 -7
- package/dist/icons/custom/default/quiz.svg +4 -4
- package/dist/icons/custom/default/resource.svg +11 -11
- package/dist/icons/custom/default/scratch.svg +3 -3
- package/dist/icons/custom/default/scroll-alt.svg +5 -5
- package/dist/icons/custom/default/scroll-fill.svg +4 -4
- package/dist/icons/custom/default/scroll-line.svg +5 -5
- package/dist/icons/custom/default/symbol.svg +4 -4
- package/dist/icons/custom/default/worksheet.svg +4 -4
- package/dist/icons/custom/svgrColoredTemplate.js +26 -26
- package/dist/icons/custom/svgrDefaultTemplate.js +26 -26
- package/dist/patterns/Accordion.js +20 -20
- package/dist/patterns/Dropdown/DropdownItem/DropdownItem.js +60 -60
- package/dist/patterns/Dropdown/DropdownMenu/DropdownMenu.js +27 -27
- package/dist/patterns/Dropdown/DropdownMenu/style.js +19 -19
- package/dist/patterns/LexicalEditor/Plugins.js +36 -36
- package/dist/patterns/LexicalEditor/components/FileSelectInput.js +23 -23
- package/dist/patterns/LexicalEditor/components/InsertImageDialog/ImagePreview.js +4 -4
- package/dist/patterns/LexicalEditor/components/InsertImageDialog/InsertImageDialog.js +15 -15
- package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.js +17 -17
- package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +2 -2
- package/dist/patterns/LexicalEditor/hr.svg +3 -3
- package/dist/patterns/LexicalEditor/nodes/FileNode/FileComponent.js +44 -44
- package/dist/patterns/LexicalEditor/nodes/FileNode/FileDownloadButton.js +25 -25
- package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageComponent.js +8 -8
- package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageResizer.js +60 -60
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +19 -19
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SegmentedInput.js +49 -49
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormSolution.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +73 -73
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/TextTypeDropdown.js +5 -5
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/TextInput.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxComponent.js +69 -69
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxEdit.js +3 -3
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -15
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +28 -28
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/FormSelection.js +54 -54
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +61 -61
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/Evaluation.js +75 -75
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +17 -17
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +28 -28
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +52 -52
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +25 -25
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +53 -53
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxComponent.js +54 -54
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxView.js +5 -5
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +21 -21
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/FormSelection.js +42 -42
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +71 -71
- package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.js +7 -7
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdder.js +51 -51
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +11 -11
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/menu.svg +7 -7
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/plus.svg +2 -2
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js +32 -32
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js +32 -32
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +12 -12
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/componentPickerOptionUtils.js +2 -2
- package/dist/patterns/LexicalEditor/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +49 -49
- package/dist/patterns/LexicalEditor/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatPopup.js +36 -36
- package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +7 -7
- package/dist/patterns/LexicalEditor/theme.js +243 -243
- package/dist/patterns/SegmentedControl/SegmentedControlButton.js +10 -10
- package/dist/patterns/SegmentedControl/SegmentedControlGroup.js +8 -8
- package/dist/patterns/SegmentedControl/SegmentedControlSquareButton.js +2 -2
- package/dist/patterns/Tabs.js +43 -43
- package/dist/patterns/ToggleButtonGroup/ToggleButton.js +40 -40
- package/dist/patterns/ToggleButtonGroup/ToggleButtonGroup.js +11 -11
- package/dist/utils/hover.js +12 -12
- package/dist/utils/reset.js +19 -19
- package/dist/utils/visuallyHidden.js +10 -10
- package/package.json +109 -109
|
@@ -61,27 +61,27 @@ export function InputComponent(props) {
|
|
|
61
61
|
}, fullWidth: true }));
|
|
62
62
|
}
|
|
63
63
|
// 교사 edit view
|
|
64
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { css: css `
|
|
65
|
-
display: flex;
|
|
66
|
-
align-items: center;
|
|
67
|
-
gap: 4px;
|
|
64
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { css: css `
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: 4px;
|
|
68
68
|
`, children: [_jsx(VirtualInput, { onClick: () => setSettingOpen(true), children: t("주관식 입력 칸", { context: "렉시컬 주관식 입력 도구" }) }), _jsx(SquareButton, { size: "small", color: "icon", icon: _jsx(Settings3FillIcon, {}), onClick: () => {
|
|
69
69
|
setSettingOpen(true);
|
|
70
70
|
}, "aria-label": t("입력 칸 설정", { context: "렉시컬 주관식 입력 도구" }) })] }), settingOpen && (_jsx(SettingForm, Object.assign({}, settingFormProps, { onClose: () => setSettingOpen(false) })))] }));
|
|
71
71
|
}
|
|
72
|
-
const VirtualInput = styled.div(({ theme }) => css `
|
|
73
|
-
box-sizing: border-box;
|
|
74
|
-
height: 36px;
|
|
75
|
-
width: 300px;
|
|
76
|
-
padding: 8px 16px;
|
|
77
|
-
align-items: center;
|
|
78
|
-
border-radius: 8px;
|
|
79
|
-
background: ${theme.color.background.neutralAlt};
|
|
80
|
-
cursor: pointer;
|
|
81
|
-
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
82
|
-
font-family: ${theme.fontFamily.ui};
|
|
83
|
-
font-size: 14px;
|
|
84
|
-
font-style: normal;
|
|
85
|
-
font-weight: 400;
|
|
86
|
-
line-height: 20px; /* 142.857% */
|
|
72
|
+
const VirtualInput = styled.div(({ theme }) => css `
|
|
73
|
+
box-sizing: border-box;
|
|
74
|
+
height: 36px;
|
|
75
|
+
width: 300px;
|
|
76
|
+
padding: 8px 16px;
|
|
77
|
+
align-items: center;
|
|
78
|
+
border-radius: 8px;
|
|
79
|
+
background: ${theme.color.background.neutralAlt};
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
82
|
+
font-family: ${theme.fontFamily.ui};
|
|
83
|
+
font-size: 14px;
|
|
84
|
+
font-style: normal;
|
|
85
|
+
font-weight: 400;
|
|
86
|
+
line-height: 20px; /* 142.857% */
|
|
87
87
|
`);
|
|
@@ -91,13 +91,13 @@ export function SegmentedInput(props) {
|
|
|
91
91
|
setIsHiddenInputFocused(false);
|
|
92
92
|
onChange(getFormattedValue(e.target.value).slice(0, answerFormat.length));
|
|
93
93
|
setIsComposing(false);
|
|
94
|
-
}, css: css `
|
|
95
|
-
opacity: 0;
|
|
96
|
-
height: 0;
|
|
97
|
-
` }), _jsxs(InputWrapper, { children: [_jsx("div", { css: css `
|
|
98
|
-
display: flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
gap: 4px;
|
|
94
|
+
}, css: css `
|
|
95
|
+
opacity: 0;
|
|
96
|
+
height: 0;
|
|
97
|
+
` }), _jsxs(InputWrapper, { children: [_jsx("div", { css: css `
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
gap: 4px;
|
|
101
101
|
`, children: despacedFormat.map((_format, i) => (_jsx(SquareInput, { leftSpaced: leftSpacedIndexs.includes(i), size: "small", color: isCorrect === true
|
|
102
102
|
? "activeSuccess"
|
|
103
103
|
: isCorrect === false
|
|
@@ -105,10 +105,10 @@ export function SegmentedInput(props) {
|
|
|
105
105
|
: isHiddenInputFocused && isSelectedSquareInputIndex(i)
|
|
106
106
|
? "activePrimary"
|
|
107
107
|
: "default", css: isCorrect === false &&
|
|
108
|
-
css `
|
|
109
|
-
input {
|
|
110
|
-
color: ${theme.color.foreground.danger};
|
|
111
|
-
}
|
|
108
|
+
css `
|
|
109
|
+
input {
|
|
110
|
+
color: ${theme.color.foreground.danger};
|
|
111
|
+
}
|
|
112
112
|
`, inputProps: {
|
|
113
113
|
readOnly,
|
|
114
114
|
tabIndex: -1,
|
|
@@ -124,47 +124,47 @@ export function SegmentedInput(props) {
|
|
|
124
124
|
},
|
|
125
125
|
}, value: splitedValues[i] || "", onChange: () => { } }, i))) }), _jsx(InputMarker, {})] }), _jsx(Text, { children: placeholder })] }));
|
|
126
126
|
}
|
|
127
|
-
const Container = styled.div `
|
|
128
|
-
display: flex;
|
|
129
|
-
width: fit-content;
|
|
130
|
-
flex-direction: column;
|
|
131
|
-
justify-content: center;
|
|
132
|
-
gap: 8px;
|
|
127
|
+
const Container = styled.div `
|
|
128
|
+
display: flex;
|
|
129
|
+
width: fit-content;
|
|
130
|
+
flex-direction: column;
|
|
131
|
+
justify-content: center;
|
|
132
|
+
gap: 8px;
|
|
133
133
|
`;
|
|
134
|
-
const InputWrapper = styled.div `
|
|
135
|
-
display: flex;
|
|
136
|
-
width: fit-content;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
gap: 8px;
|
|
139
|
-
margin: auto;
|
|
134
|
+
const InputWrapper = styled.div `
|
|
135
|
+
display: flex;
|
|
136
|
+
width: fit-content;
|
|
137
|
+
flex-direction: column;
|
|
138
|
+
gap: 8px;
|
|
139
|
+
margin: auto;
|
|
140
140
|
`;
|
|
141
|
-
const SquareInput = styled(InputBase)(({ leftSpaced }) => css `
|
|
142
|
-
width: 36px;
|
|
143
|
-
height: 36px;
|
|
144
|
-
padding-left: 0;
|
|
145
|
-
padding-right: 0;
|
|
146
|
-
input {
|
|
147
|
-
text-align: center;
|
|
148
|
-
}
|
|
141
|
+
const SquareInput = styled(InputBase)(({ leftSpaced }) => css `
|
|
142
|
+
width: 36px;
|
|
143
|
+
height: 36px;
|
|
144
|
+
padding-left: 0;
|
|
145
|
+
padding-right: 0;
|
|
146
|
+
input {
|
|
147
|
+
text-align: center;
|
|
148
|
+
}
|
|
149
149
|
${leftSpaced &&
|
|
150
|
-
css `
|
|
151
|
-
margin-left: 8px;
|
|
152
|
-
`}
|
|
150
|
+
css `
|
|
151
|
+
margin-left: 8px;
|
|
152
|
+
`}
|
|
153
153
|
`);
|
|
154
|
-
const InputMarker = styled.div(({ theme }) => css `
|
|
155
|
-
height: 8px;
|
|
156
|
-
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
157
|
-
border-top: none;
|
|
158
|
-
border-bottom-left-radius: 4px;
|
|
159
|
-
border-bottom-right-radius: 4px;
|
|
154
|
+
const InputMarker = styled.div(({ theme }) => css `
|
|
155
|
+
height: 8px;
|
|
156
|
+
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
157
|
+
border-top: none;
|
|
158
|
+
border-bottom-left-radius: 4px;
|
|
159
|
+
border-bottom-right-radius: 4px;
|
|
160
160
|
`);
|
|
161
|
-
const Text = styled.span(({ theme }) => css `
|
|
162
|
-
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
163
|
-
text-align: center;
|
|
164
|
-
/* Default/Label/12px-Md */
|
|
165
|
-
font-family: ${theme.fontFamily.ui};
|
|
166
|
-
font-size: 12px;
|
|
167
|
-
font-style: normal;
|
|
168
|
-
font-weight: 500;
|
|
169
|
-
line-height: 16px; /* 133.333% */
|
|
161
|
+
const Text = styled.span(({ theme }) => css `
|
|
162
|
+
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
163
|
+
text-align: center;
|
|
164
|
+
/* Default/Label/12px-Md */
|
|
165
|
+
font-family: ${theme.fontFamily.ui};
|
|
166
|
+
font-size: 12px;
|
|
167
|
+
font-style: normal;
|
|
168
|
+
font-weight: 500;
|
|
169
|
+
line-height: 16px; /* 133.333% */
|
|
170
170
|
`);
|
|
@@ -14,13 +14,13 @@ export function FormSolution(props) {
|
|
|
14
14
|
const { t } = useTranslation();
|
|
15
15
|
return (_jsx(Controller, { name: `solutions.${index}.value`, control: control, rules: rules, render: ({ field: { value, onChange }, fieldState: { invalid, error }, }) => {
|
|
16
16
|
const disabled = (error === null || error === void 0 ? void 0 : error.type) === "enabled";
|
|
17
|
-
return (_jsx(Input, { size: "small", color: invalid ? "activeDanger" : "default", onChange: onChange, disabled: disabled, value: value, hintIcon: !disabled && invalid ? _jsx(ErrorWarningFillIcon, {}) : undefined, hintText: !disabled ? error === null || error === void 0 ? void 0 : error.message : undefined, placeholder: t("안녕하세요"), fullWidth: true, css: css `
|
|
18
|
-
> div {
|
|
19
|
-
padding: 4px 12px;
|
|
20
|
-
}
|
|
21
|
-
`, startIcon: _jsx(TextTypeDropdown, { index: index, control: control, disabled: disabled }), endIcon: _jsxs("div", { css: css `
|
|
22
|
-
display: flex;
|
|
23
|
-
gap: 4px;
|
|
17
|
+
return (_jsx(Input, { size: "small", color: invalid ? "activeDanger" : "default", onChange: onChange, disabled: disabled, value: value, hintIcon: !disabled && invalid ? _jsx(ErrorWarningFillIcon, {}) : undefined, hintText: !disabled ? error === null || error === void 0 ? void 0 : error.message : undefined, placeholder: t("안녕하세요"), fullWidth: true, css: css `
|
|
18
|
+
> div {
|
|
19
|
+
padding: 4px 12px;
|
|
20
|
+
}
|
|
21
|
+
`, startIcon: _jsx(TextTypeDropdown, { index: index, control: control, disabled: disabled }), endIcon: _jsxs("div", { css: css `
|
|
22
|
+
display: flex;
|
|
23
|
+
gap: 4px;
|
|
24
24
|
`, children: [onDelete && (_jsx(SquareButton, { color: "white", size: "xsmall", icon: _jsx(DeleteBinLineIcon, {}), onClick: onDelete, "aria-label": t("삭제", {
|
|
25
25
|
context: "스퀘어버튼, 렉시컬 주관식 설정창",
|
|
26
26
|
}) })), disabled && (_jsx(Tooltip, { text: _jsx("span", { children: _jsx(Trans, { i18nKey: "\uC785\uB825 \uCE78 \uC124\uC815\uC774 '\uAE00\uC790 \uC218\uB300\uB85C'\uC778 \uACBD\uC6B0<br/>\uC815\uB2F5\uC744 \uD558\uB098\uB9CC \uB4F1\uB85D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4." }) }), children: _jsx(SquareButton, { color: "danger", size: "xsmall", icon: _jsx(AlertFillIcon, { color: theme.color.foreground.neutralAlt }), disabled: true, "aria-label": t("정답 등록 불가") }) }))] }) }));
|
|
@@ -51,9 +51,9 @@ export function SettingForm(props) {
|
|
|
51
51
|
onClose();
|
|
52
52
|
};
|
|
53
53
|
const multipleSolutionsDisabled = watch("showCharacterNumber");
|
|
54
|
-
return (_jsxs(Form, { onSubmit: handleSubmit(onSettingSubmit), children: [_jsxs(Title, { children: [_jsx(InputMethodLineIcon, { css: css `
|
|
55
|
-
width: 12px;
|
|
56
|
-
height: 12px;
|
|
54
|
+
return (_jsxs(Form, { onSubmit: handleSubmit(onSettingSubmit), children: [_jsxs(Title, { children: [_jsx(InputMethodLineIcon, { css: css `
|
|
55
|
+
width: 12px;
|
|
56
|
+
height: 12px;
|
|
57
57
|
` }), t("주관식 입력 칸", { context: "렉시컬 주관식 설정창" })] }), _jsxs(Content, { children: [_jsxs(Left, { children: [_jsxs(FormArea, { children: [_jsx(Label, { children: t("정답", { context: "소제목, 렉시컬 주관식 설정창" }) }), fields.map((field, index) => (_jsx(FormSolution, { index: index, control: control, rules: {
|
|
58
58
|
validate: {
|
|
59
59
|
// required 옵션보다 먼저 검증되어야 하는데 priority 옵션이 없어서 validate에서 통합해서 검증합니다.
|
|
@@ -71,21 +71,21 @@ export function SettingForm(props) {
|
|
|
71
71
|
textType: "normal",
|
|
72
72
|
value: "",
|
|
73
73
|
});
|
|
74
|
-
} }), _jsxs("div", { css: css `
|
|
75
|
-
display: flex;
|
|
76
|
-
gap: 4px;
|
|
77
|
-
`, children: [_jsx(AlarmWarningFillIcon, { color: theme.color.foreground.neutralBaseDisabled, css: css `
|
|
78
|
-
width: 14px;
|
|
79
|
-
height: 14px;
|
|
80
|
-
` }), _jsx(Label, { children: t("가능한 정답을 모두 추가해야 원활하게 자동 채점할 수 있어요.") })] })] }), _jsxs(Right, { children: [_jsxs(FormArea, { children: [_jsxs(Label, { children: [t("입력 칸"), _jsx(Tooltip, { text: _jsx("span", { children: _jsx(Trans, { i18nKey: "\uC608\uB97C \uB4E4\uC5B4 \uC815\uB2F5\uC774 '\uAE00\uC790 \uC218'\uC774\uACE0<br /><strong>{{numCharOptionStr}}</strong> \uC635\uC158\uC744 \uC120\uD0DD\uD588\uB2E4\uBA74<br />\uC785\uB825 \uCE78\uC774 '\u2610\u2610 \u2610' \uCC98\uB7FC \uD45C\uC2DC\uB429\uB2C8\uB2E4.", values: { numCharOptionStr } }) }), placement: "top", children: _jsx(QuestionFillIcon, { css: css `
|
|
81
|
-
width: 12px;
|
|
82
|
-
height: 12px;
|
|
74
|
+
} }), _jsxs("div", { css: css `
|
|
75
|
+
display: flex;
|
|
76
|
+
gap: 4px;
|
|
77
|
+
`, children: [_jsx(AlarmWarningFillIcon, { color: theme.color.foreground.neutralBaseDisabled, css: css `
|
|
78
|
+
width: 14px;
|
|
79
|
+
height: 14px;
|
|
80
|
+
` }), _jsx(Label, { children: t("가능한 정답을 모두 추가해야 원활하게 자동 채점할 수 있어요.") })] })] }), _jsxs(Right, { children: [_jsxs(FormArea, { children: [_jsxs(Label, { children: [t("입력 칸"), _jsx(Tooltip, { text: _jsx("span", { children: _jsx(Trans, { i18nKey: "\uC608\uB97C \uB4E4\uC5B4 \uC815\uB2F5\uC774 '\uAE00\uC790 \uC218'\uC774\uACE0<br /><strong>{{numCharOptionStr}}</strong> \uC635\uC158\uC744 \uC120\uD0DD\uD588\uB2E4\uBA74<br />\uC785\uB825 \uCE78\uC774 '\u2610\u2610 \u2610' \uCC98\uB7FC \uD45C\uC2DC\uB429\uB2C8\uB2E4.", values: { numCharOptionStr } }) }), placement: "top", children: _jsx(QuestionFillIcon, { css: css `
|
|
81
|
+
width: 12px;
|
|
82
|
+
height: 12px;
|
|
83
83
|
` }) })] }), _jsx(FormSegmentedControl, { control: control, trigger: trigger, name: "showCharacterNumber", items: [
|
|
84
84
|
{ value: false, label: t("한 칸으로") },
|
|
85
85
|
{ value: true, label: numCharOptionStr },
|
|
86
|
-
] })] }), _jsxs(FormArea, { children: [_jsxs(Label, { children: [t("자리 표시자", { context: "렉시컬 주관식 설정창" }), _jsx(Tooltip, { text: getTexts(t, "descriptionDefaultInputText"), placement: "top", children: _jsx(QuestionFillIcon, { css: css `
|
|
87
|
-
width: 12px;
|
|
88
|
-
height: 12px;
|
|
86
|
+
] })] }), _jsxs(FormArea, { children: [_jsxs(Label, { children: [t("자리 표시자", { context: "렉시컬 주관식 설정창" }), _jsx(Tooltip, { text: getTexts(t, "descriptionDefaultInputText"), placement: "top", children: _jsx(QuestionFillIcon, { css: css `
|
|
87
|
+
width: 12px;
|
|
88
|
+
height: 12px;
|
|
89
89
|
` }) })] }), _jsx(FormPlaceholder, { control: control })] }), _jsxs(FormArea, { children: [_jsx(Label, { children: t("띄어쓰기") }), _jsx(FormSegmentedControl, { control: control, trigger: trigger, name: "ignoreWhitespace", items: [
|
|
90
90
|
{ value: true, label: t("무시하기") },
|
|
91
91
|
{ value: false, label: t("포함하기") },
|
|
@@ -94,69 +94,69 @@ export function SettingForm(props) {
|
|
|
94
94
|
{ value: true, label: t("포함하기") },
|
|
95
95
|
] })] })] })] }), _jsxs(Buttons, { children: [_jsx(Button, { color: "grey", size: "xsmall", label: t("닫기", { context: "렉시컬 도구 설정창" }), onClick: onClose }), _jsx(Button, { color: "primary", size: "xsmall", label: t("이대로 넣기", { context: "렉시컬 도구 설정창" }), type: "submit" })] })] }));
|
|
96
96
|
}
|
|
97
|
-
const Form = styled.form(({ theme }) => css `
|
|
98
|
-
display: flex;
|
|
99
|
-
width: 620px;
|
|
100
|
-
flex-direction: column;
|
|
101
|
-
border-radius: 6px;
|
|
102
|
-
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
103
|
-
background: ${theme.color.background.neutralBase};
|
|
104
|
-
box-shadow: ${shadows.shadow08};
|
|
97
|
+
const Form = styled.form(({ theme }) => css `
|
|
98
|
+
display: flex;
|
|
99
|
+
width: 620px;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
border-radius: 6px;
|
|
102
|
+
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
103
|
+
background: ${theme.color.background.neutralBase};
|
|
104
|
+
box-shadow: ${shadows.shadow08};
|
|
105
105
|
`);
|
|
106
|
-
const Title = styled.div(({ theme }) => css `
|
|
107
|
-
display: flex;
|
|
108
|
-
padding: 8px 12px;
|
|
109
|
-
gap: 4px;
|
|
110
|
-
align-items: center;
|
|
111
|
-
color: ${theme.color.foreground.neutralBase};
|
|
112
|
-
/* Default/Label/12px-Md */
|
|
113
|
-
font-family: ${theme.fontFamily.ui};
|
|
114
|
-
font-size: 12px;
|
|
115
|
-
font-style: normal;
|
|
116
|
-
font-weight: 500;
|
|
117
|
-
line-height: 16px; /* 133.333% */
|
|
106
|
+
const Title = styled.div(({ theme }) => css `
|
|
107
|
+
display: flex;
|
|
108
|
+
padding: 8px 12px;
|
|
109
|
+
gap: 4px;
|
|
110
|
+
align-items: center;
|
|
111
|
+
color: ${theme.color.foreground.neutralBase};
|
|
112
|
+
/* Default/Label/12px-Md */
|
|
113
|
+
font-family: ${theme.fontFamily.ui};
|
|
114
|
+
font-size: 12px;
|
|
115
|
+
font-style: normal;
|
|
116
|
+
font-weight: 500;
|
|
117
|
+
line-height: 16px; /* 133.333% */
|
|
118
118
|
`);
|
|
119
|
-
const Content = styled.div(({ theme }) => css `
|
|
120
|
-
display: flex;
|
|
121
|
-
border-top: 1px solid ${theme.color.background.neutralAltActive};
|
|
122
|
-
border-bottom: 1px solid ${theme.color.background.neutralAltActive};
|
|
119
|
+
const Content = styled.div(({ theme }) => css `
|
|
120
|
+
display: flex;
|
|
121
|
+
border-top: 1px solid ${theme.color.background.neutralAltActive};
|
|
122
|
+
border-bottom: 1px solid ${theme.color.background.neutralAltActive};
|
|
123
123
|
`);
|
|
124
|
-
const Left = styled.div `
|
|
125
|
-
display: flex;
|
|
126
|
-
flex-direction: column;
|
|
127
|
-
padding: 12px;
|
|
128
|
-
gap: 12px;
|
|
129
|
-
flex: 1;
|
|
124
|
+
const Left = styled.div `
|
|
125
|
+
display: flex;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
padding: 12px;
|
|
128
|
+
gap: 12px;
|
|
129
|
+
flex: 1;
|
|
130
130
|
`;
|
|
131
|
-
const FormArea = styled.div `
|
|
132
|
-
display: flex;
|
|
133
|
-
flex-direction: column;
|
|
134
|
-
gap: 8px;
|
|
131
|
+
const FormArea = styled.div `
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-direction: column;
|
|
134
|
+
gap: 8px;
|
|
135
135
|
`;
|
|
136
|
-
const Right = styled.div `
|
|
137
|
-
display: flex;
|
|
138
|
-
box-sizing: border-box;
|
|
139
|
-
width: 240px;
|
|
140
|
-
flex-direction: column;
|
|
141
|
-
padding: 12px;
|
|
142
|
-
gap: 12px;
|
|
136
|
+
const Right = styled.div `
|
|
137
|
+
display: flex;
|
|
138
|
+
box-sizing: border-box;
|
|
139
|
+
width: 240px;
|
|
140
|
+
flex-direction: column;
|
|
141
|
+
padding: 12px;
|
|
142
|
+
gap: 12px;
|
|
143
143
|
`;
|
|
144
|
-
const Label = styled.div(({ theme }) => css `
|
|
145
|
-
display: flex;
|
|
146
|
-
gap: 4px;
|
|
147
|
-
align-items: center;
|
|
148
|
-
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
149
|
-
/* Default/Label/12px-Md */
|
|
150
|
-
font-family: ${theme.fontFamily.ui};
|
|
151
|
-
font-size: 12px;
|
|
152
|
-
font-style: normal;
|
|
153
|
-
font-weight: 500;
|
|
154
|
-
line-height: 16px; /* 133.333% */
|
|
144
|
+
const Label = styled.div(({ theme }) => css `
|
|
145
|
+
display: flex;
|
|
146
|
+
gap: 4px;
|
|
147
|
+
align-items: center;
|
|
148
|
+
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
149
|
+
/* Default/Label/12px-Md */
|
|
150
|
+
font-family: ${theme.fontFamily.ui};
|
|
151
|
+
font-size: 12px;
|
|
152
|
+
font-style: normal;
|
|
153
|
+
font-weight: 500;
|
|
154
|
+
line-height: 16px; /* 133.333% */
|
|
155
155
|
`);
|
|
156
|
-
const Buttons = styled.div `
|
|
157
|
-
display: flex;
|
|
158
|
-
padding: 12px;
|
|
159
|
-
justify-content: flex-end;
|
|
160
|
-
align-items: center;
|
|
161
|
-
gap: 8px;
|
|
156
|
+
const Buttons = styled.div `
|
|
157
|
+
display: flex;
|
|
158
|
+
padding: 12px;
|
|
159
|
+
justify-content: flex-end;
|
|
160
|
+
align-items: center;
|
|
161
|
+
gap: 8px;
|
|
162
162
|
`;
|
|
@@ -9,11 +9,11 @@ export function TextTypeDropdown(props) {
|
|
|
9
9
|
const { t } = useTranslation();
|
|
10
10
|
const normalLabel = t("일반 텍스트");
|
|
11
11
|
const codeLabel = t("코드 텍스트");
|
|
12
|
-
return (_jsx(Controller, { name: `solutions.${index}.textType`, control: control, render: ({ field: { value, onChange } }) => (_jsx(Dropdown, { label: value === "normal" ? normalLabel : codeLabel, size: "xsmall", color: "textNeutral", closeOnItemClick: true, disabled: disabled, buttonCss: css `
|
|
13
|
-
${disabled && `color: ${theme.color.foreground.neutralAlt};`}
|
|
14
|
-
> span {
|
|
15
|
-
font-weight: 700;
|
|
16
|
-
}
|
|
12
|
+
return (_jsx(Controller, { name: `solutions.${index}.textType`, control: control, render: ({ field: { value, onChange } }) => (_jsx(Dropdown, { label: value === "normal" ? normalLabel : codeLabel, size: "xsmall", color: "textNeutral", closeOnItemClick: true, disabled: disabled, buttonCss: css `
|
|
13
|
+
${disabled && `color: ${theme.color.foreground.neutralAlt};`}
|
|
14
|
+
> span {
|
|
15
|
+
font-weight: 700;
|
|
16
|
+
}
|
|
17
17
|
`, menuProps: {
|
|
18
18
|
anchorOrigin: {
|
|
19
19
|
vertical: "bottom",
|
|
@@ -27,13 +27,13 @@ export function TextInput(props) {
|
|
|
27
27
|
: inputOriginalProps.color, inputProps: {
|
|
28
28
|
readOnly: true,
|
|
29
29
|
className: isCorrect === false
|
|
30
|
-
? cssToClassName `
|
|
31
|
-
color: ${theme.color.foreground.danger};
|
|
32
|
-
&::placeholder {
|
|
33
|
-
// inputComponent의 placeholder 스타일을 덮어쓰기 위해 부득이하게 !important 사용
|
|
34
|
-
// TODO: static classname을 사용하여 !important 제거
|
|
35
|
-
color: ${theme.color.foreground.dangerDisabled} !important;
|
|
36
|
-
}
|
|
30
|
+
? cssToClassName `
|
|
31
|
+
color: ${theme.color.foreground.danger};
|
|
32
|
+
&::placeholder {
|
|
33
|
+
// inputComponent의 placeholder 스타일을 덮어쓰기 위해 부득이하게 !important 사용
|
|
34
|
+
// TODO: static classname을 사용하여 !important 제거
|
|
35
|
+
color: ${theme.color.foreground.dangerDisabled} !important;
|
|
36
|
+
}
|
|
37
37
|
`
|
|
38
38
|
: undefined,
|
|
39
39
|
} })));
|
|
@@ -15,90 +15,90 @@ import { css, useTheme } from "@emotion/react";
|
|
|
15
15
|
import styled from "@emotion/styled";
|
|
16
16
|
import { forwardRef } from "react";
|
|
17
17
|
const TYPE_TO_CONTAINER_STYLE = (theme, type) => ({
|
|
18
|
-
primary: css `
|
|
19
|
-
background: ${theme.color.container.blueContainer};
|
|
20
|
-
border: 1px solid ${theme.color.foreground.primary};
|
|
21
|
-
color: ${theme.color.container.blueOnContainer};
|
|
18
|
+
primary: css `
|
|
19
|
+
background: ${theme.color.container.blueContainer};
|
|
20
|
+
border: 1px solid ${theme.color.foreground.primary};
|
|
21
|
+
color: ${theme.color.container.blueOnContainer};
|
|
22
22
|
`,
|
|
23
|
-
success: css `
|
|
24
|
-
background: ${theme.color.container.greenContainer};
|
|
25
|
-
border: 1px solid ${theme.color.background.successActive};
|
|
26
|
-
color: ${theme.color.container.greenOnContainer};
|
|
23
|
+
success: css `
|
|
24
|
+
background: ${theme.color.container.greenContainer};
|
|
25
|
+
border: 1px solid ${theme.color.background.successActive};
|
|
26
|
+
color: ${theme.color.container.greenOnContainer};
|
|
27
27
|
`,
|
|
28
|
-
danger: css `
|
|
29
|
-
background: ${theme.color.container.redContainer};
|
|
30
|
-
border: 1px solid ${theme.color.background.dangerActive};
|
|
31
|
-
color: ${theme.color.container.redOnContainer};
|
|
28
|
+
danger: css `
|
|
29
|
+
background: ${theme.color.container.redContainer};
|
|
30
|
+
border: 1px solid ${theme.color.background.dangerActive};
|
|
31
|
+
color: ${theme.color.container.redOnContainer};
|
|
32
32
|
`,
|
|
33
33
|
})[type];
|
|
34
34
|
const TYPE_TO_INDEX_STYLE = (theme, type) => ({
|
|
35
|
-
primary: css `
|
|
36
|
-
background: ${theme.color.background.primary};
|
|
37
|
-
border: 1px solid ${theme.color.background.primary};
|
|
38
|
-
color: ${theme.color.foreground.neutralAlt};
|
|
35
|
+
primary: css `
|
|
36
|
+
background: ${theme.color.background.primary};
|
|
37
|
+
border: 1px solid ${theme.color.background.primary};
|
|
38
|
+
color: ${theme.color.foreground.neutralAlt};
|
|
39
39
|
`,
|
|
40
|
-
success: css `
|
|
41
|
-
background: ${theme.color.background.successActive};
|
|
42
|
-
border: 1px solid ${theme.color.background.successActive};
|
|
43
|
-
color: ${theme.color.foreground.neutralAlt};
|
|
40
|
+
success: css `
|
|
41
|
+
background: ${theme.color.background.successActive};
|
|
42
|
+
border: 1px solid ${theme.color.background.successActive};
|
|
43
|
+
color: ${theme.color.foreground.neutralAlt};
|
|
44
44
|
`,
|
|
45
|
-
danger: css `
|
|
46
|
-
background: ${theme.color.background.dangerActive};
|
|
47
|
-
border: 1px solid ${theme.color.background.dangerActive};
|
|
48
|
-
color: ${theme.color.foreground.neutralAlt};
|
|
45
|
+
danger: css `
|
|
46
|
+
background: ${theme.color.background.dangerActive};
|
|
47
|
+
border: 1px solid ${theme.color.background.dangerActive};
|
|
48
|
+
color: ${theme.color.foreground.neutralAlt};
|
|
49
49
|
`,
|
|
50
50
|
})[type];
|
|
51
51
|
/** 비지니스 로직과 무관한 SelectBox를 그리는 공통 컴포넌트입니다. */
|
|
52
52
|
export const SelectBoxComponent = forwardRef(function SelectBoxComponent(props, ref) {
|
|
53
53
|
const { className, indexClassName, contentClassName, type, index, image, text, endIcon, onClick } = props, restProps = __rest(props, ["className", "indexClassName", "contentClassName", "type", "index", "image", "text", "endIcon", "onClick"]);
|
|
54
54
|
const theme = useTheme();
|
|
55
|
-
return (_jsxs(Container, Object.assign({ className: className, ref: ref }, restProps, { css: type ? TYPE_TO_CONTAINER_STYLE(theme, type) : undefined, onClick: onClick, children: [_jsx(Index, { className: indexClassName, "aria-hidden": "true", css: type ? TYPE_TO_INDEX_STYLE(theme, type) : undefined, children: index }), _jsxs(Content, { className: contentClassName, "aria-hidden": "true", children: [image && (_jsx("img", { "aria-hidden": "true", src: image.src, alt: image.altText, css: css `
|
|
56
|
-
height: auto;
|
|
57
|
-
// 이미지로 인해 좌우로 스크롤이 생기는 것을 방지
|
|
58
|
-
max-width: 100%;
|
|
59
|
-
width: fit-content;
|
|
60
|
-
border-radius: 6px;
|
|
55
|
+
return (_jsxs(Container, Object.assign({ className: className, ref: ref }, restProps, { css: type ? TYPE_TO_CONTAINER_STYLE(theme, type) : undefined, onClick: onClick, children: [_jsx(Index, { className: indexClassName, "aria-hidden": "true", css: type ? TYPE_TO_INDEX_STYLE(theme, type) : undefined, children: index }), _jsxs(Content, { className: contentClassName, "aria-hidden": "true", children: [image && (_jsx("img", { "aria-hidden": "true", src: image.src, alt: image.altText, css: css `
|
|
56
|
+
height: auto;
|
|
57
|
+
// 이미지로 인해 좌우로 스크롤이 생기는 것을 방지
|
|
58
|
+
max-width: 100%;
|
|
59
|
+
width: fit-content;
|
|
60
|
+
border-radius: 6px;
|
|
61
61
|
` })), text] }), endIcon] })));
|
|
62
62
|
});
|
|
63
|
-
const Container = styled.div(({ theme, onClick }) => css `
|
|
64
|
-
${onClick && "cursor: pointer;"}
|
|
65
|
-
display: flex;
|
|
66
|
-
box-sizing: border-box;
|
|
67
|
-
width: 400px;
|
|
68
|
-
padding: 12px;
|
|
69
|
-
gap: 12px;
|
|
70
|
-
border-radius: 8px;
|
|
71
|
-
background: ${theme.color.background.neutralAlt};
|
|
72
|
-
border: 1px solid transparent;
|
|
73
|
-
color: ${theme.color.foreground.neutralBase};
|
|
63
|
+
const Container = styled.div(({ theme, onClick }) => css `
|
|
64
|
+
${onClick && "cursor: pointer;"}
|
|
65
|
+
display: flex;
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
width: 400px;
|
|
68
|
+
padding: 12px;
|
|
69
|
+
gap: 12px;
|
|
70
|
+
border-radius: 8px;
|
|
71
|
+
background: ${theme.color.background.neutralAlt};
|
|
72
|
+
border: 1px solid transparent;
|
|
73
|
+
color: ${theme.color.foreground.neutralBase};
|
|
74
74
|
`);
|
|
75
|
-
const Index = styled.div(({ theme }) => css `
|
|
76
|
-
display: flex;
|
|
77
|
-
box-sizing: border-box;
|
|
78
|
-
width: 20px;
|
|
79
|
-
height: 20px;
|
|
80
|
-
padding: 4px;
|
|
81
|
-
|
|
82
|
-
user-select: none; /* Standard syntax */
|
|
83
|
-
|
|
84
|
-
justify-content: center;
|
|
85
|
-
align-items: center;
|
|
86
|
-
border-radius: 4px;
|
|
87
|
-
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
88
|
-
background: ${theme.color.background.neutralBase};
|
|
89
|
-
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
90
|
-
font-family: ${theme.fontFamily.ui};
|
|
91
|
-
font-size: 14px;
|
|
92
|
-
font-weight: 800;
|
|
93
|
-
line-height: 16px;
|
|
75
|
+
const Index = styled.div(({ theme }) => css `
|
|
76
|
+
display: flex;
|
|
77
|
+
box-sizing: border-box;
|
|
78
|
+
width: 20px;
|
|
79
|
+
height: 20px;
|
|
80
|
+
padding: 4px;
|
|
81
|
+
|
|
82
|
+
user-select: none; /* Standard syntax */
|
|
83
|
+
|
|
84
|
+
justify-content: center;
|
|
85
|
+
align-items: center;
|
|
86
|
+
border-radius: 4px;
|
|
87
|
+
border: 1px solid ${theme.color.background.neutralAltActive};
|
|
88
|
+
background: ${theme.color.background.neutralBase};
|
|
89
|
+
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
90
|
+
font-family: ${theme.fontFamily.ui};
|
|
91
|
+
font-size: 14px;
|
|
92
|
+
font-weight: 800;
|
|
93
|
+
line-height: 16px;
|
|
94
94
|
`);
|
|
95
|
-
const Content = styled.div(({ theme }) => css `
|
|
96
|
-
display: flex;
|
|
97
|
-
flex-direction: column;
|
|
98
|
-
gap: 12px;
|
|
99
|
-
flex: 1;
|
|
100
|
-
font-family: ${theme.fontFamily.ui};
|
|
101
|
-
font-size: 16px;
|
|
102
|
-
font-weight: 400;
|
|
103
|
-
line-height: 20px;
|
|
95
|
+
const Content = styled.div(({ theme }) => css `
|
|
96
|
+
display: flex;
|
|
97
|
+
flex-direction: column;
|
|
98
|
+
gap: 12px;
|
|
99
|
+
flex: 1;
|
|
100
|
+
font-family: ${theme.fontFamily.ui};
|
|
101
|
+
font-size: 16px;
|
|
102
|
+
font-weight: 400;
|
|
103
|
+
line-height: 20px;
|
|
104
104
|
`);
|
|
@@ -6,8 +6,8 @@ import { SelectBoxComponent } from "./SelectBoxComponent";
|
|
|
6
6
|
export function SelectBoxEdit(props) {
|
|
7
7
|
const { index, isAnswer, image, text, onClick } = props;
|
|
8
8
|
const theme = useTheme();
|
|
9
|
-
return (_jsx(SelectBoxComponent, { index: index, image: image, text: text, endIcon: isAnswer && (_jsx(CheckboxCircleFillIcon, { color: theme.color.foreground.success, css: css `
|
|
10
|
-
width: 16px;
|
|
11
|
-
height: 16px;
|
|
9
|
+
return (_jsx(SelectBoxComponent, { index: index, image: image, text: text, endIcon: isAnswer && (_jsx(CheckboxCircleFillIcon, { color: theme.color.foreground.success, css: css `
|
|
10
|
+
width: 16px;
|
|
11
|
+
height: 16px;
|
|
12
12
|
` })), onClick: onClick }));
|
|
13
13
|
}
|
|
@@ -8,17 +8,17 @@ import { useRef } from "react";
|
|
|
8
8
|
import { useEventListener } from "usehooks-ts";
|
|
9
9
|
import { useTranslation } from "react-i18next";
|
|
10
10
|
const TYPE_TO_INDEX_ICON = (type) => ({
|
|
11
|
-
primary: (_jsx(CheckFillIcon, { css: css `
|
|
12
|
-
width: 12px;
|
|
13
|
-
height: 12px;
|
|
11
|
+
primary: (_jsx(CheckFillIcon, { css: css `
|
|
12
|
+
width: 12px;
|
|
13
|
+
height: 12px;
|
|
14
14
|
` })),
|
|
15
|
-
success: (_jsx(CheckboxCircleFillIcon, { css: css `
|
|
16
|
-
width: 12px;
|
|
17
|
-
height: 12px;
|
|
15
|
+
success: (_jsx(CheckboxCircleFillIcon, { css: css `
|
|
16
|
+
width: 12px;
|
|
17
|
+
height: 12px;
|
|
18
18
|
` })),
|
|
19
|
-
danger: (_jsx(CloseCircleFillIcon, { css: css `
|
|
20
|
-
width: 12px;
|
|
21
|
-
height: 12px;
|
|
19
|
+
danger: (_jsx(CloseCircleFillIcon, { css: css `
|
|
20
|
+
width: 12px;
|
|
21
|
+
height: 12px;
|
|
22
22
|
` })),
|
|
23
23
|
})[type];
|
|
24
24
|
/**
|
|
@@ -82,14 +82,14 @@ export function SelectBoxView(props) {
|
|
|
82
82
|
const ariaText = text ||
|
|
83
83
|
(image && image.altText) ||
|
|
84
84
|
t("{{index}}번 선택지", { index, context: "렉시컬 선택지 도구" });
|
|
85
|
-
return (_jsx(SelectBoxComponent, { css: css `
|
|
86
|
-
width: 100%;
|
|
85
|
+
return (_jsx(SelectBoxComponent, { css: css `
|
|
86
|
+
width: 100%;
|
|
87
87
|
`, ref: boxRef, role: multipleSelectionsEnabled ? "checkbox" : "radio", "aria-checked": isSelected, "aria-label": [ariaText, description].filter(Boolean).join(" "), tabIndex: onClick ? 0 : -1, type: type, index: type ? TYPE_TO_INDEX_ICON(type) : index, image: image, text: text, onClick: onClick,
|
|
88
88
|
// 선택되지 않았으나 정답일 때 정답 태그를 표시
|
|
89
89
|
endIcon: isAnswer &&
|
|
90
|
-
!isSelected && (_jsx(Tag, { label: t("정답", { context: "태그, 렉시컬 선택지" }), icon: _jsx(CheckboxCircleFillIcon, {}), color: "green", css: css `
|
|
91
|
-
span {
|
|
92
|
-
font-weight: 700;
|
|
93
|
-
}
|
|
90
|
+
!isSelected && (_jsx(Tag, { label: t("정답", { context: "태그, 렉시컬 선택지" }), icon: _jsx(CheckboxCircleFillIcon, {}), color: "green", css: css `
|
|
91
|
+
span {
|
|
92
|
+
font-weight: 700;
|
|
93
|
+
}
|
|
94
94
|
` })) }));
|
|
95
95
|
}
|