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

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 (533) 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/Code/shikiAdapter.d.ts +3 -1
  30. package/dist/components/Code/shikiAdapter.d.ts.map +1 -1
  31. package/dist/components/Code/shikiAdapter.js +29 -8
  32. package/dist/components/Code/shikiAdapter.js.map +1 -1
  33. package/dist/components/Code/shikiAdapter.mjs +29 -8
  34. package/dist/components/Code/shikiAdapter.mjs.map +1 -1
  35. package/dist/components/CodeTabs/CodeTabs.styles.d.ts +6 -5
  36. package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
  37. package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
  38. package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
  39. package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
  40. package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
  41. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  42. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  43. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  44. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  45. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  46. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  47. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  48. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  49. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  50. package/dist/components/Confetti/confettiColors.js +5 -5
  51. package/dist/components/Confetti/confettiColors.mjs +5 -5
  52. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  53. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  54. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  55. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  56. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  57. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  58. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  59. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  60. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  61. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  62. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  63. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  64. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  65. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  66. package/dist/components/Input/Input.d.ts.map +1 -1
  67. package/dist/components/Input/Input.js +4 -0
  68. package/dist/components/Input/Input.js.map +1 -1
  69. package/dist/components/Input/Input.mjs +4 -0
  70. package/dist/components/Input/Input.mjs.map +1 -1
  71. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  72. package/dist/components/LineGraph/LineGraph.js +4 -5
  73. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  74. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  75. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  76. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  77. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  78. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  79. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  80. package/dist/components/LineGraph/seriesColors.js +8 -7
  81. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  82. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  83. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  84. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  85. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  86. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  87. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  88. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  89. package/dist/components/Modal/ModalCloseButton.js +1 -1
  90. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  91. package/dist/components/NavList/NavList.d.ts +35 -0
  92. package/dist/components/NavList/NavList.d.ts.map +1 -0
  93. package/dist/components/NavList/NavList.js +113 -0
  94. package/dist/components/NavList/NavList.js.map +1 -0
  95. package/dist/components/NavList/NavList.mjs +111 -0
  96. package/dist/components/NavList/NavList.mjs.map +1 -0
  97. package/dist/components/NavList/NavList.styles.d.ts +90 -0
  98. package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
  99. package/dist/components/NavList/NavList.styles.js +104 -0
  100. package/dist/components/NavList/NavList.styles.js.map +1 -0
  101. package/dist/components/NavList/NavList.styles.mjs +97 -0
  102. package/dist/components/NavList/NavList.styles.mjs.map +1 -0
  103. package/dist/components/NavList/NavList.translations.json.js +19 -0
  104. package/dist/components/NavList/NavList.translations.json.js.map +1 -0
  105. package/dist/components/NavList/NavList.translations.json.mjs +14 -0
  106. package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
  107. package/dist/components/NavList/NavList.types.d.ts +140 -0
  108. package/dist/components/NavList/NavList.types.d.ts.map +1 -0
  109. package/dist/components/NavList/NavListContext.d.ts +30 -0
  110. package/dist/components/NavList/NavListContext.d.ts.map +1 -0
  111. package/dist/components/NavList/NavListContext.js +16 -0
  112. package/dist/components/NavList/NavListContext.js.map +1 -0
  113. package/dist/components/NavList/NavListContext.mjs +13 -0
  114. package/dist/components/NavList/NavListContext.mjs.map +1 -0
  115. package/dist/components/NavList/NavListGroup.d.ts +31 -0
  116. package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
  117. package/dist/components/NavList/NavListGroup.js +115 -0
  118. package/dist/components/NavList/NavListGroup.js.map +1 -0
  119. package/dist/components/NavList/NavListGroup.mjs +113 -0
  120. package/dist/components/NavList/NavListGroup.mjs.map +1 -0
  121. package/dist/components/NavList/NavListItem.d.ts +16 -0
  122. package/dist/components/NavList/NavListItem.d.ts.map +1 -0
  123. package/dist/components/NavList/NavListItem.js +284 -0
  124. package/dist/components/NavList/NavListItem.js.map +1 -0
  125. package/dist/components/NavList/NavListItem.mjs +282 -0
  126. package/dist/components/NavList/NavListItem.mjs.map +1 -0
  127. package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
  128. package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
  129. package/dist/components/NavList/NavListSkeleton.js +33 -0
  130. package/dist/components/NavList/NavListSkeleton.js.map +1 -0
  131. package/dist/components/NavList/NavListSkeleton.mjs +31 -0
  132. package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
  133. package/dist/components/NavList/index.d.ts +7 -0
  134. package/dist/components/NavList/index.d.ts.map +1 -0
  135. package/dist/components/Pagination/Pagination.d.ts +11 -10
  136. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  137. package/dist/components/Pagination/Pagination.js +11 -10
  138. package/dist/components/Pagination/Pagination.js.map +1 -1
  139. package/dist/components/Pagination/Pagination.mjs +11 -10
  140. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  141. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  142. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  143. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  144. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  145. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  146. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  147. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  148. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  149. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  150. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  151. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  152. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  153. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  154. package/dist/components/Select/Combobox.d.ts +1 -1
  155. package/dist/components/Select/Combobox.d.ts.map +1 -1
  156. package/dist/components/Select/Combobox.js +9 -2
  157. package/dist/components/Select/Combobox.js.map +1 -1
  158. package/dist/components/Select/Combobox.mjs +10 -3
  159. package/dist/components/Select/Combobox.mjs.map +1 -1
  160. package/dist/components/Select/Select.d.ts +1 -1
  161. package/dist/components/Select/Select.d.ts.map +1 -1
  162. package/dist/components/Select/Select.js +14 -2
  163. package/dist/components/Select/Select.js.map +1 -1
  164. package/dist/components/Select/Select.mjs +15 -3
  165. package/dist/components/Select/Select.mjs.map +1 -1
  166. package/dist/components/Select/Select.styles.d.ts +97 -1
  167. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  168. package/dist/components/Select/Select.styles.js +83 -0
  169. package/dist/components/Select/Select.styles.js.map +1 -1
  170. package/dist/components/Select/Select.styles.mjs +82 -1
  171. package/dist/components/Select/Select.styles.mjs.map +1 -1
  172. package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
  173. package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
  174. package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
  175. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  176. package/dist/components/Textarea/Textarea.js +4 -0
  177. package/dist/components/Textarea/Textarea.js.map +1 -1
  178. package/dist/components/Textarea/Textarea.mjs +4 -0
  179. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  180. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  181. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  182. package/dist/components/Toast/Toast.styles.js +18 -10
  183. package/dist/components/Toast/Toast.styles.js.map +1 -1
  184. package/dist/components/Toast/Toast.styles.mjs +18 -10
  185. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  186. package/dist/components/Typography/Caption.d.ts.map +1 -1
  187. package/dist/components/Typography/Caption.js +1 -1
  188. package/dist/components/Typography/Caption.js.map +1 -1
  189. package/dist/components/Typography/Caption.mjs +1 -1
  190. package/dist/components/Typography/Caption.mjs.map +1 -1
  191. package/dist/components/Typography/H1.d.ts.map +1 -1
  192. package/dist/components/Typography/H1.js +1 -1
  193. package/dist/components/Typography/H1.js.map +1 -1
  194. package/dist/components/Typography/H1.mjs +1 -1
  195. package/dist/components/Typography/H1.mjs.map +1 -1
  196. package/dist/components/Typography/H2.d.ts.map +1 -1
  197. package/dist/components/Typography/H2.js +1 -1
  198. package/dist/components/Typography/H2.js.map +1 -1
  199. package/dist/components/Typography/H2.mjs +1 -1
  200. package/dist/components/Typography/H2.mjs.map +1 -1
  201. package/dist/components/Typography/H3.d.ts.map +1 -1
  202. package/dist/components/Typography/H3.js +1 -1
  203. package/dist/components/Typography/H3.js.map +1 -1
  204. package/dist/components/Typography/H3.mjs +1 -1
  205. package/dist/components/Typography/H3.mjs.map +1 -1
  206. package/dist/components/Typography/H4.d.ts.map +1 -1
  207. package/dist/components/Typography/H4.js +1 -1
  208. package/dist/components/Typography/H4.js.map +1 -1
  209. package/dist/components/Typography/H4.mjs +1 -1
  210. package/dist/components/Typography/H4.mjs.map +1 -1
  211. package/dist/components/Typography/H5.d.ts.map +1 -1
  212. package/dist/components/Typography/H5.js +1 -1
  213. package/dist/components/Typography/H5.js.map +1 -1
  214. package/dist/components/Typography/H5.mjs +1 -1
  215. package/dist/components/Typography/H5.mjs.map +1 -1
  216. package/dist/components/Typography/Link.d.ts.map +1 -1
  217. package/dist/components/Typography/Link.js +1 -1
  218. package/dist/components/Typography/Link.js.map +1 -1
  219. package/dist/components/Typography/Link.mjs +1 -1
  220. package/dist/components/Typography/Link.mjs.map +1 -1
  221. package/dist/components/Typography/Overline.d.ts.map +1 -1
  222. package/dist/components/Typography/Overline.js +1 -1
  223. package/dist/components/Typography/Overline.js.map +1 -1
  224. package/dist/components/Typography/Overline.mjs +1 -1
  225. package/dist/components/Typography/Overline.mjs.map +1 -1
  226. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  227. package/dist/components/Typography/Subtext.js +1 -1
  228. package/dist/components/Typography/Subtext.js.map +1 -1
  229. package/dist/components/Typography/Subtext.mjs +1 -1
  230. package/dist/components/Typography/Subtext.mjs.map +1 -1
  231. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  232. package/dist/components/Typography/Subtitle.js +1 -1
  233. package/dist/components/Typography/Subtitle.js.map +1 -1
  234. package/dist/components/Typography/Subtitle.mjs +1 -1
  235. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  236. package/dist/components/Typography/Text.d.ts.map +1 -1
  237. package/dist/components/Typography/Text.js +1 -1
  238. package/dist/components/Typography/Text.js.map +1 -1
  239. package/dist/components/Typography/Text.mjs +1 -1
  240. package/dist/components/Typography/Text.mjs.map +1 -1
  241. package/dist/hooks/useLanguage.d.ts +5 -0
  242. package/dist/hooks/useLanguage.d.ts.map +1 -1
  243. package/dist/hooks/useLanguage.js +7 -3
  244. package/dist/hooks/useLanguage.js.map +1 -1
  245. package/dist/hooks/useLanguage.mjs +7 -4
  246. package/dist/hooks/useLanguage.mjs.map +1 -1
  247. package/dist/hooks/useTranslate.d.ts.map +1 -1
  248. package/dist/hooks/useTranslate.js +8 -5
  249. package/dist/hooks/useTranslate.js.map +1 -1
  250. package/dist/hooks/useTranslate.mjs +8 -5
  251. package/dist/hooks/useTranslate.mjs.map +1 -1
  252. package/dist/index.d.ts +2 -1
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +13 -0
  255. package/dist/index.js.map +1 -1
  256. package/dist/index.mjs +7 -2
  257. package/dist/index.mjs.map +1 -1
  258. package/dist/theme/colors.d.ts +2 -2
  259. package/dist/theme/colors.d.ts.map +1 -1
  260. package/dist/theme/colors.js +54 -18
  261. package/dist/theme/colors.js.map +1 -1
  262. package/dist/theme/colors.mjs +55 -19
  263. package/dist/theme/colors.mjs.map +1 -1
  264. package/dist/theme/global.d.ts.map +1 -1
  265. package/dist/theme/global.js +19 -1
  266. package/dist/theme/global.js.map +1 -1
  267. package/dist/theme/global.mjs +19 -1
  268. package/dist/theme/global.mjs.map +1 -1
  269. package/dist/theme/index.d.ts.map +1 -1
  270. package/dist/theme/index.js +2 -0
  271. package/dist/theme/index.js.map +1 -1
  272. package/dist/theme/index.mjs +2 -0
  273. package/dist/theme/index.mjs.map +1 -1
  274. package/dist/theme/palette.generated.d.ts +232 -123
  275. package/dist/theme/palette.generated.d.ts.map +1 -1
  276. package/dist/theme/palette.generated.js +233 -123
  277. package/dist/theme/palette.generated.js.map +1 -1
  278. package/dist/theme/palette.generated.mjs +233 -124
  279. package/dist/theme/palette.generated.mjs.map +1 -1
  280. package/dist/theme/paletteSwatches.d.ts +20 -0
  281. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  282. package/dist/theme/recipes/avatar.d.ts +30 -0
  283. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  284. package/dist/theme/recipes/avatar.js +96 -0
  285. package/dist/theme/recipes/avatar.js.map +1 -0
  286. package/dist/theme/recipes/avatar.mjs +94 -0
  287. package/dist/theme/recipes/avatar.mjs.map +1 -0
  288. package/dist/translations/Defaults.translations.json.js +19 -1
  289. package/dist/translations/Defaults.translations.json.js.map +1 -1
  290. package/dist/translations/Defaults.translations.json.mjs +18 -2
  291. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  292. package/dist/utils/disabledControl.d.ts +8 -1
  293. package/dist/utils/disabledControl.d.ts.map +1 -1
  294. package/dist/utils/disabledControl.js +8 -1
  295. package/dist/utils/disabledControl.js.map +1 -1
  296. package/dist/utils/disabledControl.mjs +8 -1
  297. package/dist/utils/disabledControl.mjs.map +1 -1
  298. package/dist/utils/focusRing.d.ts +22 -0
  299. package/dist/utils/focusRing.d.ts.map +1 -1
  300. package/dist/utils/focusRing.js +22 -0
  301. package/dist/utils/focusRing.js.map +1 -1
  302. package/dist/utils/focusRing.mjs +21 -1
  303. package/dist/utils/focusRing.mjs.map +1 -1
  304. package/package.json +2 -1
  305. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  306. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  307. package/src/components/Appear/Appear.usage.mdx +107 -0
  308. package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
  309. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  310. package/src/components/Avatar/Avatar.tsx +118 -21
  311. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  312. package/src/components/Avatar/index.tsx +8 -1
  313. package/src/components/Badge/Badge.stories.tsx +193 -3
  314. package/src/components/Badge/Badge.tsx +5 -3
  315. package/src/components/Badge/Badge.types.ts +7 -5
  316. package/src/components/Badge/Badge.usage.mdx +265 -0
  317. package/src/components/Banner/Banner.stories.tsx +152 -2
  318. package/src/components/Banner/Banner.types.ts +30 -1
  319. package/src/components/Banner/Banner.usage.mdx +233 -0
  320. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  321. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  322. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  323. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  324. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  325. package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
  326. package/src/components/Button/Button.stories.tsx +332 -3
  327. package/src/components/Button/Button.tsx +46 -3
  328. package/src/components/Button/Button.types.ts +38 -1
  329. package/src/components/Button/Button.usage.mdx +358 -0
  330. package/src/components/Button/Button.variants.test.tsx +13 -1
  331. package/src/components/Card/Card.stories.tsx +106 -0
  332. package/src/components/Card/Card.types.ts +12 -0
  333. package/src/components/Card/Card.usage.mdx +216 -0
  334. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  335. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  336. package/src/components/Chip/Chip.usage.mdx +78 -0
  337. package/src/components/Code/Code.stories.tsx +60 -0
  338. package/src/components/Code/Code.test.tsx +116 -0
  339. package/src/components/Code/Code.usage.mdx +187 -0
  340. package/src/components/Code/shikiAdapter.ts +38 -9
  341. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  342. package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
  343. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  344. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  345. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  346. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  347. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  348. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  349. package/src/components/Confetti/Confetti.types.ts +5 -1
  350. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  351. package/src/components/Confetti/confettiColors.ts +5 -5
  352. package/src/components/Container/Container.stories.tsx +32 -0
  353. package/src/components/Container/Container.usage.mdx +130 -0
  354. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  355. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  356. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  357. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  358. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  359. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  360. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  361. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  362. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  363. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  364. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  365. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  366. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  367. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  368. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  369. package/src/components/FileList/FileList.stories.tsx +25 -0
  370. package/src/components/FileList/FileList.usage.mdx +165 -0
  371. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  372. package/src/components/Form/Form.stories.tsx +149 -0
  373. package/src/components/Form/Form.usage.mdx +203 -0
  374. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  375. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  376. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  377. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  378. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  379. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  380. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  381. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  382. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  383. package/src/components/Icon/Icon.stories.tsx +61 -1
  384. package/src/components/Icon/Icon.usage.mdx +158 -0
  385. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  386. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  387. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  388. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  389. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  390. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  391. package/src/components/Input/Input.stories.tsx +180 -0
  392. package/src/components/Input/Input.tsx +4 -0
  393. package/src/components/Input/Input.usage.mdx +278 -0
  394. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  395. package/src/components/LineGraph/LineGraph.tsx +4 -5
  396. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  397. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  398. package/src/components/LineGraph/seriesColors.test.ts +10 -9
  399. package/src/components/LineGraph/seriesColors.ts +18 -16
  400. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  401. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  402. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  403. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  404. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  405. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  406. package/src/components/Masonry/Masonry.types.ts +8 -3
  407. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  408. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  409. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  410. package/src/components/Menu/Menu.stories.tsx +146 -2
  411. package/src/components/Menu/Menu.usage.mdx +238 -0
  412. package/src/components/Menu/MenuItem.types.ts +8 -0
  413. package/src/components/Modal/Modal.stories.tsx +177 -1
  414. package/src/components/Modal/Modal.usage.mdx +262 -0
  415. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  416. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  417. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  418. package/src/components/NavList/NavList.stories.tsx +927 -0
  419. package/src/components/NavList/NavList.styles.ts +114 -0
  420. package/src/components/NavList/NavList.test.tsx +1306 -0
  421. package/src/components/NavList/NavList.translations.json +9 -0
  422. package/src/components/NavList/NavList.tsx +160 -0
  423. package/src/components/NavList/NavList.types.ts +155 -0
  424. package/src/components/NavList/NavList.usage.mdx +545 -0
  425. package/src/components/NavList/NavListContext.ts +25 -0
  426. package/src/components/NavList/NavListGroup.tsx +243 -0
  427. package/src/components/NavList/NavListItem.tsx +543 -0
  428. package/src/components/NavList/NavListSkeleton.tsx +57 -0
  429. package/src/components/NavList/index.ts +15 -0
  430. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  431. package/src/components/Pagination/Pagination.tsx +11 -10
  432. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  433. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  434. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  435. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  436. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  437. package/src/components/Popover/Popover.stories.tsx +104 -1
  438. package/src/components/Popover/Popover.usage.mdx +197 -0
  439. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  440. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  441. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  442. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  443. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  444. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  445. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  446. package/src/components/Radio/Radio.stories.tsx +119 -0
  447. package/src/components/Radio/Radio.usage.mdx +187 -0
  448. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  449. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  450. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  451. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  452. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  453. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  454. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  455. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  456. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  457. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  458. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  459. package/src/components/Select/Combobox.tsx +28 -3
  460. package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
  461. package/src/components/Select/Select.stories.tsx +290 -1
  462. package/src/components/Select/Select.styles.ts +89 -0
  463. package/src/components/Select/Select.tsx +28 -2
  464. package/src/components/Select/Select.usage.mdx +341 -0
  465. package/src/components/Shake/Shake.usage.mdx +107 -0
  466. package/src/components/Slider/Slider.stories.tsx +116 -0
  467. package/src/components/Slider/Slider.usage.mdx +179 -0
  468. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  469. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  470. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  471. package/src/components/Switch/Switch.stories.tsx +131 -6
  472. package/src/components/Switch/Switch.usage.mdx +199 -0
  473. package/src/components/Table/Table.stories.tsx +159 -1
  474. package/src/components/Table/Table.usage.mdx +235 -0
  475. package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
  476. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  477. package/src/components/Tabs/Tabs.usage.mdx +263 -0
  478. package/src/components/Tag/Tag.stories.tsx +181 -4
  479. package/src/components/Tag/Tag.usage.mdx +257 -0
  480. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  481. package/src/components/Textarea/Textarea.tsx +4 -0
  482. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  483. package/src/components/Toast/Toast.stories.tsx +185 -3
  484. package/src/components/Toast/Toast.styles.ts +18 -10
  485. package/src/components/Toast/Toast.usage.mdx +265 -0
  486. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  487. package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
  488. package/src/components/Tree/Tree.stories.tsx +89 -0
  489. package/src/components/Tree/Tree.usage.mdx +207 -0
  490. package/src/components/Typography/Caption.tsx +0 -1
  491. package/src/components/Typography/H1.tsx +0 -1
  492. package/src/components/Typography/H2.tsx +0 -1
  493. package/src/components/Typography/H3.tsx +0 -1
  494. package/src/components/Typography/H4.tsx +0 -1
  495. package/src/components/Typography/H5.tsx +0 -1
  496. package/src/components/Typography/Link.tsx +0 -1
  497. package/src/components/Typography/Overline.tsx +0 -1
  498. package/src/components/Typography/Subtext.tsx +0 -1
  499. package/src/components/Typography/Subtitle.tsx +0 -1
  500. package/src/components/Typography/Text.tsx +0 -1
  501. package/src/components/Typography/Typography.stories.tsx +117 -0
  502. package/src/components/Typography/Typography.usage.mdx +257 -0
  503. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  504. package/src/components/a11y.kwcag.test.tsx +66 -0
  505. package/src/components/claude.md +1 -1
  506. package/src/components/noRawScales.test.ts +5 -1
  507. package/src/foundations/BrandAssets.mdx +637 -0
  508. package/src/foundations/BrandAssets.stories.tsx +680 -0
  509. package/src/foundations/BrandColour.mdx +366 -0
  510. package/src/foundations/BrandColour.stories.tsx +343 -0
  511. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  512. package/src/guidelines/FeedbackActions.mdx +162 -23
  513. package/src/guidelines/_components/Lang.tsx +175 -0
  514. package/src/guidelines/_components/TokenTable.tsx +136 -0
  515. package/src/hooks/useLanguage.ts +8 -3
  516. package/src/hooks/useTranslate.test.tsx +46 -0
  517. package/src/hooks/useTranslate.ts +7 -5
  518. package/src/index.ts +7 -1
  519. package/src/theme/BazePalette.stories.tsx +111 -1
  520. package/src/theme/Palette.stories.tsx +2 -2
  521. package/src/theme/SemanticTokens.mdx +76 -17
  522. package/src/theme/claude.md +23 -9
  523. package/src/theme/colors.ts +71 -18
  524. package/src/theme/contrast.test.ts +57 -0
  525. package/src/theme/global.ts +20 -1
  526. package/src/theme/index.ts +2 -0
  527. package/src/theme/palette.generated.ts +233 -123
  528. package/src/theme/paletteSwatches.test.ts +1 -1
  529. package/src/theme/paletteSwatches.ts +35 -0
  530. package/src/theme/recipes/avatar.ts +92 -0
  531. package/src/translations/Defaults.translations.json +14 -0
  532. package/src/utils/disabledControl.ts +8 -1
  533. package/src/utils/focusRing.ts +23 -0
