@team-monolith/cds 1.117.21 → 1.119.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/@types/emotion.d.ts +160 -160
  2. package/README.md +37 -37
  3. package/dist/CdsProvider.js +4 -4
  4. package/dist/components/AlertDialog/AlertDialog.js +54 -54
  5. package/dist/components/AlertDialog/AlertDialogActions.js +7 -7
  6. package/dist/components/AlertDialog/AlertDialogContent.js +8 -8
  7. package/dist/components/AlertDialog/AlertDialogTitle.js +34 -34
  8. package/dist/components/AnimatedButton.js +32 -32
  9. package/dist/components/Banner.js +51 -51
  10. package/dist/components/Book/Book.js +174 -174
  11. package/dist/components/Button.js +179 -179
  12. package/dist/components/CheckboxInput.js +148 -148
  13. package/dist/components/FileTypeAlertDialog.js +4 -4
  14. package/dist/components/Input.js +53 -53
  15. package/dist/components/InputBase.js +72 -72
  16. package/dist/components/Modal.js +4 -4
  17. package/dist/components/OverflowTooltip.js +4 -4
  18. package/dist/components/Pagination.js +56 -56
  19. package/dist/components/PinInput.js +64 -64
  20. package/dist/components/Popover.js +27 -27
  21. package/dist/components/RadioInput.js +73 -73
  22. package/dist/components/SquareButton.js +109 -109
  23. package/dist/components/Switch.js +69 -69
  24. package/dist/components/SwitchButton.js +107 -107
  25. package/dist/components/Tag.js +72 -72
  26. package/dist/components/Tooltip.js +19 -19
  27. package/dist/foundation/breakpoints.js +16 -16
  28. package/dist/icons/custom/colored/ai-helper.svg +4 -4
  29. package/dist/icons/custom/colored/ai-quiz-color.svg +20 -20
  30. package/dist/icons/custom/colored/badge-color.svg +4 -4
  31. package/dist/icons/custom/colored/badge-gold.svg +11 -11
  32. package/dist/icons/custom/colored/badge-green.svg +11 -11
  33. package/dist/icons/custom/colored/badge-silver.svg +11 -11
  34. package/dist/icons/custom/colored/basic-plus.svg +31 -31
  35. package/dist/icons/custom/colored/basic.svg +3 -3
  36. package/dist/icons/custom/colored/board-color.svg +5 -5
  37. package/dist/icons/custom/colored/cast-cloudy-color.svg +6 -6
  38. package/dist/icons/custom/colored/cast-partly-color.svg +7 -7
  39. package/dist/icons/custom/colored/cast-rainbow-color.svg +13 -13
  40. package/dist/icons/custom/colored/cast-sunny-color.svg +4 -4
  41. package/dist/icons/custom/colored/clap-bronze.svg +8 -8
  42. package/dist/icons/custom/colored/clap-gold.svg +8 -8
  43. package/dist/icons/custom/colored/clap-silver.svg +8 -8
  44. package/dist/icons/custom/colored/class.svg +13 -13
  45. package/dist/icons/custom/colored/codap-color.svg +13 -13
  46. package/dist/icons/custom/colored/ebook-color.svg +5 -5
  47. package/dist/icons/custom/colored/embedded-color.svg +38 -38
  48. package/dist/icons/custom/colored/emo-clap-color.svg +252 -252
  49. package/dist/icons/custom/colored/emo-good-color.svg +68 -68
  50. package/dist/icons/custom/colored/emo-great-color.svg +67 -67
  51. package/dist/icons/custom/colored/emo-heart-color.svg +239 -239
  52. package/dist/icons/custom/colored/emo-hundred-color.svg +194 -194
  53. package/dist/icons/custom/colored/emo-neutral-color.svg +76 -76
  54. package/dist/icons/custom/colored/emo-stars-color.svg +121 -121
  55. package/dist/icons/custom/colored/emo-thumbup-color.svg +238 -238
  56. package/dist/icons/custom/colored/empty.svg +1 -1
  57. package/dist/icons/custom/colored/entry-color.svg +4 -4
  58. package/dist/icons/custom/colored/filename-all-color.svg +4 -4
  59. package/dist/icons/custom/colored/filename-doc-color.svg +5 -5
  60. package/dist/icons/custom/colored/filename-hwp-color.svg +6 -6
  61. package/dist/icons/custom/colored/filename-img-color.svg +6 -6
  62. package/dist/icons/custom/colored/filename-mp4-color.svg +5 -5
  63. package/dist/icons/custom/colored/filename-pdf-color.svg +12 -12
  64. package/dist/icons/custom/colored/filename-ppt-color.svg +6 -6
  65. package/dist/icons/custom/colored/filename-xls-color.svg +5 -5
  66. package/dist/icons/custom/colored/filename-zip-color.svg +5 -5
  67. package/dist/icons/custom/colored/google.svg +13 -13
  68. package/dist/icons/custom/colored/hand-fill.svg +4 -4
  69. package/dist/icons/custom/colored/judge-color.svg +6 -6
  70. package/dist/icons/custom/colored/makecode-color.svg +4 -4
  71. package/dist/icons/custom/colored/master.svg +12 -12
  72. package/dist/icons/custom/colored/material.svg +6 -6
  73. package/dist/icons/custom/colored/medal-bronze.svg +9 -9
  74. package/dist/icons/custom/colored/medal-gold.svg +9 -9
  75. package/dist/icons/custom/colored/medal-silver.svg +9 -9
  76. package/dist/icons/custom/colored/pro.svg +4 -4
  77. package/dist/icons/custom/colored/problem.svg +7 -7
  78. package/dist/icons/custom/colored/python-color.svg +4 -4
  79. package/dist/icons/custom/colored/quiz-color.svg +12 -12
  80. package/dist/icons/custom/colored/resource-color.svg +13 -13
  81. package/dist/icons/custom/colored/scratch-color.svg +6 -6
  82. package/dist/icons/custom/colored/type-helper.svg +9 -9
  83. package/dist/icons/custom/colored/whale.svg +7 -7
  84. package/dist/icons/custom/colored/worksheet-color.svg +5 -5
  85. package/dist/icons/custom/default/ai-quiz.svg +8 -8
  86. package/dist/icons/custom/default/badge.svg +4 -4
  87. package/dist/icons/custom/default/board.svg +5 -5
  88. package/dist/icons/custom/default/cast-cloudy.svg +3 -3
  89. package/dist/icons/custom/default/cast-partly.svg +4 -4
  90. package/dist/icons/custom/default/cast-rainbow.svg +12 -12
  91. package/dist/icons/custom/default/cast-sunny.svg +3 -3
  92. package/dist/icons/custom/default/codap.svg +11 -11
  93. package/dist/icons/custom/default/ebook.svg +3 -3
  94. package/dist/icons/custom/default/embedded.svg +4 -4
  95. package/dist/icons/custom/default/emo-clap.svg +6 -6
  96. package/dist/icons/custom/default/emo-good.svg +12 -12
  97. package/dist/icons/custom/default/emo-great.svg +12 -12
  98. package/dist/icons/custom/default/emo-heart.svg +5 -5
  99. package/dist/icons/custom/default/emo-hundred.svg +3 -3
  100. package/dist/icons/custom/default/emo-neutral.svg +14 -14
  101. package/dist/icons/custom/default/emo-stars.svg +14 -14
  102. package/dist/icons/custom/default/emo-thumbup.svg +3 -3
  103. package/dist/icons/custom/default/entry.svg +4 -4
  104. package/dist/icons/custom/default/fab.svg +10 -10
  105. package/dist/icons/custom/default/grant-alt.svg +5 -5
  106. package/dist/icons/custom/default/grant.svg +4 -4
  107. package/dist/icons/custom/default/hand-line.svg +3 -3
  108. package/dist/icons/custom/default/judge.svg +3 -3
  109. package/dist/icons/custom/default/makecode.svg +5 -5
  110. package/dist/icons/custom/default/pdf.svg +3 -3
  111. package/dist/icons/custom/default/python.svg +7 -7
  112. package/dist/icons/custom/default/quiz.svg +4 -4
  113. package/dist/icons/custom/default/resource.svg +11 -11
  114. package/dist/icons/custom/default/scratch.svg +3 -3
  115. package/dist/icons/custom/default/scroll-alt.svg +5 -5
  116. package/dist/icons/custom/default/scroll-fill.svg +4 -4
  117. package/dist/icons/custom/default/scroll-line.svg +5 -5
  118. package/dist/icons/custom/default/symbol.svg +4 -4
  119. package/dist/icons/custom/default/worksheet.svg +4 -4
  120. package/dist/icons/custom/svgrColoredTemplate.js +26 -26
  121. package/dist/icons/custom/svgrDefaultTemplate.js +26 -26
  122. package/dist/patterns/Accordion.js +20 -20
  123. package/dist/patterns/Dropdown/DropdownItem/DropdownItem.js +60 -60
  124. package/dist/patterns/Dropdown/DropdownMenu/DropdownMenu.js +27 -27
  125. package/dist/patterns/Dropdown/DropdownMenu/style.js +19 -19
  126. package/dist/patterns/LexicalEditor/Plugins.js +38 -37
  127. package/dist/patterns/LexicalEditor/components/FileSelectInput.js +23 -23
  128. package/dist/patterns/LexicalEditor/components/InsertImageDialog/ImagePreview.js +4 -4
  129. package/dist/patterns/LexicalEditor/components/InsertImageDialog/InsertImageDialog.js +15 -15
  130. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.js +17 -17
  131. package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +2 -2
  132. package/dist/patterns/LexicalEditor/hr.svg +3 -3
  133. package/dist/patterns/LexicalEditor/nodes/FileNode/FileComponent.js +44 -44
  134. package/dist/patterns/LexicalEditor/nodes/FileNode/FileDownloadButton.js +25 -25
  135. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageComponent.js +8 -8
  136. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageResizer.js +60 -60
  137. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +19 -19
  138. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SegmentedInput.js +49 -49
  139. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormSolution.js +7 -7
  140. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +73 -73
  141. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/TextTypeDropdown.js +5 -5
  142. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/TextInput.js +7 -7
  143. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxComponent.js +69 -69
  144. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxEdit.js +3 -3
  145. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -15
  146. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +28 -28
  147. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/FormSelection.js +54 -54
  148. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +61 -61
  149. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/Evaluation.js +75 -75
  150. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +17 -17
  151. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +7 -7
  152. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +28 -28
  153. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +52 -52
  154. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +7 -7
  155. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +25 -25
  156. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +53 -53
  157. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxComponent.js +54 -54
  158. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxView.js +5 -5
  159. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +21 -21
  160. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/FormSelection.js +42 -42
  161. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +71 -71
  162. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.js +6 -6
  163. package/dist/patterns/LexicalEditor/nodes/index.d.ts +3 -0
  164. package/dist/patterns/LexicalEditor/nodes/index.js +3 -0
  165. package/dist/patterns/LexicalEditor/nodes/nodes.d.ts +4 -2
  166. package/dist/patterns/LexicalEditor/nodes/nodes.js +6 -0
  167. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContainerNode.d.ts +32 -0
  168. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContainerNode.js +128 -0
  169. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContentNode.d.ts +23 -0
  170. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContentNode.js +88 -0
  171. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleTitleNode.d.ts +23 -0
  172. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleTitleNode.js +103 -0
  173. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdder.js +51 -51
  174. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +11 -11
  175. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/menu.svg +7 -7
  176. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/plus.svg +2 -2
  177. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.js +10 -10
  178. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js +32 -32
  179. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js +32 -32
  180. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +19 -13
  181. package/dist/patterns/LexicalEditor/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +49 -49
  182. package/dist/patterns/LexicalEditor/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatPopup.js +36 -36
  183. package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +7 -7
  184. package/dist/patterns/LexicalEditor/plugins/TogglePlugin/index.d.ts +9 -0
  185. package/dist/patterns/LexicalEditor/plugins/TogglePlugin/index.js +146 -0
  186. package/dist/patterns/LexicalEditor/theme.d.ts +6 -0
  187. package/dist/patterns/LexicalEditor/theme.js +279 -243
  188. package/dist/patterns/LexicalEditor/utils/toggleUtils.d.ts +9 -0
  189. package/dist/patterns/LexicalEditor/utils/toggleUtils.js +18 -0
  190. package/dist/patterns/SegmentedControl/SegmentedControlButton.js +10 -10
  191. package/dist/patterns/SegmentedControl/SegmentedControlGroup.js +8 -8
  192. package/dist/patterns/SegmentedControl/SegmentedControlSquareButton.js +2 -2
  193. package/dist/patterns/Tabs.js +43 -43
  194. package/dist/patterns/ToggleButtonGroup/ToggleButton.js +40 -40
  195. package/dist/patterns/ToggleButtonGroup/ToggleButtonGroup.js +11 -11
  196. package/dist/utils/hover.js +12 -12
  197. package/dist/utils/reset.js +19 -19
  198. package/dist/utils/visuallyHidden.js +10 -10
  199. package/package.json +110 -110
