@team-monolith/cds 1.119.2 → 1.119.4
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/dist/CdsProvider.d.ts +2 -2
- package/dist/CdsProvider.js +1 -11
- package/dist/i18n/i18n.d.ts +14 -3
- package/dist/i18n/i18n.js +32 -34
- package/dist/icons/custom/colored/AiHelper.d.ts +1 -1
- package/dist/icons/custom/colored/AiHelper.js +1 -1
- package/dist/icons/custom/colored/AiQuizColor.d.ts +1 -1
- package/dist/icons/custom/colored/AiQuizColor.js +1 -1
- package/dist/icons/custom/colored/BadgeColor.d.ts +1 -1
- package/dist/icons/custom/colored/BadgeColor.js +1 -1
- package/dist/icons/custom/colored/BadgeGold.d.ts +1 -1
- package/dist/icons/custom/colored/BadgeGold.js +1 -1
- package/dist/icons/custom/colored/BadgeGreen.d.ts +1 -1
- package/dist/icons/custom/colored/BadgeGreen.js +1 -1
- package/dist/icons/custom/colored/BadgeSilver.d.ts +1 -1
- package/dist/icons/custom/colored/BadgeSilver.js +1 -1
- package/dist/icons/custom/colored/Basic.d.ts +1 -1
- package/dist/icons/custom/colored/Basic.js +1 -1
- package/dist/icons/custom/colored/BasicPlus.d.ts +1 -1
- package/dist/icons/custom/colored/BasicPlus.js +1 -1
- package/dist/icons/custom/colored/BoardColor.d.ts +1 -1
- package/dist/icons/custom/colored/BoardColor.js +1 -1
- package/dist/icons/custom/colored/CastCloudyColor.d.ts +1 -1
- package/dist/icons/custom/colored/CastCloudyColor.js +1 -1
- package/dist/icons/custom/colored/CastPartlyColor.d.ts +1 -1
- package/dist/icons/custom/colored/CastPartlyColor.js +1 -1
- package/dist/icons/custom/colored/CastRainbowColor.d.ts +1 -1
- package/dist/icons/custom/colored/CastRainbowColor.js +1 -1
- package/dist/icons/custom/colored/CastSunnyColor.d.ts +1 -1
- package/dist/icons/custom/colored/CastSunnyColor.js +1 -1
- package/dist/icons/custom/colored/ClapBronze.d.ts +1 -1
- package/dist/icons/custom/colored/ClapBronze.js +1 -1
- package/dist/icons/custom/colored/ClapGold.d.ts +1 -1
- package/dist/icons/custom/colored/ClapGold.js +1 -1
- package/dist/icons/custom/colored/ClapSilver.d.ts +1 -1
- package/dist/icons/custom/colored/ClapSilver.js +1 -1
- package/dist/icons/custom/colored/Class.d.ts +1 -1
- package/dist/icons/custom/colored/Class.js +1 -1
- package/dist/icons/custom/colored/CodapColor.d.ts +1 -1
- package/dist/icons/custom/colored/CodapColor.js +1 -1
- package/dist/icons/custom/colored/EbookColor.d.ts +1 -1
- package/dist/icons/custom/colored/EbookColor.js +1 -1
- package/dist/icons/custom/colored/EmbeddedColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmbeddedColor.js +1 -1
- package/dist/icons/custom/colored/EmoClapColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoClapColor.js +1 -1
- package/dist/icons/custom/colored/EmoGoodColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoGoodColor.js +1 -1
- package/dist/icons/custom/colored/EmoGreatColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoGreatColor.js +1 -1
- package/dist/icons/custom/colored/EmoHeartColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoHeartColor.js +1 -1
- package/dist/icons/custom/colored/EmoHundredColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoHundredColor.js +1 -1
- package/dist/icons/custom/colored/EmoNeutralColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoNeutralColor.js +1 -1
- package/dist/icons/custom/colored/EmoStarsColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoStarsColor.js +1 -1
- package/dist/icons/custom/colored/EmoThumbupColor.d.ts +1 -1
- package/dist/icons/custom/colored/EmoThumbupColor.js +1 -1
- package/dist/icons/custom/colored/Empty.d.ts +1 -1
- package/dist/icons/custom/colored/Empty.js +1 -1
- package/dist/icons/custom/colored/EntryColor.d.ts +1 -1
- package/dist/icons/custom/colored/EntryColor.js +1 -1
- package/dist/icons/custom/colored/FilenameAllColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameAllColor.js +1 -1
- package/dist/icons/custom/colored/FilenameDocColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameDocColor.js +1 -1
- package/dist/icons/custom/colored/FilenameHwpColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameHwpColor.js +1 -1
- package/dist/icons/custom/colored/FilenameImgColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameImgColor.js +1 -1
- package/dist/icons/custom/colored/FilenameMp4Color.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameMp4Color.js +1 -1
- package/dist/icons/custom/colored/FilenamePdfColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenamePdfColor.js +1 -1
- package/dist/icons/custom/colored/FilenamePptColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenamePptColor.js +1 -1
- package/dist/icons/custom/colored/FilenameXlsColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameXlsColor.js +1 -1
- package/dist/icons/custom/colored/FilenameZipColor.d.ts +1 -1
- package/dist/icons/custom/colored/FilenameZipColor.js +1 -1
- package/dist/icons/custom/colored/Google.d.ts +1 -1
- package/dist/icons/custom/colored/Google.js +1 -1
- package/dist/icons/custom/colored/HandFill.d.ts +1 -1
- package/dist/icons/custom/colored/HandFill.js +1 -1
- package/dist/icons/custom/colored/JudgeColor.d.ts +1 -1
- package/dist/icons/custom/colored/JudgeColor.js +1 -1
- package/dist/icons/custom/colored/MakecodeColor.d.ts +1 -1
- package/dist/icons/custom/colored/MakecodeColor.js +1 -1
- package/dist/icons/custom/colored/Master.d.ts +1 -1
- package/dist/icons/custom/colored/Master.js +1 -1
- package/dist/icons/custom/colored/Material.d.ts +1 -1
- package/dist/icons/custom/colored/Material.js +1 -1
- package/dist/icons/custom/colored/MedalBronze.d.ts +1 -1
- package/dist/icons/custom/colored/MedalBronze.js +1 -1
- package/dist/icons/custom/colored/MedalGold.d.ts +1 -1
- package/dist/icons/custom/colored/MedalGold.js +1 -1
- package/dist/icons/custom/colored/MedalSilver.d.ts +1 -1
- package/dist/icons/custom/colored/MedalSilver.js +1 -1
- package/dist/icons/custom/colored/Pro.d.ts +1 -1
- package/dist/icons/custom/colored/Pro.js +1 -1
- package/dist/icons/custom/colored/Problem.d.ts +1 -1
- package/dist/icons/custom/colored/Problem.js +1 -1
- package/dist/icons/custom/colored/PythonColor.d.ts +1 -1
- package/dist/icons/custom/colored/PythonColor.js +1 -1
- package/dist/icons/custom/colored/QuizColor.d.ts +1 -1
- package/dist/icons/custom/colored/QuizColor.js +1 -1
- package/dist/icons/custom/colored/ResourceColor.d.ts +1 -1
- package/dist/icons/custom/colored/ResourceColor.js +1 -1
- package/dist/icons/custom/colored/ScratchColor.d.ts +1 -1
- package/dist/icons/custom/colored/ScratchColor.js +1 -1
- package/dist/icons/custom/colored/TypeHelper.d.ts +1 -1
- package/dist/icons/custom/colored/TypeHelper.js +1 -1
- package/dist/icons/custom/colored/Whale.d.ts +1 -1
- package/dist/icons/custom/colored/Whale.js +1 -1
- package/dist/icons/custom/colored/WorksheetColor.d.ts +1 -1
- package/dist/icons/custom/colored/WorksheetColor.js +1 -1
- package/dist/icons/custom/default/AiQuiz.d.ts +1 -1
- package/dist/icons/custom/default/AiQuiz.js +1 -1
- package/dist/icons/custom/default/Badge.d.ts +1 -1
- package/dist/icons/custom/default/Badge.js +1 -1
- package/dist/icons/custom/default/Board.d.ts +1 -1
- package/dist/icons/custom/default/Board.js +1 -1
- package/dist/icons/custom/default/CastCloudy.d.ts +1 -1
- package/dist/icons/custom/default/CastCloudy.js +1 -1
- package/dist/icons/custom/default/CastPartly.d.ts +1 -1
- package/dist/icons/custom/default/CastPartly.js +1 -1
- package/dist/icons/custom/default/CastRainbow.d.ts +1 -1
- package/dist/icons/custom/default/CastRainbow.js +1 -1
- package/dist/icons/custom/default/CastSunny.d.ts +1 -1
- package/dist/icons/custom/default/CastSunny.js +1 -1
- package/dist/icons/custom/default/Codap.d.ts +1 -1
- package/dist/icons/custom/default/Codap.js +1 -1
- package/dist/icons/custom/default/Ebook.d.ts +1 -1
- package/dist/icons/custom/default/Ebook.js +1 -1
- package/dist/icons/custom/default/Embedded.d.ts +1 -1
- package/dist/icons/custom/default/Embedded.js +1 -1
- package/dist/icons/custom/default/EmoClap.d.ts +1 -1
- package/dist/icons/custom/default/EmoClap.js +1 -1
- package/dist/icons/custom/default/EmoGood.d.ts +1 -1
- package/dist/icons/custom/default/EmoGood.js +1 -1
- package/dist/icons/custom/default/EmoGreat.d.ts +1 -1
- package/dist/icons/custom/default/EmoGreat.js +1 -1
- package/dist/icons/custom/default/EmoHeart.d.ts +1 -1
- package/dist/icons/custom/default/EmoHeart.js +1 -1
- package/dist/icons/custom/default/EmoHundred.d.ts +1 -1
- package/dist/icons/custom/default/EmoHundred.js +1 -1
- package/dist/icons/custom/default/EmoNeutral.d.ts +1 -1
- package/dist/icons/custom/default/EmoNeutral.js +1 -1
- package/dist/icons/custom/default/EmoStars.d.ts +1 -1
- package/dist/icons/custom/default/EmoStars.js +1 -1
- package/dist/icons/custom/default/EmoThumbup.d.ts +1 -1
- package/dist/icons/custom/default/EmoThumbup.js +1 -1
- package/dist/icons/custom/default/Entry.d.ts +1 -1
- package/dist/icons/custom/default/Entry.js +1 -1
- package/dist/icons/custom/default/Fab.d.ts +1 -1
- package/dist/icons/custom/default/Fab.js +1 -1
- package/dist/icons/custom/default/Grant.d.ts +1 -1
- package/dist/icons/custom/default/Grant.js +1 -1
- package/dist/icons/custom/default/GrantAlt.d.ts +1 -1
- package/dist/icons/custom/default/GrantAlt.js +1 -1
- package/dist/icons/custom/default/HandLine.d.ts +1 -1
- package/dist/icons/custom/default/HandLine.js +1 -1
- package/dist/icons/custom/default/Judge.d.ts +1 -1
- package/dist/icons/custom/default/Judge.js +1 -1
- package/dist/icons/custom/default/Makecode.d.ts +1 -1
- package/dist/icons/custom/default/Makecode.js +1 -1
- package/dist/icons/custom/default/Pdf.d.ts +1 -1
- package/dist/icons/custom/default/Pdf.js +1 -1
- package/dist/icons/custom/default/Python.d.ts +1 -1
- package/dist/icons/custom/default/Python.js +1 -1
- package/dist/icons/custom/default/Quiz.d.ts +1 -1
- package/dist/icons/custom/default/Quiz.js +1 -1
- package/dist/icons/custom/default/Resource.d.ts +1 -1
- package/dist/icons/custom/default/Resource.js +1 -1
- package/dist/icons/custom/default/Scratch.d.ts +1 -1
- package/dist/icons/custom/default/Scratch.js +1 -1
- package/dist/icons/custom/default/ScrollAlt.d.ts +1 -1
- package/dist/icons/custom/default/ScrollAlt.js +1 -1
- package/dist/icons/custom/default/ScrollFill.d.ts +1 -1
- package/dist/icons/custom/default/ScrollFill.js +1 -1
- package/dist/icons/custom/default/ScrollLine.d.ts +1 -1
- package/dist/icons/custom/default/ScrollLine.js +1 -1
- package/dist/icons/custom/default/Symbol.d.ts +1 -1
- package/dist/icons/custom/default/Symbol.js +1 -1
- package/dist/icons/custom/default/Worksheet.d.ts +1 -1
- package/dist/icons/custom/default/Worksheet.js +1 -1
- package/dist/icons/custom/svgrColoredTemplate.js +1 -1
- package/dist/icons/custom/svgrDefaultTemplate.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/patterns/LexicalEditor/components/FileSelectInput.js +7 -8
- package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +3 -1
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +2 -2
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormPlaceholder.js +3 -1
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -14
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +3 -3
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +2 -2
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +5 -3
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/iconData.d.ts +2 -1
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/iconData.js +4 -5
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +2 -2
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +1 -1
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +3 -3
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +1 -0
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.js +84 -83
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.d.ts +2 -0
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +49 -94
- package/dist/patterns/LexicalEditor/plugins/DragDropPastePlugin/index.js +4 -2
- package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +17 -8
- package/dist/patterns/LexicalEditor/plugins/TogglePlugin/index.js +54 -2
- package/dist/texts.d.ts +2 -1
- package/dist/texts.js +11 -12
- package/package.json +1 -2
package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js
CHANGED
|
@@ -35,7 +35,6 @@ import { InsertVideoDialog } from "../../components/InsertVideoDialog";
|
|
|
35
35
|
import { INSERT_VIDEO_COMMAND } from "../VideosPlugin";
|
|
36
36
|
import { UploadFileDialog } from "../../components/UploadFileDialog";
|
|
37
37
|
import { UPLOAD_FILE_COMMAND } from "../FilePlugin";
|
|
38
|
-
import { i18n } from "../../../../i18n/i18n";
|
|
39
38
|
import { useTranslation } from "react-i18next";
|
|
40
39
|
import { getTexts } from "../../../../texts";
|
|
41
40
|
import { INSERT_TOGGLE_COMMAND } from "../TogglePlugin";
|
|
@@ -92,9 +91,9 @@ function getDynamicOptions(editor, queryString) {
|
|
|
92
91
|
}
|
|
93
92
|
return options;
|
|
94
93
|
}
|
|
95
|
-
function getSheetContextOptions(editor, theme) {
|
|
94
|
+
function getSheetContextOptions(editor, theme, t) {
|
|
96
95
|
return [
|
|
97
|
-
new ComponentPickerOption(
|
|
96
|
+
new ComponentPickerOption(t("선택형 입력 칸", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
98
97
|
icon: _jsx(ListRadioIcon, { color: theme.color.foreground.primary }),
|
|
99
98
|
// eslint-disable-next-line i18next/no-literal-string
|
|
100
99
|
keywords: ["sheet select", "선택형 입력"],
|
|
@@ -112,28 +111,24 @@ function getSheetContextOptions(editor, theme) {
|
|
|
112
111
|
allowMultipleAnswers: false,
|
|
113
112
|
}),
|
|
114
113
|
}),
|
|
115
|
-
new ComponentPickerOption(
|
|
114
|
+
new ComponentPickerOption(t("3단계 평가 입력 칸"), {
|
|
116
115
|
icon: _jsx(EmojiStickerLineIcon, { color: theme.color.foreground.primary }),
|
|
117
116
|
// eslint-disable-next-line i18next/no-literal-string
|
|
118
117
|
keywords: ["self evaluation", "3단계 평가 입력"],
|
|
119
118
|
onSelect: () => editor.dispatchCommand(INSERT_SELF_EVALUATION_COMMAND, {
|
|
120
119
|
iconType: "emoji",
|
|
121
|
-
labels: [
|
|
122
|
-
i18n.t("아주 잘했어요!"),
|
|
123
|
-
i18n.t("보통이에요."),
|
|
124
|
-
i18n.t("잘 모르겠어요."),
|
|
125
|
-
],
|
|
120
|
+
labels: [t("아주 잘했어요!"), t("보통이에요."), t("잘 모르겠어요.")],
|
|
126
121
|
evaluations: [
|
|
127
122
|
{
|
|
128
123
|
question: {
|
|
129
|
-
text: getTexts("placeholderEvaluationItem"),
|
|
124
|
+
text: getTexts(t, "placeholderEvaluationItem"),
|
|
130
125
|
},
|
|
131
126
|
selectedLabelIndex: null,
|
|
132
127
|
},
|
|
133
128
|
],
|
|
134
129
|
}),
|
|
135
130
|
}),
|
|
136
|
-
new ComponentPickerOption(
|
|
131
|
+
new ComponentPickerOption(t("단답형 입력 칸", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
137
132
|
icon: _jsx(InputMethodLineIcon, { color: theme.color.foreground.primary }),
|
|
138
133
|
// eslint-disable-next-line i18next/no-literal-string
|
|
139
134
|
keywords: ["sheet short input", "단답형 입력"],
|
|
@@ -143,7 +138,7 @@ function getSheetContextOptions(editor, theme) {
|
|
|
143
138
|
placeholder: "",
|
|
144
139
|
}),
|
|
145
140
|
}),
|
|
146
|
-
new ComponentPickerOption(
|
|
141
|
+
new ComponentPickerOption(t("서술형 입력 칸", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
147
142
|
icon: _jsx(FileList2LineIcon, { color: theme.color.foreground.primary }),
|
|
148
143
|
// eslint-disable-next-line i18next/no-literal-string
|
|
149
144
|
keywords: ["sheet long input", "서술형 입력"],
|
|
@@ -153,7 +148,7 @@ function getSheetContextOptions(editor, theme) {
|
|
|
153
148
|
placeholder: "",
|
|
154
149
|
}),
|
|
155
150
|
}),
|
|
156
|
-
new ComponentDrawerOption(
|
|
151
|
+
new ComponentDrawerOption(t("활동지 메뉴구분선"), (_jsx("div", { css: css `
|
|
157
152
|
width: 100%;
|
|
158
153
|
height: 1px;
|
|
159
154
|
background: ${theme.color.background.neutralAltActive};
|
|
@@ -161,9 +156,9 @@ function getSheetContextOptions(editor, theme) {
|
|
|
161
156
|
` }))),
|
|
162
157
|
];
|
|
163
158
|
}
|
|
164
|
-
function getQuizContextOptions(editor, theme) {
|
|
159
|
+
function getQuizContextOptions(editor, theme, t) {
|
|
165
160
|
return [
|
|
166
|
-
new ComponentPickerOption(
|
|
161
|
+
new ComponentPickerOption(t("주관식 입력 칸", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
167
162
|
icon: _jsx(InputMethodLineIcon, { color: theme.color.foreground.primary }),
|
|
168
163
|
// eslint-disable-next-line i18next/no-literal-string
|
|
169
164
|
keywords: ["problem input", "주관식 입력"],
|
|
@@ -181,7 +176,7 @@ function getQuizContextOptions(editor, theme) {
|
|
|
181
176
|
ignoreWhitespace: true,
|
|
182
177
|
}),
|
|
183
178
|
}),
|
|
184
|
-
new ComponentPickerOption(
|
|
179
|
+
new ComponentPickerOption(t("객관식 입력 칸", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
185
180
|
icon: _jsx(ListRadioIcon, { color: theme.color.foreground.primary }),
|
|
186
181
|
// eslint-disable-next-line i18next/no-literal-string
|
|
187
182
|
keywords: ["problem select", "객관식 입력"],
|
|
@@ -201,7 +196,7 @@ function getQuizContextOptions(editor, theme) {
|
|
|
201
196
|
});
|
|
202
197
|
},
|
|
203
198
|
}),
|
|
204
|
-
new ComponentDrawerOption(
|
|
199
|
+
new ComponentDrawerOption(t("퀴즈 메뉴구분선"), (_jsx("div", { css: css `
|
|
205
200
|
width: 100%;
|
|
206
201
|
height: 1px;
|
|
207
202
|
background: ${theme.color.background.neutralAltActive};
|
|
@@ -209,48 +204,10 @@ function getQuizContextOptions(editor, theme) {
|
|
|
209
204
|
` }))),
|
|
210
205
|
];
|
|
211
206
|
}
|
|
212
|
-
function getToggleTitleOptions(props) {
|
|
213
|
-
const { editor } = props;
|
|
214
|
-
return [
|
|
215
|
-
new ComponentPickerOption(i18n.t("본문", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
216
|
-
icon: _jsx(TextIcon, {}),
|
|
217
|
-
// eslint-disable-next-line i18next/no-literal-string
|
|
218
|
-
keywords: ["normal", "paragraph", "p", "text", "본문", "단락", "내용"],
|
|
219
|
-
onSelect: () => editor.update(() => {
|
|
220
|
-
const selection = $getSelection();
|
|
221
|
-
if ($isRangeSelection(selection)) {
|
|
222
|
-
$setBlocksType(selection, () => $createParagraphNode());
|
|
223
|
-
}
|
|
224
|
-
}),
|
|
225
|
-
}),
|
|
226
|
-
...[1, 2, 3].map((n) => {
|
|
227
|
-
const titleMap = {
|
|
228
|
-
1: i18n.t("큰 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
229
|
-
2: i18n.t("중간 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
230
|
-
3: i18n.t("작은 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
231
|
-
};
|
|
232
|
-
const iconMap = {
|
|
233
|
-
1: _jsx(H1Icon, {}),
|
|
234
|
-
2: _jsx(H2Icon, {}),
|
|
235
|
-
3: _jsx(H3Icon, {}),
|
|
236
|
-
};
|
|
237
|
-
return new ComponentPickerOption(titleMap[n], {
|
|
238
|
-
icon: iconMap[n],
|
|
239
|
-
keywords: ["heading", "header", `h${n}`, titleMap[n]],
|
|
240
|
-
onSelect: () => editor.update(() => {
|
|
241
|
-
const selection = $getSelection();
|
|
242
|
-
if ($isRangeSelection(selection)) {
|
|
243
|
-
$setBlocksType(selection, () => $createHeadingNode(`h${n}`));
|
|
244
|
-
}
|
|
245
|
-
}),
|
|
246
|
-
});
|
|
247
|
-
}),
|
|
248
|
-
];
|
|
249
|
-
}
|
|
250
207
|
export function getBaseOptions(props) {
|
|
251
|
-
const { editor, theme, setImageOpen, setVideoOpen, setFileOpen, isSheetEnabled, isQuizEnabled, showFileUpload, } = props;
|
|
208
|
+
const { editor, theme, t, setImageOpen, setVideoOpen, setFileOpen, isSheetEnabled, isQuizEnabled, showFileUpload, } = props;
|
|
252
209
|
const baseOptions = [
|
|
253
|
-
new ComponentPickerOption(
|
|
210
|
+
new ComponentPickerOption(t("본문", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
254
211
|
icon: _jsx(TextIcon, {}),
|
|
255
212
|
// eslint-disable-next-line i18next/no-literal-string
|
|
256
213
|
keywords: ["normal", "paragraph", "p", "text", "본문", "단락", "내용"],
|
|
@@ -263,9 +220,9 @@ export function getBaseOptions(props) {
|
|
|
263
220
|
}),
|
|
264
221
|
...[1, 2, 3].map((n) => {
|
|
265
222
|
const titleMap = {
|
|
266
|
-
1:
|
|
267
|
-
2:
|
|
268
|
-
3:
|
|
223
|
+
1: t("큰 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
224
|
+
2: t("중간 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
225
|
+
3: t("작은 제목", { context: "렉시컬 드롭다운 메뉴" }),
|
|
269
226
|
};
|
|
270
227
|
const iconMap = {
|
|
271
228
|
1: _jsx(H1Icon, {}),
|
|
@@ -283,22 +240,22 @@ export function getBaseOptions(props) {
|
|
|
283
240
|
}),
|
|
284
241
|
});
|
|
285
242
|
}),
|
|
286
|
-
new ComponentPickerOption(
|
|
243
|
+
new ComponentPickerOption(t("일반 목록", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
287
244
|
icon: _jsx(ListUnorderedIcon, {}),
|
|
288
245
|
keywords: ["bulleted list", "unordered list", "ul"],
|
|
289
246
|
onSelect: () => editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined),
|
|
290
247
|
}),
|
|
291
|
-
new ComponentPickerOption(
|
|
248
|
+
new ComponentPickerOption(t("숫자 목록", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
292
249
|
icon: _jsx(ListOrderedIcon, {}),
|
|
293
250
|
keywords: ["numbered list", "ordered list", "ol"],
|
|
294
251
|
onSelect: () => editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined),
|
|
295
252
|
}),
|
|
296
|
-
new ComponentPickerOption(
|
|
253
|
+
new ComponentPickerOption(t("토글 목록", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
297
254
|
icon: _jsx(PlayList2FillIcon, {}),
|
|
298
255
|
keywords: ["toggle", "collapsible"],
|
|
299
256
|
onSelect: () => editor.dispatchCommand(INSERT_TOGGLE_COMMAND, undefined),
|
|
300
257
|
}),
|
|
301
|
-
new ComponentPickerOption(
|
|
258
|
+
new ComponentPickerOption(t("인용 블록", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
302
259
|
icon: _jsx(DoubleQuotesLIcon, {}),
|
|
303
260
|
keywords: ["block quote"],
|
|
304
261
|
onSelect: () => editor.update(() => {
|
|
@@ -308,7 +265,7 @@ export function getBaseOptions(props) {
|
|
|
308
265
|
}
|
|
309
266
|
}),
|
|
310
267
|
}),
|
|
311
|
-
new ComponentPickerOption(
|
|
268
|
+
new ComponentPickerOption(t("코드 블록", { context: "렉시컬 드롭다운 메뉴" }), {
|
|
312
269
|
icon: _jsx(CodeViewIcon, {}),
|
|
313
270
|
keywords: ["javascript", "python", "js", "codeblock"],
|
|
314
271
|
onSelect: () => editor.update(() => {
|
|
@@ -327,17 +284,17 @@ export function getBaseOptions(props) {
|
|
|
327
284
|
}
|
|
328
285
|
}),
|
|
329
286
|
}),
|
|
330
|
-
new ComponentPickerOption(
|
|
287
|
+
new ComponentPickerOption(t("구분선"), {
|
|
331
288
|
icon: _jsx(SeparatorIcon, {}),
|
|
332
289
|
keywords: ["horizontal rule", "divider", "hr"],
|
|
333
290
|
onSelect: () => editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined),
|
|
334
291
|
}),
|
|
335
|
-
new ComponentPickerOption(
|
|
292
|
+
new ComponentPickerOption(t("이미지"), {
|
|
336
293
|
icon: _jsx(ImageLineIcon, {}),
|
|
337
294
|
keywords: ["image", "photo", "picture", "file"],
|
|
338
295
|
onSelect: () => setImageOpen(true),
|
|
339
296
|
}),
|
|
340
|
-
new ComponentPickerOption(
|
|
297
|
+
new ComponentPickerOption(t("동영상"), {
|
|
341
298
|
icon: _jsx(VideoLineIcon, {}),
|
|
342
299
|
keywords: ["video", "movie"],
|
|
343
300
|
onSelect: () => setVideoOpen(true),
|
|
@@ -348,15 +305,15 @@ export function getBaseOptions(props) {
|
|
|
348
305
|
const isLabMode = localStorage.getItem("labMode") === "true";
|
|
349
306
|
// isQuizEnabled이거나 devMode이면 퀴즈 컨텍스트 메뉴를 꼭대기에 추가합니다.
|
|
350
307
|
if (isQuizEnabled || isDevMode) {
|
|
351
|
-
baseOptions.unshift(...getQuizContextOptions(editor, theme));
|
|
308
|
+
baseOptions.unshift(...getQuizContextOptions(editor, theme, t));
|
|
352
309
|
}
|
|
353
310
|
// isSheetEnabled이거나 devMode이면 활동지 컨텍스트 메뉴를 꼭대기에 추가합니다.
|
|
354
311
|
if (isSheetEnabled || isDevMode) {
|
|
355
|
-
baseOptions.unshift(...getSheetContextOptions(editor, theme));
|
|
312
|
+
baseOptions.unshift(...getSheetContextOptions(editor, theme, t));
|
|
356
313
|
}
|
|
357
314
|
// devMode || labMode이면 칼럼 컨텍스트 메뉴를 추가합니다. (일부공개)
|
|
358
315
|
if (isDevMode || isLabMode) {
|
|
359
|
-
baseOptions.push(new ComponentPickerOption(
|
|
316
|
+
baseOptions.push(new ComponentPickerOption(t("칼럼"), {
|
|
360
317
|
icon: _jsx(LayoutColumnLineIcon, {}),
|
|
361
318
|
keywords: ["columns", "layout", "grid"],
|
|
362
319
|
onSelect: () => editor.dispatchCommand(INSERT_LAYOUT_COMMAND, "1fr 1fr"),
|
|
@@ -364,7 +321,7 @@ export function getBaseOptions(props) {
|
|
|
364
321
|
}
|
|
365
322
|
// showFileUpload 이면 파일블록을 추가합니다.
|
|
366
323
|
if (showFileUpload || isDevMode) {
|
|
367
|
-
baseOptions.push(new ComponentPickerOption(
|
|
324
|
+
baseOptions.push(new ComponentPickerOption(t("파일 게시"), {
|
|
368
325
|
icon: _jsx(File3LineIcon, {}),
|
|
369
326
|
keywords: ["file", "upload"],
|
|
370
327
|
onSelect: () => setFileOpen(true),
|
|
@@ -378,30 +335,28 @@ export function ComponentPickerMenuPlugin(props) {
|
|
|
378
335
|
const [editor] = useLexicalComposerContext();
|
|
379
336
|
const theme = useTheme();
|
|
380
337
|
const [queryString, setQueryString] = useState(null);
|
|
381
|
-
const [isInsideToggleTitle, setIsInsideToggleTitle] = useState(() => isSelectionInsideToggleTitle(editor));
|
|
382
338
|
const [imageOpen, setImageOpen] = useState(false);
|
|
383
339
|
const [videoOpen, setVideoOpen] = useState(false);
|
|
384
340
|
const [fileOpen, setFileOpen] = useState(false);
|
|
385
|
-
const
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
}, [
|
|
341
|
+
const baseTrigger = useBasicTypeaheadTriggerMatch("/", { minLength: 0 });
|
|
342
|
+
const triggerFn = useCallback((text, editor) => {
|
|
343
|
+
if (isSelectionInsideToggleTitle(editor)) {
|
|
344
|
+
return null; // 메뉴를 열지 않음 → "/" 명령 무시
|
|
345
|
+
}
|
|
346
|
+
return baseTrigger(text, editor);
|
|
347
|
+
}, [baseTrigger]);
|
|
392
348
|
const options = useMemo(() => {
|
|
393
|
-
const baseOptions =
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
});
|
|
349
|
+
const baseOptions = getBaseOptions({
|
|
350
|
+
editor,
|
|
351
|
+
theme,
|
|
352
|
+
t,
|
|
353
|
+
setImageOpen,
|
|
354
|
+
setVideoOpen,
|
|
355
|
+
isSheetEnabled,
|
|
356
|
+
isQuizEnabled,
|
|
357
|
+
setFileOpen,
|
|
358
|
+
showFileUpload,
|
|
359
|
+
});
|
|
405
360
|
if (!queryString) {
|
|
406
361
|
return baseOptions;
|
|
407
362
|
}
|
|
@@ -413,7 +368,7 @@ export function ComponentPickerMenuPlugin(props) {
|
|
|
413
368
|
option.keywords.some((keyword) => regex.test(keyword)))),
|
|
414
369
|
];
|
|
415
370
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
416
|
-
}, [editor, queryString
|
|
371
|
+
}, [editor, queryString]);
|
|
417
372
|
const onSelectOption = useCallback((selectedOption, nodeToRemove, closeMenu, matchingString) => {
|
|
418
373
|
if (selectedOption instanceof ComponentDrawerOption) {
|
|
419
374
|
return;
|
|
@@ -434,7 +389,7 @@ export function ComponentPickerMenuPlugin(props) {
|
|
|
434
389
|
editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
|
|
435
390
|
}, onClose: () => setVideoOpen(false), shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
|
|
436
391
|
editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
|
|
437
|
-
} }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange:
|
|
392
|
+
} }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: triggerFn, options: options, anchorClassName: cssToClassName `
|
|
438
393
|
z-index: ${ZINDEX.DIALOG + 1};
|
|
439
394
|
`, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && options.length
|
|
440
395
|
? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: options, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
|
|
@@ -24,6 +24,7 @@ import { CdsContext } from "../../../../CdsProvider";
|
|
|
24
24
|
import { UPLOAD_FILE_COMMAND } from "../FilePlugin";
|
|
25
25
|
import moment from "moment";
|
|
26
26
|
import { getTexts } from "../../../../texts";
|
|
27
|
+
import { useTranslation } from "react-i18next";
|
|
27
28
|
const ACCEPTABLE_IMAGE_TYPES = [
|
|
28
29
|
"image/",
|
|
29
30
|
"image/heic",
|
|
@@ -42,6 +43,7 @@ export function DragDropPastePlugin() {
|
|
|
42
43
|
const cdsContext = useContext(CdsContext);
|
|
43
44
|
const uploadByFile = (_a = cdsContext.lexical) === null || _a === void 0 ? void 0 : _a.uploadByFile;
|
|
44
45
|
const showFileError = (_b = cdsContext.lexical) === null || _b === void 0 ? void 0 : _b.showFileError;
|
|
46
|
+
const { t } = useTranslation();
|
|
45
47
|
// eslint-disable-next-line arrow-body-style
|
|
46
48
|
useEffect(() => {
|
|
47
49
|
return editor.registerCommand(DRAG_DROP_PASTE, (files) => {
|
|
@@ -60,7 +62,7 @@ export function DragDropPastePlugin() {
|
|
|
60
62
|
}
|
|
61
63
|
else {
|
|
62
64
|
if (file.size >= MAX_FILE_SIZE) {
|
|
63
|
-
showFileError === null || showFileError === void 0 ? void 0 : showFileError("upload", getTexts("errorFileTooLarge"));
|
|
65
|
+
showFileError === null || showFileError === void 0 ? void 0 : showFileError("upload", getTexts(t, "errorFileTooLarge"));
|
|
64
66
|
}
|
|
65
67
|
else {
|
|
66
68
|
const result = yield uploadByFile(file);
|
|
@@ -76,6 +78,6 @@ export function DragDropPastePlugin() {
|
|
|
76
78
|
}))();
|
|
77
79
|
return true;
|
|
78
80
|
}, COMMAND_PRIORITY_LOW);
|
|
79
|
-
}, [editor, showFileError, uploadByFile]);
|
|
81
|
+
}, [editor, showFileError, uploadByFile, t]);
|
|
80
82
|
return null;
|
|
81
83
|
}
|
|
@@ -3,13 +3,15 @@ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext
|
|
|
3
3
|
import { $getSelection, $isParagraphNode, $isRangeSelection } from "lexical";
|
|
4
4
|
import { css as cssToClassName } from "@emotion/css";
|
|
5
5
|
import { useTheme } from "@emotion/react";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
import { $isToggleTitleNode } from "../../nodes";
|
|
7
|
+
import { useTranslation } from "react-i18next";
|
|
8
|
+
const getPlaceholderClassName = (theme) => cssToClassName `
|
|
9
|
+
&::before {
|
|
10
|
+
position: absolute;
|
|
11
|
+
content: attr(data-placeholder);
|
|
12
|
+
color: ${theme.color.foreground.neutralBaseDisabled};
|
|
13
|
+
pointer-events: none;
|
|
14
|
+
}
|
|
13
15
|
`;
|
|
14
16
|
export const ParagraphPlaceholderPlugin = ({ placeholder, }) => {
|
|
15
17
|
const [editor] = useLexicalComposerContext();
|
|
@@ -17,6 +19,7 @@ export const ParagraphPlaceholderPlugin = ({ placeholder, }) => {
|
|
|
17
19
|
const theme = useTheme();
|
|
18
20
|
const placeholderClassName = useMemo(() => getPlaceholderClassName(theme), [theme]);
|
|
19
21
|
useEffect(() => {
|
|
22
|
+
const { t } = useTranslation();
|
|
20
23
|
const removeUpdateListener = editor.registerUpdateListener(({ editorState }) => {
|
|
21
24
|
editorState.read(() => {
|
|
22
25
|
// 기존에 있던 placeholder를 제거합니다.
|
|
@@ -36,10 +39,16 @@ export const ParagraphPlaceholderPlugin = ({ placeholder, }) => {
|
|
|
36
39
|
const focusedNode = selection.focus.getNode();
|
|
37
40
|
if (!$isParagraphNode(focusedNode) || !focusedNode.isEmpty())
|
|
38
41
|
return;
|
|
42
|
+
const parentNode = focusedNode.getParent();
|
|
43
|
+
// 토글 제목 노드인 경우, / 명령어를 사용하지 않으므로
|
|
44
|
+
// 기존 placeholder 값을 "토글 제목"으로 고정합니다.
|
|
45
|
+
const placeholderText = $isToggleTitleNode(parentNode)
|
|
46
|
+
? t("토글 제목")
|
|
47
|
+
: placeholder;
|
|
39
48
|
const el = editor.getElementByKey(focusedNode.getKey());
|
|
40
49
|
if (el instanceof HTMLParagraphElement) {
|
|
41
50
|
paragraphRef.current = el;
|
|
42
|
-
paragraphRef.current.setAttribute("data-placeholder",
|
|
51
|
+
paragraphRef.current.setAttribute("data-placeholder", placeholderText);
|
|
43
52
|
paragraphRef.current.classList.add(placeholderClassName);
|
|
44
53
|
}
|
|
45
54
|
});
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
10
10
|
import { $setBlocksType } from "@lexical/selection";
|
|
11
11
|
import { $findMatchingParent, $insertNodeToNearestRoot, mergeRegister, } from "@lexical/utils";
|
|
12
|
-
import { $createParagraphNode, $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, createCommand, INSERT_PARAGRAPH_COMMAND, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, } from "lexical";
|
|
12
|
+
import { $createParagraphNode, $getSelection, $isElementNode, $isParagraphNode, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_LOW, createCommand, INSERT_PARAGRAPH_COMMAND, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, } from "lexical";
|
|
13
13
|
import { useEffect } from "react";
|
|
14
14
|
import { $createToggleContainerNode, $createToggleTitleNode, $createToggleContentNode, $isToggleContainerNode, $isToggleTitleNode, $isToggleContentNode, ToggleContainerNode, ToggleTitleNode, ToggleContentNode, } from "../../nodes";
|
|
15
15
|
export const INSERT_TOGGLE_COMMAND = createCommand("INSERT_TOGGLE_COMMAND");
|
|
@@ -77,12 +77,64 @@ export function TogglePlugin() {
|
|
|
77
77
|
}
|
|
78
78
|
node.remove();
|
|
79
79
|
}
|
|
80
|
-
}),
|
|
80
|
+
}),
|
|
81
|
+
/**
|
|
82
|
+
* ToggleTitleNode 변경 시 내부 요소는 ParagraphNode만 허용하도록
|
|
83
|
+
* 각 자식 요소를 순회하면서 내부 텍스트를 ParagraphNode로 호이스트합니다.
|
|
84
|
+
*/
|
|
85
|
+
editor.registerNodeTransform(ToggleTitleNode, (node) => {
|
|
81
86
|
const parent = node.getParent();
|
|
82
87
|
if (!$isToggleContainerNode(parent)) {
|
|
83
88
|
node.replace($createParagraphNode().append(...node.getChildren()));
|
|
84
89
|
return;
|
|
85
90
|
}
|
|
91
|
+
let paragraph = node.getFirstChild();
|
|
92
|
+
if (!$isParagraphNode(paragraph)) {
|
|
93
|
+
const p = $createParagraphNode();
|
|
94
|
+
if (paragraph) {
|
|
95
|
+
paragraph.insertBefore(p);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
node.append(p);
|
|
99
|
+
}
|
|
100
|
+
paragraph = p;
|
|
101
|
+
}
|
|
102
|
+
// AIDEV-NOTE:
|
|
103
|
+
// paragraph의 타입이 LexicalNode인 경우 append 메서드가 없기 때문에
|
|
104
|
+
// $isParagraphNode 체크를 통해 타입 가드를 수행합니다.
|
|
105
|
+
if (!$isParagraphNode(paragraph)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const hoistTexts = (n) => {
|
|
109
|
+
if ($isTextNode(n)) {
|
|
110
|
+
paragraph.append(n);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if ($isElementNode(n)) {
|
|
114
|
+
const children = n.getChildren();
|
|
115
|
+
for (const c of children) {
|
|
116
|
+
hoistTexts(c);
|
|
117
|
+
}
|
|
118
|
+
if (n !== paragraph && n.getChildrenSize() === 0) {
|
|
119
|
+
n.remove();
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
let child = node.getFirstChild();
|
|
125
|
+
while (child) {
|
|
126
|
+
const next = child.getNextSibling();
|
|
127
|
+
if (child !== paragraph) {
|
|
128
|
+
hoistTexts(child);
|
|
129
|
+
if ($isElementNode(child) && child.getChildrenSize() === 0) {
|
|
130
|
+
child.remove();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
child = next;
|
|
134
|
+
}
|
|
135
|
+
if (paragraph.getParent() !== node) {
|
|
136
|
+
node.append(paragraph);
|
|
137
|
+
}
|
|
86
138
|
}), editor.registerNodeTransform(ToggleContainerNode, (node) => {
|
|
87
139
|
const children = node.getChildren();
|
|
88
140
|
if (children.length !== 2 ||
|
package/dist/texts.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TFunction } from "i18next";
|
|
1
2
|
type TranslationMap = {
|
|
2
3
|
placeholderEnterHere: string;
|
|
3
4
|
errorFileTooLarge: string;
|
|
@@ -9,5 +10,5 @@ type TranslationMap = {
|
|
|
9
10
|
errorMaxChoicesExceeded: string;
|
|
10
11
|
multipleChoicesProblem: string;
|
|
11
12
|
};
|
|
12
|
-
export declare function getTexts<K extends keyof TranslationMap>(key: K): TranslationMap[K];
|
|
13
|
+
export declare function getTexts<K extends keyof TranslationMap>(t: TFunction, key: K): TranslationMap[K];
|
|
13
14
|
export {};
|
package/dist/texts.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { i18n } from "./i18n/i18n";
|
|
2
1
|
const TRANSLATION_TEXT = {
|
|
3
|
-
placeholderEnterHere: () =>
|
|
4
|
-
errorFileTooLarge: () =>
|
|
5
|
-
descriptionDefaultInputText: () =>
|
|
6
|
-
exampleEnterHere: () =>
|
|
7
|
-
placeholderEvaluationItem: () =>
|
|
8
|
-
errorRequiredField: () =>
|
|
9
|
-
errorDuplicateChoice: () => (indexes) =>
|
|
10
|
-
errorMaxChoicesExceeded: () =>
|
|
11
|
-
multipleChoicesProblem: () =>
|
|
2
|
+
placeholderEnterHere: (t) => t("여기에 입력하세요."),
|
|
3
|
+
errorFileTooLarge: (t) => t("용량이 너무 큽니다. 1GB 이하의 파일을 선택해 주세요."),
|
|
4
|
+
descriptionDefaultInputText: (t) => t("입력 칸에 기본으로 노출되는 텍스트입니다."),
|
|
5
|
+
exampleEnterHere: (t) => t("예) 여기에 입력하세요."),
|
|
6
|
+
placeholderEvaluationItem: (t) => t("평가 항목을 입력하세요."),
|
|
7
|
+
errorRequiredField: (t) => t("필수 입력 항목입니다."),
|
|
8
|
+
errorDuplicateChoice: (t) => (indexes) => t("{{indexes}}번 선택지가 같은 내용입니다.", { indexes }),
|
|
9
|
+
errorMaxChoicesExceeded: (t) => t("선택지는 9개까지 등록이 가능합니다."),
|
|
10
|
+
multipleChoicesProblem: (t) => t("질문에 해당하는 답을 모두 고르는 문제입니다."),
|
|
12
11
|
};
|
|
13
|
-
export function getTexts(key) {
|
|
14
|
-
return TRANSLATION_TEXT[key]();
|
|
12
|
+
export function getTexts(t, key) {
|
|
13
|
+
return TRANSLATION_TEXT[key](t);
|
|
15
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@team-monolith/cds",
|
|
3
|
-
"version": "1.119.
|
|
3
|
+
"version": "1.119.4",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
20
20
|
"i18next-locize-backend": "^7.0.4",
|
|
21
21
|
"lexical": "^0.36.1",
|
|
22
|
-
"locize": "^4.0.14",
|
|
23
22
|
"lodash": "^4.17.21",
|
|
24
23
|
"moment": "^2.30.1",
|
|
25
24
|
"react": "^18.2.0",
|