Skip to Content

Mantine ํ†ตํ•ฉ

Mantine ์•ˆ์—์„œ Inkio๋ฅผ ์“ธ ๋•Œ๋Š” high-level package๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํŽธ์ด ๊ฐ€์žฅ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

pnpm add @mantine/core @inkio/editor react react-dom

์Šคํƒ€์ผ:

import '@mantine/core/styles.css'; import '@inkio/editor/minimal.css'; import './inkio-mantine.css';

๋””์ž์ธ ํ† ํฐ ์—ฐ๊ฒฐ

Inkio์˜ UI๋Š” ๋ชจ๋‘ --inkio-* CSS ๋ณ€์ˆ˜๋กœ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. ์•„๋ž˜ ํŒŒ์ผ์„ Inkio CSS ๋‹ค์Œ์— ๋ถˆ๋Ÿฌ์˜ค๋ฉด ํฐํŠธ, primary ์ƒ‰, radius, ๊ทธ๋ฆผ์ž, ๋ฐฐ๊ฒฝยท๊ธ€์žยทํ…Œ๋‘๋ฆฌ ์ƒ‰์ด Mantine ํ…Œ๋งˆ(createTheme)๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. Mantine ๋ณ€์ˆ˜๋Š” ์ƒ‰ ์Šคํ‚ด์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฏ€๋กœ ๋ผ์ดํŠธ์™€ ๋‹คํฌ(--inkio-dark-*) ํ† ํฐ์„ ๊ฐ™์€ ๋ณ€์ˆ˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

inkio-mantine.css:

.inkio { --inkio-font-family: var(--mantine-font-family); --inkio-font-mono: var(--mantine-font-family-monospace); --inkio-radius-xs: var(--mantine-radius-xs); --inkio-radius-sm: var(--mantine-radius-sm); --inkio-radius: var(--mantine-radius-default); --inkio-radius-md: var(--mantine-radius-md); --inkio-radius-lg: var(--mantine-radius-lg); --inkio-shadow: var(--mantine-shadow-xs); --inkio-shadow-lg: var(--mantine-shadow-md); --inkio-shadow-xl: var(--mantine-shadow-xl); --inkio-dark-shadow: var(--mantine-shadow-xs); --inkio-dark-shadow-lg: var(--mantine-shadow-md); --inkio-dark-shadow-xl: var(--mantine-shadow-xl); --inkio-primary: var(--mantine-primary-color-filled); --inkio-primary-hover: var(--mantine-primary-color-filled-hover); --inkio-primary-bg: var(--mantine-primary-color-light); --inkio-text-on-primary: var(--mantine-primary-color-contrast); --inkio-border-focus: var(--mantine-primary-color-filled); --inkio-dark-primary-hover: var(--mantine-primary-color-filled-hover); --inkio-dark-primary-bg: var(--mantine-primary-color-light); --inkio-dark-text-on-primary: var(--mantine-primary-color-contrast); --inkio-dark-border-focus: var(--mantine-primary-color-filled); --inkio-bg: var(--mantine-color-body); --inkio-bg-muted: var(--mantine-color-default-hover); --inkio-text: var(--mantine-color-text); --inkio-text-heading: var(--mantine-color-bright); --inkio-text-muted: var(--mantine-color-dimmed); --inkio-border: var(--mantine-color-default-border); --inkio-danger: var(--mantine-color-error); --inkio-dark-bg: var(--mantine-color-body); --inkio-dark-bg-muted: var(--mantine-color-default-hover); --inkio-dark-text: var(--mantine-color-text); --inkio-dark-text-heading: var(--mantine-color-bright); --inkio-dark-text-muted: var(--mantine-color-dimmed); --inkio-dark-border: var(--mantine-color-default-border); --inkio-dark-danger: var(--mantine-color-error); --inkio-layer-overlay: var(--mantine-z-index-popover); --inkio-layer-suggestion: var(--mantine-z-index-popover); --inkio-layer-popover: var(--mantine-z-index-popover); --inkio-layer-modal: var(--mantine-z-index-overlay); --inkio-layer-modal-backdrop: calc(var(--mantine-z-index-overlay) + 1); --inkio-layer-modal-content: calc(var(--mantine-z-index-overlay) + 2); }