@@ -9,59 +9,59 @@ export const ComponentAdder = forwardRef(function ComponentAdder(props, ref) {
9
9
  const [editor] = useLexicalComposerContext();
10
10
  return (_jsxs(Container, { ref: ref, className: className, children: [_jsx(PlusContainer, { onClick: onPlusClick, children: editor._editable && _jsx(PlusIcon, {}) }), _jsx(MenuContainer, { draggable: true, onClick: onMenuClick, onDragStart: onMenuDragStart, onDragEnd: onMenuDragEnd, children: editor._editable && _jsx(MenuIcon, {}) })] }));
11
11
  });
12
- const Container = styled.div `
13
- display: flex;
14
- align-items: flex-start;
15
- gap: 3px;
16
-
17
- position: absolute;
18
- left: 0;
19
- top: 0;
20
- will-change: transform;
12
+ const Container = styled.div `
13
+ display: flex;
14
+ align-items: flex-start;
15
+ gap: 3px;
16
+
17
+ position: absolute;
18
+ left: 0;
19
+ top: 0;
20
+ will-change: transform;
21
21
  `;
22
- const PlusContainer = styled.div `
23
- display: flex;
24
- width: 26px;
25
- height: 26px;
26
- justify-content: center;
27
- align-items: center;
28
- border-radius: 5px;
29
- background: ${({ theme }) => theme.color.foreground.neutralAlt};
30
-
31
- cursor: pointer;
32
-
33
- &:hover {
34
- background-color: #eff2f5;
35
- }
22
+ const PlusContainer = styled.div `
23
+ display: flex;
24
+ width: 26px;
25
+ height: 26px;
26
+ justify-content: center;
27
+ align-items: center;
28
+ border-radius: 5px;
29
+ background: ${({ theme }) => theme.color.foreground.neutralAlt};
30
+
31
+ cursor: pointer;
32
+
33
+ &:hover {
34
+ background-color: #eff2f5;
35
+ }
36
36
  `;
