@team-monolith/cds 1.113.2 → 1.114.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 (202) hide show
  1. package/@types/emotion.d.ts +160 -160
  2. package/README.md +35 -35
  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 +100 -100
  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 +20 -17
  130. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.d.ts +15 -0
  131. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.js +76 -0
  132. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/index.d.ts +1 -0
  133. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/index.js +1 -0
  134. package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +2 -2
  135. package/dist/patterns/LexicalEditor/hr.svg +3 -3
  136. package/dist/patterns/LexicalEditor/nodes/FileNode/FileComponent.js +44 -44
  137. package/dist/patterns/LexicalEditor/nodes/FileNode/FileDownloadButton.js +25 -25
  138. package/dist/patterns/LexicalEditor/nodes/Form/FormInput.d.ts +2 -0
  139. package/dist/patterns/LexicalEditor/nodes/Form/FormInput.js +4 -2
  140. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageComponent.js +8 -8
  141. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageResizer.js +60 -60
  142. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +19 -19
  143. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SegmentedInput.js +49 -49
  144. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormSolution.js +7 -7
  145. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +73 -73
  146. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/TextTypeDropdown.js +5 -5
  147. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/TextInput.js +7 -7
  148. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxComponent.js +69 -69
  149. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxEdit.js +3 -3
  150. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -15
  151. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +28 -28
  152. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/FormSelection.js +54 -54
  153. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +61 -61
  154. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/Evaluation.js +75 -75
  155. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +17 -17
  156. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +7 -7
  157. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +28 -28
  158. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +52 -52
  159. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +7 -7
  160. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +25 -25
  161. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +53 -53
  162. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxComponent.js +54 -54
  163. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxView.js +5 -5
  164. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +21 -21
  165. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/FormSelection.js +42 -42
  166. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +71 -71
  167. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.d.ts +7 -0
  168. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.js +53 -0
  169. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoNode.d.ts +23 -0
  170. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoNode.js +52 -0
  171. package/dist/patterns/LexicalEditor/nodes/VideoNode/index.d.ts +1 -0
  172. package/dist/patterns/LexicalEditor/nodes/VideoNode/index.js +1 -0
  173. package/dist/patterns/LexicalEditor/nodes/index.d.ts +1 -0
  174. package/dist/patterns/LexicalEditor/nodes/index.js +1 -0
  175. package/dist/patterns/LexicalEditor/nodes/nodes.d.ts +2 -1
  176. package/dist/patterns/LexicalEditor/nodes/nodes.js +2 -0
  177. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdder.js +51 -51
  178. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +18 -12
  179. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/menu.svg +7 -7
  180. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/plus.svg +2 -2
  181. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.d.ts +1 -1
  182. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.js +27 -12
  183. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js +32 -32
  184. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js +32 -32
  185. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.d.ts +1 -0
  186. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +30 -19
  187. package/dist/patterns/LexicalEditor/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +49 -49
  188. package/dist/patterns/LexicalEditor/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatPopup.js +36 -36
  189. package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +7 -7
  190. package/dist/patterns/LexicalEditor/plugins/VideosPlugin/index.d.ts +5 -0
  191. package/dist/patterns/LexicalEditor/plugins/VideosPlugin/index.js +20 -0
  192. package/dist/patterns/LexicalEditor/theme.js +243 -243
  193. package/dist/patterns/SegmentedControl/SegmentedControlButton.js +10 -10
  194. package/dist/patterns/SegmentedControl/SegmentedControlGroup.js +8 -8
  195. package/dist/patterns/SegmentedControl/SegmentedControlSquareButton.js +2 -2
  196. package/dist/patterns/Tabs.js +43 -43
  197. package/dist/patterns/ToggleButtonGroup/ToggleButton.js +40 -40
  198. package/dist/patterns/ToggleButtonGroup/ToggleButtonGroup.js +11 -11
  199. package/dist/utils/hover.js +12 -12
  200. package/dist/utils/reset.js +19 -19
  201. package/dist/utils/visuallyHidden.js +10 -10
  202. package/package.json +93 -92
