@iamfiro/design 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/AGENTS.md +82 -0
  2. package/README.md +15 -2
  3. package/agents/INDEX.md +157 -0
  4. package/agents/accordion/AGENTS.md +279 -0
  5. package/agents/action-bar/AGENTS.md +90 -0
  6. package/agents/alert/AGENTS.md +212 -0
  7. package/agents/alert-dialog/AGENTS.md +193 -0
  8. package/agents/app-shell/AGENTS.md +409 -0
  9. package/agents/area-chart/AGENTS.md +183 -0
  10. package/agents/aspect-ratio/AGENTS.md +143 -0
  11. package/agents/avatar/AGENTS.md +130 -0
  12. package/agents/badge/AGENTS.md +217 -0
  13. package/agents/bar-chart/AGENTS.md +386 -0
  14. package/agents/bar-list/AGENTS.md +223 -0
  15. package/agents/brand-icon/AGENTS.md +82 -0
  16. package/agents/breadcrumb/AGENTS.md +133 -0
  17. package/agents/button/AGENTS.md +195 -0
  18. package/agents/card/AGENTS.md +141 -0
  19. package/agents/card-frame/AGENTS.md +227 -0
  20. package/agents/chat-bubble/AGENTS.md +266 -0
  21. package/agents/chat-composer/AGENTS.md +251 -0
  22. package/agents/checkbox/AGENTS.md +113 -0
  23. package/agents/code-block/AGENTS.md +144 -0
  24. package/agents/color-dot/AGENTS.md +120 -0
  25. package/agents/color-picker/AGENTS.md +224 -0
  26. package/agents/colors/AGENTS.md +168 -0
  27. package/agents/combobox/AGENTS.md +218 -0
  28. package/agents/command-menu/AGENTS.md +169 -0
  29. package/agents/comment/AGENTS.md +206 -0
  30. package/agents/context-menu/AGENTS.md +303 -0
  31. package/agents/copy-button/AGENTS.md +84 -0
  32. package/agents/count-badge/AGENTS.md +115 -0
  33. package/agents/countdown/AGENTS.md +101 -0
  34. package/agents/data-grid/AGENTS.md +460 -0
  35. package/agents/date-picker/AGENTS.md +197 -0
  36. package/agents/delta/AGENTS.md +114 -0
  37. package/agents/description-list/AGENTS.md +251 -0
  38. package/agents/dialog/AGENTS.md +391 -0
  39. package/agents/drawer/AGENTS.md +471 -0
  40. package/agents/dropdown-menu/AGENTS.md +322 -0
  41. package/agents/dropzone/AGENTS.md +116 -0
  42. package/agents/elapsed/AGENTS.md +160 -0
  43. package/agents/empty-state/AGENTS.md +203 -0
  44. package/agents/file-chip/AGENTS.md +79 -0
  45. package/agents/file-icon/AGENTS.md +66 -0
  46. package/agents/file-upload/AGENTS.md +168 -0
  47. package/agents/filter-chips/AGENTS.md +167 -0
  48. package/agents/flag/AGENTS.md +67 -0
  49. package/agents/funnel-chart/AGENTS.md +131 -0
  50. package/agents/highlight/AGENTS.md +119 -0
  51. package/agents/hover-card/AGENTS.md +271 -0
  52. package/agents/icon-stack/AGENTS.md +120 -0
  53. package/agents/icon-tile/AGENTS.md +94 -0
  54. package/agents/inline-diff/AGENTS.md +211 -0
  55. package/agents/input/AGENTS.md +261 -0
  56. package/agents/kanban/AGENTS.md +352 -0
  57. package/agents/kbd/AGENTS.md +160 -0
  58. package/agents/layout/AGENTS.md +351 -0
  59. package/agents/line-chart/AGENTS.md +393 -0
  60. package/agents/link/AGENTS.md +53 -0
  61. package/agents/list/AGENTS.md +392 -0
  62. package/agents/marker/AGENTS.md +142 -0
  63. package/agents/masked-text/AGENTS.md +127 -0
  64. package/agents/menubar/AGENTS.md +276 -0
  65. package/agents/multi-select/AGENTS.md +159 -0
  66. package/agents/navigation-menu/AGENTS.md +315 -0
  67. package/agents/notice-stack/AGENTS.md +101 -0
  68. package/agents/number-stepper/AGENTS.md +96 -0
  69. package/agents/otp-input/AGENTS.md +162 -0
  70. package/agents/pagination/AGENTS.md +189 -0
  71. package/agents/phone-input/AGENTS.md +131 -0
  72. package/agents/pie-chart/AGENTS.md +243 -0
  73. package/agents/popover/AGENTS.md +190 -0
  74. package/agents/progress/AGENTS.md +273 -0
  75. package/agents/progress-tracker/AGENTS.md +305 -0
  76. package/agents/rating/AGENTS.md +165 -0
  77. package/agents/relative-time/AGENTS.md +103 -0
  78. package/agents/resizable/AGENTS.md +390 -0
  79. package/agents/scaled-preview/AGENTS.md +111 -0
  80. package/agents/scatter-chart/AGENTS.md +160 -0
  81. package/agents/scroll-area/AGENTS.md +271 -0
  82. package/agents/search-input/AGENTS.md +105 -0
  83. package/agents/segmented-control/AGENTS.md +153 -0
  84. package/agents/select/AGENTS.md +159 -0
  85. package/agents/selector-button/AGENTS.md +122 -0
  86. package/agents/sidebar/AGENTS.md +201 -0
  87. package/agents/skeleton/AGENTS.md +166 -0
  88. package/agents/slider/AGENTS.md +181 -0
  89. package/agents/social-login-button/AGENTS.md +156 -0
  90. package/agents/spark-chart/AGENTS.md +257 -0
  91. package/agents/sparkbar/AGENTS.md +92 -0
  92. package/agents/spinner/AGENTS.md +123 -0
  93. package/agents/split-view/AGENTS.md +290 -0
  94. package/agents/stat/AGENTS.md +138 -0
  95. package/agents/status-icon/AGENTS.md +243 -0
  96. package/agents/step-list/AGENTS.md +313 -0
  97. package/agents/table/AGENTS.md +286 -0
  98. package/agents/tabs/AGENTS.md +305 -0
  99. package/agents/tag-input/AGENTS.md +246 -0
  100. package/agents/time-picker/AGENTS.md +228 -0
  101. package/agents/timeline/AGENTS.md +1018 -0
  102. package/agents/toast/AGENTS.md +266 -0
  103. package/agents/toggle-group/AGENTS.md +216 -0
  104. package/agents/toolbar/AGENTS.md +277 -0
  105. package/agents/tooltip/AGENTS.md +154 -0
  106. package/agents/tracker/AGENTS.md +158 -0
  107. package/agents/tree-diagram/AGENTS.md +260 -0
  108. package/agents/tree-view/AGENTS.md +329 -0
  109. package/agents/typography/AGENTS.md +396 -0
  110. package/lib/components/Accordion/Accordion2.js +135 -0
  111. package/lib/components/ActionBar/ActionBar2.js +65 -0
  112. package/lib/components/Alert/Alert2.js +131 -0
  113. package/lib/components/AppShell/AppShell2.js +94 -0
  114. package/lib/components/AreaChart/AreaChart.js +59 -0
  115. package/lib/components/BarChart/BarChart2.js +243 -0
  116. package/lib/components/BarList/BarList2.js +172 -0
  117. package/lib/components/Breadcrumb/Breadcrumb2.js +87 -0
  118. package/lib/components/Calendar/Calendar2.js +309 -0
  119. package/lib/components/Calendar/DatePicker2.js +229 -0
  120. package/lib/components/Calendar/date.js +121 -0
  121. package/lib/components/Card/Card2.js +104 -0
  122. package/lib/components/CardFrame/CardFrame2.js +72 -0
  123. package/lib/components/Chart/ChartParts.js +150 -0
  124. package/lib/components/Chart/chart2.js +96 -0
  125. package/lib/components/Chart/useChartInteraction.js +94 -0
  126. package/lib/components/ChatBubble/ChatBubble2.js +174 -0
  127. package/lib/components/ChatBubble/formatChatTime.js +53 -0
  128. package/lib/components/ChatComposer/ChatComposer2.js +153 -0
  129. package/lib/components/CodeBlock/CodeBlock2.js +93 -0
  130. package/lib/components/CodeBlock/highlight.js +114 -0
  131. package/lib/components/ColorPicker/ColorPicker2.js +610 -0
  132. package/lib/components/ColorPicker/color.js +180 -0
  133. package/lib/components/ColorPicker/presets.js +75 -0
  134. package/lib/components/Combobox/Combobox2.js +229 -0
  135. package/lib/components/CommandMenu/CommandMenu.js +267 -0
  136. package/lib/components/Comment/Comment2.js +134 -0
  137. package/lib/components/ContextMenu/ContextMenu2.js +168 -0
  138. package/lib/components/DataGrid/DataGrid2.js +1996 -0
  139. package/lib/components/DataGrid/GridPopover.js +154 -0
  140. package/lib/components/DataGrid/anchor.js +50 -0
  141. package/lib/components/DataGrid/model.js +558 -0
  142. package/lib/components/DataGrid/panels.js +703 -0
  143. package/lib/components/DataGrid/typeMeta.js +76 -0
  144. package/lib/components/DataGrid/types.js +54 -0
  145. package/lib/components/DescriptionList/DescriptionList2.js +180 -0
  146. package/lib/components/Dialog/AlertDialog.js +118 -0
  147. package/lib/components/Dialog/Dialog2.js +109 -0
  148. package/lib/components/Dialog/modal.js +92 -0
  149. package/lib/components/Drawer/Drawer2.js +244 -0
  150. package/lib/components/DropdownMenu/DropdownMenu2.js +394 -0
  151. package/lib/components/DropdownMenu/menuCore.js +63 -0
  152. package/lib/components/Dropzone/Dropzone2.js +144 -0
  153. package/lib/components/EmptyState/EmptyState2.js +72 -0
  154. package/lib/components/FileChip/FileChip2.js +118 -0
  155. package/lib/components/FileUpload/FileUpload.js +258 -0
  156. package/lib/components/FilterChips/FilterChips2.js +101 -0
  157. package/lib/components/FunnelChart/FunnelChart2.js +283 -0
  158. package/lib/components/FunnelChart/funnel.js +69 -0
  159. package/lib/components/Highlight/Highlight2.js +100 -0
  160. package/lib/components/HoverCard/HoverCard.js +134 -0
  161. package/lib/components/InlineDiff/InlineDiff2.js +215 -0
  162. package/lib/components/InlineDiff/diff.js +126 -0
  163. package/lib/components/InlineDiff/useDiffReview.js +109 -0
  164. package/lib/components/Kanban/Kanban2.js +691 -0
  165. package/lib/components/Kanban/KanbanCard.js +159 -0
  166. package/lib/components/Kanban/move.js +69 -0
  167. package/lib/components/LineChart/LineChart2.js +342 -0
  168. package/lib/components/List/List2.js +133 -0
  169. package/lib/components/Listbox/Listbox2.js +163 -0
  170. package/lib/components/Marker/Marker2.js +82 -0
  171. package/lib/components/Menubar/Menubar2.js +223 -0
  172. package/lib/components/MultiSelect/MultiSelect2.js +204 -0
  173. package/lib/components/NavigationMenu/NavigationMenu2.js +481 -0
  174. package/lib/components/NoticeStack/NoticeStack2.js +178 -0
  175. package/lib/components/NumberStepper/NumberStepper2.js +129 -0
  176. package/lib/components/OtpInput/OtpInput2.js +122 -0
  177. package/lib/components/Pagination/Pagination2.js +210 -0
  178. package/lib/components/Pagination/paginationRange.js +53 -0
  179. package/lib/components/PhoneInput/PhoneInput.js +175 -0
  180. package/lib/components/PieChart/PieChart2.js +246 -0
  181. package/lib/components/PieChart/arc.js +66 -0
  182. package/lib/components/PieChart/useArcTween.js +94 -0
  183. package/lib/components/Popover/Popover2.js +112 -0
  184. package/lib/components/ProgressTracker/ProgressTracker2.js +226 -0
  185. package/lib/components/Rating/Rating2.js +186 -0
  186. package/lib/components/Resizable/Resizable2.js +236 -0
  187. package/lib/components/Resizable/layout.js +115 -0
  188. package/lib/components/ScaledPreview/ScaledPreview2.js +100 -0
  189. package/lib/components/ScatterChart/ScatterChart2.js +356 -0
  190. package/lib/components/ScatterChart/scatter.js +83 -0
  191. package/lib/components/ScrollArea/ScrollArea2.js +218 -0
  192. package/lib/components/Select/Select2.js +153 -0
  193. package/lib/components/Sidebar/Sidebar2.js +127 -0
  194. package/lib/components/Skeleton/Skeleton2.js +91 -0
  195. package/lib/components/Slider/Slider2.js +142 -0
  196. package/lib/components/SocialLoginButton/SocialLoginButton.js +85 -0
  197. package/lib/components/SparkChart/SparkChart2.js +217 -0
  198. package/lib/components/SparkChart/spark.js +76 -0
  199. package/lib/components/Sparkbar/Sparkbar2.js +111 -0
  200. package/lib/components/SplitView/SplitView2.js +95 -0
  201. package/lib/components/Stat/Stat2.js +164 -0
  202. package/lib/components/StepList/StepList2.js +131 -0
  203. package/lib/components/Table/Table2.js +104 -0
  204. package/lib/components/Tabs/Tabs2.js +131 -0
  205. package/lib/components/TagInput/TagInput2.js +360 -0
  206. package/lib/components/TimePicker/TimePicker2.js +388 -0
  207. package/lib/components/TimePicker/time.js +83 -0
  208. package/lib/components/Timeline/Timeline2.js +369 -0
  209. package/lib/components/Timeline/scale.js +83 -0
  210. package/lib/components/Toast/Toaster.js +212 -0
  211. package/lib/components/Toast/store.js +129 -0
  212. package/lib/components/ToggleGroup/ToggleGroup2.js +125 -0
  213. package/lib/components/Toolbar/Toolbar2.js +281 -0
  214. package/lib/components/Tracker/Tracker2.js +172 -0
  215. package/lib/components/TreeDiagram/TreeDiagram2.js +223 -0
  216. package/lib/components/TreeView/TreeView2.js +284 -0
  217. package/lib/hooks/timing.js +55 -0
  218. package/lib/hooks/useControllableState.js +49 -0
  219. package/lib/hooks/useCountdown.js +80 -0
  220. package/lib/hooks/useDigitInput.js +105 -0
  221. package/lib/hooks/useDismiss.js +71 -0
  222. package/lib/hooks/useElapsed.js +83 -0
  223. package/lib/hooks/useFloating.js +70 -0
  224. package/lib/hooks/useFocusTrap.js +61 -0
  225. package/lib/hooks/usePresence.js +60 -0
  226. package/lib/hooks/usePressToOpen.js +69 -0
  227. package/lib/hooks/useScrollLock.js +70 -0
  228. package/lib/hooks/useSelection.js +68 -0
  229. package/lib/index.js +178 -0
  230. package/lib/primitives/AspectRatio2.js +80 -0
  231. package/lib/primitives/BrandIcon.js +245 -0
  232. package/lib/primitives/ColorDot2.js +70 -0
  233. package/lib/primitives/CopyButton2.js +85 -0
  234. package/lib/primitives/CountBadge2.js +78 -0
  235. package/lib/primitives/Countdown2.js +65 -0
  236. package/lib/primitives/Delta2.js +67 -0
  237. package/lib/primitives/Elapsed.js +62 -0
  238. package/lib/primitives/FileIcon2.js +125 -0
  239. package/lib/primitives/Flag2.js +263 -0
  240. package/lib/primitives/IconStack2.js +85 -0
  241. package/lib/primitives/IconTile2.js +68 -0
  242. package/lib/primitives/Kbd2.js +88 -0
  243. package/lib/primitives/Layout2.js +118 -0
  244. package/lib/primitives/Link2.js +53 -0
  245. package/lib/primitives/MaskedText2.js +120 -0
  246. package/lib/primitives/Progress2.js +137 -0
  247. package/lib/primitives/RelativeTime.js +84 -0
  248. package/lib/primitives/SearchInput2.js +84 -0
  249. package/lib/primitives/SelectorButton2.js +97 -0
  250. package/lib/primitives/Spinner2.js +98 -0
  251. package/lib/primitives/StatusIcon2.js +126 -0
  252. package/lib/primitives/Swatch2.js +79 -0
  253. package/lib/primitives/Tooltip2.js +132 -0
  254. package/lib/primitives/Typography2.js +97 -0
  255. package/lib/primitives/formatCountdown.js +51 -0
  256. package/lib/primitives/formatElapsed.js +66 -0
  257. package/lib/primitives/formatRelativeTime.js +64 -0
  258. package/lib/primitives/hotkey.js +94 -0
  259. package/lib/primitives/index.js +352 -0
  260. package/lib/primitives/maskValue.js +65 -0
  261. package/lib/style.css +2 -0
  262. package/lib/types/components/Accordion/Accordion.d.ts +57 -0
  263. package/lib/types/components/ActionBar/ActionBar.d.ts +24 -0
  264. package/lib/types/components/Alert/Alert.d.ts +36 -0
  265. package/lib/types/components/AppShell/AppShell.d.ts +38 -0
  266. package/lib/types/components/AreaChart/AreaChart.d.ts +17 -0
  267. package/lib/types/components/BarChart/BarChart.d.ts +57 -0
  268. package/lib/types/components/BarList/BarList.d.ts +56 -0
  269. package/lib/types/components/Breadcrumb/Breadcrumb.d.ts +15 -0
  270. package/lib/types/components/Calendar/Calendar.d.ts +34 -0
  271. package/lib/types/components/Calendar/DatePicker.d.ts +45 -0
  272. package/lib/types/components/Calendar/date.d.ts +32 -0
  273. package/lib/types/components/Card/Card.d.ts +64 -0
  274. package/lib/types/components/CardFrame/CardFrame.d.ts +15 -0
  275. package/lib/types/components/Chart/ChartParts.d.ts +38 -0
  276. package/lib/types/components/Chart/chart.d.ts +46 -0
  277. package/lib/types/components/Chart/useChartInteraction.d.ts +39 -0
  278. package/lib/types/components/ChatBubble/ChatBubble.d.ts +61 -0
  279. package/lib/types/components/ChatBubble/formatChatTime.d.ts +2 -0
  280. package/lib/types/components/ChatComposer/ChatComposer.d.ts +42 -0
  281. package/lib/types/components/CodeBlock/CodeBlock.d.ts +18 -0
  282. package/lib/types/components/CodeBlock/highlight.d.ts +10 -0
  283. package/lib/types/components/ColorPicker/ColorPicker.d.ts +61 -0
  284. package/lib/types/components/ColorPicker/color.d.ts +48 -0
  285. package/lib/types/components/ColorPicker/presets.d.ts +7 -0
  286. package/lib/types/components/Combobox/Combobox.d.ts +48 -0
  287. package/lib/types/components/CommandMenu/CommandMenu.d.ts +51 -0
  288. package/lib/types/components/Comment/Comment.d.ts +45 -0
  289. package/lib/types/components/ContextMenu/ContextMenu.d.ts +40 -0
  290. package/lib/types/components/DataGrid/DataGrid.d.ts +43 -0
  291. package/lib/types/components/DataGrid/GridPopover.d.ts +43 -0
  292. package/lib/types/components/DataGrid/anchor.d.ts +5 -0
  293. package/lib/types/components/DataGrid/model.d.ts +61 -0
  294. package/lib/types/components/DataGrid/panels.d.ts +63 -0
  295. package/lib/types/components/DataGrid/typeMeta.d.ts +6 -0
  296. package/lib/types/components/DataGrid/types.d.ts +77 -0
  297. package/lib/types/components/DescriptionList/DescriptionList.d.ts +77 -0
  298. package/lib/types/components/Dialog/AlertDialog.d.ts +26 -0
  299. package/lib/types/components/Dialog/Dialog.d.ts +42 -0
  300. package/lib/types/components/Dialog/modal.d.ts +38 -0
  301. package/lib/types/components/Drawer/Drawer.d.ts +62 -0
  302. package/lib/types/components/DropdownMenu/DropdownMenu.d.ts +97 -0
  303. package/lib/types/components/DropdownMenu/menuCore.d.ts +23 -0
  304. package/lib/types/components/Dropzone/Dropzone.d.ts +30 -0
  305. package/lib/types/components/EmptyState/EmptyState.d.ts +26 -0
  306. package/lib/types/components/FileChip/FileChip.d.ts +32 -0
  307. package/lib/types/components/FileUpload/FileUpload.d.ts +52 -0
  308. package/lib/types/components/FilterChips/FilterChips.d.ts +37 -0
  309. package/lib/types/components/FunnelChart/FunnelChart.d.ts +38 -0
  310. package/lib/types/components/FunnelChart/funnel.d.ts +25 -0
  311. package/lib/types/components/Highlight/Highlight.d.ts +35 -0
  312. package/lib/types/components/HoverCard/HoverCard.d.ts +47 -0
  313. package/lib/types/components/InlineDiff/InlineDiff.d.ts +36 -0
  314. package/lib/types/components/InlineDiff/diff.d.ts +42 -0
  315. package/lib/types/components/InlineDiff/useDiffReview.d.ts +57 -0
  316. package/lib/types/components/Kanban/Kanban.d.ts +64 -0
  317. package/lib/types/components/Kanban/KanbanCard.d.ts +35 -0
  318. package/lib/types/components/Kanban/move.d.ts +25 -0
  319. package/lib/types/components/LineChart/LineChart.d.ts +85 -0
  320. package/lib/types/components/List/List.d.ts +62 -0
  321. package/lib/types/components/Listbox/Listbox.d.ts +60 -0
  322. package/lib/types/components/Marker/Marker.d.ts +28 -0
  323. package/lib/types/components/Menubar/Menubar.d.ts +50 -0
  324. package/lib/types/components/MultiSelect/MultiSelect.d.ts +38 -0
  325. package/lib/types/components/NavigationMenu/NavigationMenu.d.ts +101 -0
  326. package/lib/types/components/NoticeStack/NoticeStack.d.ts +41 -0
  327. package/lib/types/components/NumberStepper/NumberStepper.d.ts +32 -0
  328. package/lib/types/components/OtpInput/OtpInput.d.ts +31 -0
  329. package/lib/types/components/Pagination/Pagination.d.ts +54 -0
  330. package/lib/types/components/Pagination/paginationRange.d.ts +7 -0
  331. package/lib/types/components/PhoneInput/PhoneInput.d.ts +47 -0
  332. package/lib/types/components/PieChart/PieChart.d.ts +67 -0
  333. package/lib/types/components/PieChart/arc.d.ts +26 -0
  334. package/lib/types/components/PieChart/useArcTween.d.ts +15 -0
  335. package/lib/types/components/Popover/Popover.d.ts +28 -0
  336. package/lib/types/components/ProgressTracker/ProgressTracker.d.ts +64 -0
  337. package/lib/types/components/Rating/Rating.d.ts +42 -0
  338. package/lib/types/components/Resizable/Resizable.d.ts +50 -0
  339. package/lib/types/components/Resizable/layout.d.ts +31 -0
  340. package/lib/types/components/ScaledPreview/ScaledPreview.d.ts +38 -0
  341. package/lib/types/components/ScatterChart/ScatterChart.d.ts +81 -0
  342. package/lib/types/components/ScatterChart/scatter.d.ts +14 -0
  343. package/lib/types/components/ScrollArea/ScrollArea.d.ts +34 -0
  344. package/lib/types/components/Select/Select.d.ts +39 -0
  345. package/lib/types/components/Sidebar/Sidebar.d.ts +39 -0
  346. package/lib/types/components/Skeleton/Skeleton.d.ts +47 -0
  347. package/lib/types/components/Slider/Slider.d.ts +36 -0
  348. package/lib/types/components/SocialLoginButton/SocialLoginButton.d.ts +10 -0
  349. package/lib/types/components/SparkChart/SparkChart.d.ts +55 -0
  350. package/lib/types/components/SparkChart/spark.d.ts +16 -0
  351. package/lib/types/components/Sparkbar/Sparkbar.d.ts +39 -0
  352. package/lib/types/components/SplitView/SplitView.d.ts +31 -0
  353. package/lib/types/components/Stat/Stat.d.ts +58 -0
  354. package/lib/types/components/StepList/StepList.d.ts +61 -0
  355. package/lib/types/components/Table/Table.d.ts +39 -0
  356. package/lib/types/components/Tabs/Tabs.d.ts +47 -0
  357. package/lib/types/components/TagInput/TagInput.d.ts +46 -0
  358. package/lib/types/components/TimePicker/TimePicker.d.ts +43 -0
  359. package/lib/types/components/TimePicker/time.d.ts +15 -0
  360. package/lib/types/components/Timeline/Timeline.d.ts +154 -0
  361. package/lib/types/components/Timeline/scale.d.ts +22 -0
  362. package/lib/types/components/Toast/Toaster.d.ts +19 -0
  363. package/lib/types/components/Toast/index.d.ts +4 -0
  364. package/lib/types/components/Toast/store.d.ts +75 -0
  365. package/lib/types/components/ToggleGroup/ToggleGroup.d.ts +28 -0
  366. package/lib/types/components/Toolbar/Toolbar.d.ts +70 -0
  367. package/lib/types/components/Tracker/Tracker.d.ts +43 -0
  368. package/lib/types/components/TreeDiagram/TreeDiagram.d.ts +68 -0
  369. package/lib/types/components/TreeView/TreeView.d.ts +107 -0
  370. package/lib/types/components/index.d.ts +188 -0
  371. package/lib/types/hooks/index.d.ts +17 -0
  372. package/lib/types/hooks/timing.d.ts +29 -0
  373. package/lib/types/hooks/useControllableState.d.ts +5 -0
  374. package/lib/types/hooks/useCountdown.d.ts +19 -0
  375. package/lib/types/hooks/useDigitInput.d.ts +24 -0
  376. package/lib/types/hooks/useDismiss.d.ts +3 -0
  377. package/lib/types/hooks/useElapsed.d.ts +28 -0
  378. package/lib/types/hooks/useFloating.d.ts +21 -0
  379. package/lib/types/hooks/useFocusTrap.d.ts +7 -0
  380. package/lib/types/hooks/usePresence.d.ts +8 -0
  381. package/lib/types/hooks/usePressToOpen.d.ts +20 -0
  382. package/lib/types/hooks/useScrollLock.d.ts +2 -0
  383. package/lib/types/hooks/useSelection.d.ts +29 -0
  384. package/lib/types/index.d.ts +5 -0
  385. package/lib/types/primitives/AspectRatio.d.ts +14 -0
  386. package/lib/types/primitives/BrandIcon.d.ts +12 -0
  387. package/lib/types/primitives/ColorDot.d.ts +20 -0
  388. package/lib/types/primitives/CopyButton.d.ts +12 -0
  389. package/lib/types/primitives/CountBadge.d.ts +28 -0
  390. package/lib/types/primitives/Countdown.d.ts +21 -0
  391. package/lib/types/primitives/Delta.d.ts +33 -0
  392. package/lib/types/primitives/Elapsed.d.ts +23 -0
  393. package/lib/types/primitives/FileIcon.d.ts +17 -0
  394. package/lib/types/primitives/Flag.d.ts +15 -0
  395. package/lib/types/primitives/IconStack.d.ts +27 -0
  396. package/lib/types/primitives/IconTile.d.ts +24 -0
  397. package/lib/types/primitives/Kbd.d.ts +19 -0
  398. package/lib/types/primitives/Layout.d.ts +64 -0
  399. package/lib/types/primitives/Link.d.ts +12 -0
  400. package/lib/types/primitives/MaskedText.d.ts +28 -0
  401. package/lib/types/primitives/Progress.d.ts +52 -0
  402. package/lib/types/primitives/RelativeTime.d.ts +22 -0
  403. package/lib/types/primitives/SearchInput.d.ts +8 -0
  404. package/lib/types/primitives/SelectorButton.d.ts +23 -0
  405. package/lib/types/primitives/Spinner.d.ts +15 -0
  406. package/lib/types/primitives/StatusIcon.d.ts +40 -0
  407. package/lib/types/primitives/Swatch.d.ts +11 -0
  408. package/lib/types/primitives/Tooltip.d.ts +17 -0
  409. package/lib/types/primitives/Typography.d.ts +48 -0
  410. package/lib/types/primitives/formatCountdown.d.ts +2 -0
  411. package/lib/types/primitives/formatElapsed.d.ts +8 -0
  412. package/lib/types/primitives/formatRelativeTime.d.ts +16 -0
  413. package/lib/types/primitives/hotkey.d.ts +10 -0
  414. package/lib/types/primitives/index.d.ts +188 -0
  415. package/lib/types/primitives/maskValue.d.ts +24 -0
  416. package/package.json +55 -4
