Skip to Content
ํ™•์žฅ

ํ™•์žฅ

@inkio/extension๋Š” ์„ ํƒํ˜• ํ™•์žฅ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

  • ๋ฃจํŠธ import: @inkio/extension
  • ์„œ๋ธŒํŒจ์Šค import: @inkio/extension/mention ๋“ฑ

๋น ๋ฅธ ๊ตฌ์„ฑ

import { Editor, getDefaultCoreExtensions } from '@inkio/editor'; import { BlockHandle } from '@inkio/extension/block-handle'; import { Callout } from '@inkio/extension/callout'; import { HashTag } from '@inkio/extension/hashtag'; import { SlashCommand } from '@inkio/extension/slash-command'; import { WikiLink } from '@inkio/extension/wikilink'; import '@inkio/editor/minimal.css'; import '@inkio/extension/style.css'; const tags = ['inkio', 'editor', 'react']; const extensions = [ ...getDefaultCoreExtensions({ placeholder: 'Start typing...', }), Callout, HashTag.configure({ items: ({ query }) => tags .filter((tag) => tag.includes(query.toLowerCase())) .map((tag) => ({ id: tag, label: `#${tag}` })), }), SlashCommand, WikiLink, BlockHandle, ]; export function Page() { return <Editor initialContent="" extensions={extensions} />; }

์„ ํƒ ๊ธฐ์ค€:

  • ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘: getDefaultInkioExtensions()
  • ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ๋ช…์‹œ์  ์ œ์–ด: getDefaultCoreExtensions() + ํ•„์š”ํ•œ ์„œ๋ธŒํŒจ์Šค import

HashTag๋Š” #์™€ heading markdown shortcut ์ถฉ๋Œ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ preset์—์„œ opt-in์ž…๋‹ˆ๋‹ค. ImageBlock์€ @inkio/editor์— ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ  @inkio/extension์—์„œ๋Š” ํ•˜์œ„ ํ˜ธํ™˜์šฉ์œผ๋กœ re-export๋ฉ๋‹ˆ๋‹ค.

์ œ๊ณต ํ™•์žฅ

  • Mention
  • HashTag
  • SlashCommand
  • Callout
  • WikiLink
  • ImageBlock
  • KeyboardShortcuts
  • ToggleList
  • SimpleTable
  • Bookmark
  • EquationBlock
  • EquationInline
  • Comment
  • BlockHandle

BlockHandle ๊ธฐ๋ณธ ๋ฉ”๋‰ด

blockHandle: true๋ฅผ ์ผœ๋ฉด ๋“œ๋ž˜๊ทธ ํ•ธ๋“ค๊ณผ ๊ธฐ๋ณธ ์•ก์…˜ ๋ฉ”๋‰ด๊ฐ€ ํ•จ๊ป˜ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฉ”๋‰ด๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ญ์ œ / ๋ณต์ œ
  • Paragraph / Heading ๋ณ€ํ™˜
  • Bullet / Ordered list ๋ณ€ํ™˜
  • Quote / Callout / Code block ๋ณ€ํ™˜

๋™์ž‘ ํŠน์„ฑ:

  • ๋ทฐํฌํŠธ ๊ฒฝ๊ณ„ ์ถฉ๋Œ ์‹œ flip/shift ํด๋žจํ”„ ์ ์šฉ
  • ์Šคํฌ๋กค/๋ฆฌ์‚ฌ์ด์ฆˆ ์ค‘ ์œ„์น˜ ์ž๋™ ์—…๋ฐ์ดํŠธ
  • Escape, ArrowUp/Down, Enter, Space ํ‚ค๋ณด๋“œ ํƒ์ƒ‰ ์ง€์›
  • ๊ธฐ์กด ์ปค์Šคํ…€ ์ด๋ฒคํŠธ(inkio:block-menu)๋„ ๊ณ„์† ๋ฐœํ–‰

BlockHandle ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

import { BlockHandle } from '@inkio/extension/block-handle'; const customBlockHandle = BlockHandle.configure({ locale: 'en-US', messages: { extensions: { blockHandle: { duplicate: 'Clone', }, }, }, icons: { duplicate: <span>+</span>, }, });

icons๋Š” BlockMenuIcons ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

Comment UI

CommentPanel, CommentComposer๋Š” locale/messages/icons๋ฅผ ์ง์ ‘ ๋ฐ›์Šต๋‹ˆ๋‹ค.

<CommentPanel editor={editor} threads={threads} locale="en-US" messages={{ extensions: { commentPanel: { resolve: 'Done', }, }, }} onReply={onReply} onResolve={onResolve} onDelete={onDelete} />

ImageEditor

ImageEditorModal์€ locale/messages/icons๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

<ImageEditorModal isOpen={open} imageSrc={src} locale="en-US,en;q=0.8" messages={{ extensions: { imageEditor: { save: 'Apply', }, }, }} onSave={handleSave} onClose={handleClose} />

๋ ˆ๊ฑฐ์‹œ Comment export ๋ณ€๊ฒฝ

CommentSidebar, CommentPopover export๋Š” ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Last updated on