@@ -1,6 +1,7 @@
1
1
  import { HorizontalRuleNode } from "@lexical/react/LexicalHorizontalRuleNode";
2
2
  import { ColoredQuoteNode } from "./ColoredQuoteNode";
3
3
  import { ImageNode } from "./ImageNode";
4
+ import { VideoNode } from "./VideoNode";
4
5
  import { LayoutContainerNode } from "./LayoutContainerNode";
5
6
  import { LayoutItemNode } from "./LayoutItemNode";
6
7
  import { ProblemInputNode } from "./ProblemInputNode";
@@ -14,7 +15,7 @@ import { ListItemNode, ListNode } from "@lexical/list";
14
15
  import { CodeHighlightNode, CodeNode } from "@lexical/code";
15
16
  import { LinkNode } from "@lexical/link";
16
17
  import { FileNode } from "./FileNode";
17
- export declare const nodes: (typeof ColoredQuoteNode | typeof QuoteNode | typeof ImageNode | typeof FileNode | typeof ProblemInputNode | typeof ProblemSelectNode | typeof SelfEvaluationNode | typeof SheetInputNode | typeof SheetSelectNode | typeof LayoutContainerNode | typeof LayoutItemNode | typeof HeadingNode | typeof ListNode | typeof ListItemNode | typeof CodeNode | typeof CodeHighlightNode | typeof TableNode | typeof TableCellNode | typeof TableRowNode | typeof LinkNode | typeof HorizontalRuleNode | {
18
+ export declare const nodes: (typeof ColoredQuoteNode | typeof QuoteNode | typeof ImageNode | typeof VideoNode | typeof FileNode | typeof ProblemInputNode | typeof ProblemSelectNode | typeof SelfEvaluationNode | typeof SheetInputNode | typeof SheetSelectNode | typeof LayoutContainerNode | typeof LayoutItemNode | typeof HeadingNode | typeof ListNode | typeof ListItemNode | typeof CodeNode | typeof CodeHighlightNode | typeof TableNode | typeof TableCellNode | typeof TableRowNode | typeof LinkNode | typeof HorizontalRuleNode | {
18
19
  replace: typeof QuoteNode;
19
20
  with: () => ColoredQuoteNode;
20
21
  })[];
@@ -1,6 +1,7 @@
1
1
  import { HorizontalRuleNode } from "@lexical/react/LexicalHorizontalRuleNode";
2
2
  import { ColoredQuoteNode } from "./ColoredQuoteNode";
3
3
  import { ImageNode } from "./ImageNode";
4
+ import { VideoNode } from "./VideoNode";
4
5
  import { LayoutContainerNode } from "./LayoutContainerNode";
5
6
  import { LayoutItemNode } from "./LayoutItemNode";
6
7
  import { ProblemInputNode } from "./ProblemInputNode";
@@ -29,6 +30,7 @@ export const nodes = [
29
30
  AutoLinkNode,
30
31
  LinkNode,
31
32
  ImageNode,
33
+ VideoNode,
32
34
  FileNode,
33
35
  HorizontalRuleNode,
34
36
  ColoredQuoteNode,
@@ -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
  `;
@@ -31,6 +31,8 @@ import { ZINDEX } from "../../../../utils/zIndex";
31
31
  import { useTheme } from "@emotion/react";
32
32
  import { InsertImageDialog } from "../../components/InsertImageDialog";
33
33
  import { INSERT_IMAGE_COMMAND } from "../ImagesPlugin";
34
+ import { InsertVideoDialog } from "../../components/InsertVideoDialog";
35
+ import { INSERT_VIDEO_COMMAND } from "../VideosPlugin";
34
36
  import { UploadFileDialog } from "../../components/UploadFileDialog";
35
37
  import { UPLOAD_FILE_COMMAND } from "../FilePlugin";
36
38
  export const componentAdderClasses = {
@@ -72,6 +74,7 @@ export function ComponentAdderPlugin(props) {
72
74
  const [plusOrMenu, setPlusOrMenu] = useState("plus");
73
75
  const [options, setOptions] = useState([]);
74
76
  const [imageOpen, setImageOpen] = useState(false);
77
+ const [videoOpen, setVideoOpen] = useState(false);
75
78
  const [fileOpen, setFileOpen] = useState(false);
76
79
  const [query, setQuery] = useState("");
77
80
  // EditorState의 Selection 을 추적하여
@@ -158,10 +161,12 @@ export function ComponentAdderPlugin(props) {
158
161
  const { onDragStart, onDragEnd, targetLineRef } = useDraggableBlockMenu(editor, anchorElem, blockElem, setBlockElem);
159
162
  return (_jsxs(_Fragment, { children: [_jsx(InsertImageDialog, { open: imageOpen, title: "\uC774\uBBF8\uC9C0 \uC0BD\uC785\uD558\uAE30", onClose: () => setImageOpen(false), onChange: (props) => {
160
163
  editor.dispatchCommand(INSERT_IMAGE_COMMAND, props);
164
+ }, shouldReset: true }), _jsx(InsertVideoDialog, { open: videoOpen, title: "\uB3D9\uC601\uC0C1 \uC0BD\uC785\uD558\uAE30", onClose: () => setVideoOpen(false), onChange: (props) => {
165
+ editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
161
166
  }, shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
162
167
  editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
163
- } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
164
- z-index: ${ZINDEX.DIALOG + 1};
168
+ } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
169
+ z-index: ${ZINDEX.DIALOG + 1};
165
170
  `, options: filteredOptions, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && filteredOptions.length
166
171
  ? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: filteredOptions, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
167
172
  : null, onSelectOption: onSelectOption, onClose: () => {
@@ -209,6 +214,7 @@ export function ComponentAdderPlugin(props) {
209
214
  editor,
210
215
  theme,
211
216
  setImageOpen,
217
+ setVideoOpen,
212
218
  isSheetEnabled,
213
219
  isQuizEnabled,
214
220
  setFileOpen,
@@ -231,7 +237,7 @@ export function ComponentAdderPlugin(props) {
231
237
  // Add a node key to the selection.
232
238
  nodeSelection.add(newNode.getKey());
233
239
  $setSelection(nodeSelection);
234
- const contextMenuOptions = getContextMenuOptions(editor, newNode, setImageOpen, setFileOpen);
240
+ const contextMenuOptions = getContextMenuOptions(editor, newNode, setImageOpen, setVideoOpen, setFileOpen);
235
241
  setOptions(contextMenuOptions);
236
242
  if (nodeKey === null) {
237
243
  setNodeKey(newNode.getKey());
@@ -250,13 +256,13 @@ export function ComponentAdderPlugin(props) {
250
256
  }));
251
257
  }), onMenuDragStart: onDragStart, onMenuDragEnd: onDragEnd }), _jsx(TargetLine, { ref: targetLineRef })] }), anchorElem)] }));