37
- const PlusIcon = styled.div `
38
- width: 24px;
39
- height: 24px;
40
- // svg는 hover 이벤트를 path마다 받아서 불편함
41
- // Lexical에서 동일한 접근법을 사용하고 있음
42
- background-image: url(${plus});
37
+ const PlusIcon = styled.div `
38
+ width: 24px;
39
+ height: 24px;
40
+ // svg는 hover 이벤트를 path마다 받아서 불편함
41
+ // Lexical에서 동일한 접근법을 사용하고 있음
42
+ background-image: url(${plus});
43
43
  `;
44
- const MenuContainer = styled.div `
45
- display: flex;
46
- width: 26px;
47
- height: 26px;
48
- justify-content: center;
49
- align-items: center;
50
- border-radius: 5px;
51
- background: ${({ theme }) => theme.color.foreground.neutralAlt};
52
-
53
- cursor: grab;
54
-
55
- &:active {
56
- cursor: grabbing;
57
- }
58
-
59
- &:hover {
60
- background-color: #eff2f5;
61
- }
44
+ const MenuContainer = styled.div `
45
+ display: flex;
46
+ width: 26px;
47
+ height: 26px;
48
+ justify-content: center;
49
+ align-items: center;
50
+ border-radius: 5px;
51
+ background: ${({ theme }) => theme.color.foreground.neutralAlt};
52
+
53
+ cursor: grab;
54
+
55
+ &:active {
56
+ cursor: grabbing;
57
+ }
58
+
59
+ &:hover {
60
+ background-color: #eff2f5;
61
+ }
62
62
  `;
