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);
}