@mindlogic-ai/logician-ui 5.0.0-alpha.2 → 5.0.0-alpha.20

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 (525) hide show
  1. package/README.md +1 -0
  2. package/dist/components/Avatar/Avatar.d.ts +68 -11
  3. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  4. package/dist/components/Avatar/Avatar.js +41 -5
  5. package/dist/components/Avatar/Avatar.js.map +1 -1
  6. package/dist/components/Avatar/Avatar.mjs +40 -5
  7. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  8. package/dist/components/Avatar/index.d.ts +2 -2
  9. package/dist/components/Avatar/index.d.ts.map +1 -1
  10. package/dist/components/Badge/Badge.d.ts.map +1 -1
  11. package/dist/components/Badge/Badge.js +5 -3
  12. package/dist/components/Badge/Badge.js.map +1 -1
  13. package/dist/components/Badge/Badge.mjs +5 -3
  14. package/dist/components/Badge/Badge.mjs.map +1 -1
  15. package/dist/components/Badge/Badge.types.d.ts +7 -5
  16. package/dist/components/Badge/Badge.types.d.ts.map +1 -1
  17. package/dist/components/Banner/Banner.types.d.ts +24 -1
  18. package/dist/components/Banner/Banner.types.d.ts.map +1 -1
  19. package/dist/components/BottomSheet/BottomSheet.styles.d.ts +2 -2
  20. package/dist/components/Button/Button.d.ts.map +1 -1
  21. package/dist/components/Button/Button.js +31 -3
  22. package/dist/components/Button/Button.js.map +1 -1
  23. package/dist/components/Button/Button.mjs +31 -3
  24. package/dist/components/Button/Button.mjs.map +1 -1
  25. package/dist/components/Button/Button.types.d.ts +38 -1
  26. package/dist/components/Button/Button.types.d.ts.map +1 -1
  27. package/dist/components/Card/Card.types.d.ts +12 -0
  28. package/dist/components/Card/Card.types.d.ts.map +1 -1
  29. package/dist/components/CodeTabs/CodeTabs.styles.d.ts +6 -5
  30. package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
  31. package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
  32. package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
  33. package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
  34. package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
  35. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  36. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  37. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  38. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  39. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  40. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  41. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  42. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  43. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  44. package/dist/components/Confetti/confettiColors.js +5 -5
  45. package/dist/components/Confetti/confettiColors.mjs +5 -5
  46. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  47. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  48. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  49. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  50. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  51. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  52. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  53. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  54. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  55. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  56. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  57. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  58. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  59. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  60. package/dist/components/Input/Input.d.ts.map +1 -1
  61. package/dist/components/Input/Input.js +4 -0
  62. package/dist/components/Input/Input.js.map +1 -1
  63. package/dist/components/Input/Input.mjs +4 -0
  64. package/dist/components/Input/Input.mjs.map +1 -1
  65. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  66. package/dist/components/LineGraph/LineGraph.js +4 -5
  67. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  68. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  69. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  70. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  71. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  72. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  73. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  74. package/dist/components/LineGraph/seriesColors.js +8 -7
  75. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  76. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  77. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  78. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  79. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  80. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  81. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  82. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  83. package/dist/components/Modal/ModalCloseButton.js +1 -1
  84. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  85. package/dist/components/NavList/NavList.d.ts +35 -0
  86. package/dist/components/NavList/NavList.d.ts.map +1 -0
  87. package/dist/components/NavList/NavList.js +113 -0
  88. package/dist/components/NavList/NavList.js.map +1 -0
  89. package/dist/components/NavList/NavList.mjs +111 -0
  90. package/dist/components/NavList/NavList.mjs.map +1 -0
  91. package/dist/components/NavList/NavList.styles.d.ts +90 -0
  92. package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
  93. package/dist/components/NavList/NavList.styles.js +104 -0
  94. package/dist/components/NavList/NavList.styles.js.map +1 -0
  95. package/dist/components/NavList/NavList.styles.mjs +97 -0
  96. package/dist/components/NavList/NavList.styles.mjs.map +1 -0
  97. package/dist/components/NavList/NavList.translations.json.js +19 -0
  98. package/dist/components/NavList/NavList.translations.json.js.map +1 -0
  99. package/dist/components/NavList/NavList.translations.json.mjs +14 -0
  100. package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
  101. package/dist/components/NavList/NavList.types.d.ts +140 -0
  102. package/dist/components/NavList/NavList.types.d.ts.map +1 -0
  103. package/dist/components/NavList/NavListContext.d.ts +30 -0
  104. package/dist/components/NavList/NavListContext.d.ts.map +1 -0
  105. package/dist/components/NavList/NavListContext.js +16 -0
  106. package/dist/components/NavList/NavListContext.js.map +1 -0
  107. package/dist/components/NavList/NavListContext.mjs +13 -0
  108. package/dist/components/NavList/NavListContext.mjs.map +1 -0
  109. package/dist/components/NavList/NavListGroup.d.ts +31 -0
  110. package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
  111. package/dist/components/NavList/NavListGroup.js +115 -0
  112. package/dist/components/NavList/NavListGroup.js.map +1 -0
  113. package/dist/components/NavList/NavListGroup.mjs +113 -0
  114. package/dist/components/NavList/NavListGroup.mjs.map +1 -0
  115. package/dist/components/NavList/NavListItem.d.ts +16 -0
  116. package/dist/components/NavList/NavListItem.d.ts.map +1 -0
  117. package/dist/components/NavList/NavListItem.js +284 -0
  118. package/dist/components/NavList/NavListItem.js.map +1 -0
  119. package/dist/components/NavList/NavListItem.mjs +282 -0
  120. package/dist/components/NavList/NavListItem.mjs.map +1 -0
  121. package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
  122. package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
  123. package/dist/components/NavList/NavListSkeleton.js +33 -0
  124. package/dist/components/NavList/NavListSkeleton.js.map +1 -0
  125. package/dist/components/NavList/NavListSkeleton.mjs +31 -0
  126. package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
  127. package/dist/components/NavList/index.d.ts +7 -0
  128. package/dist/components/NavList/index.d.ts.map +1 -0
  129. package/dist/components/Pagination/Pagination.d.ts +11 -10
  130. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  131. package/dist/components/Pagination/Pagination.js +11 -10
  132. package/dist/components/Pagination/Pagination.js.map +1 -1
  133. package/dist/components/Pagination/Pagination.mjs +11 -10
  134. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  135. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  136. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  137. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  138. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  139. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  140. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  141. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  142. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  143. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  144. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  145. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  146. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  147. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  148. package/dist/components/Select/Combobox.d.ts +1 -1
  149. package/dist/components/Select/Combobox.d.ts.map +1 -1
  150. package/dist/components/Select/Combobox.js +9 -2
  151. package/dist/components/Select/Combobox.js.map +1 -1
  152. package/dist/components/Select/Combobox.mjs +10 -3
  153. package/dist/components/Select/Combobox.mjs.map +1 -1
  154. package/dist/components/Select/Select.d.ts +1 -1
  155. package/dist/components/Select/Select.d.ts.map +1 -1
  156. package/dist/components/Select/Select.js +14 -2
  157. package/dist/components/Select/Select.js.map +1 -1
  158. package/dist/components/Select/Select.mjs +15 -3
  159. package/dist/components/Select/Select.mjs.map +1 -1
  160. package/dist/components/Select/Select.styles.d.ts +97 -1
  161. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  162. package/dist/components/Select/Select.styles.js +83 -0
  163. package/dist/components/Select/Select.styles.js.map +1 -1
  164. package/dist/components/Select/Select.styles.mjs +82 -1
  165. package/dist/components/Select/Select.styles.mjs.map +1 -1
  166. package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
  167. package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
  168. package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
  169. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  170. package/dist/components/Textarea/Textarea.js +4 -0
  171. package/dist/components/Textarea/Textarea.js.map +1 -1
  172. package/dist/components/Textarea/Textarea.mjs +4 -0
  173. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  174. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  175. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  176. package/dist/components/Toast/Toast.styles.js +18 -10
  177. package/dist/components/Toast/Toast.styles.js.map +1 -1
  178. package/dist/components/Toast/Toast.styles.mjs +18 -10
  179. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  180. package/dist/components/Typography/Caption.d.ts.map +1 -1
  181. package/dist/components/Typography/Caption.js +1 -1
  182. package/dist/components/Typography/Caption.js.map +1 -1
  183. package/dist/components/Typography/Caption.mjs +1 -1
  184. package/dist/components/Typography/Caption.mjs.map +1 -1
  185. package/dist/components/Typography/H1.d.ts.map +1 -1
  186. package/dist/components/Typography/H1.js +1 -1
  187. package/dist/components/Typography/H1.js.map +1 -1
  188. package/dist/components/Typography/H1.mjs +1 -1
  189. package/dist/components/Typography/H1.mjs.map +1 -1
  190. package/dist/components/Typography/H2.d.ts.map +1 -1
  191. package/dist/components/Typography/H2.js +1 -1
  192. package/dist/components/Typography/H2.js.map +1 -1
  193. package/dist/components/Typography/H2.mjs +1 -1
  194. package/dist/components/Typography/H2.mjs.map +1 -1
  195. package/dist/components/Typography/H3.d.ts.map +1 -1
  196. package/dist/components/Typography/H3.js +1 -1
  197. package/dist/components/Typography/H3.js.map +1 -1
  198. package/dist/components/Typography/H3.mjs +1 -1
  199. package/dist/components/Typography/H3.mjs.map +1 -1
  200. package/dist/components/Typography/H4.d.ts.map +1 -1
  201. package/dist/components/Typography/H4.js +1 -1
  202. package/dist/components/Typography/H4.js.map +1 -1
  203. package/dist/components/Typography/H4.mjs +1 -1
  204. package/dist/components/Typography/H4.mjs.map +1 -1
  205. package/dist/components/Typography/H5.d.ts.map +1 -1
  206. package/dist/components/Typography/H5.js +1 -1
  207. package/dist/components/Typography/H5.js.map +1 -1
  208. package/dist/components/Typography/H5.mjs +1 -1
  209. package/dist/components/Typography/H5.mjs.map +1 -1
  210. package/dist/components/Typography/Link.d.ts.map +1 -1
  211. package/dist/components/Typography/Link.js +1 -1
  212. package/dist/components/Typography/Link.js.map +1 -1
  213. package/dist/components/Typography/Link.mjs +1 -1
  214. package/dist/components/Typography/Link.mjs.map +1 -1
  215. package/dist/components/Typography/Overline.d.ts.map +1 -1
  216. package/dist/components/Typography/Overline.js +1 -1
  217. package/dist/components/Typography/Overline.js.map +1 -1
  218. package/dist/components/Typography/Overline.mjs +1 -1
  219. package/dist/components/Typography/Overline.mjs.map +1 -1
  220. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  221. package/dist/components/Typography/Subtext.js +1 -1
  222. package/dist/components/Typography/Subtext.js.map +1 -1
  223. package/dist/components/Typography/Subtext.mjs +1 -1
  224. package/dist/components/Typography/Subtext.mjs.map +1 -1
  225. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  226. package/dist/components/Typography/Subtitle.js +1 -1
  227. package/dist/components/Typography/Subtitle.js.map +1 -1
  228. package/dist/components/Typography/Subtitle.mjs +1 -1
  229. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  230. package/dist/components/Typography/Text.d.ts.map +1 -1
  231. package/dist/components/Typography/Text.js +1 -1
  232. package/dist/components/Typography/Text.js.map +1 -1
  233. package/dist/components/Typography/Text.mjs +1 -1
  234. package/dist/components/Typography/Text.mjs.map +1 -1
  235. package/dist/hooks/useLanguage.d.ts +5 -0
  236. package/dist/hooks/useLanguage.d.ts.map +1 -1
  237. package/dist/hooks/useLanguage.js +7 -3
  238. package/dist/hooks/useLanguage.js.map +1 -1
  239. package/dist/hooks/useLanguage.mjs +7 -4
  240. package/dist/hooks/useLanguage.mjs.map +1 -1
  241. package/dist/hooks/useTranslate.d.ts.map +1 -1
  242. package/dist/hooks/useTranslate.js +8 -5
  243. package/dist/hooks/useTranslate.js.map +1 -1
  244. package/dist/hooks/useTranslate.mjs +8 -5
  245. package/dist/hooks/useTranslate.mjs.map +1 -1
  246. package/dist/index.d.ts +2 -1
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +13 -0
  249. package/dist/index.js.map +1 -1
  250. package/dist/index.mjs +7 -2
  251. package/dist/index.mjs.map +1 -1
  252. package/dist/theme/colors.d.ts +2 -2
  253. package/dist/theme/colors.d.ts.map +1 -1
  254. package/dist/theme/colors.js +54 -18
  255. package/dist/theme/colors.js.map +1 -1
  256. package/dist/theme/colors.mjs +55 -19
  257. package/dist/theme/colors.mjs.map +1 -1
  258. package/dist/theme/global.d.ts.map +1 -1
  259. package/dist/theme/global.js +19 -1
  260. package/dist/theme/global.js.map +1 -1
  261. package/dist/theme/global.mjs +19 -1
  262. package/dist/theme/global.mjs.map +1 -1
  263. package/dist/theme/index.d.ts.map +1 -1
  264. package/dist/theme/index.js +2 -0
  265. package/dist/theme/index.js.map +1 -1
  266. package/dist/theme/index.mjs +2 -0
  267. package/dist/theme/index.mjs.map +1 -1
  268. package/dist/theme/palette.generated.d.ts +232 -123
  269. package/dist/theme/palette.generated.d.ts.map +1 -1
  270. package/dist/theme/palette.generated.js +233 -123
  271. package/dist/theme/palette.generated.js.map +1 -1
  272. package/dist/theme/palette.generated.mjs +233 -124
  273. package/dist/theme/palette.generated.mjs.map +1 -1
  274. package/dist/theme/paletteSwatches.d.ts +20 -0
  275. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  276. package/dist/theme/recipes/avatar.d.ts +30 -0
  277. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  278. package/dist/theme/recipes/avatar.js +96 -0
  279. package/dist/theme/recipes/avatar.js.map +1 -0
  280. package/dist/theme/recipes/avatar.mjs +94 -0
  281. package/dist/theme/recipes/avatar.mjs.map +1 -0
  282. package/dist/translations/Defaults.translations.json.js +19 -1
  283. package/dist/translations/Defaults.translations.json.js.map +1 -1
  284. package/dist/translations/Defaults.translations.json.mjs +18 -2
  285. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  286. package/dist/utils/disabledControl.d.ts +8 -1
  287. package/dist/utils/disabledControl.d.ts.map +1 -1
  288. package/dist/utils/disabledControl.js +8 -1
  289. package/dist/utils/disabledControl.js.map +1 -1
  290. package/dist/utils/disabledControl.mjs +8 -1
  291. package/dist/utils/disabledControl.mjs.map +1 -1
  292. package/dist/utils/focusRing.d.ts +22 -0
  293. package/dist/utils/focusRing.d.ts.map +1 -1
  294. package/dist/utils/focusRing.js +22 -0
  295. package/dist/utils/focusRing.js.map +1 -1
  296. package/dist/utils/focusRing.mjs +21 -1
  297. package/dist/utils/focusRing.mjs.map +1 -1
  298. package/package.json +2 -1
  299. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  300. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  301. package/src/components/Appear/Appear.usage.mdx +107 -0
  302. package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
  303. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  304. package/src/components/Avatar/Avatar.tsx +118 -21
  305. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  306. package/src/components/Avatar/index.tsx +8 -1
  307. package/src/components/Badge/Badge.stories.tsx +193 -3
  308. package/src/components/Badge/Badge.tsx +5 -3
  309. package/src/components/Badge/Badge.types.ts +7 -5
  310. package/src/components/Badge/Badge.usage.mdx +265 -0
  311. package/src/components/Banner/Banner.stories.tsx +152 -2
  312. package/src/components/Banner/Banner.types.ts +30 -1
  313. package/src/components/Banner/Banner.usage.mdx +233 -0
  314. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  315. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  316. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  317. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  318. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  319. package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
  320. package/src/components/Button/Button.stories.tsx +332 -3
  321. package/src/components/Button/Button.tsx +46 -3
  322. package/src/components/Button/Button.types.ts +38 -1
  323. package/src/components/Button/Button.usage.mdx +358 -0
  324. package/src/components/Button/Button.variants.test.tsx +13 -1
  325. package/src/components/Card/Card.stories.tsx +106 -0
  326. package/src/components/Card/Card.types.ts +12 -0
  327. package/src/components/Card/Card.usage.mdx +216 -0
  328. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  329. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  330. package/src/components/Chip/Chip.usage.mdx +78 -0
  331. package/src/components/Code/Code.stories.tsx +60 -0
  332. package/src/components/Code/Code.usage.mdx +187 -0
  333. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  334. package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
  335. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  336. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  337. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  338. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  339. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  340. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  341. package/src/components/Confetti/Confetti.types.ts +5 -1
  342. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  343. package/src/components/Confetti/confettiColors.ts +5 -5
  344. package/src/components/Container/Container.stories.tsx +32 -0
  345. package/src/components/Container/Container.usage.mdx +130 -0
  346. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  347. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  348. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  349. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  350. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  351. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  352. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  353. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  354. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  355. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  356. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  357. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  358. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  359. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  360. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  361. package/src/components/FileList/FileList.stories.tsx +25 -0
  362. package/src/components/FileList/FileList.usage.mdx +165 -0
  363. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  364. package/src/components/Form/Form.stories.tsx +149 -0
  365. package/src/components/Form/Form.usage.mdx +203 -0
  366. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  367. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  368. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  369. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  370. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  371. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  372. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  373. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  374. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  375. package/src/components/Icon/Icon.stories.tsx +61 -1
  376. package/src/components/Icon/Icon.usage.mdx +158 -0
  377. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  378. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  379. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  380. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  381. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  382. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  383. package/src/components/Input/Input.stories.tsx +180 -0
  384. package/src/components/Input/Input.tsx +4 -0
  385. package/src/components/Input/Input.usage.mdx +278 -0
  386. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  387. package/src/components/LineGraph/LineGraph.tsx +4 -5
  388. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  389. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  390. package/src/components/LineGraph/seriesColors.test.ts +10 -9
  391. package/src/components/LineGraph/seriesColors.ts +18 -16
  392. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  393. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  394. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  395. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  396. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  397. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  398. package/src/components/Masonry/Masonry.types.ts +8 -3
  399. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  400. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  401. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  402. package/src/components/Menu/Menu.stories.tsx +146 -2
  403. package/src/components/Menu/Menu.usage.mdx +238 -0
  404. package/src/components/Menu/MenuItem.types.ts +8 -0
  405. package/src/components/Modal/Modal.stories.tsx +177 -1
  406. package/src/components/Modal/Modal.usage.mdx +262 -0
  407. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  408. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  409. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  410. package/src/components/NavList/NavList.stories.tsx +927 -0
  411. package/src/components/NavList/NavList.styles.ts +114 -0
  412. package/src/components/NavList/NavList.test.tsx +1306 -0
  413. package/src/components/NavList/NavList.translations.json +9 -0
  414. package/src/components/NavList/NavList.tsx +160 -0
  415. package/src/components/NavList/NavList.types.ts +155 -0
  416. package/src/components/NavList/NavList.usage.mdx +545 -0
  417. package/src/components/NavList/NavListContext.ts +25 -0
  418. package/src/components/NavList/NavListGroup.tsx +243 -0
  419. package/src/components/NavList/NavListItem.tsx +543 -0
  420. package/src/components/NavList/NavListSkeleton.tsx +57 -0
  421. package/src/components/NavList/index.ts +15 -0
  422. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  423. package/src/components/Pagination/Pagination.tsx +11 -10
  424. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  425. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  426. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  427. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  428. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  429. package/src/components/Popover/Popover.stories.tsx +104 -1
  430. package/src/components/Popover/Popover.usage.mdx +197 -0
  431. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  432. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  433. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  434. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  435. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  436. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  437. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  438. package/src/components/Radio/Radio.stories.tsx +119 -0
  439. package/src/components/Radio/Radio.usage.mdx +187 -0
  440. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  441. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  442. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  443. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  444. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  445. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  446. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  447. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  448. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  449. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  450. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  451. package/src/components/Select/Combobox.tsx +28 -3
  452. package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
  453. package/src/components/Select/Select.stories.tsx +290 -1
  454. package/src/components/Select/Select.styles.ts +89 -0
  455. package/src/components/Select/Select.tsx +28 -2
  456. package/src/components/Select/Select.usage.mdx +341 -0
  457. package/src/components/Shake/Shake.usage.mdx +107 -0
  458. package/src/components/Slider/Slider.stories.tsx +116 -0
  459. package/src/components/Slider/Slider.usage.mdx +179 -0
  460. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  461. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  462. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  463. package/src/components/Switch/Switch.stories.tsx +131 -6
  464. package/src/components/Switch/Switch.usage.mdx +199 -0
  465. package/src/components/Table/Table.stories.tsx +159 -1
  466. package/src/components/Table/Table.usage.mdx +235 -0
  467. package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
  468. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  469. package/src/components/Tabs/Tabs.usage.mdx +263 -0
  470. package/src/components/Tag/Tag.stories.tsx +181 -4
  471. package/src/components/Tag/Tag.usage.mdx +257 -0
  472. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  473. package/src/components/Textarea/Textarea.tsx +4 -0
  474. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  475. package/src/components/Toast/Toast.stories.tsx +185 -3
  476. package/src/components/Toast/Toast.styles.ts +18 -10
  477. package/src/components/Toast/Toast.usage.mdx +265 -0
  478. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  479. package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
  480. package/src/components/Tree/Tree.stories.tsx +89 -0
  481. package/src/components/Tree/Tree.usage.mdx +207 -0
  482. package/src/components/Typography/Caption.tsx +0 -1
  483. package/src/components/Typography/H1.tsx +0 -1
  484. package/src/components/Typography/H2.tsx +0 -1
  485. package/src/components/Typography/H3.tsx +0 -1
  486. package/src/components/Typography/H4.tsx +0 -1
  487. package/src/components/Typography/H5.tsx +0 -1
  488. package/src/components/Typography/Link.tsx +0 -1
  489. package/src/components/Typography/Overline.tsx +0 -1
  490. package/src/components/Typography/Subtext.tsx +0 -1
  491. package/src/components/Typography/Subtitle.tsx +0 -1
  492. package/src/components/Typography/Text.tsx +0 -1
  493. package/src/components/Typography/Typography.stories.tsx +117 -0
  494. package/src/components/Typography/Typography.usage.mdx +257 -0
  495. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  496. package/src/components/a11y.kwcag.test.tsx +66 -0
  497. package/src/components/claude.md +1 -1
  498. package/src/components/noRawScales.test.ts +5 -1
  499. package/src/foundations/BrandAssets.mdx +637 -0
  500. package/src/foundations/BrandAssets.stories.tsx +680 -0
  501. package/src/foundations/BrandColour.mdx +366 -0
  502. package/src/foundations/BrandColour.stories.tsx +343 -0
  503. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  504. package/src/guidelines/FeedbackActions.mdx +162 -23
  505. package/src/guidelines/_components/Lang.tsx +175 -0
  506. package/src/guidelines/_components/TokenTable.tsx +136 -0
  507. package/src/hooks/useLanguage.ts +8 -3
  508. package/src/hooks/useTranslate.test.tsx +46 -0
  509. package/src/hooks/useTranslate.ts +7 -5
  510. package/src/index.ts +7 -1
  511. package/src/theme/BazePalette.stories.tsx +111 -1
  512. package/src/theme/Palette.stories.tsx +2 -2
  513. package/src/theme/SemanticTokens.mdx +76 -17
  514. package/src/theme/claude.md +23 -9
  515. package/src/theme/colors.ts +71 -18
  516. package/src/theme/contrast.test.ts +57 -0
  517. package/src/theme/global.ts +20 -1
  518. package/src/theme/index.ts +2 -0
  519. package/src/theme/palette.generated.ts +233 -123
  520. package/src/theme/paletteSwatches.test.ts +1 -1
  521. package/src/theme/paletteSwatches.ts +35 -0
  522. package/src/theme/recipes/avatar.ts +92 -0
  523. package/src/translations/Defaults.translations.json +14 -0
  524. package/src/utils/disabledControl.ts +8 -1
  525. package/src/utils/focusRing.ts +23 -0