63
- const MenuIcon = styled.div `
64
- width: 24px;
65
- height: 24px;
66
- background-image: url(${menu});
63
+ const MenuIcon = styled.div `
64
+ width: 24px;
65
+ height: 24px;
66
+ background-image: url(${menu});
67
67
  `;
@@ -171,8 +171,8 @@ export function ComponentAdderPlugin(props) {
171
171
  editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
172
172
  }, shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
173
173
  editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
174
- } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
175
- z-index: ${ZINDEX.DIALOG + 1};
174
+ } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
175
+ z-index: ${ZINDEX.DIALOG + 1};
176
176
  `, options: filteredOptions, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && filteredOptions.length
177
177
  ? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: filteredOptions, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
178
178
  : null, onSelectOption: onSelectOption, onClose: () => {
@@ -262,13 +262,13 @@ export function ComponentAdderPlugin(props) {
262
262
  }));
263
263
  }), onMenuDragStart: onDragStart, onMenuDragEnd: onDragEnd }), _jsx(TargetLine, { ref: targetLineRef })] }), anchorElem)] }));
264
264
  }
265
- const TargetLine = styled.div `
266
- pointer-events: none;
267
- background: deepskyblue;
268
- height: 4px;
269
- position: absolute;
270
- left: 0;
271
- top: 0;
272
- opacity: 0;
273
- will-change: transform;
265
+ const TargetLine = styled.div `
266
+ pointer-events: none;
267
+ background: deepskyblue;
268
+ height: 4px;
269
+ position: absolute;
270
+ left: 0;
271
+ top: 0;
272
+ opacity: 0;
273
+ will-change: transform;
274
274
  `;
@@ -1,8 +1,8 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M9.41002 7.29999H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
3
- <path d="M14.6 7.29999H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
4
- <path d="M9.31004 12H9.30005" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
5
- <path d="M14.6 12H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
6
- <path d="M9.41002 16.7H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
7
- <path d="M14.6 16.7H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
+ <path d="M9.41002 7.29999H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
3
+ <path d="M14.6 7.29999H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
4
+ <path d="M9.31004 12H9.30005" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
5
+ <path d="M14.6 12H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
6
+ <path d="M9.41002 16.7H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
7
+ <path d="M14.6 16.7H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
8
8
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M12 7V12M12 12V17M12 12H17M12 12H7" stroke="#363636" stroke-width="2" stroke-linecap="round"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
+ <path d="M12 7V12M12 12V17M12 12H17M12 12H7" stroke="#363636" stroke-width="2" stroke-linecap="round"/>
3
3
  </svg>
@@ -244,8 +244,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
244
244
  return [
245
245
  new ComponentPickerOption(i18n.t("회색"), {
246
246
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.marbleOnContainer })),
247
- iconContainerClassName: css `
248
- background: ${theme.color.container.marbleContainer};
247
+ iconContainerClassName: css `
248
+ background: ${theme.color.container.marbleContainer};
249
249
  `,
