@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.
- package/@types/emotion.d.ts +160 -160
- package/README.md +35 -35
- package/dist/CdsProvider.js +4 -4
- package/dist/components/AlertDialog/AlertDialog.js +54 -54
- package/dist/components/AlertDialog/AlertDialogActions.js +7 -7
- package/dist/components/AlertDialog/AlertDialogContent.js +8 -8
- package/dist/components/AlertDialog/AlertDialogTitle.js +34 -34
- package/dist/components/AnimatedButton.js +32 -32
- package/dist/components/Banner.js +51 -51
- package/dist/components/Book/Book.js +174 -174
- package/dist/components/Button.js +179 -179
- package/dist/components/CheckboxInput.js +100 -100
- package/dist/components/FileTypeAlertDialog.js +4 -4
- package/dist/components/Input.js +53 -53
- package/dist/components/InputBase.js +72 -72
- package/dist/components/Modal.js +4 -4
- package/dist/components/OverflowTooltip.js +4 -4
- package/dist/components/Pagination.js +56 -56
- package/dist/components/PinInput.js +64 -64
- package/dist/components/Popover.js +27 -27
- package/dist/components/RadioInput.js +73 -73
- package/dist/components/SquareButton.js +109 -109
- package/dist/components/Switch.js +69 -69
- package/dist/components/SwitchButton.js +107 -107
- package/dist/components/Tag.js +72 -72
- package/dist/components/Tooltip.js +19 -19
- package/dist/foundation/breakpoints.js +16 -16
- package/dist/icons/custom/colored/ai-helper.svg +4 -4
- package/dist/icons/custom/colored/ai-quiz-color.svg +20 -20
- package/dist/icons/custom/colored/badge-color.svg +4 -4
- package/dist/icons/custom/colored/badge-gold.svg +11 -11
- package/dist/icons/custom/colored/badge-green.svg +11 -11
- package/dist/icons/custom/colored/badge-silver.svg +11 -11
- package/dist/icons/custom/colored/basic-plus.svg +31 -31
- package/dist/icons/custom/colored/basic.svg +3 -3
- package/dist/icons/custom/colored/board-color.svg +5 -5
- package/dist/icons/custom/colored/cast-cloudy-color.svg +6 -6
- package/dist/icons/custom/colored/cast-partly-color.svg +7 -7
- package/dist/icons/custom/colored/cast-rainbow-color.svg +13 -13
- package/dist/icons/custom/colored/cast-sunny-color.svg +4 -4
- package/dist/icons/custom/colored/clap-bronze.svg +8 -8
- package/dist/icons/custom/colored/clap-gold.svg +8 -8
- package/dist/icons/custom/colored/clap-silver.svg +8 -8
- package/dist/icons/custom/colored/class.svg +13 -13
- package/dist/icons/custom/colored/codap-color.svg +13 -13
- package/dist/icons/custom/colored/ebook-color.svg +5 -5
- package/dist/icons/custom/colored/embedded-color.svg +38 -38
- package/dist/icons/custom/colored/emo-clap-color.svg +252 -252
- package/dist/icons/custom/colored/emo-good-color.svg +68 -68
- package/dist/icons/custom/colored/emo-great-color.svg +67 -67
- package/dist/icons/custom/colored/emo-heart-color.svg +239 -239
- package/dist/icons/custom/colored/emo-hundred-color.svg +194 -194
- package/dist/icons/custom/colored/emo-neutral-color.svg +76 -76
- package/dist/icons/custom/colored/emo-stars-color.svg +121 -121
- package/dist/icons/custom/colored/emo-thumbup-color.svg +238 -238
- package/dist/icons/custom/colored/empty.svg +1 -1
- package/dist/icons/custom/colored/entry-color.svg +4 -4
- package/dist/icons/custom/colored/filename-all-color.svg +4 -4
- package/dist/icons/custom/colored/filename-doc-color.svg +5 -5
- package/dist/icons/custom/colored/filename-hwp-color.svg +6 -6
- package/dist/icons/custom/colored/filename-img-color.svg +6 -6
- package/dist/icons/custom/colored/filename-mp4-color.svg +5 -5
- package/dist/icons/custom/colored/filename-pdf-color.svg +12 -12
- package/dist/icons/custom/colored/filename-ppt-color.svg +6 -6
- package/dist/icons/custom/colored/filename-xls-color.svg +5 -5
- package/dist/icons/custom/colored/filename-zip-color.svg +5 -5
- package/dist/icons/custom/colored/google.svg +13 -13
- package/dist/icons/custom/colored/hand-fill.svg +4 -4
- package/dist/icons/custom/colored/judge-color.svg +6 -6
- package/dist/icons/custom/colored/makecode-color.svg +4 -4
- package/dist/icons/custom/colored/master.svg +12 -12
- package/dist/icons/custom/colored/material.svg +6 -6
- package/dist/icons/custom/colored/medal-bronze.svg +9 -9
- package/dist/icons/custom/colored/medal-gold.svg +9 -9
- package/dist/icons/custom/colored/medal-silver.svg +9 -9
- package/dist/icons/custom/colored/pro.svg +4 -4
- package/dist/icons/custom/colored/problem.svg +7 -7
- package/dist/icons/custom/colored/python-color.svg +4 -4
- package/dist/icons/custom/colored/quiz-color.svg +12 -12
- package/dist/icons/custom/colored/resource-color.svg +13 -13
- package/dist/icons/custom/colored/scratch-color.svg +6 -6
- package/dist/icons/custom/colored/type-helper.svg +9 -9
- package/dist/icons/custom/colored/whale.svg +7 -7
- package/dist/icons/custom/colored/worksheet-color.svg +5 -5
- package/dist/icons/custom/default/ai-quiz.svg +8 -8
- package/dist/icons/custom/default/badge.svg +4 -4
- package/dist/icons/custom/default/board.svg +5 -5
- package/dist/icons/custom/default/cast-cloudy.svg +3 -3
- package/dist/icons/custom/default/cast-partly.svg +4 -4
- package/dist/icons/custom/default/cast-rainbow.svg +12 -12
- package/dist/icons/custom/default/cast-sunny.svg +3 -3
- package/dist/icons/custom/default/codap.svg +11 -11
- package/dist/icons/custom/default/ebook.svg +3 -3
- package/dist/icons/custom/default/embedded.svg +4 -4
- package/dist/icons/custom/default/emo-clap.svg +6 -6
- package/dist/icons/custom/default/emo-good.svg +12 -12
- package/dist/icons/custom/default/emo-great.svg +12 -12
- package/dist/icons/custom/default/emo-heart.svg +5 -5
- package/dist/icons/custom/default/emo-hundred.svg +3 -3
- package/dist/icons/custom/default/emo-neutral.svg +14 -14
- package/dist/icons/custom/default/emo-stars.svg +14 -14
- package/dist/icons/custom/default/emo-thumbup.svg +3 -3
- package/dist/icons/custom/default/entry.svg +4 -4
- package/dist/icons/custom/default/fab.svg +10 -10
- package/dist/icons/custom/default/grant-alt.svg +5 -5
- package/dist/icons/custom/default/grant.svg +4 -4
- package/dist/icons/custom/default/hand-line.svg +3 -3
- package/dist/icons/custom/default/judge.svg +3 -3
- package/dist/icons/custom/default/makecode.svg +5 -5
- package/dist/icons/custom/default/pdf.svg +3 -3
- package/dist/icons/custom/default/python.svg +7 -7
- package/dist/icons/custom/default/quiz.svg +4 -4
- package/dist/icons/custom/default/resource.svg +11 -11
- package/dist/icons/custom/default/scratch.svg +3 -3
- package/dist/icons/custom/default/scroll-alt.svg +5 -5
- package/dist/icons/custom/default/scroll-fill.svg +4 -4
- package/dist/icons/custom/default/scroll-line.svg +5 -5
- package/dist/icons/custom/default/symbol.svg +4 -4
- package/dist/icons/custom/default/worksheet.svg +4 -4
- package/dist/icons/custom/svgrColoredTemplate.js +26 -26
- package/dist/icons/custom/svgrDefaultTemplate.js +26 -26
- package/dist/patterns/Accordion.js +20 -20
- package/dist/patterns/Dropdown/DropdownItem/DropdownItem.js +60 -60
- package/dist/patterns/Dropdown/DropdownMenu/DropdownMenu.js +27 -27
- package/dist/patterns/Dropdown/DropdownMenu/style.js +19 -19
- package/dist/patterns/LexicalEditor/Plugins.js +38 -37
- package/dist/patterns/LexicalEditor/components/FileSelectInput.js +23 -23
- package/dist/patterns/LexicalEditor/components/InsertImageDialog/ImagePreview.js +4 -4
- package/dist/patterns/LexicalEditor/components/InsertImageDialog/InsertImageDialog.js +20 -17
- package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.d.ts +15 -0
- package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.js +76 -0
- package/dist/patterns/LexicalEditor/components/InsertVideoDialog/index.d.ts +1 -0
- package/dist/patterns/LexicalEditor/components/InsertVideoDialog/index.js +1 -0
- package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +2 -2
- package/dist/patterns/LexicalEditor/hr.svg +3 -3
- package/dist/patterns/LexicalEditor/nodes/FileNode/FileComponent.js +44 -44
- package/dist/patterns/LexicalEditor/nodes/FileNode/FileDownloadButton.js +25 -25
- package/dist/patterns/LexicalEditor/nodes/Form/FormInput.d.ts +2 -0
- package/dist/patterns/LexicalEditor/nodes/Form/FormInput.js +4 -2
- package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageComponent.js +8 -8
- package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageResizer.js +60 -60
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +19 -19
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SegmentedInput.js +49 -49
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormSolution.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +73 -73
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/TextTypeDropdown.js +5 -5
- package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/TextInput.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxComponent.js +69 -69
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxEdit.js +3 -3
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -15
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +28 -28
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/FormSelection.js +54 -54
- package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +61 -61
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/Evaluation.js +75 -75
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +17 -17
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +28 -28
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +52 -52
- package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +7 -7
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +25 -25
- package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +53 -53
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxComponent.js +54 -54
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxView.js +5 -5
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +21 -21
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/FormSelection.js +42 -42
- package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +71 -71
- package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.d.ts +7 -0
- package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.js +53 -0
- package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoNode.d.ts +23 -0
- package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoNode.js +52 -0
- package/dist/patterns/LexicalEditor/nodes/VideoNode/index.d.ts +1 -0
- package/dist/patterns/LexicalEditor/nodes/VideoNode/index.js +1 -0
- package/dist/patterns/LexicalEditor/nodes/index.d.ts +1 -0
- package/dist/patterns/LexicalEditor/nodes/index.js +1 -0
- package/dist/patterns/LexicalEditor/nodes/nodes.d.ts +2 -1
- package/dist/patterns/LexicalEditor/nodes/nodes.js +2 -0
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdder.js +51 -51
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +18 -12
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/menu.svg +7 -7
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/plus.svg +2 -2
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.d.ts +1 -1
- package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.js +27 -12
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js +32 -32
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js +32 -32
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.d.ts +1 -0
- package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +30 -19
- package/dist/patterns/LexicalEditor/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +49 -49
- package/dist/patterns/LexicalEditor/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatPopup.js +36 -36
- package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +7 -7
- package/dist/patterns/LexicalEditor/plugins/VideosPlugin/index.d.ts +5 -0
- package/dist/patterns/LexicalEditor/plugins/VideosPlugin/index.js +20 -0
- package/dist/patterns/LexicalEditor/theme.js +243 -243
- package/dist/patterns/SegmentedControl/SegmentedControlButton.js +10 -10
- package/dist/patterns/SegmentedControl/SegmentedControlGroup.js +8 -8
- package/dist/patterns/SegmentedControl/SegmentedControlSquareButton.js +2 -2
- package/dist/patterns/Tabs.js +43 -43
- package/dist/patterns/ToggleButtonGroup/ToggleButton.js +40 -40
- package/dist/patterns/ToggleButtonGroup/ToggleButtonGroup.js +11 -11
- package/dist/utils/hover.js +12 -12
- package/dist/utils/reset.js +19 -19
- package/dist/utils/visuallyHidden.js +10 -10
- package/package.json +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,
|
package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js
CHANGED
|
@@ -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
|
`;
|
package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js
CHANGED
|
@@ -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
|
`;
|
package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.d.ts
CHANGED
|
@@ -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;
|
package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js
CHANGED
|
@@ -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 [
|
|
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
|
|
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,
|
|
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:
|
|
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: () =>
|
|
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 })] }));
|