@@ -0,0 +1,343 @@
1
+ import { Flex, Stack } from '@chakra-ui/react';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ import { Badge } from '../components/Badge';
5
+ import { Button } from '../components/Button';
6
+ import { Card } from '../components/Card';
7
+ import { CountBadge } from '../components/CountBadge';
8
+ import { SendIcon, Sparkles } from '../components/Icon';
9
+ import { IconButton } from '../components/IconButton';
10
+ import { Tag } from '../components/Tag';
11
+ import { Link, Text } from '../components/Typography';
12
+ import { T } from '../guidelines/_components/Lang';
13
+ import { TokenTable } from '../guidelines/_components/TokenTable';
14
+ import { SYSTEM_HUE_NAMES } from '../theme/colors';
15
+
16
+ /**
17
+ * Specimens for `BrandColour.mdx` (Foundations / Brand & colour usage).
18
+ *
19
+ * Every swatch is resolved from the shipped theme by `TokenTable`, and every
20
+ * live example is a real component, so the page follows the palette. Hidden
21
+ * from the sidebar (`!dev`); the MDX page is the entry point.
22
+ */
23
+ const meta: Meta = {
24
+ title: 'Foundations/Brand & colour usage',
25
+ tags: ['!dev'],
26
+ parameters: { layout: 'padded' },
27
+ };
28
+ export default meta;
29
+ type Story = StoryObj;
30
+
31
+ export const Neutrals: Story = {
32
+ render: () => (
33
+ <TokenTable
34
+ rows={[
35
+ {
36
+ token: 'bg.canvas',
37
+ use: <T en="Page (layer 0)" ko="페이지 바탕 (layer 0)" />,
38
+ },
39
+ {
40
+ token: 'layer.1',
41
+ use: <T en="Sidebar, panel" ko="사이드바, 패널" />,
42
+ },
43
+ {
44
+ token: 'layer.2',
45
+ use: <T en="Card on a panel" ko="패널 위 카드" />,
46
+ },
47
+ {
48
+ token: 'bg.muted',
49
+ use: (
50
+ <T
51
+ en="Soft fill: neutral badge, wash card"
52
+ ko="옅은 면: 중립 배지, 카드"
53
+ />
54
+ ),
55
+ },
56
+ {
57
+ token: 'border.default',
58
+ use: <T en="Card border" ko="카드 테두리" />,
59
+ },
60
+ {
61
+ token: 'fg.default',
62
+ use: <T en="Body text (brand black)" ko="본문 글자 (브랜드 블랙)" />,
63
+ },
64
+ {
65
+ token: 'fg.muted',
66
+ use: <T en="Secondary text" ko="보조 글자" />,
67
+ },
68
+ {
69
+ token: 'fg.subtle',
70
+ use: <T en="Captions" ko="설명 글자" />,
71
+ },
72
+ {
73
+ token: 'fg.onPrimary',
74
+ use: <T en="Text on a primary fill" ko="주요 버튼 위 글자" />,
75
+ },
76
+ ]}
77
+ />
78
+ ),
79
+ };
80
+
81
+ export const ButtonStates: Story = {
82
+ render: () => (
83
+ <Stack gap={5}>
84
+ <Flex gap={3} wrap="wrap" align="center">
85
+ <Button variant="primary">
86
+ <T en="Subscribe" ko="구독하기" />
87
+ </Button>
88
+ <Button variant="secondary">
89
+ <T en="Cancel" ko="취소" />
90
+ </Button>
91
+ <Button variant="subtle">
92
+ <T en="More" ko="더보기" />
93
+ </Button>
94
+ <Button variant="ghost">
95
+ <T en="Edit" ko="수정" />
96
+ </Button>
97
+ <Button variant="primary" disabled>
98
+ <T en="Current plan" ko="현재 플랜" />
99
+ </Button>
100
+ </Flex>
101
+ <TokenTable
102
+ rows={[
103
+ {
104
+ token: 'primary.main',
105
+ use: (
106
+ <T
107
+ en="Primary fill, checked controls"
108
+ ko="주요 버튼 바탕, 켜진 컨트롤"
109
+ />
110
+ ),
111
+ },
112
+ { token: 'primary.hover', use: <T en="Hover" ko="호버" /> },
113
+ { token: 'primary.active', use: <T en="Pressed" ko="누름" /> },
114
+ {
115
+ token: 'primary.wash',
116
+ use: (
117
+ <T en="Hover on outline / ghost" ko="테두리·고스트 버튼 호버" />
118
+ ),
119
+ },
120
+ {
121
+ token: 'primary.washActive',
122
+ use: (
123
+ <T en="Pressed on outline / ghost" ko="테두리·고스트 버튼 누름" />
124
+ ),
125
+ },
126
+ {
127
+ token: 'primary.selected',
128
+ use: <T en="Selected row or menu item" ko="선택된 목록 행·메뉴" />,
129
+ },
130
+ {
131
+ token: 'focus.ring',
132
+ use: <T en="Focus ring (never coral)" ko="포커스 링 (코랄 금지)" />,
133
+ },
134
+ {
135
+ token: 'disabled.bg',
136
+ use: (
137
+ <T
138
+ en="Disabled fill (grey, no opacity)"
139
+ ko="비활성 바탕 (회색, 투명도 없음)"
140
+ />
141
+ ),
142
+ },
143
+ {
144
+ token: 'disabled.fg',
145
+ use: <T en="Disabled text" ko="비활성 글자" />,
146
+ },
147
+ {
148
+ token: 'disabled.fgGhost',
149
+ use: (
150
+ <T
151
+ en="Disabled text/icon of a fill-less ghost button"
152
+ ko="바탕 없는 고스트 버튼의 비활성 글자·아이콘"
153
+ />
154
+ ),
155
+ },
156
+ ]}
157
+ />
158
+ </Stack>
159
+ ),
160
+ };
161
+
162
+ export const Distinction: Story = {
163
+ render: () => (
164
+ <Stack gap={5}>
165
+ <Flex gap={3} wrap="wrap" align="center">
166
+ <Badge>Pro</Badge>
167
+ <Card px={3} py={2} borderColor="secondary.border">
168
+ <Text color="secondary.fgStrong" fontWeight="bold">
169
+ +4,500
170
+ </Text>
171
+ </Card>
172
+ </Flex>
173
+ <TokenTable
174
+ rows={[
175
+ {
176
+ token: 'secondary.fg',
177
+ use: <T en="Icons, accent numbers" ko="아이콘, 강조 숫자" />,
178
+ },
179
+ {
180
+ token: 'secondary.fgStrong',
181
+ use: <T en="Text (neutral Badge)" ko="글자 (중립 배지)" />,
182
+ },
183
+ {
184
+ token: 'secondary.border',
185
+ use: <T en="Borders, dividers" ko="테두리, 구분선" />,
186
+ },
187
+ {
188
+ token: 'secondary.surface',
189
+ use: (
190
+ <T
191
+ en="Tint only — not a background"
192
+ ko="틴트 전용 — 바탕으로 쓰지 않음"
193
+ />
194
+ ),
195
+ },
196
+ ]}
197
+ />
198
+ </Stack>
199
+ ),
200
+ };
201
+
202
+ export const Coral: Story = {
203
+ render: () => (
204
+ <Stack gap={5}>
205
+ <Flex gap={4} wrap="wrap" align="center">
206
+ <Button variant="action">
207
+ <Sparkles />
208
+ <T en="Generate image" ko="이미지 생성" />
209
+ </Button>
210
+ <IconButton variant="action" aria-label="보내기">
211
+ <SendIcon />
212
+ </IconButton>
213
+ <CountBadge count={3} label="읽지 않은 알림 3개" />
214
+ </Flex>
215
+ <TokenTable
216
+ rows={[
217
+ {
218
+ token: 'send.bg',
219
+ use: (
220
+ <T
221
+ en="Send button fill, Button accent"
222
+ ko="보내기 버튼 바탕, Button accent"
223
+ />
224
+ ),
225
+ },
226
+ {
227
+ token: 'send.fg',
228
+ use: <T en="Arrow / label on it" ko="그 위 화살표·글자" />,
229
+ },
230
+ {
231
+ token: 'action.iconOnSolid',
232
+ use: (
233
+ <T
234
+ en="Coral icon on the black run button"
235
+ ko="블랙 실행 버튼의 코랄 아이콘"
236
+ />
237
+ ),
238
+ },
239
+ {
240
+ token: 'action.bg',
241
+ use: <T en="Run button fill" ko="실행 버튼 바탕" />,
242
+ },
243
+ {
244
+ token: 'action.mark',
245
+ use: (
246
+ <T
247
+ en="AI-working mark, logo, large type"
248
+ ko="AI 작업 중 표시, 로고, 큰 글씨"
249
+ />
250
+ ),
251
+ },
252
+ {
253
+ token: 'count.bg',
254
+ use: <T en="Unread count badge" ko="읽지 않은 숫자 배지" />,
255
+ },
256
+ { token: 'count.fg', use: <T en="Number on it" ko="그 위 숫자" /> },
257
+ ]}
258
+ />
259
+ </Stack>
260
+ ),
261
+ };
262
+
263
+ const STATUS = [
264
+ { s: 'danger', en: 'Failed', ko: '실패' },
265
+ { s: 'warning', en: 'Pending', ko: '대기 중' },
266
+ { s: 'success', en: 'Done', ko: '완료' },
267
+ { s: 'info', en: 'This group only', ko: '이 그룹만' },
268
+ ] as const;
269
+
270
+ export const Status: Story = {
271
+ render: () => (
272
+ <Stack gap={5}>
273
+ <Flex gap={2} wrap="wrap">
274
+ {STATUS.map(({ s, en, ko }) => (
275
+ <Badge key={s} variant={s}>
276
+ <T en={en} ko={ko} />
277
+ </Badge>
278
+ ))}
279
+ </Flex>
280
+ <TokenTable
281
+ rows={STATUS.flatMap(({ s }) => [
282
+ {
283
+ token: `${s}.bg`,
284
+ use: <T en={`${s} · surface`} ko={`${s} · 면`} />,
285
+ },
286
+ {
287
+ token: `${s}.fg`,
288
+ use: <T en={`${s} · text, icon`} ko={`${s} · 글자, 아이콘`} />,
289
+ },
290
+ {
291
+ token: `${s}.solid`,
292
+ use: <T en={`${s} · fill, bar`} ko={`${s} · 채움, 바`} />,
293
+ },
294
+ ])}
295
+ />
296
+ </Stack>
297
+ ),
298
+ };
299
+
300
+ export const Categories: Story = {
301
+ render: () => (
302
+ <Stack gap={5}>
303
+ <Flex gap={2} wrap="wrap">
304
+ {SYSTEM_HUE_NAMES.map((hue) => (
305
+ <Tag key={hue} category={hue} icon="#">
306
+ {hue}
307
+ </Tag>
308
+ ))}
309
+ </Flex>
310
+ <TokenTable
311
+ rows={SYSTEM_HUE_NAMES.flatMap((hue) => [
312
+ `category.${hue}.surface`,
313
+ `category.${hue}.fg`,
314
+ ])}
315
+ />
316
+ </Stack>
317
+ ),
318
+ };
319
+
320
+ export const Links: Story = {
321
+ render: () => (
322
+ <Stack gap={5}>
323
+ <Text>
324
+ <T en="Read the " ko="자세한 내용은 " />
325
+ <Link href="#">
326
+ <T en="usage policy" ko="이용 정책" />
327
+ </Link>
328
+ <T en=" before you share a chatbot." ko="을 확인하세요." />
329
+ </Text>
330
+ <TokenTable
331
+ rows={[
332
+ {
333
+ token: 'fg.link',
334
+ use: (
335
+ <T en="Link text, with underline" ko="링크 글자 (밑줄과 함께)" />
336
+ ),
337
+ },
338
+ { token: 'fg.linkHover', use: <T en="Link hover" ko="링크 호버" /> },
339
+ ]}
340
+ />
341
+ </Stack>
342
+ ),
343
+ };
@@ -0,0 +1,84 @@
1
+ import { Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle } from './_components/Lang';
4
+
5
+ <Meta title="Guidelines/Component page template" />
6
+
7
+ <LangToggle />
8
+
9
+ <En>
10
+
11
+ # Component page template
12
+
13
+ Every component usage page follows the same eight sections, in this order.
14
+ **Components/Badge/Usage** is the reference page.
15
+
16
+ | # | Section | What goes in it | Source |
17
+ | --- | --- | --- | --- |
18
+ | 1 | **Overview** | One sentence under the title: what the component is for. | New prose |
19
+ | 2 | **When to use / when not to** | Each "not" points to the alternative component. | New prose |
20
+ | 3 | **Variants and what they mean** | `<ArgTypes of={Stories} include={['variant']} />`, then a table of meaning and examples. | The prop JSDoc, written once |
21
+ | 4 | **Do / Don't** | Each specimen is a story, pulled in with `<Canvas of={…} />` and captioned with `<Verdict>`. | New stories |
22
+ | 5 | **Content** | Length, case, wording, Korean label rules. | New prose |
23
+ | 6 | **Accessibility** | What the component does for you, then what you still have to do. Cite WCAG success criteria; cite a KWCAG item only if `ACCESSIBILITY.md` already uses it. | `ACCESSIBILITY.md` |
24
+ | 7 | **Tokens** | The tokens the component reads, light and dark, rendered with `TokenTable` from its `*.styles.ts`. | Generated |
25
+ | 8 | **Related** | Neighbouring components and the Foundations page that explains the rule. | New prose |
26
+
27
+ ## How to write one
28
+
29
+ 1. Create `src/components/<Name>/<Name>.usage.mdx` and attach it to the stories
30
+ with `<Meta of={Stories} name="Usage" />`.
31
+ 2. Put `<LangToggle />` at the top. Write every block twice, in `<En>` and
32
+ `<Ko>`, in the same file. Leave a blank line inside each tag so Markdown
33
+ parses. For short captions use `<T en="…" ko="…" />`.
34
+ 3. Add each Do/Don't specimen to `<Name>.stories.tsx` with
35
+ `tags: ['!dev']` (hidden from the sidebar) and a name starting with
36
+ `Usage /`. **Never paste JSX into the MDX**: a story type-checks, a code
37
+ block does not.
38
+ 4. Use tokens, not hex, in prose. Swatches come from `TokenTable`, which reads
39
+ the shipped theme.
40
+ 5. Korean copy is written, not translated: complete sentences in 합니다체, no
41
+ 한자, no translationese.
42
+
43
+ The doc helpers (`src/guidelines/_components/`) are not exported from the
44
+ library and are excluded from the rollup build.
45
+
46
+ </En>
47
+
48
+ <Ko>
49
+
50
+ # 컴포넌트 페이지 템플릿
51
+
52
+ 컴포넌트 사용 페이지는 모두 같은 여덟 절을 같은 순서로 씁니다. 기준 페이지는
53
+ **Components/Badge/Usage**입니다.
54
+
55
+ | # | 절 | 들어갈 내용 | 출처 |
56
+ | --- | --- | --- | --- |
57
+ | 1 | **개요** | 제목 아래 한 문장. 이 컴포넌트를 어디에 쓰는지 | 새로 작성 |
58
+ | 2 | **언제 쓰나요 / 언제 쓰지 않나요** | "쓰지 않는 경우"마다 대신 쓸 컴포넌트를 적습니다 | 새로 작성 |
59
+ | 3 | **변형과 뜻** | `<ArgTypes of={Stories} include={['variant']} />` 다음에 뜻과 예를 담은 표 | 속성 JSDoc(한 곳에만 작성) |
60
+ | 4 | **이렇게 하세요 / 이렇게 하지 마세요** | 예시마다 스토리를 만들어 `<Canvas of={…} />`로 불러오고 `<Verdict>`로 설명을 답니다 | 새 스토리 |
61
+ | 5 | **문구** | 길이, 대소문자, 표현, 한국어 라벨 규칙 | 새로 작성 |
62
+ | 6 | **접근성** | 컴포넌트가 알아서 하는 일, 그다음 직접 챙겨야 하는 일. WCAG 성공 기준을 인용하고, KWCAG 항목 번호는 `ACCESSIBILITY.md`에 이미 있는 것만 씁니다 | `ACCESSIBILITY.md` |
63
+ | 7 | **토큰** | 컴포넌트가 읽는 토큰의 라이트·다크 값. `*.styles.ts`를 읽어 `TokenTable`로 그립니다 | 자동 생성 |
64
+ | 8 | **관련 컴포넌트** | 이웃 컴포넌트와 규칙을 설명하는 Foundations 페이지 | 새로 작성 |
65
+
66
+ ## 작성 순서
67
+
68
+ 1. `src/components/<Name>/<Name>.usage.mdx`를 만들고
69
+ `<Meta of={Stories} name="Usage" />`로 스토리에 붙입니다.
70
+ 2. 맨 위에 `<LangToggle />`을 둡니다. 모든 블록을 한 파일 안에서 `<En>`과 `<Ko>`로 두
71
+ 번 씁니다. 마크다운이 해석되도록 태그 안쪽에 빈 줄을 둡니다. 짧은 설명은
72
+ `<T en="…" ko="…" />`를 씁니다.
73
+ 3. 이렇게 하세요/하지 마세요 예시는 `<Name>.stories.tsx`에 `tags: ['!dev']`(사이드바에서
74
+ 숨김)를 달고 이름을 `Usage /`로 시작해 추가합니다. **MDX에 JSX를 붙여 넣지 않습니다.**
75
+ 스토리는 타입 검사를 받지만 코드 블록은 받지 않습니다.
76
+ 4. 본문에는 16진수 값이 아니라 토큰 이름을 씁니다. 색 견본은 실제 테마를 읽는
77
+ `TokenTable`로 그립니다.
78
+ 5. 한국어는 번역하지 말고 처음부터 씁니다. 합니다체의 완전한 문장으로 쓰고, 한자와
79
+ 번역투를 쓰지 않습니다.
80
+
81
+ 문서용 도구(`src/guidelines/_components/`)는 라이브러리에서 내보내지 않으며 rollup
82
+ 빌드에서도 빠집니다.
83
+
84
+ </Ko>
@@ -1,7 +1,13 @@
1
1
  import { Meta } from '@storybook/blocks';