250
250
  keywords: ["grey", "gray"],
251
251
  onSelect: () => {
@@ -256,8 +256,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
256
256
  }),
257
257
  new ComponentPickerOption(i18n.t("빨간색"), {
258
258
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.redOnContainer })),
259
- iconContainerClassName: css `
260
- background: ${theme.color.container.redContainer};
259
+ iconContainerClassName: css `
260
+ background: ${theme.color.container.redContainer};
261
261
  `,
262
262
  keywords: ["red"],
263
263
  onSelect: () => {
@@ -268,8 +268,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
268
268
  }),
269
269
  new ComponentPickerOption(i18n.t("노란색"), {
270
270
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.yellowOnContainer })),
271
- iconContainerClassName: css `
272
- background: ${theme.color.container.yellowContainer};
271
+ iconContainerClassName: css `
272
+ background: ${theme.color.container.yellowContainer};
273
273
  `,
274
274
  keywords: ["yellow"],
275
275
  onSelect: () => {
@@ -280,8 +280,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
280
280
  }),
281
281
  new ComponentPickerOption(i18n.t("파란색"), {
282
282
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.blueOnContainer })),
283
- iconContainerClassName: css `
284
- background: ${theme.color.container.blueContainer};
283
+ iconContainerClassName: css `
284
+ background: ${theme.color.container.blueContainer};
285
285
  `,
286
286
  keywords: ["blue"],
287
287
  onSelect: () => {
@@ -292,8 +292,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
292
292
  }),
293
293
  new ComponentPickerOption(i18n.t("초록색"), {
294
294
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.greenOnContainer })),
295
- iconContainerClassName: css `
296
- background: ${theme.color.container.greenContainer};
295
+ iconContainerClassName: css `
296
+ background: ${theme.color.container.greenContainer};
297
297
  `,
298
298
  keywords: ["green"],