@@ -1,7 +1,14 @@
1
- import { Flex } from '@chakra-ui/react';
1
+ import type { ReactNode } from 'react';
2
+ import { Flex, Stack } from '@chakra-ui/react';
2
3
  import { Meta, StoryObj } from '@storybook/react';
3
4
 
4
- import { Badge, badgeVariants } from '.';
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
7
+ import { Card } from '../Card';
8
+ import { ClockIcon, MdError } from '../Icon';
9
+ import { Tag } from '../Tag';
10
+ import { Subtext, Text } from '../Typography';
11
+ import { Badge, badgeVariants, badgeVariantStyles } from '.';
5
12
 
6
13
  const meta = {
7
14
  title: 'Components/Badge',
@@ -14,7 +21,7 @@ const meta = {
14
21
  control: 'select',
15
22
  options: badgeVariants,
16
23
  description:
17
- 'Colour role. `neutral` (grey wash) is the default; the rest report a status.',
24
+ '`neutral` (default): an attribute with no state. `success` / `warning` / `danger` / `info`: a well-defined meaning every user shares; `info` = a non-error system fact (scope, permission, read-only, New). Labels that only classify → `Tag` `category`.',
18
25
  },
19
26
  size: {
20
27
  control: 'select',
@@ -80,3 +87,186 @@ export const Sizes: Story = {
80
87
  </Flex>
81
88
  ),
82
89
  };
90
+
91
+ // ───────────────────────── Usage-page specimens ─────────────────────────
92
+ // Pulled into `Badge.usage.mdx` with <Canvas of={…} />. Hidden from the
93
+ // sidebar (`!dev`) so the component's story list stays short; being stories,
94
+ // they type-check with the rest of the code. `tags` must be written out on
95
+ // each story: the indexer reads CSF statically and does not follow a spread.
96
+
97
+ /** A settings card like FactChat's group credit limit. */
98
+ const LimitCard = ({
99
+ title,
100
+ value,
101
+ badge,
102
+ bg = 'bg.surface',
103
+ }: {
104
+ title: string;
105
+ value: string;
106
+ badge?: ReactNode;
107
+ bg?: string;
108
+ }) => (
109
+ <Card bg={bg} p={4} minW="180px">
110
+ <Flex gap={2} align="center" mb={1}>
111
+ <Subtext>{title}</Subtext>
112
+ {badge}
113
+ </Flex>
114
+ <Text fontWeight="bold" fontSize="lg">
115
+ {value}
116
+ </Text>
117
+ </Card>
118
+ );
119
+
120
+ const CREDIT_CARDS = [
121
+ { title: '남은 크레딧', value: '0' },
122
+ { title: '이번 달 사용', value: '8,489' },
123
+ { title: '개인 한도', value: '2,000' },
124
+ ];
125
+
126
+ export const DoScopeLabel: Story = {
127
+ tags: ['!dev'],
128
+ parameters: { layout: 'padded' },
129
+ name: 'Usage / Do: info for a scope',
130
+ render: () => (
131
+ <LimitCard
132
+ title="개인 크레딧 한도"
133
+ value="2,000"
134
+ badge={<Badge variant="info">이 그룹만</Badge>}
135
+ />
136
+ ),
137
+ };
138
+
139
+ export const DontStatusForTeams: Story = {
140
+ tags: ['!dev'],
141
+ parameters: { layout: 'padded' },
142
+ name: "Usage / Don't: status colours to tell teams apart",
143
+ render: () => (
144
+ <Flex gap={2}>
145
+ <Badge variant="success">마케팅</Badge>
146
+ <Badge variant="danger">영업</Badge>
147
+ <Badge variant="warning">개발</Badge>
148
+ </Flex>
149
+ ),
150
+ };
151
+
152
+ export const DoCategoryTags: Story = {
153
+ tags: ['!dev'],
154
+ parameters: { layout: 'padded' },
155
+ name: 'Usage / Do: Tag category for groups',
156
+ render: () => (
157
+ <Flex gap={2}>
158
+ <Tag category="blue">마케팅</Tag>
159
+ <Tag category="purple">영업</Tag>
160
+ <Tag category="brown">개발</Tag>
161
+ </Flex>
162
+ ),
163
+ };
164
+
165
+ export const DontNeutralOnLayer: Story = {
166
+ tags: ['!dev'],
167
+ parameters: { layout: 'padded' },
168
+ name: "Usage / Don't: neutral on layer.1",
169
+ render: () => (
170
+ <LimitCard
171
+ bg="layer.1"
172
+ title="개인 크레딧 한도"
173
+ value="2,000"
174
+ badge={<Badge variant="neutral">이 그룹만</Badge>}
175
+ />
176
+ ),
177
+ };
178
+
179
+ export const DontRepeatOnEveryCard: Story = {
180
+ tags: ['!dev'],
181
+ parameters: { layout: 'padded' },
182
+ name: "Usage / Don't: the same badge on every card",
183
+ render: () => (
184
+ <Flex gap={3} wrap="wrap">
185
+ {CREDIT_CARDS.map((card) => (
186
+ <LimitCard
187
+ key={card.title}
188
+ {...card}
189
+ badge={<Badge variant="info">이 그룹만</Badge>}
190
+ />
191
+ ))}
192
+ </Flex>
193
+ ),
194
+ };
195
+
196
+ export const DoOnceOnHeading: Story = {
197
+ tags: ['!dev'],
198
+ parameters: { layout: 'padded' },
199
+ name: 'Usage / Do: once, on the section heading',
200
+ render: () => (
201
+ <Stack gap={3}>
202
+ <Flex gap={2} align="center">
203
+ <Text as="h3" fontWeight="bold">
204
+ 크레딧
205
+ </Text>
206
+ <Badge variant="info">이 그룹만</Badge>
207
+ </Flex>
208
+ <Flex gap={3} wrap="wrap">
209
+ {CREDIT_CARDS.map((card) => (
210
+ <LimitCard key={card.title} {...card} />
211
+ ))}
212
+ </Flex>
213
+ </Stack>
214
+ ),
215
+ };
216
+
217
+ export const DoTextCarriesMeaning: Story = {
218
+ tags: ['!dev'],
219
+ parameters: { layout: 'padded' },
220
+ name: 'Usage / Do: the words carry the meaning',
221
+ render: () => (
222
+ <Flex gap={2}>
223
+ <Badge variant="warning" gap={1}>
224
+ <ClockIcon boxSize="12px" aria-hidden />
225
+ 대기 중
226
+ </Badge>
227
+ <Badge variant="danger" gap={1}>
228
+ <MdError boxSize="12px" aria-hidden />
229
+ 결제 실패
230
+ </Badge>
231
+ </Flex>
232
+ ),
233
+ };
234
+
235
+ export const DontColourOnly: Story = {
236
+ tags: ['!dev'],
237
+ parameters: { layout: 'padded' },
238
+ name: "Usage / Don't: colour with no words",
239
+ render: () => (
240
+ <Flex gap={3} align="center">
241
+ <Text>결제 1</Text>
242
+ <Badge variant="success" aria-hidden>
243
+ {'\u00A0'}
244
+ </Badge>
245
+ <Text>결제 2</Text>
246
+ <Badge variant="danger" aria-hidden>
247
+ {'\u00A0'}
248
+ </Badge>
249
+ </Flex>
250
+ ),
251
+ };
252
+
253
+ /** Tokens each variant reads, resolved from `Badge.styles.ts` and the theme. */
254
+ export const UsageTokens: Story = {
255
+ tags: ['!dev'],
256
+ parameters: { layout: 'padded' },
257
+ name: 'Usage / Tokens',
258
+ render: () => (
259
+ <TokenTable
260
+ rows={badgeVariants.flatMap((variant) => [
261
+ {
262
+ token: badgeVariantStyles[variant].bgColor,
263
+ use: <T en={`${variant} · background`} ko={`${variant} · 배경`} />,
264
+ },
265
+ {
266
+ token: badgeVariantStyles[variant].color,
267
+ use: <T en={`${variant} · text`} ko={`${variant} · 글자`} />,
268
+ },
269
+ ])}
270
+ />
271
+ ),
272
+ };
@@ -8,9 +8,11 @@ import { BadgeOwnProps } from './Badge.types';
8
8
  /**
9
9
  * Badge — a small, non-interactive label.
10
10
  *
11
- * `neutral` (default) is the grey-wash everyday badge; `success` / `warning` /
12
- * `danger` / `info` report a status. For an unread/notification number use
13
- * `CountBadge`; for a removable or selectable label use `Tag`.
11
+ * `neutral` (default) is the everyday badge; `success` / `warning` /
12
+ * `danger` / `info` carry a well-defined meaning (a status, or for `info` a
13
+ * system fact such as scope or permission). For an unread/notification number
14
+ * use `CountBadge`; for a removable, selectable or category-only label use
15
+ * `Tag`.
14
16
  *
15
17
  * @example
16
18
  * ```tsx
@@ -7,11 +7,13 @@ import type { PolymorphicProps } from '../../types/polymorphic';
7
7
  /**
8
8
  * Badge variants (5.0).
9
9
  *
10
- * - `neutral` (default): neutral `bg.muted` with `secondary.fgStrong`
11
- * text — the everyday label ("Pro", "Beta", "Draft").
12
- * - `success` / `warning` / `danger` / `info`: the status family's soft
13
- * `{status}.bg` surface with `{status}.fg` text. Use these ONLY when the
14
- * badge reports a status — never as decoration.
10
+ * - `neutral` (default): `bg.muted` + `secondary.fgStrong` — an attribute
11
+ * with no state ("Pro", "Beta", "Draft").
12
+ * - `success` / `warning` / `danger` / `info`: `{status}.bg` + `{status}.fg`,
13
+ * for a meaning every user shares and that is well defined. `info` is a
14
+ * non-error system fact: scope ("이 그룹만"), permission, read-only, "New".
15
+ * A label that only classifies or groups is a `Tag` with `category`, never
16
+ * a status colour. The same label gets the same variant on every screen.
15
17
  *
16
18
  * **Breaking in 5.0:** `primary` and `secondary` were removed. At runtime they
17
19
  * still render (as `neutral`) and warn once in development.
@@ -0,0 +1,265 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as BadgeStories from './Badge.stories';
5
+
6
+ <Meta of={BadgeStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Badge
13
+
14
+ A short, non-interactive label that states an attribute of the thing next to
15
+ it: a status, a plan, or a scope.
16
+
17
+ ## When to use
18
+
19
+ - To state a fixed attribute next to a title or value: "Pro", "Beta".
20
+ - To report a status the user should read: 완료, 대기 중, 실패.
21
+ - To give a well-defined system fact such as scope, permission, read-only or
22
+ "New": 이 그룹만.
23
+
24
+ ## When not to use
25
+
26
+ - The label only classifies or groups and has no fixed meaning → `Tag` with
27
+ `category`.
28
+ - The user can click, select or remove it → `Tag` (`selected`, close button).
29
+ - An unread count → `CountBadge`. An explanation → `Tooltip` or `InfoSprinkle`.
30
+ - A sentence-length status → `Banner` or `Toast`.
31
+
32
+ ## Variants and what they mean
33
+
34
+ </En>
35
+
36
+ <Ko>
37
+
38
+ # Badge
39
+
40
+ 옆에 있는 대상의 속성(상태, 요금제, 적용 범위)을 짧게 알려 주는 라벨입니다. 누르거나
41
+ 선택할 수 없습니다.
42
+
43
+ ## 언제 쓰나요
44
+
45
+ - 제목이나 값 옆에 고정된 속성을 표시할 때: "Pro", "Beta".
46
+ - 사용자가 읽어야 할 상태를 알릴 때: 완료, 대기 중, 실패.
47
+ - 적용 범위, 권한, 읽기 전용, "New"처럼 뜻이 명확한 시스템 사실을 알릴 때: 이 그룹만.
48
+
49
+ ## 언제 쓰지 않나요
50
+
51
+ - 뜻은 없고 분류나 묶음만 나타낸다면 `Tag`의 `category`를 씁니다.
52
+ - 사용자가 누르거나 고르거나 지울 수 있다면 `Tag`(`selected`, 닫기 버튼)를 씁니다.
53
+ - 읽지 않은 개수는 `CountBadge`, 설명은 `Tooltip`이나 `InfoSprinkle`을 씁니다.
54
+ - 한 문장 길이의 상태 안내는 `Banner`나 `Toast`를 씁니다.
55
+
56
+ ## 변형과 뜻
57
+
58
+ </Ko>
59
+
60
+ <ArgTypes of={BadgeStories} include={['variant']} />
61
+
62
+ <En>
63
+
64
+ | Variant | Means | Use for |
65
+ | --- | --- | --- |
66
+ | `neutral` (default) | An attribute with no state | Plan, version, "Draft" |
67
+ | `info` | A well-defined system fact; nothing is wrong | Scope (이 그룹만), "New", read-only, permission |
68
+ | `success` | Finished or healthy | 완료, 연결됨 |
69
+ | `warning` | Needs attention, still works | 대기 중, 만료 임박 |
70
+ | `danger` | Failed or blocked | 실패, 차단됨 |
71
+
72
+ ### Choosing a colour
73
+
74
+ 1. **Does the colour carry a meaning every user shares** (a status, a scope, a
75
+ risk)? → Badge with a status variant. The same label always gets the same
76
+ variant, on every screen.
77
+ 2. **Does it only tell items apart?** → `Tag` with `category` (twelve hues, no
78
+ meaning). Never borrow a status colour for this.
79
+ 3. **Neither?** → `neutral`.
80
+
81
+ ## Do / Don't
82
+
83
+ </En>
84
+
85
+ <Ko>
86
+
87
+ | 변형 | 뜻 | 예 |
88
+ | --- | --- | --- |
89
+ | `neutral` (기본) | 상태가 없는 속성 | 요금제, 버전, "Draft" |
90
+ | `info` | 뜻이 명확한 시스템 사실이며, 문제가 있다는 뜻은 아님 | 적용 범위(이 그룹만), "New", 읽기 전용, 권한 |
91
+ | `success` | 끝났거나 정상 | 완료, 연결됨 |
92
+ | `warning` | 확인이 필요하지만 동작은 함 | 대기 중, 만료 임박 |
93
+ | `danger` | 실패했거나 막힘 | 실패, 차단됨 |
94
+
95
+ ### 색 고르기
96
+
97
+ 1. **모든 사용자가 같은 뜻으로 읽는 색인가요?**(상태, 적용 범위, 위험) 그렇다면 상태
98
+ 변형의 Badge를 씁니다. 같은 라벨은 어느 화면에서나 같은 변형을 씁니다.
99
+ 2. **항목을 나누기만 하나요?** 그렇다면 `Tag`의 `category`(뜻이 없는 열두 가지 색)를
100
+ 씁니다. 이때 상태색을 빌려 쓰지 않습니다.
101
+ 3. **둘 다 아니라면** `neutral`을 씁니다.
102
+
103
+ ## 이렇게 하세요 / 이렇게 하지 마세요
104
+
105
+ </Ko>
106
+
107
+ <Canvas of={BadgeStories.DoScopeLabel} />
108
+ <Verdict
109
+ kind="do"
110
+ en="Use info for a scope label. Scope is a fixed system meaning, and the colour lifts it off the card."
111
+ ko="적용 범위 라벨에는 info를 씁니다. 적용 범위는 뜻이 정해진 시스템 사실이고, 색이 있어 카드 위에서 잘 보입니다."
112
+ />
113
+
114
+ <Canvas of={BadgeStories.DontStatusForTeams} />
115
+ <Verdict
116
+ kind="dont"
117
+ en="Borrow status colours to tell teams apart. Readers will take 영업 to mean an error."
118
+ ko="팀을 나누려고 상태색을 빌려 쓰지 마세요. 읽는 사람은 '영업'을 오류로 받아들입니다."
119
+ />
120
+
121
+ <Canvas of={BadgeStories.DoCategoryTags} />
122
+ <Verdict
123
+ kind="do"
124
+ en="Use Tag category hues for labels that only classify."
125
+ ko="분류만 하는 라벨에는 Tag의 category 색을 씁니다."
126
+ />
127
+
128
+ <Canvas of={BadgeStories.DontNeutralOnLayer} />
129
+ <Verdict
130
+ kind="dont"
131
+ en="Put a neutral badge on a layer.1 surface. In light mode layer.1 and bg.muted are the same value, so the badge disappears. On layered grounds use a status variant, or no badge."
132
+ ko="layer.1 면 위에 neutral 배지를 두지 마세요. 라이트 모드에서 layer.1과 bg.muted는 같은 값이라 배지가 보이지 않습니다. 겹친 면 위에서는 상태 변형을 쓰거나 배지를 빼세요."
133
+ />
134
+
135
+ <Canvas of={BadgeStories.DontRepeatOnEveryCard} />
136
+ <Verdict
137
+ kind="dont"
138
+ en="Repeat the same badge on every card in a row. If all three say the same thing, the badge stops telling the reader anything."
139
+ ko="한 줄의 카드마다 같은 배지를 반복하지 마세요. 세 개가 모두 같은 말을 하면 배지는 아무것도 알려 주지 못합니다."
140
+ />
141
+
142
+ <Canvas of={BadgeStories.DoOnceOnHeading} />
143
+ <Verdict
144
+ kind="do"
145
+ en="Say it once, on the section heading, when it applies to the whole section."
146
+ ko="섹션 전체에 해당한다면 섹션 제목 옆에 한 번만 붙입니다."
147
+ />
148
+
149
+ <Canvas of={BadgeStories.DoTextCarriesMeaning} />
150
+ <Verdict
151
+ kind="do"
152
+ en="Let the words carry the meaning. Colour and icon back it up but never replace it (WCAG 1.4.1)."
153
+ ko="뜻은 문구가 전합니다. 색과 아이콘은 문구를 거들 뿐, 대신하지 않습니다(WCAG 1.4.1)."
154
+ />
155
+
156
+ <Canvas of={BadgeStories.DontColourOnly} />
157
+ <Verdict
158
+ kind="dont"
159
+ en="Use a coloured badge with no words. Someone who cannot tell green from red, or who uses a screen reader, gets nothing."
160
+ ko="문구 없이 색만 있는 배지를 쓰지 마세요. 초록과 빨강을 구분하기 어려운 사람이나 화면 낭독기 사용자에게는 아무 정보도 전달되지 않습니다."
161
+ />
162
+
163
+ <En>
164
+
165
+ ## Content
166
+
167
+ - One to three words. No full stop.
168
+ - Sentence case in English ("This group only", not "This Group Only"). No
169
+ 「」, quotation marks or brackets around Korean labels.
170
+ - Describe a state, not an action: 하위 그룹 포함, not "Include subgroups",
171
+ which reads as an option that is still off.
172
+ - Use the same words for the same state everywhere. If one screen says 대기 중,
173
+ another should not say 보류.
174
+
175
+ ## Accessibility
176
+
177
+ What Badge does for you:
178
+
179
+ - It renders as plain text (`<span>`), so the label is read as part of the
180
+ content around it. It is not focusable and has no role, which is right for a
181
+ label that does nothing.
182
+
183
+ What you still have to do:
184
+
185
+ - **Words, not colour alone** (WCAG 1.4.1). Every badge has a visible text
186
+ label; an icon inside it is decorative and gets `aria-hidden`.
187
+ - **Mind the accessible name it joins.** A badge inside a button or link
188
+ becomes part of that control's name (WCAG 4.1.2). Keep the visible label and
189
+ the spoken name the same (WCAG 2.5.3), and put the badge outside when it
190
+ would make the name long or misleading, for example a whole-row link.
191
+ - Place it next to a heading, not inside the `<h2>`, so heading navigation
192
+ reads the heading alone.
193
+ - For a clickable badge (a citation link, `as="a"`), the badge becomes the
194
+ control: give it a name that makes sense on its own.
195
+
196
+ ## Tokens
197
+
198
+ The table is generated from `Badge.styles.ts` and the theme.
199
+
200
+ </En>
201
+
202
+ <Ko>
203
+
204
+ ## 문구
205
+
206
+ - 한 단어에서 세 단어까지 씁니다. 마침표를 찍지 않습니다.
207
+ - 영어는 문장형 대소문자를 씁니다("This group only", "This Group Only"가 아님).
208
+ 한국어 라벨에는 「」, 따옴표, 괄호를 두르지 않습니다.
209
+ - 동작이 아니라 상태를 적습니다. "하위 그룹 포함"이라고 쓰고 "하위 그룹 포함하기"처럼
210
+ 아직 꺼져 있는 선택지로 읽히는 문구는 피합니다.
211
+ - 같은 상태에는 어디서나 같은 말을 씁니다. 한 화면에서 "대기 중"이라고 썼다면 다른
212
+ 화면에서 "보류"라고 쓰지 않습니다.
213
+
214
+ ## 접근성
215
+
216
+ Badge가 알아서 하는 일
217
+
218
+ - 일반 텍스트(`<span>`)로 그려지므로 주변 내용과 함께 읽힙니다. 아무 동작이 없는
219
+ 라벨이라 초점을 받지 않고 역할(role)도 없습니다.
220
+
221
+ 직접 챙겨야 하는 일
222
+
223
+ - **색만으로 알리지 않습니다**(WCAG 1.4.1). 모든 배지에는 눈에 보이는 문구가 있어야
224
+ 하며, 안에 넣은 아이콘은 장식이므로 `aria-hidden`을 붙입니다.
225
+ - **배지가 들어가는 접근 가능한 이름을 확인합니다.** 버튼이나 링크 안의 배지는 그
226
+ 컨트롤 이름의 일부가 됩니다(WCAG 4.1.2). 눈에 보이는 문구와 읽히는 이름이 같아야
227
+ 하고(WCAG 2.5.3), 행 전체를 감싼 링크처럼 이름이 길어지거나 뜻이 흐려지면 배지를
228
+ 컨트롤 밖에 둡니다.
229
+ - 제목 옆에 두고 `<h2>` 안에는 넣지 않습니다. 그래야 제목으로 이동할 때 제목만
230
+ 읽힙니다.
231
+ - 누를 수 있는 배지(인용 링크, `as="a"`)는 그 자체가 컨트롤이 됩니다. 배지만 읽어도
232
+ 뜻이 통하는 이름을 붙입니다.
233
+
234
+ ## 토큰
235
+
236
+ 아래 표는 `Badge.styles.ts`와 테마에서 자동으로 만듭니다.
237
+
238
+ </Ko>
239
+
240
+ <Canvas of={BadgeStories.UsageTokens} sourceState="none" />
241
+
242
+ <En>
243
+
244
+ ## Related
245
+
246
+ - **Tag**: classify (`category`), select (`selected`) or dismiss.
247
+ - **CountBadge**: numbers, such as unread counts.
248
+ - **Banner** / **Toast**: a sentence-length status.
249
+ - **InfoSprinkle** / **Tooltip**: an explanation.
250
+ - **Foundations/Brand & colour usage**: why status colours are never
251
+ decoration.
252
+
253
+ </En>
254
+
255
+ <Ko>
256
+
257
+ ## 관련 컴포넌트
258
+
259
+ - **Tag**: 분류(`category`), 선택(`selected`), 삭제.
260
+ - **CountBadge**: 읽지 않은 개수 같은 숫자.
261
+ - **Banner** / **Toast**: 한 문장 길이의 상태 안내.
262
+ - **InfoSprinkle** / **Tooltip**: 설명.
263
+ - **Foundations/Brand & colour usage**: 상태색을 장식으로 쓰지 않는 이유.
264
+
265
+ </Ko>
@@ -1,8 +1,14 @@
1
- import { VStack } from '@chakra-ui/react';
1
+ import type { ReactNode } from 'react';
2
+ import { Flex, Stack, VStack } from '@chakra-ui/react';
2
3
  import type { Meta, StoryObj } from '@storybook/react';
3
4
 
4
- import { H5, Subtext } from '../Typography';
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
7
+ import { Button } from '../Button';
8
+ import { Card } from '../Card';
9
+ import { H5, Subtext, Text } from '../Typography';
5
10
  import { Banner } from './Banner';
11
+ import { accentStyles, bannerStyles } from './Banner.styles';
6
12
 
7
13
  const meta = {
8
14
  title: 'Components/Banner',
@@ -10,6 +16,14 @@ const meta = {
10
16
  args: {
11
17
  children: 'This is a banner message',
12
18
  },
19
+ argTypes: {
20
+ variant: {
21
+ control: 'select',
22
+ options: ['info', 'success', 'warning', 'danger', 'neutral'],
23
+ description:
24
+ '`info` (default): a system fact to know before acting; nothing is wrong. `success`: finished, and the result stays relevant here. `warning`: still works, read this first. `danger`: failed or blocked; the reader must act. `neutral`: a brand notice with no status.',
25
+ },
26
+ },
13
27
  } satisfies Meta<typeof Banner>;
14
28
 
15
29
  export default meta;
@@ -79,3 +93,139 @@ export const AllVariants: Story = {
79
93
  </VStack>
80
94
  ),
81
95
  };
96
+
97
+ // ───────────────────────── Usage-page specimens ─────────────────────────
98
+ // Pulled into `Banner.usage.mdx` with <Canvas of={…} />. Hidden from the
99
+ // sidebar (`!dev`); `tags` is written on each story because the indexer reads
100
+ // CSF statically.
101
+
102
+ /** A confirm step like FactChat's credit distribution dialog. */
103
+ const ConfirmPanel = ({ children }: { children?: ReactNode }) => (
104
+ <Card p={4} maxW="420px">
105
+ <Stack gap={3}>
106
+ <Text fontWeight="bold">크레딧 1,000을 하위 그룹 3곳에 나눕니다</Text>
107
+ {children}
108
+ <Flex gap={2} justify="flex-end">
109
+ <Button variant="secondary">취소</Button>
110
+ <Button variant="primary">나누기</Button>
111
+ </Flex>
112
+ </Stack>
113
+ </Card>
114
+ );
115
+
116
+ export const DoWarningBeforeAction: Story = {
117
+ tags: ['!dev'],
118
+ parameters: { layout: 'padded' },
119
+ name: 'Usage / Do: warning next to the action it is about',
120
+ render: () => (
121
+ <ConfirmPanel>
122
+ <Banner variant="warning" size="sm" my={0}>
123
+ 나눈 크레딧은 되돌릴 수 없습니다.
124
+ </Banner>
125
+ </ConfirmPanel>
126
+ ),
127
+ };
128
+
129
+ export const DontBannerForTransientSuccess: Story = {
130
+ tags: ['!dev'],
131
+ parameters: { layout: 'padded' },
132
+ name: "Usage / Don't: a banner for a passing success",
133
+ render: () => (
134
+ <Card p={4} maxW="420px">
135
+ <Stack gap={3}>
136
+ <Banner variant="success" size="sm" my={0}>
137
+ 저장했습니다.
138
+ </Banner>
139
+ <Text fontWeight="bold">그룹 설정</Text>
140
+ <Subtext>이름, 설명, 관리자</Subtext>
141
+ </Stack>
142
+ </Card>
143
+ ),
144
+ };
145
+
146
+ export const DoInfoForLockedSetting: Story = {
147
+ tags: ['!dev'],
148
+ parameters: { layout: 'padded' },
149
+ name: 'Usage / Do: info for a locked setting',
150
+ render: () => (
151
+ <Card p={4} maxW="420px">
152
+ <Stack gap={2}>
153
+ <Text fontWeight="bold">인증 방식</Text>
154
+ <Banner variant="info" size="sm" my={0}>
155
+ 인증 방식은 연결을 만든 뒤에는 바꿀 수 없습니다.
156
+ </Banner>
157
+ </Stack>
158
+ </Card>
159
+ ),
160
+ };
161
+
162
+ export const DontStackBanners: Story = {
163
+ tags: ['!dev'],
164
+ parameters: { layout: 'padded' },
165
+ name: "Usage / Don't: a stack of banners",
166
+ render: () => (
167
+ <Stack gap={0} maxW="420px">
168
+ <Banner variant="info" size="sm">
169
+ 이 그룹에만 적용됩니다.
170
+ </Banner>
171
+ <Banner variant="warning" size="sm">
172
+ 크레딧이 7일 뒤 만료됩니다.
173
+ </Banner>
174
+ <Banner variant="warning" size="sm">
175
+ 나눈 크레딧은 되돌릴 수 없습니다.
176
+ </Banner>
177
+ <Banner variant="danger" size="sm">
178
+ 한 번에 50곳까지만 나눌 수 있습니다.
179
+ </Banner>
180
+ </Stack>
181
+ ),
182
+ };
183
+
184
+ export const DoDangerWithAlert: Story = {
185
+ tags: ['!dev'],
186
+ parameters: { layout: 'padded' },
187
+ name: 'Usage / Do: danger with role="alert" when it appears after submit',
188
+ render: () => (
189
+ <Stack gap={3} maxW="420px">
190
+ <Banner variant="danger" size="sm" my={0} role="alert">
191
+ 저장하지 못했습니다. 네트워크 연결을 확인한 뒤 다시 시도해 주세요.
192
+ </Banner>
193
+ <Flex justify="flex-end">
194
+ <Button variant="primary">다시 저장</Button>
195
+ </Flex>
196
+ </Stack>
197
+ ),
198
+ };
199
+
200
+ const VARIANTS = ['info', 'success', 'warning', 'danger', 'neutral'] as const;
201
+
202
+ /** Tokens each variant reads, from `Banner.styles.ts` and the theme. */
203
+ export const UsageTokens: Story = {
204
+ tags: ['!dev'],
205
+ parameters: { layout: 'padded' },
206
+ name: 'Usage / Tokens',
207
+ render: () => (
208
+ <TokenTable
209
+ rows={VARIANTS.flatMap((variant) => [
210
+ {
211
+ token: bannerStyles[variant].bg as string,
212
+ use: <T en={`${variant} · background`} ko={`${variant} · 배경`} />,
213
+ },
214
+ {
215
+ token: bannerStyles[variant].borderColor as string,
216
+ use: <T en={`${variant} · border`} ko={`${variant} · 테두리`} />,
217
+ },
218
+ {
219
+ token: (accentStyles[variant] as { bg: string }).bg,
220
+ use: <T en={`${variant} · accent bar`} ko={`${variant} · 왼쪽 막대`} />,
221
+ },
222
+ {
223
+ token: bannerStyles[variant].color as string,
224
+ use: (
225
+ <T en={`${variant} · text and icon`} ko={`${variant} · 글자와 아이콘`} />
226
+ ),
227
+ },
228
+ ])}
229
+ />
230
+ ),
231
+ };