2
2
 
3
+ import { En, Ko, LangToggle } from './_components/Lang';
4
+
3
5
  <Meta title="Guidelines/Actions in feedback surfaces" />
4
6
 
7
+ <LangToggle />
8
+
9
+ <En>
10
+
5
11
  # Actions in feedback surfaces
6
12
 
7
13
  Toasts, inline banners, panes and dialogs often need a control: "buy credits",
@@ -20,13 +26,13 @@ container it sits in?**
20
26
  ## Why this exists
21
27
 
22
28
  Until `Toast` had an `action` prop, callers who wanted a button in a toast put
23
- a `<Button>` inside `description` and styled it themselves. On the credit-402
24
- toast in FactChat that produced a neutral outline button (`#494949` text, ink
25
- hairline) on a rose toast (`#FFE6E8` background, `#69000A` text). It carried
26
- none of the toast's colors, so it read as a separate card dropped on top.
29
+ a `<Button>` inside `description` and styled it themselves. On FactChat's
30
+ credit-402 toast (4.x) that produced a neutral outline button on a rose
31
+ toast. It carried none of the toast's colours, so it read as a separate card
32
+ dropped on top.
27
33
 
28
34
  The fix is one recipe for every toast: the action uses the toast's own text
29
- color, the same treatment as the close ×.
35
+ colour, the same treatment as the close ×.
30
36
 