299
299
  onSelect: () => {
@@ -4,38 +4,38 @@ export function ComponentPickerMenuItem(props) {
4
4
  const { index, isSelected, onClick, onMouseEnter, option } = props;
5
5
  return (_jsxs(ItemContainer, { tabIndex: -1, ref: option.setRefElement, role: "option", "aria-selected": isSelected, id: "typeahead-item-" + index, onMouseEnter: onMouseEnter, onClick: onClick, isSelected: isSelected, children: [_jsx(IconContainer, { className: option.iconContainerClassName, children: option.icon }), _jsx(Title, { children: option.title })] }, option.key));
6
6
  }
7
- const ItemContainer = styled.li `
8
- display: flex;
9
- padding: 3px 2px;
10
- align-items: center;
11
- gap: 10px;
12
- width: 100%;
13
- cursor: pointer;
14
-
15
- ${({ isSelected }) => isSelected && "background: #eee;"}
7
+ const ItemContainer = styled.li `
8
+ display: flex;
9
+ padding: 3px 2px;
10
+ align-items: center;
11
+ gap: 10px;
12
+ width: 100%;
13
+ cursor: pointer;
14
+
15
+ ${({ isSelected }) => isSelected && "background: #eee;"}
16
16
  `;
17
- const IconContainer = styled.div `
18
- display: flex;
19
- width: 26px;
20
- height: 26px;
21
- justify-content: center;
22
- align-items: center;
23
-
24
- border-radius: 5px;
25
-
26
- background: ${({ theme }) => theme.color.foreground.neutralAlt};
27
- box-shadow: 0px 0px 0px 1px rgba(201, 201, 204, 0.48);
28
-
29
- svg {
30
- width: 18px;
31
- height: 18px;
32
- }
17
+ const IconContainer = styled.div `
18
+ display: flex;
19
+ width: 26px;
20
+ height: 26px;
21
+ justify-content: center;
22
+ align-items: center;
23
+
24
+ border-radius: 5px;
25
+
26
+ background: ${({ theme }) => theme.color.foreground.neutralAlt};
27
+ box-shadow: 0px 0px 0px 1px rgba(201, 201, 204, 0.48);
28
+
29
+ svg {
30
+ width: 18px;
31
+ height: 18px;
32
+ }
33
33
  `;
34
- const Title = styled.span `
35
- color: ${({ theme }) => theme.color.foreground.neutralBase};
36
- font-family: ${({ theme }) => theme.fontFamily.ui};
37
- font-size: 14px;
38
- font-style: normal;
39
- font-weight: 500;
40
- line-height: 20px; /* 142.857% */
34
+ const Title = styled.span `
35
+ color: ${({ theme }) => theme.color.foreground.neutralBase};
36
+ font-family: ${({ theme }) => theme.fontFamily.ui};
37
+ font-size: 14px;
38
+ font-style: normal;
39
+ font-weight: 500;
40
+ line-height: 20px; /* 142.857% */
41
41
  `;
@@ -17,37 +17,37 @@ export function ComponentPickerMenuList(props) {
17
17
  }, option: option }, option.key));
18
18
  }) }) }));
19
19
  }
20
- const Container = styled.div `
21
- position: absolute;
22
-
23
- display: flex;
24
- width: 200px;
25
- padding: 4px;
26
- flex-direction: column;
27
- align-items: flex-start;
28
- gap: 5px;
29
-
30
- border-radius: 8px;
31
- border: 1px solid #e8e8eb;
32
- background: ${({ theme }) => theme.color.background.neutralBase};
33
- box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
20
+ const Container = styled.div `
21
+ position: absolute;
22
+
23
+ display: flex;
24
+ width: 200px;
25
+ padding: 4px;
26
+ flex-direction: column;
27
+ align-items: flex-start;
28
+ gap: 5px;
29
+
30
+ border-radius: 8px;
31
+ border: 1px solid #e8e8eb;
32
+ background: ${({ theme }) => theme.color.background.neutralBase};
33
+ box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
34
34
  `;
35
- const ListContainer = styled.ul `
36
- padding: 0;
37
- list-style: none;
38
- margin: 0;
39
-
40
- display: flex;
41
- flex-direction: column;
42
- align-items: flex-start;
43
- gap: 1px;
44
- align-self: stretch;
45
-
46
- overflow-y: scroll;
47
-
48
- scrollbar-width: none;
49
- -ms-overflow-style: none;
50
- &::-webkit-scrollbar {
51
- display: none;
52
- }
35
+ const ListContainer = styled.ul `
36
+ padding: 0;
37
+ list-style: none;
38
+ margin: 0;
39
+
40
+ display: flex;
41
+ flex-direction: column;
42
+ align-items: flex-start;
43
+ gap: 1px;
44
+ align-self: stretch;
45
+
46
+ overflow-y: scroll;
47
+
48
+ scrollbar-width: none;
49
+ -ms-overflow-style: none;
50
+ &::-webkit-scrollbar {
51
+ display: none;
52
+ }
53
53
  `;
@@ -20,7 +20,7 @@ import { useCallback, useMemo, useState } from "react";
20
20
  import * as ReactDOM from "react-dom";
21
21
  import { css as cssToClassName } from "@emotion/css";
22
22
  import { ComponentPickerMenuList } from "./ComponentPickerMenuList";
23
- import { TextIcon, H1Icon, H2Icon, H3Icon, ListUnorderedIcon, ListOrderedIcon, DoubleQuotesLIcon, CodeViewIcon, SeparatorIcon, ImageLineIcon, VideoLineIcon, InputMethodLineIcon, ListRadioIcon, LayoutColumnLineIcon, FileList2LineIcon, EmojiStickerLineIcon, File3LineIcon, } from "../../../../icons";
23
+ import { TextIcon, H1Icon, H2Icon, H3Icon, ListUnorderedIcon, ListOrderedIcon, DoubleQuotesLIcon, CodeViewIcon, SeparatorIcon, ImageLineIcon, VideoLineIcon, InputMethodLineIcon, ListRadioIcon, LayoutColumnLineIcon, FileList2LineIcon, EmojiStickerLineIcon, File3LineIcon, PlayList2FillIcon, } from "../../../../icons";
24
24
  import { ZINDEX } from "../../../../utils/zIndex";
25
25
  import { css, useTheme } from "@emotion/react";
26
26
  import { INSERT_PROBLEM_INPUT_COMMAND } from "../ProblemInputPlugin";
@@ -38,6 +38,7 @@ import { UPLOAD_FILE_COMMAND } from "../FilePlugin";
38
38
  import { i18n } from "../../../../i18n/i18n";
39
39
  import { useTranslation } from "react-i18next";
40
40
  import { getTexts } from "../../../../texts";
41
+ import { INSERT_TOGGLE_COMMAND } from "../TogglePlugin";
41
42
  // import useModal from "../../hooks/useModal";
42
43
  // import catTypingGif from "../../images/cat-typing.gif";
43
44
  // import { INSERT_IMAGE_COMMAND, InsertImageDialog } from "../ImagesPlugin";
@@ -141,11 +142,11 @@ function getSheetContextOptions(editor, theme) {
141
142
  placeholder: "",
142
143
  }),
143
144
  }),
144
- new ComponentDrawerOption(i18n.t("활동지 메뉴구분선"), (_jsx("div", { css: css `
145
- width: 100%;
146
- height: 1px;
147
- background: ${theme.color.background.neutralAltActive};
148
- margin: 4px 0;
145
+ new ComponentDrawerOption(i18n.t("활동지 메뉴구분선"), (_jsx("div", { css: css `
146
+ width: 100%;
147
+ height: 1px;
148
+ background: ${theme.color.background.neutralAltActive};
149
+ margin: 4px 0;
149
150
  ` }))),
150
151
  ];
