์ด ๋ฌธ์๋ ์ ํ UI๋ฅผ ๋ง๋ค๊ณ ๋ค๋ฌ๋ ์์ด์ ํธ์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ฅด๋ ๋์์ธ ์์น์ด๋ค. ์ ํ๋ฉด์์๋ ๊ธฐ์กด UI ์์คํ ์ ์ฌ์ฉํ๊ณ , ๋ถ์กฑํ ๊ธฐ๋ฅ์ ์ ๋ณธ ๋ชจ๋์ ํ์ฅํ๋ค. ์์น์ ์ ์ฉ ๋ฒ์๋ ์ ํ์ ์กฐ์ UI์ด๋ฉฐ, ์ฌ์ฉ์๊ฐ ์์ฑํ๋ ๋ฌธ์์ ํํ๊ณผ ๊ตฌ๋ถํ๋ค. ๊ธฐ์กด ๋ชจ๋ ํ๋ฉด์ด ์ด๋ฏธ ์ด ๊ธฐ์ค์ผ๋ก ์ดํ๋๋ค๋ ๋ป์ ์๋๋ค.
๋ณธ๋ฌธ์ ๊ธ๊ณผ ์์ ๋์์ ์ง์คํ๋๋ก ๋น์๋๋ค. ์กฐ์์ ์ ํด์ง floating ์ปจํธ๋กค๋ก ์ ๊ณตํ๋ค. Liquid Glass์ฒ๋ผ ๊ฐ๋ณ๊ฒ ๋ ์๋ ๋ฐํฌ๋ช ํ๋ฉด์ ์งํฅํ๋, ํ๋ฉด๋ง๋ค ์ ๋ฆฌ ํจ๊ณผ๋ฅผ ์๋ก ๊ตฌํํ์ง ์๋๋ค.
- ์์ฃผ ์ฐ๋ ์กฐ์์ ์์ floating ํด๋ฐ์ ๋ชจ์๋ค.
- ํ์ผ ๋ชฉ๋ก, ์ด๋ฆ ๋ณ๊ฒฝ, ์ธ๋ถ ์ต์ ์ ํด๋น ์ปจํธ๋กค์ ํ์ค๋ฒ์์ ํผ์น๋ค.
- ์ฑํ ์ ํ๋จ ๋๋ ์ฐํ๋จ floating ์ปดํฌ์ ์์ ์์ํ๊ณ ํ์ํ ๋ ๋ํ๋ฅผ ํผ์น๋ค.
- ์ ์ฅ ์ํ์ ์ค๋ฅ๋ ๊ด๋ จ ์ปจํธ๋กค ๊ฐ๊น์ด์์ ์ ๋ฌํ๋ค.
- ํ์ผ ๊ฒฝ๋ก, ๊ตฌํ ์ค๋ช , ์ญํ ๋ผ๋ฒจ์ ์์ ํ๋ฉด์ ์์ ๋์ดํ์ง ์๋๋ค.
- ์์น์ ํฌ๊ธฐ๋ ๋ณธ๋ฌธ ์ฝ๊ธฐ, ์ ํ, ์ ๋ ฅ์ ๋ฐฉํดํ์ง ์๋๋ก ๊ฒฐ์ ํ๋ค.
UI Atom์ด ์ด๋ฏธ ์๋์ง ๋จผ์ ํ์ธํ๋ค. ๋น์ทํ๊ฒ ์๊ธด ๋ก์ปฌ ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ์ง ์๋๋ค. ๊ฐ์ ์ญํ ๊ณผ ์ฑ ์์ด๋ฉด ๊ฐ์ ๊ณต๊ฐ API๋ฅผ ์๋นํ๋ค.
ํ์ํ ์ญํ ํ์ธ
-> ์ ๋ณธ API ๊ฒ์
-> ์ง์ํ๋ฉด ์กฐํฉ
-> ๋ถ์กฑํ๋ฉด ์ ๋ณธ API ํ์ฅ
-> ์์ ๋ชจ๋์ด ์์ ๋๋ง ์ ์ ๋ณธ ๋ฑ๋ก
๊ธฐ๋ณธ ์กฐํฉ์ Toolbar, Popover, Command, Choice, Field ๋ฑ
@interactive-os/json-document-ui-primitives-react์ Atom์ ์ฌ์ฉํ๋ค.
Command์ label์ ์์ด์ฝ ํํ๊ณผ ์ ๊ทผ์ฑ ์ด๋ฆยทํดํ์ ์ํ ๊ณ์ฝ์ด๋ค.
ํ
์คํธ ๋ฒํผ์๋ children์ผ๋ก ๋ฌธ๊ตฌ๋ฅผ ์ ๋ฌํ๋ฉฐ ์์ด์ฝ ๋ฒํผ์ฉ ํํ์ ์ค์ฉํ์ง ์๋๋ค.
Floating ํ๋ฉด์ floatingSurface.control๊ณผ floatingSurface.panel,
floating-surface.css๊ฐ ์์ ํ๋ค. Host๋ ์์นยทํฌ๊ธฐยท๊ฐ๊ฒฉยท์ ํ ๋ฌธ๊ตฌ์ ์กฐํฉ์
์์ ํ๋ค. blurยทํฌ๋ช
๋ยทํ
๋๋ฆฌยท๊ณก๋ฅ ยท๊ทธ๋ฆผ์๋ฅผ Host๋ site ๊ณต์ฉ helper์ ๋ณต์ ํ์ง ์๋๋ค.
ํค๋ณด๋, focus, dismiss ๊ฐ์ ์ฌ์ฌ์ฉ ๋์๋ ๊ธฐ์กด Primitive๋ฅผ ์๋นํ๋ค.
์ ๋ณธ์ ํ์ฅํ๋ฉด ๊ณต๊ฐ export, ์์ ํจํค์ง ๋ฌธ์, API reference, ์ฌ์ดํธ Usage์ Source ๋ฑ๋ก์ ํจ๊ป ๊ฐฑ์ ํ๋ค. Demo๋ ์ ๋ณธ API๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ฐํ ๊ตฌํ์ ๋์ง ์๋๋ค.
์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ์งํ๊ธฐ ์ ์ ๋ค์์ ํ์ธํ๋ค.
- ์ด๋ค ํ๋ยท์ํยท์๊ณ๋ฅผ ์ ๋ฌํ๋๊ฐ?
- ์์ ๋ฉด ๊ทธ ์๋ฏธ๋ฅผ ์ ์ ์๊ฑฐ๋ ๋ชจํธํด์ง๋๊ฐ?
- ๋ค๋ฅธ ์์๊ฐ ์ด๋ฏธ ๊ฐ์ ์๋ฏธ๋ฅผ ์ ๋ฌํ๋๊ฐ?
- ๊ฐ๊ฒฉยท์ ๋ ฌยท๊ธฐ์กด ํ์ดํฌ๊ทธ๋ํผ๋ Atom์ผ๋ก ๋ ๋จ์ํ๊ฒ ํํํ ์ ์๋๊ฐ?
๋จ์ํ ๋ฌถ์์ ์ํด ์นด๋๋ ์ปจํ ์ด๋๋ฅผ ์ถ๊ฐํ์ง ์๋๋ค. ์ค์ ๊ฒฝ๊ณยท์กฐ์ยท์ํ๊ฐ ํ์ํ ๋๋ง ํ ๋๋ฆฌ๋ฅผ ์ด๋ค. ์์ด์ฝ ๋ฒํผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋๋ฆฌ๊ฐ ์๋ค. ๋ฐฐ๊ฒฝ์ ์๋ฏธ ์๋ ํ๋ฉด ๊ตฌ๋ถ์, ๊ทธ๋ฆผ์๋ ์ค์ ๋ ์๋ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ด๋ค. ํ ์คํธยท์์ด์ฝยทํ ๋๋ฆฌยท์ยทํํ๋ก ๊ฐ์ ๊ตฌ๋ถ์ ๋ฐ๋ณตํ์ง ์๋๋ค. ํ๋จ์ด ์ ๋งคํ๋ฉด ๋ ๋จ์ํ ํํ๋ถํฐ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ ์ปจํธ๋กค์ ๋ถ๋๋ฌ์ด ๊ณก๋ฅ , ๋ฎ์ ํ ๋๋ฆฌ ๋๋น, ๋๊ณ ์ ์ ๊ทธ๋ฆผ์๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์ ๊ฐ๋ณ ํ๋ฉด์ ํ๋์ฝ๋ฉํ์ง ์๊ณ ๊ณตํต semantic token์ผ๋ก ์กฐ์ ํ๋ค.
| ์ญํ | ํ์ฌ ๊ธฐ์ค | ์ ๋ณธ |
|---|---|---|
| ๊ธฐ๋ณธ ์ปจํธ๋กค ๊ณก๋ฅ | 10px | --radius-control |
| ์ผ๋ฐ ํ๋ฉด ๊ณก๋ฅ | 10px | --radius-surface |
| Floating ํด๋ฐ | ์์ฝ ํํ | floatingSurface.control |
| ์ฝํ ํ ๋๋ฆฌ | RGB 232 / 227 / 219 | --color-border-subtle |
| ๊ธฐ๋ณธ ํ ๋๋ฆฌ | RGB 166 / 161 / 152 | --color-border-default |
| ๊ธฐ๋ณธ ํ๋ฉด ๊ทธ๋ฆผ์ | ๊ฐ๊น์ด 6px + ๋์ 56px blur | --shadow-surface |
| Overlay ๊ทธ๋ฆผ์ | ๊ฐ๊น์ด 10px + ๋์ 72px blur | --shadow-overlay |
ํ ๋๋ฆฌ ๋๋น๋ฅผ ๋ฎ์ถ๋๋ผ๋ keyboard focus์ ์ ํยท์ค๋ฅ ์ํ๋ ์์๋ณผ ์ ์์ด์ผ ํ๋ค. ๊ทธ๋ฆผ์์ ๋ฒ์๋ฅผ ํค์ธ ๋๋ ์งํ ์ค๊ณฝ์ด ์๊ธฐ์ง ์๋๋ก ๊ฐ๊น์ด ๊ทธ๋ฆผ์๋ฅผ ์ ๊ฒ ์ ์งํ๋ค. ์ ์์น๋ ํ์ฌ ๊ธฐ๋ณธ๊ฐ์ด๋ฉฐ ๋ณ๊ฒฝ์ ์ ๋ณธ์ ์๋ ์ฐ๊ฒฐ๋ ํ ํฐ ๊ตฌํ์ด๋ค.
๊ธฐ๋ณธ UI์ ํฌ๊ธฐ๋ ์ธ ๋จ๊ณ, ๊ตต๊ธฐ๋ ๋ ๋จ๊ณ๋ก ์ ํํ๋ค.
| ์ญํ | ํฌ๊ธฐ | ๊ตต๊ธฐ |
|---|---|---|
| ๋ณด์กฐยท์ํยท๋ฉํ ์ ๋ณด | 12px | 400 |
| ๋ฒํผยท์ ๋ ฅยท์ ํยท์ผ๋ฐ UI ํ ์คํธ | 14px | 400 |
| UI ์ ๋ชฉยท์น์ ์ ๋ชฉ | 16px | 600 |
๊ฐ์กฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ 600์ ์ฌ์ฉํ๋ค. ๊ด์ฑ์ ์ผ๋ก 500ยท700์ด๋ ์ค๊ฐ ํฌ๊ธฐ๋ฅผ ์ถ๊ฐํ์ง ์๋๋ค. ์์ ๋๋ฌธ์ ๋ผ๋ฒจ, ๋์ ์๊ฐ, ์ญํ ๋ง๋ค ๋ค๋ฅธ ๊ธ๊ผด ํฌ๊ธฐ๋ก ์๊ณ๋ฅผ ๊ณผ์ฅํ์ง ์๋๋ค. ๋ฐฐ์นยท๊ฐ๊ฒฉยท์ ํ๋ ์๊ณผ ๊ตต๊ธฐ๋ก ์ถฉ๋ถํ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค. ์ฌ์ฉ์ ๋ฌธ์์ ์ ๋ชฉ ์์ค, ๊ตต๊ฒ, ์ฝ๋ ๋ฑ ์ฝํ ์ธ ์๋ฏธ๋ ์ด UI ๊ท์น์ผ๋ก ํํํํ์ง ์๋๋ค.
๋จ์ํํ๋ฉด์ ์ ๊ทผ์ฑ ์ด๋ฆ, focus ํ์, ํค๋ณด๋ ์กฐ์, disabledยท์ ํยท์ค๋ฅ ์ํ๋ฅผ ์์ ์ง ์๋๋ค. ํ์ค๋ฒ์ focus์ Escape ๋ณต๊ท๋ ์ ๋ณธ Primitive์ ๋งก๊ธด๋ค. Floating ํ๋ฉด์ ํฌ๋ช ๋ ๊ฐ์ยท๊ฐ์ ์์ ๋ชจ๋๋ ์ ๋ณธ CSS์์ ์ ์งํ๋ค.
๋ณ๊ฒฝํ ์ค์ ์ ํ ๊ฒฝ๋ก์์ ์ด๊ธฐยท๋ซ๊ธฐยท์ ๋ ฅ๊ณผ ์ข์ ํ๋ฉด์ ๋ฐฐ์น๋ฅผ ํ์ธํ๋ค. ์ํ์ ํ๋์ ๋ณด์กดํ๋ ๋ฒ์์์ ์ฅ์์ ๋ค์ ๋์ด๋ธ๋ค. ์ํํ ์๋ ๊ฒ์ฌ์ ์ค์ ๋ธ๋ผ์ฐ์ ํ์ธ, ํ์ธํ์ง ๋ชปํ ํญ๋ชฉ์ ๊ตฌ๋ถํด์ ๋ณด๊ณ ํ๋ค.
- UI Atom ๊ณต๊ฐ API
- Floating surface ๊ณ์ฝ
- Floating surface CSS
- ์ฌ์ดํธ ๊ณตํต ํ ํฐ๊ณผ Atom ์คํ์ผ
- ๊ณตํต UI ์กฐํฉ recipe
- UI Primitives ์ค๋ช
- ๋์์ธ ์์คํ ์นดํ๋ก๊ทธ ๊ตฌํ
์ด ๋ฌธ์๋ ์ ํ ๋์์ธ ์์น์ ์ค๋ช ํ๋ค. API ๊ณ์ฝ์ ํด๋น ํจํค์ง ๋ฌธ์์ ์ ์งํ๋ฉฐ, ์ค๊ณ์ ์งํ ์ํ๋ ์ํคํ ์ฒ ๋ชฉํยทํ๋กํ ํ์ ์ ๋ณ๋ ์๋ด๋ค.