252
258
  }
253
- const TargetLine = styled.div `
254
- pointer-events: none;
255
- background: deepskyblue;
256
- height: 4px;
257
- position: absolute;
258
- left: 0;
259
- top: 0;
260
- opacity: 0;
261
- will-change: transform;
259
+ const TargetLine = styled.div `
260
+ pointer-events: none;
261
+ background: deepskyblue;
262
+ height: 4px;
263
+ position: absolute;
264
+ left: 0;
265
+ top: 0;
266
+ opacity: 0;
267
+ will-change: transform;
262
268
  `;
@@ -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>
@@ -7,4 +7,4 @@ export declare function useContextMenuOptions(props: {
7
7
  isSheetEnabled: boolean;
8
8
  isQuizEnabled: boolean;
9
9
  showFileUpload: boolean;
10
- }): (editor: LexicalEditor, node: LexicalNode, setImageOpen: (open: boolean) => void, setFileOpen: (open: boolean) => void) => (ComponentPickerOption | ComponentDrawerOption)[];
10
+ }): (editor: LexicalEditor, node: LexicalNode, setImageOpen: (open: boolean) => void, setVideoOpen: (open: boolean) => void, setFileOpen: (open: boolean) => void) => (ComponentPickerOption | ComponentDrawerOption)[];
@@ -12,7 +12,7 @@ import { H1Icon, H2Icon, H3Icon, CloseFillIcon, ListUnorderedIcon, ListOrderedIc
12
12
  import { $isColoredQuoteNode, } from "../../nodes/ColoredQuoteNode";
13
13
  import { useTheme } from "@emotion/react";
14
14
  import { css } from "@emotion/css";
15
- import { $isFileNode, $isImageNode, $isProblemInputNode, } from "../../nodes";
15
+ import { $isFileNode, $isImageNode, $isVideoNode, $isProblemInputNode, } from "../../nodes";
16
16
  import { $isProblemSelectNode, } from "../../nodes/ProblemSelectNode";
17
17
  import { $isSheetInputNode } from "../../nodes/SheetInputNode";
18
18
  import { $isSheetSelectNode, } from "../../nodes/SheetSelectNode";
@@ -227,12 +227,23 @@ function getImageContextMenuOptions(node) {
227
227
  }),
228
228
  ];
229
229
  }
230
+ function getVideoContextMenuOptions(node) {
231
+ return [
232
+ new ComponentPickerOption("블록 삭제", {
233
+ icon: _jsx(CloseFillIcon, {}),
234
+ keywords: [],
235
+ onSelect: () => {
236
+ node.remove();
237
+ },
238
+ }),
239
+ ];
240
+ }
230
241
  function getColoredQuoteContextMenuOptions(editor, theme, node) {
231
242
  return [
232
243
  new ComponentPickerOption("회색", {
233
244
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.marbleOnContainer })),
234
- iconContainerClassName: css `
235
- background: ${theme.color.container.marbleContainer};
245
+ iconContainerClassName: css `
246
+ background: ${theme.color.container.marbleContainer};
236
247
  `,