Inkio์˜ ๋ฉ”๋‰ดยทํŒ์˜ค๋ฒ„๋Š” .inkio ํด๋ž˜์Šค๋ฅผ ๋‹จ ํฌํ„ธ๋กœ ์—ด๋ฆฌ๋ฏ€๋กœ ์ด ์—ฐ๊ฒฐ์ด ํŒ์—…์—๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹คํฌ ๋ชจ๋“œ ๋™๊ธฐํ™”

Mantine์€ <html data-mantine-color-scheme> ์†์„ฑ์œผ๋กœ, Inkio๋Š” theme prop(๋˜๋Š” .dark ํด๋ž˜์Šค)์œผ๋กœ ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์—ฐ๊ฒฐํ•œ ์ƒ‰์€ Mantine์„ ๋ฐ”๋กœ ๋”ฐ๋ผ๊ฐ€์ง€๋งŒ ์ฝœ์•„์›ƒ, ๋ฉ˜์…˜, ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŠธ์ฒ˜๋Ÿผ Inkio ๊ณ ์œ  ์ƒ‰์€ theme์„ ๋„˜๊ฒจ์•ผ ํ•จ๊ป˜ ๋ฐ”๋€๋‹ˆ๋‹ค.

import { useComputedColorScheme } from '@mantine/core'; import { Editor } from '@inkio/editor'; export function MyEditor() { const scheme = useComputedColorScheme('light'); return <Editor theme={scheme} />; }

Viewer๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ theme์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

ModalยทDrawer ์•ˆ์—์„œ ์“ฐ๊ธฐ

Mantine Modal์€ z-index 200 ์œ„์— ๊ทธ๋ ค์ง€๊ณ , Inkio ๋ฉ”๋‰ด์˜ ๊ธฐ๋ณธ ๋ ˆ์ด์–ด๋Š” 150์ž…๋‹ˆ๋‹ค. ์œ„ ํŒŒ์ผ์˜ --inkio-layer-* ์—ฐ๊ฒฐ์ด Inkio ํŒ์—…์„ Mantine popover ๋ ˆ๋ฒจ(300)๋กœ ์˜ฌ๋ฆฌ๋ฏ€๋กœ ๋ชจ๋‹ฌ ์•ˆ์—์„œ๋„ ์Šฌ๋ž˜์‹œ ๋ฉ”๋‰ด, ๋ฒ„๋ธ” ๋ฉ”๋‰ด, ํ…Œ์ด๋ธ” ๋ฉ”๋‰ด๊ฐ€ ๋ชจ๋‹ฌ ์œ„์— ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์—๋””ํ„ฐ ๋ชจ๋‹ฌ์€ Mantine overlay ๋ ˆ๋ฒจ(400) ์œ„๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š” ํ† ํฐ

์ฝœ์•„์›ƒ, ๋ฉ˜์…˜, ํ•ด์‹œํƒœ๊ทธ, ์œ„ํ‚ค๋งํฌ, ๋Œ“๊ธ€ ํ•˜์ด๋ผ์ดํŠธ, ์ฝ”๋“œ ๋ธ”๋ก ๋ฐฐ๊ฒฝ์€ Inkio์˜ ๋ผ์ดํŠธยท๋‹คํฌ ํŒ”๋ ˆํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์”๋‹ˆ๋‹ค. Mantine ์ƒ‰์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ผ์ดํŠธ ํ† ํฐ๊ณผ --inkio-dark-* ํ† ํฐ์„ ํ•จ๊ป˜ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

.inkio { --inkio-mention-bg: var(--mantine-primary-color-light); --inkio-mention-text: var(--mantine-primary-color-light-color); --inkio-dark-mention-bg: var(--mantine-primary-color-light); --inkio-dark-mention-text: var(--mantine-primary-color-light-color); }
Last updated on