151
152
  }
@@ -189,11 +190,11 @@ function getQuizContextOptions(editor, theme) {
189
190
  });
190
191
  },
191
192
  }),
192
- new ComponentDrawerOption(i18n.t("퀴즈 메뉴구분선"), (_jsx("div", { css: css `
193
- width: 100%;
194
- height: 1px;
195
- background: ${theme.color.background.neutralAltActive};
196
- margin: 4px 0;
193
+ new ComponentDrawerOption(i18n.t("퀴즈 메뉴구분선"), (_jsx("div", { css: css `
194
+ width: 100%;
195
+ height: 1px;
196
+ background: ${theme.color.background.neutralAltActive};
197
+ margin: 4px 0;
197
198
  ` }))),
198
199
  ];
199
200
  }
@@ -243,6 +244,11 @@ export function getBaseOptions(props) {
243
244
  keywords: ["numbered list", "ordered list", "ol"],
244
245
  onSelect: () => editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined),
245
246
  }),
247
+ new ComponentPickerOption(i18n.t("토글 목록", { context: "렉시컬 드롭다운 메뉴" }), {
248
+ icon: _jsx(PlayList2FillIcon, {}),
249
+ keywords: ["toggle", "collapsible"],
250
+ onSelect: () => editor.dispatchCommand(INSERT_TOGGLE_COMMAND, undefined),
251
+ }),
246
252
  new ComponentPickerOption(i18n.t("인용 블록", { context: "렉시컬 드롭다운 메뉴" }), {
247
253
  icon: _jsx(DoubleQuotesLIcon, {}),
248
254
  keywords: ["block quote"],
@@ -372,8 +378,8 @@ export function ComponentPickerMenuPlugin(props) {
372
378
  editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
373
379
  }, onClose: () => setVideoOpen(false), shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
374
380
  editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
375
- } }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, anchorClassName: cssToClassName `
376
- z-index: ${ZINDEX.DIALOG + 1};
381
+ } }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, anchorClassName: cssToClassName `
382
+ z-index: ${ZINDEX.DIALOG + 1};
377
383
  `, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && options.length
378
384
  ? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: options, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
379
385
  : null })] }));
@@ -164,57 +164,57 @@ export function FloatingLinkEditor(props) {
164
164
  editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);
165
165
  }, children: _jsx(DeleteBinLineIcon, {}) })] })] })) }));
166
166
  }
167
- const Container = styled.div `
168
- position: absolute;
169
- top: 0;
170
- left: 0;
171
- z-index: 10;
172
- will-change: transform;
173
-
174
- display: flex;
175
- padding: 0px 4px;
176
- align-items: center;
177
- gap: 4px;
178
-
179
- border-radius: 8px;
180
- // 메뉴가 활성화되지 않아도 클릭한 영역을 따라 다니도록 개발되었습니다.
181
- // border가 있으면 활성화되지 않은 상태에서도 노출되므로 border를 제거합니다.
182
- /* border: 1px solid #e8e8eb; */
183
- background: ${({ theme }) => theme.color.background.neutralBase};
184
- box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
185
-
186
- width: 400px;
167
+ const Container = styled.div `
168
+ position: absolute;
169
+ top: 0;
170
+ left: 0;
171
+ z-index: 10;
172
+ will-change: transform;
173
+
174
+ display: flex;
175
+ padding: 0px 4px;
176
+ align-items: center;
177
+ gap: 4px;
178
+
179
+ border-radius: 8px;
180
+ // 메뉴가 활성화되지 않아도 클릭한 영역을 따라 다니도록 개발되었습니다.
181
+ // border가 있으면 활성화되지 않은 상태에서도 노출되므로 border를 제거합니다.
182
+ /* border: 1px solid #e8e8eb; */
183
+ background: ${({ theme }) => theme.color.background.neutralBase};
184
+ box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
185
+
186
+ width: 400px;
187
187
  `;
188
- const Buttons = styled.div `
189
- display: flex;
190
- align-items: center;
191
- gap: 4px;
188
+ const Buttons = styled.div `
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 4px;
192
192
  `;