237
248
  keywords: ["grey", "gray"],
238
249
  onSelect: () => {
@@ -243,8 +254,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
243
254
  }),
244
255
  new ComponentPickerOption("빨간색", {
245
256
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.redOnContainer })),
246
- iconContainerClassName: css `
247
- background: ${theme.color.container.redContainer};
257
+ iconContainerClassName: css `
258
+ background: ${theme.color.container.redContainer};
248
259
  `,
249
260
  keywords: ["red"],
250
261
  onSelect: () => {
@@ -255,8 +266,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
255
266
  }),
256
267
  new ComponentPickerOption("노란색", {
257
268
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.yellowOnContainer })),
258
- iconContainerClassName: css `
259
- background: ${theme.color.container.yellowContainer};
269
+ iconContainerClassName: css `
270
+ background: ${theme.color.container.yellowContainer};
260
271
  `,
261
272
  keywords: ["yellow"],
262
273
  onSelect: () => {
@@ -267,8 +278,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
267
278
  }),
268
279
  new ComponentPickerOption("파란색", {
269
280
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.blueOnContainer })),
270
- iconContainerClassName: css `
271
- background: ${theme.color.container.blueContainer};
281
+ iconContainerClassName: css `
282
+ background: ${theme.color.container.blueContainer};
272
283
  `,
273
284
  keywords: ["blue"],
274
285
  onSelect: () => {
@@ -279,8 +290,8 @@ function getColoredQuoteContextMenuOptions(editor, theme, node) {
279
290
  }),
280
291
  new ComponentPickerOption("초록색", {
281
292
  icon: (_jsx(InputMethodLineIcon, { color: theme.color.container.greenOnContainer })),
282
- iconContainerClassName: css `
283
- background: ${theme.color.container.greenContainer};
293
+ iconContainerClassName: css `
294
+ background: ${theme.color.container.greenContainer};
284
295
  `,
285
296
  keywords: ["green"],