31
37
  ---
32
38
 
@@ -37,11 +43,11 @@ color, the same treatment as the close ×.
37
43
  Toasts and inline banners carry **text actions**. Buttons belong to surfaces
38
44
  that own the space: a pane, a dialog, an empty state.
39
45
 
40
- ### 2. The action takes the status color
46
+ ### 2. The action takes the status colour
41
47
 
42
- Inside a tinted container the action uses **that container's text color**
43
- (`danger.dark` on an error toast, `primary.dark` on an info toast). Never a
44
- neutral control.
48
+ Inside a tinted container the action uses **that container's text colour**:
49
+ `danger.fg` on an error toast, `info.fg` on an info toast (`{status}.fg` in
50
+ general). Never a neutral control.
45
51
 
46
52
  ### 3. One action per toast; dismiss is ×
47
53
 
@@ -55,9 +61,9 @@ credits to continue". Toast copy stays **within 2 lines**.
55
61
 
56
62
  ### 5. In a pane, the fix is the primary
57
63
 
58
- In a pane or empty state, the action that fixes the problem is the primary
59
- (ink solid, `colorPalette="neutral" variant="solid"`). Dismiss is outline
60
- neutral (`colorPalette="neutral" variant="outline"`).
64
+ In a pane or empty state, the action that fixes the problem is the primary:
65
+ `<Button variant="primary">` (black fill). Dismiss is
66
+ `<Button variant="secondary">` (outlined).
61
67
 