193
- const Button = styled.button `
194
- // reset
195
- border: none;
196
- outline: none;
197
- background: none;
198
- cursor: pointer;
199
-
200
- padding: 8px 4px;
201
-
202
- svg {
203
- width: 18px;
204
- height: 18px;
205
- }
193
+ const Button = styled.button `
194
+ // reset
195
+ border: none;
196
+ outline: none;
197
+ background: none;
198
+ cursor: pointer;
199
+
200
+ padding: 8px 4px;
201
+
202
+ svg {
203
+ width: 18px;
204
+ height: 18px;
205
+ }
206
206
  `;
207
- const Link = styled.a `
208
- width: 100%;
209
- padding: 0px 8px;
210
-
211
- /* Default/Paragraph/16px-Rg */
212
- font-family: ${({ theme }) => theme.fontFamily.ui};
213
- font-size: 16px;
214
- font-style: normal;
215
- font-weight: 400;
216
- line-height: 24px; /* 150% */
207
+ const Link = styled.a `
208
+ width: 100%;
209
+ padding: 0px 8px;
210
+
211
+ /* Default/Paragraph/16px-Rg */
212
+ font-family: ${({ theme }) => theme.fontFamily.ui};
213
+ font-size: 16px;
214
+ font-style: normal;
215
+ font-weight: 400;
216
+ line-height: 24px; /* 150% */
217
217
  `;
218
- const StyledInput = styled(Input) `
219
- margin: 4px 0px;
218
+ const StyledInput = styled(Input) `
219
+ margin: 4px 0px;
220
220
  `;
@@ -19,41 +19,41 @@ export const FloatingTextFormatPopup = forwardRef(function FloatingTextFormatPop
19
19
  editor.dispatchCommand(FORMAT_TEXT_COMMAND, "code");
20
20
  }, active: Boolean(isCode), "aria-label": "Insert code block", children: _jsx(CodeFillIcon, {}) }), _jsx(IconButton, { type: "button", onClick: insertLink, active: Boolean(isLink), "aria-label": "Insert link", children: _jsx(LinkIcon, {}) })] })) }));
21
21
  });
22
- const Container = styled.div `
23
- position: absolute;
24
- top: 0;
25
- left: 0;
26
- z-index: 10;
27
- will-change: transform;
28
-
29
- display: inline-flex;
30
- padding: 0px 4px;
31
- align-items: flex-start;
32
- gap: 4px;
33
-
34
- border-radius: 8px;
35
- border: 1px solid #e8e8eb;
36
- background: ${({ theme }) => theme.color.background.neutralBase};
37
- box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
22
+ const Container = styled.div `
23
+ position: absolute;
24
+ top: 0;
25
+ left: 0;
26
+ z-index: 10;
27
+ will-change: transform;
28
+
29
+ display: inline-flex;
30
+ padding: 0px 4px;
31
+ align-items: flex-start;
32
+ gap: 4px;
33
+
34
+ border-radius: 8px;
35
+ border: 1px solid #e8e8eb;
36
+ background: ${({ theme }) => theme.color.background.neutralBase};
37
+ box-shadow: 0px 3px 15px -3px rgba(13, 20, 33, 0.13);
38
38
  `;
39
- const IconButton = styled.button `
40
- border: none;
41
- outline: none;
42
-
43
- display: flex;
44
- padding: 8px 4px;
45
- align-items: center;
46
- gap: 4px;
47
-
48
- background: #fff;
49
-
50
- svg {
51
- width: 18px;
52
- height: 18px;
53
- ${({ theme, active }) => active && `color: ${theme.color.foreground.primary};`}
54
- }
55
-
56
- &:hover {
57
- background: ${({ theme }) => theme.color.background.neutralAlt};
58
- }
39
+ const IconButton = styled.button `
40
+ border: none;
41
+ outline: none;
42
+
43
+ display: flex;
44
+ padding: 8px 4px;
45
+ align-items: center;
46
+ gap: 4px;
47
+
48
+ background: #fff;
49
+
50
+ svg {
51
+ width: 18px;
52
+ height: 18px;
53
+ ${({ theme, active }) => active && `color: ${theme.color.foreground.primary};`}
54
+ }
55
+
56
+ &:hover {
57
+ background: ${({ theme }) => theme.color.background.neutralAlt};
58
+ }
59
59
  `;
@@ -3,13 +3,13 @@ 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
- const getPlaceholderClassName = (theme) => cssToClassName `
7
- &::before {
8
- position: absolute;
9
- content: attr(data-placeholder);
10
- color: ${theme.color.foreground.neutralBaseDisabled};
11
- pointer-events: none;
12
- }
6
+ const getPlaceholderClassName = (theme) => cssToClassName `
7
+ &::before {
8
+ position: absolute;
9
+ content: attr(data-placeholder);
10
+ color: ${theme.color.foreground.neutralBaseDisabled};
11
+ pointer-events: none;
12
+ }
13
13
  `;
14
14
  export const ParagraphPlaceholderPlugin = ({ placeholder, }) => {
15
15
  const [editor] = useLexicalComposerContext();
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export declare const INSERT_TOGGLE_COMMAND: import("lexical").LexicalCommand<void>;
9
+ export declare function TogglePlugin(): null;