286
297
  onSelect: () => {
@@ -316,7 +327,7 @@ function getUploadFileContextMenuOptions(editor, node) {
316
327
  export function useContextMenuOptions(props) {
317
328
  const { isSheetEnabled, isQuizEnabled, showFileUpload } = props;
318
329
  const theme = useTheme();
319
- return (editor, node, setImageOpen, setFileOpen) => {
330
+ return (editor, node, setImageOpen, setVideoOpen, setFileOpen) => {
320
331
  if ($isProblemInputNode(node)) {
321
332
  return getProblemInputContextMenuOptions(node);
322
333
  }
@@ -335,6 +346,9 @@ export function useContextMenuOptions(props) {
335
346
  else if ($isImageNode(node)) {
336
347
  return getImageContextMenuOptions(node);
337
348
  }
349
+ else if ($isVideoNode(node)) {
350
+ return getVideoContextMenuOptions(node);
351
+ }
338
352
  else if (node instanceof ParagraphNode) {
339
353
  return getParagraphContextMenuOptions(editor, node);
340
354
  }
@@ -356,6 +370,7 @@ export function useContextMenuOptions(props) {
356
370
  editor,
357
371
  theme,
358
372
  setImageOpen,
373
+ setVideoOpen,
359
374
  isSheetEnabled,
360
375
  isQuizEnabled,
361
376
  setFileOpen,
@@ -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
  `;
@@ -34,6 +34,7 @@ export declare function getBaseOptions(props: {
34
34
  editor: LexicalEditor;
35
35
  theme: Theme;
36
36
  setImageOpen: (open: boolean) => void;
37
+ setVideoOpen: (open: boolean) => void;
37
38
  setFileOpen: (open: boolean) => void;
38
39
  isSheetEnabled: boolean;
39
40
  isQuizEnabled: boolean;
@@ -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, 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, } 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";
@@ -31,6 +31,8 @@ import { INSERT_SHEET_INPUT_COMMAND } from "../SheetInputPlugin";
31
31
  import { INSERT_SELF_EVALUATION_COMMAND } from "../SelfEvaluationPlugin";
32
32
  import { InsertImageDialog } from "../../components/InsertImageDialog";
33
33
  import { INSERT_IMAGE_COMMAND } from "../ImagesPlugin";
34
+ import { InsertVideoDialog } from "../../components/InsertVideoDialog";
35
+ import { INSERT_VIDEO_COMMAND } from "../VideosPlugin";
34
36
  import { UploadFileDialog } from "../../components/UploadFileDialog";
35
37
  import { UPLOAD_FILE_COMMAND } from "../FilePlugin";
36
38
  // import useModal from "../../hooks/useModal";
@@ -128,11 +130,11 @@ function getSheetContextOptions(editor, theme) {
128
130
  placeholder: "",
129
131
  }),
130
132
  }),
131
- new ComponentDrawerOption("활동지 메뉴구분선", (_jsx("div", { css: css `
132
- width: 100%;
133
- height: 1px;
134
- background: ${theme.color.background.neutralAltActive};
135
- margin: 4px 0;
133
+ new ComponentDrawerOption("활동지 메뉴구분선", (_jsx("div", { css: css `
134
+ width: 100%;
135
+ height: 1px;
136
+ background: ${theme.color.background.neutralAltActive};
137
+ margin: 4px 0;
136
138
  ` }))),
137
139
  ];
138
140
  }
@@ -174,16 +176,16 @@ function getQuizContextOptions(editor, theme) {
174
176
  });
175
177
  },
176
178
  }),
177
- new ComponentDrawerOption("퀴즈 메뉴구분선", (_jsx("div", { css: css `
178
- width: 100%;
179
- height: 1px;
180
- background: ${theme.color.background.neutralAltActive};
181
- margin: 4px 0;
179
+ new ComponentDrawerOption("퀴즈 메뉴구분선", (_jsx("div", { css: css `
180
+ width: 100%;
181
+ height: 1px;
182
+ background: ${theme.color.background.neutralAltActive};
183
+ margin: 4px 0;
182
184
  ` }))),
183
185
  ];
184
186
  }
185
187
  export function getBaseOptions(props) {
186
- const { editor, theme, setImageOpen, setFileOpen, isSheetEnabled, isQuizEnabled, showFileUpload, } = props;
188
+ const { editor, theme, setImageOpen, setVideoOpen, setFileOpen, isSheetEnabled, isQuizEnabled, showFileUpload, } = props;
187
189
  const baseOptions = [
188
190
  new ComponentPickerOption("본문", {
189
191
  icon: _jsx(TextIcon, {}),
@@ -266,6 +268,11 @@ export function getBaseOptions(props) {
266
268
  keywords: ["image", "photo", "picture", "file"],
267
269
  onSelect: () => setImageOpen(true),
268
270
  }),
271
+ new ComponentPickerOption("동영상", {
272
+ icon: _jsx(VideoLineIcon, {}),
273
+ keywords: ["video", "movie"],
274
+ onSelect: () => setVideoOpen(true),
275
+ }),
269
276
  ];
270
277
  // devMode, labMode 여부를 로컬스토리지에서 가져옵니다.
271
278
  const isDevMode = localStorage.getItem("devMode") === "true";
@@ -301,7 +308,8 @@ export function ComponentPickerMenuPlugin(props) {
301
308
  const [editor] = useLexicalComposerContext();
302
309
  const theme = useTheme();
303
310
  const [queryString, setQueryString] = useState(null);
304
- const [open, setOpen] = useState(false);
311
+ const [imageOpen, setImageOpen] = useState(false);
312
+ const [videoOpen, setVideoOpen] = useState(false);
305
313
  const [fileOpen, setFileOpen] = useState(false);
306
314
  const checkForTriggerMatch = useBasicTypeaheadTriggerMatch("/", {
307
315
  minLength: 0,
@@ -310,7 +318,8 @@ export function ComponentPickerMenuPlugin(props) {
310
318
  const baseOptions = getBaseOptions({
311
319
  editor,
312
320
  theme,
313
- setImageOpen: setOpen,
321
+ setImageOpen,
322
+ setVideoOpen,
314
323
  isSheetEnabled,
315
324
  isQuizEnabled,
316
325
  setFileOpen,
@@ -327,7 +336,7 @@ export function ComponentPickerMenuPlugin(props) {
327
336
  option.keywords.some((keyword) => regex.test(keyword)))),
328
337
  ];
329
338
  // eslint-disable-next-line react-hooks/exhaustive-deps
330
- }, [editor, queryString, setOpen]);
339
+ }, [editor, queryString, setImageOpen]);
331
340
  const onSelectOption = useCallback((selectedOption, nodeToRemove, closeMenu, matchingString) => {
332
341
  if (selectedOption instanceof ComponentDrawerOption) {
333
342
  return;
@@ -338,12 +347,14 @@ export function ComponentPickerMenuPlugin(props) {
338
347
  closeMenu();
339
348
  });
340
349
  }, [editor]);
341
- return (_jsxs(_Fragment, { children: [_jsx(InsertImageDialog, { title: "\uC774\uBBF8\uC9C0 \uC0BD\uC785\uD558\uAE30", open: open, onChange: (props) => {
350
+ return (_jsxs(_Fragment, { children: [_jsx(InsertImageDialog, { title: "\uC774\uBBF8\uC9C0 \uC0BD\uC785\uD558\uAE30", open: imageOpen, onChange: (props) => {
342
351
  editor.dispatchCommand(INSERT_IMAGE_COMMAND, props);
343
- }, onClose: () => setOpen(false), shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
352
+ }, onClose: () => setImageOpen(false), shouldReset: true }), _jsx(InsertVideoDialog, { title: "\uB3D9\uC601\uC0C1 \uC0BD\uC785\uD558\uAE30", open: videoOpen, onChange: (props) => {
353
+ editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
354
+ }, onClose: () => setVideoOpen(false), shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
344
355
  editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
345
- } }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, anchorClassName: cssToClassName `
346
- z-index: ${ZINDEX.DIALOG + 1};
356
+ } }), _jsx(LexicalTypeaheadMenuPlugin, { onQueryChange: setQueryString, onSelectOption: onSelectOption, triggerFn: checkForTriggerMatch, options: options, anchorClassName: cssToClassName `
357
+ z-index: ${ZINDEX.DIALOG + 1};
347
358
  `, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && options.length
348
359
  ? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: options, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
349
360
  : null })] }));