@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,58 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { type IconTileTone, type Space, type TextTone } from '../../primitives';
3
+ import './Stat.css';
4
+ export type StatSize = 'sm' | 'md' | 'lg';
5
+ export type StatLayout = 'stacked' | 'inline';
6
+ export interface StatProps {
7
+ /** What is measured: "소요 시간", "오류". */
8
+ label: ReactNode;
9
+ /** The number, already formatted ("1:52", "₩85,000"). */
10
+ value: ReactNode;
11
+ /** The whole the value is part of; shown muted after a slash ("/ 2:55"). */
12
+ total?: ReactNode;
13
+ /** Unit after the value, muted ("초", "건"). */
14
+ unit?: ReactNode;
15
+ /** Usually a `<Delta>`; sits after the value. */
16
+ delta?: ReactNode;
17
+ /** Small gray line under the value (stacked only). */
18
+ caption?: ReactNode;
19
+ /** stacked: overline label above a large number (metric strips, KPI cards) · inline: one line, "시간 1:52 / 2:55". */
20
+ layout?: StatLayout;
21
+ size?: StatSize;
22
+ /** Color of the value, e.g. danger when there are errors. */
23
+ tone?: TextTone;
24
+ /** A soft gray panel (radius 12, compact padding) around the stat — standalone count tiles ("완료 137"). */
25
+ tile?: boolean;
26
+ /** Small glyph before the label, set in a tone-colored IconTile square. */
27
+ icon?: ReactNode;
28
+ /** Color of the icon square. */
29
+ iconTone?: IconTileTone;
30
+ className?: string;
31
+ style?: CSSProperties;
32
+ }
33
+ /**
34
+ * One number with its label: a muted label, a bold value, an optional muted "/ total" or unit and a
35
+ * delta slot. Assembled from Stack / Inline / Text only.
36
+ */
37
+ export declare function Stat(props: StatProps): import("react").JSX.Element;
38
+ export interface StatGroupProps {
39
+ /** Stats (or any cells), left to right. */
40
+ children: ReactNode;
41
+ /** Space between cells; the divider sits in the middle of it. */
42
+ gap?: Space;
43
+ /** Cells never get narrower than this (px); when they don't fit, the row wraps. */
44
+ minItemWidth?: number;
45
+ /** Cells share the width equally (default) or keep their own width. */
46
+ fill?: boolean;
47
+ /** Faint vertical lines between cells. Never drawn at the start of a line, also after wrapping. */
48
+ dividers?: boolean;
49
+ 'aria-label'?: string;
50
+ className?: string;
51
+ style?: CSSProperties;
52
+ }
53
+ /**
54
+ * A row of Stats with faint dividers (Separator) between them that wraps on narrow screens.
55
+ * Each cell carries the divider on its left edge, inside the gap; the row clips its own left edge, so
56
+ * the divider of whichever cell starts a line — first cell or after a wrap — is cut away.
57
+ */
58
+ export declare function StatGroup({ children, gap, minItemWidth, fill, dividers, 'aria-label': ariaLabel, className, style }: StatGroupProps): import("react").JSX.Element;
@@ -0,0 +1,61 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { type StatusIconStatus } from '../../primitives';
3
+ import './StepList.css';
4
+ export type StepListStatus = StatusIconStatus;
5
+ export type StepListSize = 'sm' | 'md' | 'lg';
6
+ export type StepListDensity = 'compact' | 'default' | 'comfortable';
7
+ /**
8
+ * status: StatusIcon (dashed circle while pending) · number: every step shows its number, the
9
+ * outline taking the status colour · status-number: StatusIcon, but pending steps show their number.
10
+ */
11
+ export type StepListMarker = 'status' | 'number' | 'status-number';
12
+ /** default: one gray line · progress: segments below finished steps fill in blue, top to bottom · none */
13
+ export type StepListConnector = 'default' | 'progress' | 'none';
14
+ export interface StepListStep {
15
+ id: string;
16
+ status: StepListStatus;
17
+ title: ReactNode;
18
+ /** Gray text under the title. Inline code chips (`Text variant="code"`) fit here. */
19
+ description?: ReactNode;
20
+ /** Trailing text on the title line, e.g. a duration ("1.9초"). */
21
+ meta?: ReactNode;
22
+ /** Anything under the description: an inline Collapsible, a warning line, a FileChip. */
23
+ children?: ReactNode;
24
+ /** This step's marker: one of the marker modes, or your own node (an IconTile, an Avatar). */
25
+ marker?: StepListMarker | ReactNode;
26
+ /** The number in numbered markers. Defaults to the position (from `start`). */
27
+ number?: number | string;
28
+ /** With `status="active"`: 0–100 fills the blue ring instead of spinning. */
29
+ progress?: number;
30
+ }
31
+ export interface StepListProps {
32
+ /** The steps as data. Or compose `StepListItem` children instead. */
33
+ steps?: StepListStep[];
34
+ children?: ReactNode;
35
+ /** Marker for every step (a step's own `marker` wins). */
36
+ marker?: StepListMarker;
37
+ connector?: StepListConnector;
38
+ /** sm 16px · md 18px · lg 22px markers, with matching title and description type. */
39
+ size?: StepListSize;
40
+ /** Space between steps: compact 12 · default 20 · comfortable 32. */
41
+ density?: StepListDensity;
42
+ /** First number for numbered markers. */
43
+ start?: number;
44
+ 'aria-label'?: string;
45
+ className?: string;
46
+ style?: CSSProperties;
47
+ }
48
+ export interface StepListItemProps extends Omit<StepListStep, 'id'> {
49
+ className?: string;
50
+ style?: CSSProperties;
51
+ }
52
+ /**
53
+ * A read-only vertical timeline of steps: a status marker per step joined by a thin connector,
54
+ * the title with a trailing meta (duration), a gray description and room for nested content.
55
+ * Status changes cross-fade the marker (StatusIcon) and, with `connector="progress"`, fill the
56
+ * line down to the next step. Renders an `ol`; the active step gets `aria-current="step"`.
57
+ * For a checklist the user ticks off, use ProgressTracker.
58
+ */
59
+ export declare function StepList({ steps, children, marker, connector, size, density, start, 'aria-label': ariaLabel, className, style, }: StepListProps): import("react").JSX.Element;
60
+ /** One step of a StepList, for composing by hand instead of passing `steps`. */
61
+ export declare function StepListItem({ status, title, description, meta, children, marker: markerProp, number: numberProp, progress, className, style, }: StepListItemProps): import("react").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import './Table.css';
3
+ export interface TableColumn<Row> {
4
+ key: string;
5
+ header: ReactNode;
6
+ /** Node before the header text (a ColorDot for a series column). */
7
+ headerLeading?: ReactNode;
8
+ /** Cell content; defaults to `row[key]`. */
9
+ render?: (row: Row, index: number) => ReactNode;
10
+ /** Node before the cell content (an icon in the first column). */
11
+ leading?: (row: Row, index: number) => ReactNode;
12
+ width?: number | string;
13
+ /** Defaults to `end` for numeric columns, `start` otherwise. */
14
+ align?: 'start' | 'center' | 'end';
15
+ /** Tabular figures for number columns (right-aligned unless `align` says otherwise). */
16
+ numeric?: boolean;
17
+ }
18
+ export interface TableProps<Row> {
19
+ columns: TableColumn<Row>[];
20
+ rows: Row[];
21
+ /** Stable key per row; defaults to the index. Also what `selectedKey` matches. */
22
+ rowKey?: (row: Row, index: number) => string | number;
23
+ density?: 'compact' | 'default';
24
+ /** Alternate row fills (instead of lines between rows). */
25
+ striped?: boolean;
26
+ /** Header look: small gray label, or uppercase overline. */
27
+ headerVariant?: 'label' | 'overline';
28
+ /** Key of the highlighted row (soft gray fill). `null` = none. */
29
+ selectedKey?: string | number | null;
30
+ /** Rows become clickable (hover fill, Enter/Space from the keyboard). */
31
+ onRowClick?: (row: Row, index: number) => void;
32
+ /** Shown when there are no rows (e.g. an <EmptyState>). */
33
+ empty?: ReactNode;
34
+ caption?: ReactNode;
35
+ className?: string;
36
+ style?: CSSProperties;
37
+ }
38
+ /** A data table without grid lines: header in small gray type, rows separated by soft fills. */
39
+ export declare function Table<Row extends object>({ columns, rows, rowKey, density, striped, headerVariant, selectedKey, onRowClick, empty, caption, className, style, }: TableProps<Row>): import("react").JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { type ReactNode } from 'react';
2
+ import './Tabs.css';
3
+ export interface TabsProps {
4
+ value?: string;
5
+ /** Defaults to the first enabled tab. */
6
+ defaultValue?: string;
7
+ onValueChange?: (value: string) => void;
8
+ /** auto: arrow keys select as they move · manual: arrows move focus, Enter/Space select (for heavy panels). */
9
+ activation?: 'auto' | 'manual';
10
+ children: ReactNode;
11
+ className?: string;
12
+ }
13
+ /** Tabs that switch between panels. Compose TabList + Tab + TabPanel. */
14
+ export declare function Tabs({ value: valueProp, defaultValue, onValueChange, activation, children, className }: TabsProps): import("react").JSX.Element;
15
+ export declare namespace Tabs {
16
+ var List: typeof TabList;
17
+ var Tab: typeof import("./Tabs").Tab;
18
+ var Panel: typeof TabPanel;
19
+ }
20
+ export interface TabListProps {
21
+ children: ReactNode;
22
+ /** underline: a line under the selected tab · pill: a white chip on a gray track. */
23
+ variant?: 'underline' | 'pill';
24
+ size?: 'sm' | 'md';
25
+ /** Stretch tabs to fill the row. */
26
+ fitted?: boolean;
27
+ 'aria-label'?: string;
28
+ className?: string;
29
+ }
30
+ export declare function TabList({ children, variant, size, fitted, 'aria-label': ariaLabel, className }: TabListProps): import("react").JSX.Element;
31
+ export interface TabProps {
32
+ value: string;
33
+ children: ReactNode;
34
+ icon?: ReactNode;
35
+ /** A small number after the label. */
36
+ count?: number;
37
+ disabled?: boolean;
38
+ }
39
+ export declare function Tab({ value, children, icon, count, disabled }: TabProps): import("react").JSX.Element;
40
+ export interface TabPanelProps {
41
+ value: string;
42
+ children: ReactNode;
43
+ /** Keep the panel in the DOM while hidden (preserves form state / scroll). */
44
+ keepMounted?: boolean;
45
+ className?: string;
46
+ }
47
+ export declare function TabPanel({ value, children, keepMounted, className }: TabPanelProps): import("react").JSX.Element | null;
@@ -0,0 +1,46 @@
1
+ import { type ReactNode } from 'react';
2
+ import './TagInput.css';
3
+ export type TagRejectReason = 'duplicate' | 'invalid' | 'max';
4
+ export interface TagInputProps {
5
+ value?: string[];
6
+ defaultValue?: string[];
7
+ onValueChange?: (tags: string[]) => void;
8
+ /** Keys that turn the typed text into a tag: 'Enter', 'Tab', or single characters like ',' ';' ' '.
9
+ * Pasted text is split on the characters (and on line breaks / tabs when 'Enter' / 'Tab' are listed). */
10
+ delimiters?: string[];
11
+ /** true = ok · false or a message = not ok. Rejected (field shakes) unless `allowInvalid`. */
12
+ validate?: (tag: string, tags: string[]) => boolean | string;
13
+ /** Keep tags that fail `validate`, shown in the danger tone (e.g. a mistyped e-mail recipient). */
14
+ allowInvalid?: boolean;
15
+ /** Duplicates (ignoring case and surrounding spaces) are rejected and the existing tag shakes. */
16
+ allowDuplicates?: boolean;
17
+ /** Normalises text before it becomes a tag (e.g. strip '#', lowercase). Trimmed first. */
18
+ transform?: (text: string) => string;
19
+ /** Most tags allowed; further adds shake the field. */
20
+ max?: number;
21
+ /** Optional list shown under the field while typing. ↓ picks one; Enter alone still adds what you typed. */
22
+ suggestions?: string[];
23
+ /** Called for every rejected tag, with the `validate` message when there is one. */
24
+ onReject?: (text: string, reason: TagRejectReason, message?: string) => void;
25
+ /** Double-click (or Enter on a highlighted tag) edits it in place (default on). */
26
+ editable?: boolean;
27
+ placeholder?: string;
28
+ size?: 'sm' | 'md' | 'lg';
29
+ disabled?: boolean;
30
+ invalid?: boolean;
31
+ leading?: ReactNode;
32
+ /** Submits each tag as a separate `name` field. */
33
+ name?: string;
34
+ id?: string;
35
+ className?: string;
36
+ maxHeight?: number;
37
+ 'aria-label'?: string;
38
+ 'aria-labelledby'?: string;
39
+ 'aria-describedby'?: string;
40
+ }
41
+ /**
42
+ * Free-text tags inside one input field. Enter / comma / Tab add, pasting splits, Backspace on an
43
+ * empty field first highlights the last tag and only the second press deletes it. ← → walk the tags,
44
+ * a double-click edits one. Keys pressed while the IME is composing (한글) are left alone.
45
+ */
46
+ export declare function TagInput({ value: valueProp, defaultValue, onValueChange, delimiters, validate, allowInvalid, allowDuplicates, transform, max, suggestions, onReject, editable, placeholder, size, disabled, invalid, leading, name, id, className, maxHeight, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, 'aria-describedby': ariaDescribedby, }: TagInputProps): import("react").JSX.Element;
@@ -0,0 +1,43 @@
1
+ import '../Select/Select.css';
2
+ import '../Calendar/DatePicker.css';
3
+ import './TimePicker.css';
4
+ export interface TimePickerProps {
5
+ /** 'HH:mm' (24h), or null when empty. */
6
+ value?: string | null;
7
+ defaultValue?: string | null;
8
+ onValueChange?: (time: string | null) => void;
9
+ /** 12 = "오후 2:30" with an 오전·오후 column · 24 = "14:30". */
10
+ hourCycle?: 12 | 24;
11
+ /** Minutes between choices: the minute column (default 5) or the list rows (default 30). */
12
+ minuteStep?: number;
13
+ /** Earliest / latest selectable time, 'HH:mm'. */
14
+ min?: string;
15
+ max?: string;
16
+ /** Extra times to block ('HH:mm' → true = blocked), e.g. lunch or booked slots. */
17
+ isTimeDisabled?: (time: string) => boolean;
18
+ /** columns: scrollable 시 · 분 (· 오전/오후) columns · list: one row per slot, for scheduling. */
19
+ mode?: 'columns' | 'list';
20
+ /** List mode: shows each row's length from this time ("1시간 30분"), for an end-time field. */
21
+ durationFrom?: string;
22
+ /** How the time is written in the field when it isn't being edited. */
23
+ formatValue?: (time: string) => string;
24
+ placeholder?: string;
25
+ /** Show an × to clear the value. */
26
+ clearable?: boolean;
27
+ size?: 'sm' | 'md' | 'lg';
28
+ disabled?: boolean;
29
+ invalid?: boolean;
30
+ align?: 'start' | 'end';
31
+ /** Submits the 'HH:mm' value under this name. */
32
+ name?: string;
33
+ id?: string;
34
+ className?: string;
35
+ maxHeight?: number;
36
+ 'aria-label'?: string;
37
+ }
38
+ /**
39
+ * A time field you can type into ("14:30", "오후 2시 반", "930") or pick from a popover.
40
+ * Columns mode: ↑↓ change the focused column, ←→ / Tab move between columns, Enter confirms,
41
+ * Esc puts the old time back. List mode: ↑↓ walk the slots while you keep typing, Enter picks.
42
+ */
43
+ export declare function TimePicker({ value: valueProp, defaultValue, onValueChange, hourCycle, mode, minuteStep, min, max, isTimeDisabled, durationFrom, formatValue, placeholder, clearable, size, disabled, invalid, align, name, id, className, maxHeight, 'aria-label': ariaLabel, }: TimePickerProps): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ /** Small time-of-day helpers. Values are 'HH:mm' strings (24h, zero padded). */
2
+ /** 'HH:mm' → minutes since midnight. */
3
+ export declare const timeToMinutes: (t: string) => number;
4
+ /** Minutes since midnight → 'HH:mm'. */
5
+ export declare const minutesToTime: (n: number) => string;
6
+ export declare const isTimeString: (t: string) => boolean;
7
+ /** 'HH:mm' → "오후 2:30" (12h) or "14:30" (24h). */
8
+ export declare function formatTime(t: string, hourCycle?: 12 | 24): string;
9
+ /** 90 → "1시간 30분", 30 → "30분", 120 → "2시간". */
10
+ export declare function formatDuration(minutes: number): string;
11
+ /**
12
+ * Reads what people type for a time: "14:30", "1430", "930", "2:30pm", "오후 2:30", "오후 2시 30분",
13
+ * "2시 반", "14시", "정오", "자정". Without 오전/오후 the hour is read as 24h. Returns 'HH:mm' or null.
14
+ */
15
+ export declare function parseTimeInput(text: string): string | null;
@@ -0,0 +1,154 @@
1
+ import { type CSSProperties, type MouseEvent, type ReactElement, type ReactNode, type Ref } from 'react';
2
+ import './Timeline.css';
3
+ export type TimelineTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
4
+ export interface TimelineMarker {
5
+ /** Where the vertical line sits, in domain units. */
6
+ value: number;
7
+ tone?: TimelineTone;
8
+ /** dashed: a target or plan · solid: an estimate or an event. */
9
+ line?: 'solid' | 'dashed';
10
+ /** A chip under the rows, e.g. "계획 2:55". */
11
+ label?: ReactNode;
12
+ /** Which way the chip grows from the line. `left` / `right` keep neighbouring chips apart. */
13
+ labelSide?: 'center' | 'left' | 'right';
14
+ /** The other edge of a shaded band between this value and `band` (e.g. the expected overrun). */
15
+ band?: number;
16
+ }
17
+ /** A dependency: a dashed curve from the end of bar `from` to the start of bar `to` (TimelineBar `id`s). */
18
+ export interface TimelineLink {
19
+ from: string;
20
+ to: string;
21
+ tone?: TimelineTone;
22
+ }
23
+ export type TimelineDensity = 'compact' | 'default' | 'comfortable';
24
+ export interface TimelineProps {
25
+ /** Start of the domain (seconds, minutes, any number). Negative values make a relative axis (−25m … 0). */
26
+ min?: number;
27
+ /** End of the domain. Leave room after the longest bar for its trailing label. */
28
+ max: number;
29
+ /** Distance between ticks. Defaults to a round step that gives about six ticks. */
30
+ step?: number;
31
+ /** Exact tick values instead of `step`. */
32
+ ticks?: number[];
33
+ /** Ruler and tooltip text for a value: `formatClock` for m:ss, `formatOffset('m')` for −25m, `(v) => \`${v}s\`` for seconds. */
34
+ formatTick?: (value: number) => string;
35
+ /** Faint vertical lines under every tick. */
36
+ grid?: boolean;
37
+ /** A "now" line with a dot on the ruler, running through every row. */
38
+ now?: number;
39
+ /** A small accent chip on the ruler at `now` ("지금") instead of the dot. The tick at `now` gives way to it. */
40
+ nowLabel?: ReactNode;
41
+ /** Draw the now line through the rows. Turn off to keep only the ruler chip. */
42
+ nowLine?: boolean;
43
+ /** Vertical marker lines with optional bands and bottom chips. */
44
+ markers?: TimelineMarker[];
45
+ /** Dashed curved connectors between bars on different rows, keyed by TimelineBar `id`. */
46
+ links?: TimelineLink[];
47
+ /** Width of the label column on the left (px). 0 = no label column. */
48
+ labelWidth?: number;
49
+ /** Heading above the label column, level with the ruler. */
50
+ labelHeader?: ReactNode;
51
+ /**
52
+ * Something that fills the whole label column instead of per-row labels — usually a TreeView with the
53
+ * same row height (`rowHeight={TREE_ROW_HEIGHT.default}`, `animated={false}`). Rows still draw their
54
+ * selected background behind it.
55
+ */
56
+ aside?: ReactNode;
57
+ /** Row height: compact 28px · default 36px · comfortable 56px (lanes with two-line labels). */
58
+ density?: TimelineDensity;
59
+ /** Overrides the density's row height (px), e.g. to match TREE_ROW_HEIGHT. */
60
+ rowHeight?: number;
61
+ 'aria-label'?: string;
62
+ className?: string;
63
+ style?: CSSProperties;
64
+ /** TimelineRow elements. */
65
+ children?: ReactNode;
66
+ }
67
+ /**
68
+ * A time axis: maps a numeric domain to x-positions, draws a tick ruler with faint gridlines,
69
+ * and lays out TimelineRows (a label column plus a track). A `now` line and vertical `markers`
70
+ * run through every row. Everything is positioned in percentages, so it resizes without measuring.
71
+ */
72
+ export declare function Timeline({ min, max, step, ticks, formatTick, grid, now, nowLabel, nowLine, markers, links, labelWidth, labelHeader, aside, density, rowHeight, 'aria-label': ariaLabel, className, style, children, }: TimelineProps): import("react").JSX.Element;
73
+ export interface TimelineRowProps {
74
+ /** The left column: a step name, or any content (icon + text, a status mark). */
75
+ label?: ReactNode;
76
+ /** A tile before the name: `IconTile` or `Avatar`. Turns the label into the two-line layout. */
77
+ leading?: ReactNode;
78
+ /** Muted second line under the name; truncates. */
79
+ description?: ReactNode;
80
+ /** Inline status after the name, e.g. `<Badge size="sm">대기</Badge>`. */
81
+ badge?: ReactNode;
82
+ /** Hidden children count at the right of the label: a number shows "+5" in a small grey Badge. */
83
+ count?: number | ReactNode;
84
+ /** Indent of the label for nested rows (one step = 16px), e.g. child spans in a waterfall. */
85
+ depth?: number;
86
+ /** Future or skipped rows: grey and faded. */
87
+ faded?: boolean;
88
+ /** A soft accent background across the whole row, label column included. */
89
+ selected?: boolean;
90
+ /** Makes the row selectable: click anywhere on it (bars included), or Enter / Space when focused. */
91
+ onSelect?: () => void;
92
+ /** TimelineBar elements, drawn over each other in the track. */
93
+ children?: ReactNode;
94
+ className?: string;
95
+ style?: CSSProperties;
96
+ }
97
+ /** One row: the label cell on the left, the track (bars) on the right. */
98
+ export declare function TimelineRow({ label, leading, description, badge, count, depth, faded, selected, onSelect, children, className, style }: TimelineRowProps): import("react").JSX.Element;
99
+ export type TimelineBarVariant = 'fill' | 'outline' | 'pending';
100
+ export type TimelineBarTone = 'neutral' | 'accent' | 'purple' | 'teal' | 'success' | 'warning' | 'danger';
101
+ /** One consecutive coloured part of a segmented bar, in domain units. */
102
+ export interface TimelineBarSegment {
103
+ start: number;
104
+ end: number;
105
+ tone?: TimelineBarTone;
106
+ }
107
+ export interface TimelineBarProps {
108
+ start: number;
109
+ end: number;
110
+ /** Names the bar for Timeline `links`. */
111
+ id?: string;
112
+ /** fill: a soft tinted bar (actual) · outline: a dashed frame (planned) · pending: a grey placeholder (not started). */
113
+ variant?: TimelineBarVariant;
114
+ /** Defaults to neutral for `outline`, accent otherwise. */
115
+ tone?: TimelineBarTone;
116
+ /** Bar thickness: sm 10px · md 16px · lg 20px · xl 32px (the default for bars with content). An outline frames a fill of the same size. */
117
+ size?: 'sm' | 'md' | 'lg' | 'xl';
118
+ /** Content inside the bar — a short text that truncates. Makes a large rounded bar with ink in the tone colour. */
119
+ children?: ReactNode;
120
+ /** Before the text inside the bar, usually an `IconStack`. */
121
+ leading?: ReactNode;
122
+ /** Trailing slot inside the bar, e.g. `<Badge as="button">확인 필요</Badge>` (drawn white). Stays clickable. */
123
+ action?: ReactNode;
124
+ /** Consecutive coloured parts inside the bar; pair with `variant="outline"` for a framed capsule. */
125
+ segments?: TimelineBarSegment[];
126
+ /** The part of the bar after this value is drawn in `overTone` (time past the plan). */
127
+ limit?: number;
128
+ overTone?: TimelineBarTone;
129
+ /** Still in progress: a shimmer sweeps through the bar and its leading edge glows. Content bars fade in from the left to a solid edge. */
130
+ running?: boolean;
131
+ /** Text after the bar: "0:52", "6.9s · 128KB", a Spinner, a Badge. */
132
+ label?: ReactNode;
133
+ /** Where the label starts (domain units). Defaults to `end`; pass the plan end so it clears the plan frame. */
134
+ labelAt?: number;
135
+ /** Hover / focus bubble (the shared Tooltip). Makes the bar focusable. */
136
+ tooltip?: ReactNode;
137
+ /** Makes the bar a button. The click also bubbles to a selectable row. */
138
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
139
+ /**
140
+ * Wraps the bar's focusable target, e.g. `(target) => <Popover trigger={target}>…</Popover>`.
141
+ * The wrapper is stretched over the bar, so the popover anchors to it. Makes the bar a button.
142
+ */
143
+ renderTarget?: (target: ReactElement) => ReactNode;
144
+ /** The bar's root element (positioned over the track), for your own floating UI. */
145
+ ref?: Ref<HTMLSpanElement>;
146
+ /** Read by screen readers. Defaults to the text content and "start – end" in the ruler format. */
147
+ 'aria-label'?: string;
148
+ className?: string;
149
+ }
150
+ /**
151
+ * A range on the track. Position and width slide when values change, and the bar
152
+ * wipes in from its start on mount. Several bars in one row stack (plan frame + actual fill).
153
+ */
154
+ export declare function TimelineBar({ start, end, variant, tone, size, children, leading, action, segments, limit, overTone, running, label, labelAt, tooltip, onClick, renderTarget, ref, 'aria-label': ariaLabel, className, }: TimelineBarProps): import("react").JSX.Element;
@@ -0,0 +1,22 @@
1
+ export interface TimelineScale {
2
+ min: number;
3
+ max: number;
4
+ /** A value as a 0–100 position along the track (clamped). */
5
+ pct: (value: number) => number;
6
+ /** The ruler's tick format, reused for tooltips and screen-reader text. */
7
+ formatValue: (value: number) => string;
8
+ }
9
+ export declare const TimelineScaleContext: import("react").Context<TimelineScale | null>;
10
+ /** The scale of the nearest Timeline: map your own values to track positions (custom marks). */
11
+ export declare function useTimelineScale(): TimelineScale;
12
+ /** Seconds as a clock: 52 → "0:52", 175 → "2:55", 3725 → "1:02:05". */
13
+ export declare function formatClock(seconds: number): string;
14
+ /** A round tick step that gives about `count` ticks over `span` (1 · 2 · 5 × 10ⁿ). */
15
+ export declare function niceStep(span: number, count: number): number;
16
+ /** Tick values from the first multiple of `step` at or after `min` up to `max`. */
17
+ export declare function buildTicks(min: number, max: number, step: number): number[];
18
+ /**
19
+ * Signed offsets from a reference point, for relative axes: `formatOffset('m')` gives
20
+ * −25 → "−25m", 5 → "+5m", 0 → `zero` ("0" by default). Uses a real minus sign.
21
+ */
22
+ export declare function formatOffset(unit?: string, zero?: string): (value: number) => string;
@@ -0,0 +1,19 @@
1
+ import './Toast.css';
2
+ export type ToasterPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
3
+ export interface ToasterProps {
4
+ position?: ToasterPosition;
5
+ /** Toasts kept visible in the stack; older ones fade out behind. */
6
+ visibleToasts?: number;
7
+ /** Default auto-dismiss time in ms. */
8
+ duration?: number;
9
+ /** Space between toasts when the stack is spread out. */
10
+ gap?: number;
11
+ /** Always show the stack spread out instead of only on hover. */
12
+ expand?: boolean;
13
+ className?: string;
14
+ }
15
+ /**
16
+ * Renders the toasts from `toast()`. Mount once near the root.
17
+ * Collapsed, newer toasts cover older ones that peek out behind; hover spreads them out.
18
+ */
19
+ export declare function Toaster({ position, visibleToasts, duration, gap, expand, className }: ToasterProps): import("react").ReactPortal | null;
@@ -0,0 +1,4 @@
1
+ export { toast } from './store';
2
+ export type { ToastAction, ToastContent, ToastData, ToastOptions, ToastType } from './store';
3
+ export { Toaster } from './Toaster';
4
+ export type { ToasterPosition, ToasterProps } from './Toaster';
@@ -0,0 +1,75 @@
1
+ import type { ReactNode } from 'react';
2
+ export type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';
3
+ export interface ToastAction {
4
+ label: ReactNode;
5
+ onClick: () => void;
6
+ }
7
+ export interface ToastOptions {
8
+ /** Reuse an id to replace that toast in place (it animates to the new state). */
9
+ id?: string;
10
+ type?: ToastType;
11
+ description?: ReactNode;
12
+ action?: ToastAction;
13
+ /** ms before auto-dismiss; `Infinity` keeps it. Loading toasts never auto-dismiss. */
14
+ duration?: number;
15
+ /** Overrides the type's icon. */
16
+ icon?: ReactNode;
17
+ /** Hide the × button. */
18
+ closable?: boolean;
19
+ /** Runs once when the toast leaves (timeout, ×, action or `dismiss`). */
20
+ onDismiss?: () => void;
21
+ }
22
+ export interface ToastData extends ToastOptions {
23
+ id: string;
24
+ type: ToastType;
25
+ title: ReactNode;
26
+ /** Bumped on every update so the toast can animate the change and restart its timer. */
27
+ version: number;
28
+ exiting?: boolean;
29
+ /** Set by `toast.undo`: ⌘/Ctrl+Z runs its action. */
30
+ undoable?: boolean;
31
+ }
32
+ /** Text for one state of `toast.promise`: a title, or a title with a description. */
33
+ export type ToastContent = ReactNode | {
34
+ title: ReactNode;
35
+ description?: ReactNode;
36
+ };
37
+ export declare const subscribe: (listener: () => void) => () => void;
38
+ export declare const getToasts: () => ToastData[];
39
+ /** Exit animation length; keep in sync with the CSS transition. */
40
+ export declare const EXIT_MS = 320;
41
+ declare function update(id: string, patch: Partial<Omit<ToastData, 'id' | 'version'>>): void;
42
+ /** Plays the exit animation, then removes. No id dismisses every toast. */
43
+ declare function dismiss(id?: string): void;
44
+ /**
45
+ * Shows a loading toast that turns into success or error when `promise` settles.
46
+ * Each state may be a function of the result / error.
47
+ */
48
+ declare function promise<T>(task: Promise<T>, states: {
49
+ loading: ToastContent;
50
+ success: ToastContent | ((value: T) => ToastContent);
51
+ error: ToastContent | ((error: unknown) => ToastContent);
52
+ }, options?: Omit<ToastOptions, 'type'>): Promise<T>;
53
+ /**
54
+ * Undo instead of a confirm dialog: do the action right away, then offer "실행 취소".
55
+ * `onCommit` runs only if the toast leaves without being undone — do the permanent part
56
+ * (server delete, emptying trash) there. ⌘/Ctrl+Z also undoes the newest one.
57
+ */
58
+ declare function undo(title: ReactNode, { onUndo, onCommit, undoLabel, ...options }: Omit<ToastOptions, 'action' | 'onDismiss'> & {
59
+ onUndo: () => void;
60
+ onCommit?: () => void;
61
+ undoLabel?: ReactNode;
62
+ }): string;
63
+ /** `toast('저장했어요')`, `toast.success(...)`, `toast.loading(...)` → id, `toast.update(id, …)`. */
64
+ export declare const toast: ((title: ReactNode, options?: ToastOptions) => string) & {
65
+ success: (title: ReactNode, options?: Omit<ToastOptions, "type">) => string;
66
+ error: (title: ReactNode, options?: Omit<ToastOptions, "type">) => string;
67
+ warning: (title: ReactNode, options?: Omit<ToastOptions, "type">) => string;
68
+ info: (title: ReactNode, options?: Omit<ToastOptions, "type">) => string;
69
+ loading: (title: ReactNode, options?: Omit<ToastOptions, "type">) => string;
70
+ update: typeof update;
71
+ dismiss: typeof dismiss;
72
+ promise: typeof promise;
73
+ undo: typeof undo;
74
+ };
75
+ export {};
@@ -0,0 +1,28 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ import { type SelectionProps, type SelectionValue } from '../../hooks';
3
+ import './ToggleGroup.css';
4
+ export type ToggleGroupVariant = 'soft' | 'ghost';
5
+ export type ToggleGroupSize = 'sm' | 'md' | 'lg';
6
+ export type ToggleGroupProps<V extends SelectionValue> = SelectionProps<V> & {
7
+ /** soft: gray track, selected item in white · ghost: text only, selected gets a gray fill */
8
+ variant?: ToggleGroupVariant;
9
+ size?: ToggleGroupSize;
10
+ orientation?: 'horizontal' | 'vertical';
11
+ disabled?: boolean;
12
+ className?: string;
13
+ 'aria-label'?: string;
14
+ children: ReactNode;
15
+ };
16
+ /**
17
+ * A set of toggle buttons. `type="single"` behaves like radio buttons (arrow keys move,
18
+ * Space/Enter selects); `type="multiple"` lets each item be pressed on its own.
19
+ */
20
+ export declare function ToggleGroup<V extends SelectionValue>(props: ToggleGroupProps<V>): import("react").JSX.Element;
21
+ export declare namespace ToggleGroup {
22
+ var Item: typeof ToggleGroupItem;
23
+ }
24
+ export interface ToggleGroupItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
25
+ value: SelectionValue;
26
+ icon?: ReactNode;
27
+ }
28
+ export declare function ToggleGroupItem({ value, icon, children, disabled, className, onClick, ...rest }: ToggleGroupItemProps): import("react").JSX.Element;