62
68
  ### 6. Toasts with an action stay longer
63
69
 
@@ -69,12 +75,12 @@ action defaults to **8s** instead of 5s. `useToast` does this for you when
69
75
 
70
76
  ## Which control goes where
71
77
 
72
- | Surface | Primary action | Secondary / dismiss | Max actions | Copy |
73
- | ------------------ | -------------------------------------------------- | -------------------------------- | ----------- | ------------------------------------------ |
74
- | Toast | Text action in status color, via the `action` prop | × only | 1 | ≤ 2 lines, no hint that repeats the action |
75
- | Inline banner | Trailing text action in status color | × if dismissible | 1 | 1 line, wraps on mobile |
76
- | Pane / empty state | Ink solid (`neutral` `solid`) | Outline neutral | 2 | Title + reason + optional hint |
77
- | Dialog | Ink solid, right | Outline neutral, left of primary | 2 | Title + body |
78
+ | Surface | Primary action | Secondary / dismiss | Max actions | Copy |
79
+ | --- | --- | --- | --- | --- |
80
+ | Toast | Text action in `{status}.fg`, via the `action` prop | × only | 1 | ≤ 2 lines, no hint that repeats the action |
81
+ | Inline banner | Trailing text action in `{status}.fg`, passed as children (Banner has no `action` prop) | × if dismissible | 1 | 1 line, wraps on mobile |
82
+ | Pane / empty state | `Button variant="primary"` | `Button variant="secondary"` | 2 | Title + reason + optional hint |
83
+ | Dialog | `Button variant="primary"`, right | `Button variant="secondary"`, left of primary | 2 | Title + body |
78
84
 
