์ปดํฌ๋ํธ
๊ณตํต UI ๊ณ์ฝ
@inkio/editor UI ์ปดํฌ๋ํธ๋ ๊ณตํต์ผ๋ก ์๋ override๋ฅผ ์ง์ํฉ๋๋ค.
locale?: unknownmessages?: InkioMessageOverrides(๋๋ core ์ ์ฉ partial)icons?: Partial<InkioIconRegistry>
๊ถ์ฅ ํจํด์ ํ ๋ฒ ์ ์ํ ๊ฐ์ Editor, CommentPanel, CommentComposer, ImageEditorModal, getDefaultInkioExtensions()์ ๋์ผํ๊ฒ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค.
import {
Editor,
inkioIconRegistry,
type InkioMessageOverrides,
} from '@inkio/editor';
import { getDefaultInkioExtensions } from '@inkio/extension';
const locale = 'en-US,en;q=0.9';
const messages: InkioMessageOverrides = {
core: {
suggestion: { empty: 'No matching items.' },
},
extensions: {
commentComposer: { placeholder: 'Share feedback...' },
},
};
const icons = {
comment: inkioIconRegistry.comment,
};
const extensions = getDefaultInkioExtensions({
blockHandle: true,
locale,
messages,
icons,
});
<Editor
extensions={extensions}
locale={locale}
messages={messages}
icons={icons}
showBubbleMenu
showFloatingMenu
/>์ด ์์ ๋ override ์ ๋ฌ ํจํด์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด full preset์ ์ฌ์ฉํฉ๋๋ค. ์์์ ์ด๋ ๋ฒ๋ค ์ต์ ํ๊ฐ ์ค์ํ๋ฉด getDefaultCoreExtensions()์ ํ์ํ extension ์๋ธํจ์ค import๋ฅผ ์ง์ ์กฐํฉํ๋ ์ชฝ์ด ๋ ์ ํฉํฉ๋๋ค.
@inkio/editor
Editor
| Prop | Type | Description |
|---|---|---|
content | string | JSONContent | controlled ์ฝํ ์ธ |
initialContent | string | JSONContent | uncontrolled ์ด๊ธฐ๊ฐ |
extensions | Extensions | ์ ์ฉํ ํ์ฅ ๋ชฉ๋ก |
editable | boolean | ํธ์ง ๊ฐ๋ฅ ์ฌ๋ถ |
onUpdate | (content: JSONContent) => void | ๋ณ๊ฒฝ ์ฝ๋ฐฑ |
onCreate | (editor: Editor) => void | ์์ฑ ์ฝ๋ฐฑ |
className | string | ์๋ํฐ ์ฝํ ์ธ ํด๋์ค |
style | React.CSSProperties | ์ปจํ ์ด๋ ์คํ์ผ |
unstyled | boolean | ๊ธฐ๋ณธ ์ปจํ
์ด๋ ์คํ์ผ(minHeight, padding ๋ฑ inline CSS) ๋นํ์ฑํ |
showBubbleMenu | boolean | ํ ์คํธ ์ ํ ์ BubbleMenu ํ์ ์ฌ๋ถ |
showFloatingMenu | boolean | ๋น ์ค์ FloatingMenu ํ์ ์ฌ๋ถ |
locale | unknown | locale ์ ๋ ฅ |
messages | InkioMessageOverrides | ๋ฉ์์ง override |
icons | Partial<InkioIconRegistry> | ์์ด์ฝ override |
์คํ์ผ๋ง ์ํคํ ์ฒ (Styling Architecture)
Inkio๋ ์ ์ฐํ ์คํ์ผ๋ง์ ์ํด CSS์ Inline Style์ ๊ตฌ๋ถํ์ฌ ์ ๊ณตํฉ๋๋ค.
-
๋ด์ฅ CSS (Built-in CSS):
@inkio/editor/style.css: ํ์ดํฌ๊ทธ๋ํผ, ๋งํฌ๋ค์ด ์์(p, h1, blockquote), ๊ธฐ๋ณธ ํ ํฐ ๋ณ์๊ฐ ๋ชจ๋ ํฌํจ๋ ์์ ํ ์คํ์ผ์ ๋๋ค.@inkio/editor/minimal.css: ํต์ฌ ์๋ํฐ ๋์๊ณผ ํ๋กํ ๋ฉ๋ด ๋ฑ ํ์ ๋ ์ด์์๋ง ํฌํจ๋์ด ์์ผ๋ฉฐ ํฐํธ ๋์์ธ์ ์ ์ธ๋ฉ๋๋ค.- ํธ์คํธ ์ฑ์ ์ด CSS ํ์ผ๋ค์
importํ์ฌ ๋ฌธ์ ๋์์ธ์ ์์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
-
unstyled Prop์ ์ญํ :
<Editor>์<Viewer>๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํฐ ์์ญ ํ๋ณด๋ฅผ ์ํด ์ธ๋ผ์ธ ์คํ์ผ(minHeight: 200px,cursor: text๋ฑ)์ ์ฃผ์ ํฉ๋๋ค.unstyled={true}๋ฅผ ์ ๋ฌํ๋ฉด ์ด๋ฌํ ์ปดํฌ๋ํธ ์ธ๋ผ์ธ ์คํ์ผ์ด ์์ ํ ์ ๊ฑฐ๋ฉ๋๋ค. ์ฆ, CSS ํ์ผ ๋ก๋ ์ฌ๋ถ์ ์๊ด์์ด ์ปจํ ์ด๋์ ํฌ๊ธฐ๋ฅผ100%์ปค์คํ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
-
์ฌ์ฉ์ ์ ์ (Host App Customization):
- ํฐํธ ์ข
๋ฅ(
font-family), ๋คํฌ ๋ชจ๋ ํ ๊ธ ์ฒด๊ณ(data-theme="dark"), ์๋ํฐ ์ธ๋ถ ๋ ์ด์์์ ์ ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ์ดํด์ผ ํฉ๋๋ค. (๋์์ธ ํ ํฐ ์ค๋ฒ๋ผ์ด๋ ๋ฐฉ์ ๊ถ์ฅ)
- ํฐํธ ์ข
๋ฅ(
Viewer
์ฝ๊ธฐ ์ ์ฉ ์ปดํฌ๋ํธ์ ๋๋ค.
BubbleMenu / FloatingMenu
๊ฐ UI ์ปดํฌ๋ํธ๋ locale/messages/icons override๋ฅผ ์ง์ ๋ฐ์ ์ ์์ต๋๋ค.
๋จ์ผ ๋ ์ง์คํธ๋ฆฌ
ํด๋ฐ/๋ฒ๋ธ/ํ๋กํ ๋ฉ๋ด ์ก์ ์ ํ๋์ ์คํค๋ง๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
import {
inkioToolbarSchema,
inkioIconRegistry,
type InkioToolbarActionId,
type InkioIconId,
} from '@inkio/editor';inkioToolbarSchema: ์ก์ ์ ์(ํ์ surface, ์คํ command, ๊ทธ๋ฃน)inkioIconRegistry: ์ก์ ์์ด์ฝ ๋งตInkioToolbarActionId,InkioIconId: ํ์ ์์ ํ ID
i18n ๊ธฐ๋ณธ ๋ฉ์์ง
๊ธฐ๋ณธ ๋ด์ฅ ๋ฉ์์ง๋ ์์ด๋ง ์ ๊ณตํฉ๋๋ค.
import { enCoreMessages } from '@inkio/editor';
import { enExtensionsMessages } from '@inkio/extension';๋ค๊ตญ์ด๋ ์๋น์๊ฐ messages prop์ผ๋ก ์ฃผ์
ํ๋ ๋ฐฉ์์
๋๋ค.
@inkio/extension
๋ค์ ํ์ฅ์ ๋ฃจํธ ๋๋ ์๋ธํจ์ค๋ก importํ ์ ์์ต๋๋ค.
Mention(@inkio/extension/mention)HashTag(@inkio/extension/hashtag)SlashCommand(@inkio/extension/slash-command)WikiLink(@inkio/extension/wikilink)Callout(@inkio/extension/callout)BlockHandle,BlockHandleActionMenu(@inkio/extension/block-handle)Comment,CommentPanel,CommentComposer(@inkio/extension/comment)ImageEditorModal,ImageEditor(@inkio/extension/image)
๋ ๊ฑฐ์
CommentSidebar,CommentPopoverexport๋ ์ ๊ฑฐ๋์์ต๋๋ค.