@@ -0,0 +1,160 @@
1
+ # Kbd
2
+
3
+ > 라벨 & 배지 · `@iamfiro/design` · 직접 만들지 말고 이 컴포넌트를 쓴다.
4
+
5
+ 단축키를 보여주는 키캡. 흰 키캡 + 아래 진한 가장자리로 살짝 떠 보여요. 키 이름으로 넘기면 OS에 맞춰 표시돼요 — mod는 Mac에서 ⌘, Windows에서 Ctrl. 툴팁 안처럼 어두운 배경에서는 배경색에 맞춰 바뀌어요.
6
+
7
+ ```tsx
8
+ import { Kbd, formatKey, isMac } from '@iamfiro/design'
9
+ ```
10
+
11
+ ## API
12
+
13
+ ### Kbd
14
+
15
+ | prop | 타입 | 기본값 | 설명 |
16
+ | --- | --- | --- | --- |
17
+ | `keys` | `string[]` | | 키 이름 목록. 예: ['mod', 'K'], ['shift', 'enter']. formatKey로 OS에 맞게 표시. |
18
+ | `children` | `ReactNode` | | keys 대신 그대로 보여줄 내용. 예: <Kbd>⌘K</Kbd>. |
19
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | 키캡 높이 18 / 20 / 24px. |
20
+ | `combined` | `boolean` | | 조합 전체를 한 칸에 표시("⌘K", "Ctrl+K"). |
21
+ | `separator` | `ReactNode` | | 키 사이에 넣을 글자. 예: '+', '다음'. |
22
+ | `className` | `string` | | 바깥 kbd에 붙일 클래스. |
23
+
24
+ ### formatKey
25
+
26
+ (key: string) => string. 함께 내보내는 isMac(boolean 상수)은 navigator.platform이 Mac · iPhone · iPad일 때 true예요.
27
+
28
+ | prop | 타입 | 기본값 | 설명 |
29
+ | --- | --- | --- | --- |
30
+ | `key` (필수) | `string` | | mod · cmd · meta · ctrl · alt · option · shift는 OS별 글자(⌘ ⌃ ⌥ ⇧ / Ctrl Win Alt Shift), enter · esc · tab · space · backspace · delete · 방향키는 기호로, 한 글자는 대문자로 바꿔요. |
31
+
32
+ ## 예제
33
+
34
+ 예제를 감싼 `style={{ ... }}` div는 미리보기 배치용이다. 실제 화면 배치는 `Stack` · `Inline` · `Grid`로 한다.
35
+
36
+ ### 단일 키
37
+
38
+ enter → ↵, esc → Esc, 방향키 → 화살표. 한 글자는 대문자로 바꿔요.
39
+
40
+ ```tsx
41
+ import { Kbd } from '@iamfiro/design'
42
+
43
+ const KEYS = ['esc', 'enter', 'tab', 'space', 'backspace', 'up', 'down', 'left', 'right', 'k']
44
+
45
+ export default function Example() {
46
+ return (
47
+ <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12 }}>
48
+ {KEYS.map((key) => (
49
+ <Kbd key={key} keys={[key]} />
50
+ ))}
51
+ </div>
52
+ )
53
+ }
54
+ ```
55
+
56
+ ### 조합 키
57
+
58
+ 기본은 키마다 한 칸, combined는 한 칸에 묶어요(Windows에서는 Ctrl+K처럼 + 로 이어요).
59
+
60
+ ```tsx
61
+ import { Kbd, Text } from '@iamfiro/design'
62
+
63
+ const SHORTCUTS = [
64
+ { label: '검색', keys: ['mod', 'K'] },
65
+ { label: '명령 팔레트', keys: ['mod', 'shift', 'P'] },
66
+ { label: '줄바꿈 없이 보내기', keys: ['alt', 'enter'] },
67
+ ]
68
+
69
+ const ROW = { display: 'grid', gridTemplateColumns: '160px 120px 120px', alignItems: 'center', gap: 24 }
70
+
71
+ export default function Example() {
72
+ return (
73
+ <div style={{ display: 'grid', gap: 14 }}>
74
+ <div style={ROW}>
75
+ <span />
76
+ <Text variant="caption" tone="tertiary">
77
+ 기본
78
+ </Text>
79
+ <Text variant="caption" tone="tertiary">
80
+ combined
81
+ </Text>
82
+ </div>
83
+ {SHORTCUTS.map((s) => (
84
+ <div key={s.label} style={ROW}>
85
+ <Text variant="label-md">{s.label}</Text>
86
+ <Kbd keys={s.keys} />
87
+ <Kbd keys={s.keys} combined />
88
+ </div>
89
+ ))}
90
+ </div>
91
+ )
92
+ }
93
+ ```
94
+
95
+ ### 순서 키
96
+
97
+ separator로 키 사이에 글자를 넣어요. G 다음 I처럼 차례로 누르는 단축키에 써요.
98
+
99
+ ```tsx
100
+ import { Kbd, Text } from '@iamfiro/design'
101
+
102
+ export default function Example() {
103
+ return (
104
+ <div style={{ display: 'grid', gridTemplateColumns: '140px auto', alignItems: 'center', gap: '14px 24px' }}>
105
+ <Text variant="label-md">받은편지함으로 이동</Text>
106
+ <Kbd keys={['G', 'I']} separator="다음" />
107
+ <Text variant="label-md">복사</Text>
108
+ <Kbd keys={['mod', 'C']} separator="+" />
109
+ <Text variant="label-md">이전 · 다음 항목</Text>
110
+ <Kbd keys={['up', 'down']} separator="/" />
111
+ </div>
112
+ )
113
+ }
114
+ ```
115
+
116
+ ### 크기
117
+
118
+ sm 18 · md 20 · lg 24px. 문장 속에서는 sm이 글줄과 잘 맞아요. 글자와 키캡 사이는 6px.
119
+
120
+ ```tsx
121
+ import { Kbd, Text } from '@iamfiro/design'
122
+
123
+ export default function Example() {
124
+ return (
125
+ <div style={{ display: 'grid', gap: 28, justifyItems: 'center' }}>
126
+ <div style={{ display: 'flex', alignItems: 'center', gap: 16 }}>
127
+ <Kbd keys={['mod', 'K']} size="sm" />
128
+ <Kbd keys={['mod', 'K']} />
129
+ <Kbd keys={['mod', 'K']} size="lg" />
130
+ </div>
131
+ <Text tone="secondary">
132
+ <Kbd keys={['mod', 'K']} size="sm" /> 를 눌러 어디서든 검색하고, <Kbd keys={['esc']} size="sm" /> 로 닫아요.
133
+ </Text>
134
+ </div>
135
+ )
136
+ }
137
+ ```
138
+
139
+ ### formatKey · isMac
140
+
141
+ 키캡이 아닌 곳(placeholder, aria-label, 문자열)에 단축키를 쓸 때. 같은 규칙으로 OS에 맞는 글자를 돌려줘요.
142
+
143
+ ```tsx
144
+ import { Search } from 'lucide-react'
145
+ import { Input, Text, formatKey, isMac } from '@iamfiro/design'
146
+
147
+ // 키캡을 쓸 수 없는 문자열에서도 OS에 맞는 단축키 글자를 써요.
148
+ const searchShortcut = [formatKey('mod'), formatKey('k')].join(isMac ? '' : '+')
149
+
150
+ export default function Example() {
151
+ return (
152
+ <div style={{ width: 320, display: 'grid', gap: 10 }}>
153
+ <Input leading={<Search />} placeholder={`문서 검색 (${searchShortcut})`} aria-label="문서 검색" aria-keyshortcuts={isMac ? 'Meta+K' : 'Control+K'} />
154
+ <Text variant="caption" tone="tertiary">
155
+ {isMac ? 'Mac에서는 ⌘ 기호로' : 'Windows에서는 Ctrl+ 형식으로'} 표시하고 있어요.
156
+ </Text>
157
+ </div>
158
+ )
159
+ }
160
+ ```
@@ -0,0 +1,351 @@
1
+ # Layout
2
+
3
+ > 파운데이션 · `@iamfiro/design` · 직접 만들지 말고 이 컴포넌트를 쓴다.
4
+
5
+ 여백을 손으로 맞추지 않도록 돕는 레이아웃 기본 요소. Stack은 세로, Inline은 가로, Grid는 열로 배치하고 간격은 모두 4px 단위 토큰(--s1 … --s10)을 써요. 구분은 여백이 먼저이고, 그걸로 부족할 때만 Separator를 써요.
6
+
7
+ ```tsx
8
+ import { Box, Grid, Inline, Separator, Stack } from '@iamfiro/design'
9
+ ```
10
+
11
+ ## 디자인 규칙
12
+
13
+ - 차트: 시리즈 색은 `--chart-1…6`을 순서대로, 그리드는 `--chart-grid`로 아주 옅게(세로선·축선 없음). 범례·툴팁의 색 표시는 `ColorDot`, 툴팁은 `Card raised` + `Separator`로 조립. 축·툴팁·범례·호버/키보드는 `components/Chart/`의 공용 조각(`ChartTooltip`, `ChartLegend`, `useChartInteraction`)을 쓴다. → `LineChart` · `BarChart` · `PieChart` · `Sparkbar`
14
+ - 배치는 `Stack`(세로) · `Inline`(가로) · `Grid` · `Box`로. 간격은 4px 단위 `Space`(1=4 … 10=40)만. 즉석 flex div 금지.
15
+ - 구분선(`Separator`)은 간격만으로 부족할 때만.
16
+ - 루트 클래스 이름이 다른 요소와 겹치지 않는지 먼저 검색한다(DataGrid가 `.ds-grid`를 써서 Layout `Grid`가 flex로 깨졌던 버그 → `.ds-datagrid`).
17
+ - 라벨 + 숫자는 `Stat`(한 줄 "시간 1:52 / 2:55" 또는 오버라인 라벨 위 큰 숫자), 지표 띠는 `StatGroup`(칸 사이 `Separator`, 줄이 바뀌어도 줄 첫 칸 앞엔 선 없음).
18
+ - 실제 컴포넌트를 작게 줄여 보여 주는 썸네일(갤러리 카드 · 템플릿 고르기)은 `ScaledPreview`(고정 높이 무대, 맞춰 줄이기, inert, `label` 흰 칩 · `meta` 회색 칩, 타이머가 도는 내용은 `lazy`로 보일 때만). 필터로 바뀌는 카드 격자는 `Grid stagger` + 필터 값을 `key`로.
19
+
20
+ ## API
21
+
22
+ ### Stack
23
+
24
+ 세로 flex. as로 다른 요소(form, ul, section…)로 렌더할 수 있어요.
25
+
26
+ | prop | 타입 | 기본값 | 설명 |
27
+ | --- | --- | --- | --- |
28
+ | `gap` | `Space` | `3` | 자식 사이 간격. 0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6 \| 8 \| 10 → --s1 … --s10 (4px 단위). |
29
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'stretch'` | 가로 정렬(align-items). |
30
+ | `justify` | `'start' \| 'center' \| 'end' \| 'between' \| 'around'` | | 세로 분배(justify-content). |
31
+ | `wrap` | `boolean` | `false` | 줄바꿈 허용. |
32
+ | `as` | `ElementType` | `'div'` | 렌더할 요소. |
33
+
34
+ ### Inline
35
+
36
+ 가로 flex. 버튼 묶음, 칩, 메타 정보 줄에.
37
+
38
+ | prop | 타입 | 기본값 | 설명 |
39
+ | --- | --- | --- | --- |
40
+ | `gap` | `Space` | `2` | 자식 사이 간격(4px 단위 토큰). |
41
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'center'` | 세로 정렬(align-items). |
42
+ | `justify` | `'start' \| 'center' \| 'end' \| 'between' \| 'around'` | | 가로 분배(justify-content). |
43
+ | `wrap` | `boolean` | `true` | 공간이 부족하면 다음 줄로. |
44
+ | `as` | `ElementType` | `'div'` | 렌더할 요소. |
45
+
46
+ ### Grid
47
+
48
+ | prop | 타입 | 기본값 | 설명 |
49
+ | --- | --- | --- | --- |
50
+ | `columns` | `number \| string` | `2` | 같은 폭 열의 수, 또는 grid-template-columns 문자열 그대로. |
51
+ | `minItemWidth` | `number` | | 반응형: 각 열이 이 폭(px) 이상이 되도록 들어가는 만큼 열을 만들어요. columns보다 우선해요. |
52
+ | `gap` | `Space` | `4` | 열 간격. rowGap을 안 주면 행 간격도 같아요. |
53
+ | `rowGap` | `Space` | | 행 간격을 따로 줄 때. |
54
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | | 셀 안 세로 정렬(align-items). |
55
+ | `stagger` | `boolean` | `false` | 붙을 때 칸이 아래에서 하나씩(약 70ms 간격) 올라와요. 필터를 바꿀 때 key를 바꾸면 다시 재생돼요. |
56
+ | `as` | `ElementType` | `'div'` | 렌더할 요소. |
57
+
58
+ ### Separator
59
+
60
+ | prop | 타입 | 기본값 | 설명 |
61
+ | --- | --- | --- | --- |
62
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | 선 방향. 세로선은 부모 높이만큼 늘어나요. |
63
+ | `label` | `ReactNode` | | 가운데 글자(예: "또는"). |
64
+ | `spacing` | `Space` | `0` | 선 양쪽 여백. |
65
+ | `decorative` | `boolean` | `true` | false면 보조 기술에 separator로 알려요. |
66
+
67
+ ### Box
68
+
69
+ | prop | 타입 | 기본값 | 설명 |
70
+ | --- | --- | --- | --- |
71
+ | `padding` | `Space` | | 네 방향 안쪽 여백. |
72
+ | `paddingX / paddingY` | `Space` | | 좌우 / 위아래 안쪽 여백. |
73
+ | `radius` | `'none' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| 'full'` | `'none'` | 모서리 둥글기(토큰). |
74
+ | `background` | `'none' \| 'surface' \| 'subtle'` | `'none'` | surface는 흰색, subtle은 옅은 회색 채움(#f4f4f4). |
75
+ | `elevated` | `boolean` | | 테두리 대신 옅은 그림자로 띄워요(흰 배경 포함). |
76
+ | `as` | `ElementType` | `'div'` | 렌더할 요소. |
77
+
78
+ ## 예제
79
+
80
+ 예제를 감싼 `style={{ ... }}` div는 미리보기 배치용이다. 실제 화면 배치는 `Stack` · `Inline` · `Grid`로 한다.
81
+
82
+ ### Stack과 Inline
83
+
84
+ Stack은 위에서 아래로, Inline은 왼쪽에서 오른쪽으로 놓아요. Inline은 기본으로 줄바꿈되고 세로 가운데 정렬이에요.
85
+
86
+ ```tsx
87
+ import { Avatar, Badge, Button, Grid, Inline, Stack, Text } from '@iamfiro/design'
88
+
89
+ export default function Example() {
90
+ return (
91
+ <Grid columns={2} gap={10} style={{ width: 600 }}>
92
+ <Stack gap={3} align="start">
93
+ <Text variant="overline" tone="tertiary">
94
+ Stack
95
+ </Text>
96
+ <Stack gap={1}>
97
+ <Text variant="heading-sm">주간 리포트</Text>
98
+ <Text variant="body-sm" tone="secondary">
99
+ 매주 월요일 오전 9시에 자동으로 보내요.
100
+ </Text>
101
+ </Stack>
102
+ <Button size="sm">미리 보기</Button>
103
+ </Stack>
104
+ <Stack gap={3} align="start">
105
+ <Text variant="overline" tone="tertiary">
106
+ Inline
107
+ </Text>
108
+ <Inline gap={2}>
109
+ <Avatar name="김민지" />
110
+ <Text variant="label-md">김민지</Text>
111
+ <Badge tone="success" dot>
112
+ 온라인
113
+ </Badge>
114
+ </Inline>
115
+ <Inline gap={2}>
116
+ <Button variant="primary" size="sm">
117
+ 초대
118
+ </Button>
119
+ <Button variant="ghost" size="sm">
120
+ 나중에
121
+ </Button>
122
+ </Inline>
123
+ </Stack>
124
+ </Grid>
125
+ )
126
+ }
127
+ ```
128
+
129
+ ### 설정 폼
130
+
131
+ Stack으로 필드를 쌓고 Inline으로 나란한 필드와 버튼 줄을 만들어요. justify="end"로 버튼을 오른쪽에 붙여요.
132
+
133
+ ```tsx
134
+ import { Button, Field, Grid, Inline, Input, Stack, Text } from '@iamfiro/design'
135
+
136
+ export default function Example() {
137
+ return (
138
+ <Stack as="form" gap={6} style={{ width: 460 }} onSubmit={(e) => e.preventDefault()}>
139
+ <Stack gap={1}>
140
+ <Text variant="heading-sm">프로필</Text>
141
+ <Text variant="body-sm" tone="secondary">
142
+ 팀원들에게 보이는 이름과 연락처예요.
143
+ </Text>
144
+ </Stack>
145
+ <Stack gap={4}>
146
+ <Grid columns={2} gap={3}>
147
+ <Field label="성" htmlFor="profile-last">
148
+ <Input id="profile-last" defaultValue="김" />
149
+ </Field>
150
+ <Field label="이름" htmlFor="profile-first">
151
+ <Input id="profile-first" defaultValue="민지" />
152
+ </Field>
153
+ </Grid>
154
+ <Field label="이메일" hint="로그인과 알림에 쓰여요." htmlFor="profile-email">
155
+ <Input id="profile-email" type="email" defaultValue="minji@lumen.app" />
156
+ </Field>
157
+ <Field label="전화번호" htmlFor="profile-phone">
158
+ <Inline gap={2} wrap={false}>
159
+ <Input id="profile-phone" type="tel" defaultValue="010-1234-5678" wrapperStyle={{ flex: 1 }} />
160
+ <Button>인증하기</Button>
161
+ </Inline>
162
+ </Field>
163
+ </Stack>
164
+ <Inline gap={2} justify="end">
165
+ <Button variant="ghost">취소</Button>
166
+ <Button variant="primary" type="submit">
167
+ 저장
168
+ </Button>
169
+ </Inline>
170
+ </Stack>
171
+ )
172
+ }
173
+ ```
174
+
175
+ ### Grid
176
+
177
+ columns로 열 수를 고정하거나, minItemWidth로 폭에 들어가는 만큼 열을 만들어요(반응형).
178
+
179
+ ```tsx
180
+ import { BarChart3, Bell, CreditCard, FolderOpen, Shield, Users } from 'lucide-react'
181
+ import { Grid, Stack, Text, Card, CardHeader } from '@iamfiro/design'
182
+
183
+ const STATS = [
184
+ { label: '이번 달 방문자', value: '12,480' },
185
+ { label: '신규 가입', value: '326' },
186
+ { label: '전환율', value: '4.2%' },
187
+ ]
188
+
189
+ const SECTIONS = [
190
+ { icon: <Users />, title: '멤버', description: '초대와 역할 관리' },
191
+ { icon: <CreditCard />, title: '결제', description: '플랜과 결제 수단' },
192
+ { icon: <Bell />, title: '알림', description: '이메일 · 푸시 설정' },
193
+ { icon: <Shield />, title: '보안', description: '2단계 인증, 세션' },
194
+ { icon: <FolderOpen />, title: '프로젝트', description: '보관과 이전' },
195
+ { icon: <BarChart3 />, title: '사용량', description: '이번 달 사용 내역' },
196
+ ]
197
+
198
+ export default function Example() {
199
+ return (
200
+ <Stack gap={8} style={{ width: '100%', maxWidth: 720 }}>
201
+ <Grid columns={3} gap={3}>
202
+ {STATS.map((s) => (
203
+ <Card key={s.label} padding="sm">
204
+ <Stack gap={1}>
205
+ <Text variant="caption" tone="tertiary">
206
+ {s.label}
207
+ </Text>
208
+ <Text variant="number-lg">{s.value}</Text>
209
+ </Stack>
210
+ </Card>
211
+ ))}
212
+ </Grid>
213
+ <Grid minItemWidth={200} gap={3}>
214
+ {SECTIONS.map((s) => (
215
+ <Card key={s.title} as="button" type="button" interactive padding="sm">
216
+ <CardHeader icon={s.icon} title={s.title} description={s.description} />
217
+ </Card>
218
+ ))}
219
+ </Grid>
220
+ </Stack>
221
+ )
222
+ }
223
+ ```
224
+
225
+ ### Grid stagger
226
+
227
+ 필터를 바꾸면 칸이 줄 단위로 아래에서 차례로 올라와요. Grid의 key를 필터 값으로 바꿔 다시 재생해요.
228
+
229
+ ```tsx
230
+ import { useState } from 'react'
231
+ import { Grid, Stack, Card, CardHeader, FilterChip, FilterChipGroup } from '@iamfiro/design'
232
+
233
+ type Team = 'all' | 'design' | 'dev'
234
+
235
+ const PEOPLE: { name: string; role: string; team: Exclude<Team, 'all'> }[] = [
236
+ { name: '김민지', role: '프로덕트 디자이너', team: 'design' },
237
+ { name: '이도현', role: '프론트엔드 개발자', team: 'dev' },
238
+ { name: '박서연', role: 'UX 리서처', team: 'design' },
239
+ { name: '최준호', role: '백엔드 개발자', team: 'dev' },
240
+ { name: '정하은', role: '브랜드 디자이너', team: 'design' },
241
+ { name: '한지우', role: '모바일 개발자', team: 'dev' },
242
+ ]
243
+
244
+ export default function Example() {
245
+ const [team, setTeam] = useState<Team>('all')
246
+ const shown = team === 'all' ? PEOPLE : PEOPLE.filter((p) => p.team === team)
247
+ return (
248
+ <Stack gap={4} style={{ width: '100%', maxWidth: 620 }}>
249
+ <FilterChipGroup type="single" required value={team} onValueChange={(v) => setTeam((v as Team | null) ?? 'all')} aria-label="팀">
250
+ <FilterChip value="all">전체</FilterChip>
251
+ <FilterChip value="design">디자인</FilterChip>
252
+ <FilterChip value="dev">개발</FilterChip>
253
+ </FilterChipGroup>
254
+ <Grid key={team} stagger minItemWidth={180} gap={3}>
255
+ {shown.map((p) => (
256
+ <Card key={p.name} padding="sm">
257
+ <CardHeader title={p.name} description={p.role} />
258
+ </Card>
259
+ ))}
260
+ </Grid>
261
+ </Stack>
262
+ )
263
+ }
264
+ ```
265
+
266
+ ### Separator
267
+
268
+ 가로선, Inline 안의 세로선, 가운데 글자가 있는 구분선. spacing으로 선 양쪽 여백을 줘요.
269
+
270
+ ```tsx
271
+ import { Mail } from 'lucide-react'
272
+ import { Button, Field, Inline, Input, Separator, Stack, Text } from '@iamfiro/design'
273
+
274
+ export default function Example() {
275
+ return (
276
+ <Stack gap={10} style={{ width: 380 }}>
277
+ <Stack gap={0}>
278
+ <Text variant="label-md">알림 요약</Text>
279
+ <Separator spacing={3} />
280
+ <Inline gap={3}>
281
+ <Text variant="body-sm" tone="secondary">
282
+ 읽지 않음 12
283
+ </Text>
284
+ <Separator orientation="vertical" />
285
+ <Text variant="body-sm" tone="secondary">
286
+ 멘션 3
287
+ </Text>
288
+ <Separator orientation="vertical" />
289
+ <Text variant="body-sm" tone="secondary">
290
+ 2분 전 업데이트
291
+ </Text>
292
+ </Inline>
293
+ </Stack>
294
+ <Stack gap={4}>
295
+ <Button block>Google로 계속하기</Button>
296
+ <Separator label="또는" />
297
+ <Field label="이메일" htmlFor="sep-email">
298
+ <Input id="sep-email" type="email" placeholder="name@company.com" />
299
+ </Field>
300
+ <Button variant="primary" block icon={<Mail />}>
301
+ 이메일로 계속하기
302
+ </Button>
303
+ </Stack>
304
+ </Stack>
305
+ )
306
+ }
307
+ ```
308
+
309
+ ### Box
310
+
311
+ 여백 · 모서리 · 배경만 주는 래퍼. 실제 콘텐츠 묶음이라면 Card를 쓰세요.
312
+
313
+ ```tsx
314
+ import { Box, Grid, Inline, Stack, Text } from '@iamfiro/design'
315
+
316
+ export default function Example() {
317
+ return (
318
+ <Stack gap={6} style={{ width: 600 }}>
319
+ <Grid columns={2} gap={4}>
320
+ <Box padding={4} radius="lg" background="subtle">
321
+ <Stack gap={1}>
322
+ <Text variant="label-md">background="subtle"</Text>
323
+ <Text variant="body-sm" tone="secondary">
324
+ 옅은 회색 채움. 보조 정보나 빈 자리 표시에.
325
+ </Text>
326
+ </Stack>
327
+ </Box>
328
+ <Box padding={4} radius="lg" elevated>
329
+ <Stack gap={1}>
330
+ <Text variant="label-md">elevated</Text>
331
+ <Text variant="body-sm" tone="secondary">
332
+ 테두리 대신 옅은 그림자로 띄워요.
333
+ </Text>
334
+ </Stack>
335
+ </Box>
336
+ </Grid>
337
+ <Inline gap={2}>
338
+ <Box paddingX={3} paddingY={1} radius="full" background="subtle">
339
+ <Text variant="label-sm">디자인</Text>
340
+ </Box>
341
+ <Box paddingX={3} paddingY={1} radius="full" background="subtle">
342
+ <Text variant="label-sm">프론트엔드</Text>
343
+ </Box>
344
+ <Box paddingX={3} paddingY={1} radius="full" background="subtle">
345
+ <Text variant="label-sm">리서치</Text>
346
+ </Box>
347
+ </Inline>
348
+ </Stack>
349
+ )
350
+ }
351
+ ```