Skip to content

Latest commit

ย 

History

History
117 lines (89 loc) ยท 6.55 KB

Design.md

File metadata and controls

117 lines (89 loc) ยท 6.55 KB

Design

์ด ๋ฌธ์„œ๋Š” ์ œํ’ˆ 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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์šฐํšŒ ๊ตฌํ˜„์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.

์ ์€ ํ‘œํ˜„์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์˜๋ฏธ ์ „๋‹ฌ

์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ํ™•์ธํ•œ๋‹ค.

  1. ์–ด๋–ค ํ–‰๋™ยท์ƒํƒœยท์œ„๊ณ„๋ฅผ ์ „๋‹ฌํ•˜๋Š”๊ฐ€?
  2. ์—†์• ๋ฉด ๊ทธ ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ชจํ˜ธํ•ด์ง€๋Š”๊ฐ€?
  3. ๋‹ค๋ฅธ ์š”์†Œ๊ฐ€ ์ด๋ฏธ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌํ•˜๋Š”๊ฐ€?
  4. ๊ฐ„๊ฒฉยท์ •๋ ฌยท๊ธฐ์กด ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ๋‚˜ 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์—์„œ ์œ ์ง€ํ•œ๋‹ค.

๋ณ€๊ฒฝํ•œ ์‹ค์ œ ์ œํ’ˆ ๊ฒฝ๋กœ์—์„œ ์—ด๊ธฐยท๋‹ซ๊ธฐยท์ž…๋ ฅ๊ณผ ์ข์€ ํ™”๋ฉด์˜ ๋ฐฐ์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ƒํƒœ์™€ ํ–‰๋™์„ ๋ณด์กดํ•˜๋Š” ๋ฒ”์œ„์—์„œ ์žฅ์‹์„ ๋‹ค์‹œ ๋œ์–ด๋‚ธ๋‹ค. ์ˆ˜ํ–‰ํ•œ ์ž๋™ ๊ฒ€์‚ฌ์™€ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ, ํ™•์ธํ•˜์ง€ ๋ชปํ•œ ํ•ญ๋ชฉ์€ ๊ตฌ๋ถ„ํ•ด์„œ ๋ณด๊ณ ํ•œ๋‹ค.

๊ตฌํ˜„๊ณผ ์ฐธ๊ณ  ์œ„์น˜

์ด ๋ฌธ์„œ๋Š” ์ œํ’ˆ ๋””์ž์ธ ์›์น™์„ ์„ค๋ช…ํ•œ๋‹ค. API ๊ณ„์•ฝ์€ ํ•ด๋‹น ํŒจํ‚ค์ง€ ๋ฌธ์„œ์— ์œ ์ง€ํ•˜๋ฉฐ, ์„ค๊ณ„์™€ ์ง„ํ–‰ ์ƒํƒœ๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ชฉํ‘œยทํ”„๋กœํ† ํƒ€์ž…์˜ ๋ณ„๋„ ์•ˆ๋‚ด๋‹ค.