79
85
  ---
80
86
 
@@ -97,7 +103,7 @@ showToast({
97
103
  ```
98
104
 
99
105
  - The action renders under the description, aligned with the text column, in
100
- the toast's status color with the same hover tint as the ×.
106
+ the toast's `{status}.fg` with the same hover tint as the × (`{status}.border`).
101
107
  - Clicking it calls `onClick` and dismisses the toast.
102
108
  - `label` accepts any `ReactNode`, but keep it a short verb phrase.
103
109
  - An explicit `duration` (including `null` for a persistent toast) always wins.
@@ -108,21 +114,21 @@ showToast({
108
114
  ### Don't: a button inside `description`
109
115
 
110
116
  ```tsx
111
- // ✗ A neutral control dropped onto a tinted toast; it carries none of the
112
- // toast's colors, adds a third line, and dismissal is left to the caller.
117
+ // ✗ A separate control dropped onto a tinted toast; it carries none of the
118
+ // toast's colours, adds a third line, and dismissal is left to the caller.
113
119
  showToast({
114
120
  status: 'error',
115
121
  description: (
116
122
  <>
117
123
  크레딧이 부족합니다. 크레딧을 구매하면 계속 사용할 수 있습니다.
118
- <Button colorPalette="neutral" variant="outline" onClick={buy}>
124
+ <Button variant="secondary" onClick={buy}>
119
125
  크레딧 구매
120
126
  </Button>
121
127
  </>
122
128
  ),
123
129
  });
124
130
 
125
- // ✓ One action, in the toast's color, and the copy doesn't repeat it.
131
+ // ✓ One action, in the toast's colour, and the copy doesn't repeat it.
126
132
  showToast({
127
133
  status: 'error',
128
134
  description: '크레딧이 부족합니다.',
@@ -131,3 +137,136 @@ showToast({
131
137
  ```
132
138
 
133
139
  See **Components/Toast → Action / …** for each status and a short-message case.
140
+
141
+ </En>
142
+
143
+ <Ko>
144
+
145
+ # 피드백 영역 안의 동작
146
+
147
+ 토스트, 인라인 배너, 패널, 대화상자에는 "크레딧 구매", "되돌리기", "파일 열기" 같은
148
+ 컨트롤이 자주 필요합니다. 이 페이지는 어떤 컨트롤을 어디에 두고 어떤 모양으로 그리는지
149
+ 정리합니다.
150
+
151
+ 모든 경우에 묻는 질문은 하나입니다. **그 컨트롤이 놓인 영역의 일부처럼 보이나요?**
152
+
153
+ > 전후 비교와 직접 해 볼 수 있는 시안:
154
+ > [feedback-actions-proto.apps.mindlogic.tools](https://feedback-actions-proto.apps.mindlogic.tools/)
155
+ > (사내 로그인 필요)
156
+
157
+ ---
158
+
159
+ ## 왜 필요한가요
160
+
161
+ `Toast`에 `action` 속성이 생기기 전에는 토스트에 버튼을 넣으려면 `description` 안에
162
+ `<Button>`을 넣고 직접 꾸며야 했습니다. FactChat의 크레딧 부족(402) 토스트(4.x)에서는
163
+ 그 결과 분홍 토스트 위에 중립 테두리 버튼이 올라갔습니다. 토스트의 색을 하나도 따르지
164
+ 않아서 다른 카드를 얹어 놓은 것처럼 보였습니다.
165
+
166
+ 그래서 모든 토스트에 같은 방식을 씁니다. 동작은 닫기 ×와 똑같이 토스트 자신의 글자
167
+ 색을 씁니다.
168
+
169
+ ---
170
+
171
+ ## 규칙
172
+
173
+ ### 1. 영역의 무게에 맞춥니다
174
+
175
+ 토스트와 인라인 배너에는 **텍스트 동작**을 둡니다. 버튼은 패널, 대화상자, 빈 화면처럼
176
+ 공간을 차지하는 영역에 둡니다.
177
+
178
+ ### 2. 동작은 상태색을 따릅니다
179
+
180
+ 색이 있는 영역 안의 동작은 **그 영역의 글자 색**을 씁니다. 오류 토스트에서는
181
+ `danger.fg`, 정보 토스트에서는 `info.fg`, 일반적으로는 `{status}.fg`입니다. 중립
182
+ 컨트롤을 두지 않습니다.
183
+
184
+ ### 3. 토스트에는 동작을 하나만 두고, 닫기는 ×로 합니다
185
+
186
+ 토스트에 「닫기」나 「취소」 버튼을 두지 않습니다. ×가 이미 그 일을 합니다. 동작이 두
187
+ 개 필요한 메시지라면 토스트가 아니라 대화상자나 패널을 씁니다.
188
+
189
+ ### 4. 동작을 문구에서 되풀이하지 않습니다
190
+
191
+ 동작이 「크레딧 구매」라면 메시지에 "계속하려면 크레딧을 구매하세요"를 다시 쓰지
192
+ 않습니다. 토스트 문구는 **2줄 이내**로 씁니다.
193
+
194
+ ### 5. 패널에서는 문제를 푸는 동작이 주요 버튼입니다
195
+
196
+ 패널이나 빈 화면에서는 문제를 해결하는 동작을 `<Button variant="primary">`(블랙
197
+ 채움)로 둡니다. 닫기는 `<Button variant="secondary">`(테두리)입니다.
198
+
199
+ ### 6. 동작이 있는 토스트는 더 오래 보입니다
200
+
201
+ 읽는 사람은 메시지를 읽고 나서 누를지 정해야 합니다. 동작이 있는 토스트는 기본
202
+ 표시 시간이 5초가 아니라 **8초**입니다. `duration`을 주지 않으면 `useToast`가 알아서
203
+ 맞춥니다.
204
+
205
+ ---
206
+
207
+ ## 어떤 컨트롤을 어디에
208
+
209
+ | 영역 | 주요 동작 | 보조 동작 / 닫기 | 최대 개수 | 문구 |
210
+ | --- | --- | --- | --- | --- |
211
+ | 토스트 | `action` 속성으로 넣은 `{status}.fg` 텍스트 동작 | ×만 | 1 | 2줄 이내, 동작을 되풀이하는 안내 없음 |
212
+ | 인라인 배너 | 끝에 붙인 `{status}.fg` 텍스트 동작, children으로 전달(Banner에는 `action` 속성이 없음) | 닫을 수 있으면 × | 1 | 1줄, 모바일에서는 줄바꿈 |
213
+ | 패널 / 빈 화면 | `Button variant="primary"` | `Button variant="secondary"` | 2 | 제목 + 이유 + 필요하면 안내 |
214
+ | 대화상자 | `Button variant="primary"`, 오른쪽 | `Button variant="secondary"`, 주요 버튼 왼쪽 | 2 | 제목 + 본문 |
215
+
216
+ ---
217
+
218
+ ## 사용법
219
+
220
+ ```tsx
221
+ import { useToast } from '@mindlogic-ai/logician-ui';
222
+
223
+ const showToast = useToast();
224
+
225
+ showToast({
226
+ status: 'error',
227
+ description: '크레딧이 부족해 응답을 생성하지 못했습니다.',
228
+ action: {
229
+ label: '크레딧 구매',
230
+ onClick: openCreditPurchaseModal,
231
+ },
232
+ // action이 있으므로 duration 기본값은 8000입니다
233
+ });
234
+ ```
235
+
236
+ - 동작은 설명 아래, 글자 열에 맞춰 토스트의 `{status}.fg` 색으로 그려지며 호버하면 ×와
237
+ 같은 틴트(`{status}.border`)가 깔립니다.
238
+ - 누르면 `onClick`을 부르고 토스트를 닫습니다.
239
+ - `label`에는 어떤 `ReactNode`든 넣을 수 있지만 짧은 동사구로 씁니다.
240
+ - `duration`을 직접 주면(계속 떠 있는 토스트의 `null` 포함) 항상 그 값을 따릅니다.
241
+ - Chakra의 `toaster.create({ action: { label, onClick } })`도 같은 모양으로 그려집니다.
242
+ 다만 이 경우 label은 문자열이어야 하고, 표시 시간 기본값은 8초가 아니라 Chakra의
243
+ 기본값입니다.
244
+
245
+ ### 이렇게 하지 마세요: `description` 안의 버튼
246
+
247
+ ```tsx
248
+ // ✗ 색이 있는 토스트 위에 별개의 컨트롤을 얹었습니다. 토스트의 색을 따르지 않고,
249
+ // 줄이 하나 늘고, 닫는 처리도 호출하는 쪽에 떠넘깁니다.
250
+ showToast({
251
+ status: 'error',
252
+ description: (
253
+ <>
254
+ 크레딧이 부족합니다. 크레딧을 구매하면 계속 사용할 수 있습니다.
255
+ <Button variant="secondary" onClick={buy}>
256
+ 크레딧 구매
257
+ </Button>
258
+ </>
259
+ ),
260
+ });
261
+
262
+ // ✓ 동작은 하나, 토스트의 색을 따르고, 문구에서 되풀이하지 않습니다.
263
+ showToast({
264
+ status: 'error',
265
+ description: '크레딧이 부족합니다.',
266
+ action: { label: '크레딧 구매', onClick: buy },
267
+ });
268
+ ```
269
+
270
+ 상태별 예시와 짧은 메시지 예시는 **Components/Toast → Action / …** 에 있습니다.
271
+
272
+ </Ko>