@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,216 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as CardStories from './Card.stories';
5
+
6
+ <Meta of={CardStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Card
13
+
14
+ A bordered surface that groups content about one thing: a course, a meeting,
15
+ a plan, a setting. Default padding is `8`; most call sites set their own.
16
+
17
+ ## When to use
18
+
19
+ - To group the content and actions of one item, especially in a list or grid
20
+ of similar items.
21
+ - To set a summary or result apart from the page (`variant="wash"`).
22
+ - As a single click target for the whole item (`clickable` with `as`).
23
+
24
+ ## When not to use
25
+
26
+ - Records with the same columns → `Table`.
27
+ - A message about the page or a task → `Banner`.
28
+ - Sections that open and close → `Accordion` or `Collapsible`.
29
+ - Just to add space or a border around a form. Use layout (`Stack`, padding).
30
+
31
+ ## Variants and what they mean
32
+
33
+ </En>
34
+
35
+ <Ko>
36
+
37
+ # Card
38
+
39
+ 한 대상(강좌, 회의, 요금제, 설정)에 관한 내용을 테두리 있는 면으로 묶는 컴포넌트입니다.
40
+ 기본 안쪽 여백은 `8`이며, 대부분의 호출부에서 직접 정합니다.
41
+
42
+ ## 언제 쓰나요
43
+
44
+ - 한 항목의 내용과 동작을 묶을 때. 특히 비슷한 항목이 목록이나 격자로 늘어설 때.
45
+ - 요약이나 결과를 페이지와 구분할 때(`variant="wash"`).
46
+ - 항목 전체를 한 번에 누르는 대상으로 만들 때(`clickable`과 `as`).
47
+
48
+ ## 언제 쓰지 않나요
49
+
50
+ - 같은 열을 가진 기록은 `Table`을 씁니다.
51
+ - 페이지나 작업에 관한 안내는 `Banner`를 씁니다.
52
+ - 여닫는 섹션은 `Accordion`이나 `Collapsible`을 씁니다.
53
+ - 폼 둘레에 여백이나 테두리를 두려는 목적만으로 쓰지 않습니다. 레이아웃(`Stack`, 여백)을
54
+ 씁니다.
55
+
56
+ ## 변형과 뜻
57
+
58
+ </Ko>
59
+
60
+ <ArgTypes of={CardStories} include={['variant', 'clickable']} />
61
+
62
+ <En>
63
+
64
+ | Variant | Means | Use for |
65
+ | --- | --- | --- |
66
+ | `default` | A framed item on the page: `bg.surface` and a `border.subtle` hairline | List items, settings groups |
67
+ | `wash` | A block that summarises or concludes: `bg.muted`, no border | An AI summary, a purchase total, an accepted invitation |
68
+ | `elevated` | A standalone object that sits above the page: soft `sm` shadow | A recording or processing panel |
69
+ | `clickable` | The whole card is one target: hover steps to `bg.subtle` and `border.strong`, nothing lifts | Course cards, chatbot cards |
70
+
71
+ ## Do / Don't
72
+
73
+ </En>
74
+
75
+ <Ko>
76
+
77
+ | 변형 | 뜻 | 쓰는 곳 |
78
+ | --- | --- | --- |
79
+ | `default` | 페이지 위의 테두리 있는 항목. `bg.surface`와 `border.subtle` 선 | 목록 항목, 설정 묶음 |
80
+ | `wash` | 요약하거나 마무리하는 블록. `bg.muted`, 테두리 없음 | AI 요약, 결제 합계, 수락한 초대 |
81
+ | `elevated` | 페이지 위에 떠 있는 독립된 대상. 부드러운 `sm` 그림자 | 녹음 패널, 처리 중 패널 |
82
+ | `clickable` | 카드 전체가 누르는 대상. 호버하면 `bg.subtle`과 `border.strong`으로 바뀌고 떠오르지 않음 | 강좌 카드, 챗봇 카드 |
83
+
84
+ ## 이렇게 하세요 / 이렇게 하지 마세요
85
+
86
+ </Ko>
87
+
88
+ <Canvas of={CardStories.DoClickableIsTheLink} />
89
+ <Verdict
90
+ kind="do"
91
+ en="Make a clickable card the link itself (as='a' or as={NextLink}), so it is focusable and announced as a link."
92
+ ko="누를 수 있는 카드는 카드 자체를 링크로 만듭니다(as='a' 또는 as={NextLink}). 그래야 초점을 받고 링크로 읽힙니다."
93
+ />
94
+
95
+ <Canvas of={CardStories.DontButtonInClickable} />
96
+ <Verdict
97
+ kind="dont"
98
+ en="Put a second control inside a clickable card. A click on 삭제 also opens the card, and as a link or button the card cannot contain another control. Move the action out, or make only the title the link."
99
+ ko="누를 수 있는 카드 안에 다른 컨트롤을 넣지 마세요. '삭제'를 눌러도 카드가 열리고, 카드가 링크나 버튼이면 안에 다른 컨트롤을 둘 수 없습니다. 동작을 밖으로 빼거나 제목만 링크로 만듭니다."
100
+ />
101
+
102
+ <Canvas of={CardStories.DoWashForSummary} />
103
+ <Verdict
104
+ kind="do"
105
+ en="Use wash for a summary or a result. The fill sets it apart, so it needs no border."
106
+ ko="요약이나 결과에는 wash를 씁니다. 배경색이 구분해 주므로 테두리가 필요 없습니다."
107
+ />
108
+
109
+ <Canvas of={CardStories.DontNestedCards} />
110
+ <Verdict
111
+ kind="dont"
112
+ en="Nest cards. Borders inside borders add weight without adding structure; use dividers or a Stack inside one card."
113
+ ko="카드 안에 카드를 넣지 마세요. 테두리 안의 테두리는 구조 없이 무게만 더합니다. 한 카드 안에서 구분선이나 Stack을 씁니다."
114
+ />
115
+
116
+ <En>
117
+
118
+ ## Content
119
+
120
+ - Lead with what identifies the item (its name), then the details.
121
+ - Keep actions for the item at the bottom or top-right, in the same place on
122
+ every card in a list.
123
+
124
+ ## Accessibility
125
+
126
+ What Card does for you:
127
+
128
+ - `as` changes the element and its props, so a clickable card can be a real
129
+ `<a>` or `<button>` and get focus, Enter (and Space for a button) and the
130
+ right role without extra code.
131
+ - The hover state uses a border and a tier step, not a shadow, so it also
132
+ reads in dark mode.
133
+
134
+ What you still have to do:
135
+
136
+ - **A clickable card must be a control** (WCAG 2.1.1, 4.1.2). `clickable` is
137
+ styling only. A `<div>` with `onClick` is not focusable. With
138
+ `as="button"`, also pass `type="button"`.
139
+ - **Nothing interactive inside a clickable card** (nested interactive
140
+ controls, `ACCESSIBILITY.md` §3). If a card needs its own actions, make only
141
+ the title the link.
142
+ - **Inside a `<button>`, only phrasing content.** A card rendered as a button
143
+ must not contain `<div>` or `<p>` children (`ACCESSIBILITY.md` §5, KWCAG
144
+ 5.4.1.1). Use `as="span"` with `display="block"` on the text inside, or use
145
+ a link.
146
+ - Card has no visible focus style of its own. Check the focus indicator of a
147
+ clickable card in your app (WCAG 2.4.7).
148
+
149
+ ## Tokens
150
+
151
+ Read from `Card.tsx` and `clickableStyles` / `variantStyles` in
152
+ `Card.styles.ts`.
153
+
154
+ </En>
155
+
156
+ <Ko>
157
+
158
+ ## 문구
159
+
160
+ - 항목을 알아볼 수 있는 것(이름)을 먼저 쓰고, 세부 내용을 뒤에 씁니다.
161
+ - 항목의 동작은 목록 안의 모든 카드에서 같은 자리(아래쪽이나 오른쪽 위)에 둡니다.
162
+
163
+ ## 접근성
164
+
165
+ Card가 알아서 하는 일
166
+
167
+ - `as`가 요소와 그 속성을 함께 바꾸므로, 누를 수 있는 카드를 실제 `<a>`나
168
+ `<button>`으로 만들 수 있습니다. 그러면 따로 코드를 쓰지 않아도 초점, Enter(버튼이면
169
+ Space도), 알맞은 역할이 생깁니다.
170
+ - 호버 상태는 그림자가 아니라 테두리와 바탕 단계로 표현하므로 다크 모드에서도
171
+ 보입니다.
172
+
173
+ 직접 챙겨야 하는 일
174
+
175
+ - **누를 수 있는 카드는 컨트롤이어야 합니다**(WCAG 2.1.1, 4.1.2). `clickable`은
176
+ 모양만 바꿉니다. `onClick`만 단 `<div>`는 초점을 받지 못합니다. `as="button"`을 쓸
177
+ 때는 `type="button"`도 넘깁니다.
178
+ - **누를 수 있는 카드 안에는 상호작용 요소를 넣지 않습니다**(상호작용 요소 중첩,
179
+ `ACCESSIBILITY.md` 3절). 카드에 따로 동작이 필요하다면 제목만 링크로 만듭니다.
180
+ - **`<button>` 안에는 phrasing content만 넣습니다.** 버튼으로 그린 카드에는 `<div>`나
181
+ `<p>` 자식을 넣지 않습니다(`ACCESSIBILITY.md` 5절, KWCAG 5.4.1.1). 안의 글자에는
182
+ `as="span"`과 `display="block"`을 쓰거나 링크를 씁니다.
183
+ - Card에는 자체 초점 스타일이 없습니다. 앱에서 누를 수 있는 카드의 초점 표시를
184
+ 확인합니다(WCAG 2.4.7).
185
+
186
+ ## 토큰
187
+
188
+ `Card.tsx`와 `Card.styles.ts`의 `clickableStyles` / `variantStyles`에서 읽습니다.
189
+
190
+ </Ko>
191
+
192
+ <Canvas of={CardStories.UsageTokens} sourceState="none" />
193
+
194
+ <En>
195
+
196
+ ## Related
197
+
198
+ - **Table**: records with the same columns.
199
+ - **Banner**: a message about the page.
200
+ - **Accordion** / **Collapsible**: sections that open.
201
+ - **Masonry**: a grid of cards with different heights.
202
+ - **Foundations/Brand & colour usage**: surfaces and layers.
203
+
204
+ </En>
205
+
206
+ <Ko>
207
+
208
+ ## 관련 컴포넌트
209
+
210
+ - **Table**: 같은 열을 가진 기록.
211
+ - **Banner**: 페이지에 관한 안내.
212
+ - **Accordion** / **Collapsible**: 여닫는 섹션.
213
+ - **Masonry**: 높이가 서로 다른 카드의 격자.
214
+ - **Foundations/Brand & colour usage**: 면과 레이어.
215
+
216
+ </Ko>
@@ -2,6 +2,9 @@ import React, { useState } from 'react';
2
2
  import { HStack, Stack, VStack } from '@chakra-ui/react';
3
3
  import type { Meta, StoryObj } from '@storybook/react';
4
4
 
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
7
+ import { Text } from '../Typography';
5
8
  import { Checkbox } from './Checkbox';
6
9
 
7
10
  const meta = {
@@ -28,7 +31,7 @@ export default meta;
28
31
  type Story = StoryObj<typeof meta>;
29
32
 
30
33
  export const Default: Story = {
31
- render: args => (
34
+ render: (args) => (
32
35
  <Checkbox {...args}>
33
36
  <Checkbox.Control />
34
37
  </Checkbox>
@@ -36,7 +39,7 @@ export const Default: Story = {
36
39
  };
37
40
 
38
41
  export const Checked: Story = {
39
- render: args => (
42
+ render: (args) => (
40
43
  <Checkbox {...args}>
41
44
  <Checkbox.Control />
42
45
  </Checkbox>
@@ -45,7 +48,7 @@ export const Checked: Story = {
45
48
  };
46
49
 
47
50
  export const Indeterminate: Story = {
48
- render: args => (
51
+ render: (args) => (
49
52
  <Checkbox {...args}>
50
53
  <Checkbox.Control />
51
54
  </Checkbox>
@@ -54,7 +57,7 @@ export const Indeterminate: Story = {
54
57
  };
55
58
 
56
59
  export const Disabled: Story = {
57
- render: args => (
60
+ render: (args) => (
58
61
  <Checkbox {...args}>
59
62
  <Checkbox.Control />
60
63
  </Checkbox>
@@ -63,7 +66,7 @@ export const Disabled: Story = {
63
66
  };
64
67
 
65
68
  export const DisabledChecked: Story = {
66
- render: args => (
69
+ render: (args) => (
67
70
  <Checkbox {...args}>
68
71
  <Checkbox.Control />
69
72
  </Checkbox>
@@ -72,7 +75,7 @@ export const DisabledChecked: Story = {
72
75
  };
73
76
 
74
77
  export const DisabledIndeterminate: Story = {
75
- render: args => (
78
+ render: (args) => (
76
79
  <Checkbox {...args}>
77
80
  <Checkbox.Control />
78
81
  </Checkbox>
@@ -81,7 +84,7 @@ export const DisabledIndeterminate: Story = {
81
84
  };
82
85
 
83
86
  export const WithLabel: Story = {
84
- render: args => (
87
+ render: (args) => (
85
88
  <Checkbox {...args}>
86
89
  <Checkbox.Control />
87
90
  <Checkbox.Label>Accept terms and conditions</Checkbox.Label>
@@ -92,7 +95,7 @@ export const WithLabel: Story = {
92
95
  export const Sizes: Story = {
93
96
  render: () => (
94
97
  <HStack gap={6} align="center">
95
- {(['xs', 'sm', 'md', 'lg'] as const).map(size => (
98
+ {(['xs', 'sm', 'md', 'lg'] as const).map((size) => (
96
99
  <VStack key={size} gap={2}>
97
100
  <Checkbox size={size} checked={true}>
98
101
  <Checkbox.Control />
@@ -105,7 +108,7 @@ export const Sizes: Story = {
105
108
  };
106
109
 
107
110
  export const LeftLabel: Story = {
108
- render: args => (
111
+ render: (args) => (
109
112
  <Checkbox {...args}>
110
113
  <Checkbox.Label>Label on the left</Checkbox.Label>
111
114
  <Checkbox.Control />
@@ -115,7 +118,7 @@ export const LeftLabel: Story = {
115
118
  };
116
119
 
117
120
  export const RichLabel: Story = {
118
- render: args => (
121
+ render: (args) => (
119
122
  <Checkbox {...args}>
120
123
  <Checkbox.Control />
121
124
  <Checkbox.Label>
@@ -143,8 +146,8 @@ export const Group: Story = {
143
146
  };
144
147
 
145
148
  const handleToggle = (item: string) => {
146
- setSelected(prev =>
147
- prev.includes(item) ? prev.filter(i => i !== item) : [...prev, item]
149
+ setSelected((prev) =>
150
+ prev.includes(item) ? prev.filter((i) => i !== item) : [...prev, item]
148
151
  );
149
152
  };
150
153
 
@@ -158,7 +161,7 @@ export const Group: Story = {
158
161
  <Checkbox.Label>Select All</Checkbox.Label>
159
162
  </Checkbox>
160
163
  <Stack gap={2} pl={6}>
161
- {items.map(item => (
164
+ {items.map((item) => (
162
165
  <Checkbox
163
166
  key={item}
164
167
  checked={selected.includes(item)}
@@ -173,3 +176,127 @@ export const Group: Story = {
173
176
  );
174
177
  },
175
178
  };
179
+
180
+ // ───────────────────────── Usage-page specimens ─────────────────────────
181
+ // Pulled into `Checkbox.usage.mdx` with <Canvas of={…} />. Hidden (`!dev`); `tags`
182
+ // is written out on each story because the indexer reads CSF statically.
183
+
184
+ const CHANNELS = ['이메일', '앱 알림', '문자'];
185
+
186
+ export const DoLabelledList: Story = {
187
+ tags: ['!dev'],
188
+ parameters: { layout: 'padded' },
189
+ name: 'Usage / Do: several independent choices',
190
+ render: () => (
191
+ <Stack gap={2}>
192
+ <Text fontWeight="semibold">알림 받을 곳</Text>
193
+ {CHANNELS.map((channel, i) => (
194
+ <Checkbox key={channel} defaultChecked={i === 0}>
195
+ <Checkbox.Control />
196
+ <Checkbox.Label>{channel}</Checkbox.Label>
197
+ </Checkbox>
198
+ ))}
199
+ </Stack>
200
+ ),
201
+ };
202
+
203
+ export const DoSelectAll: Story = {
204
+ tags: ['!dev'],
205
+ parameters: { layout: 'padded' },
206
+ name: 'Usage / Do: indeterminate for a partial select-all',
207
+ render: () => {
208
+ const [checked, setChecked] = useState([true, false, true]);
209
+ const all = checked.every(Boolean);
210
+ const some = checked.some(Boolean);
211
+ return (
212
+ <Stack gap={2}>
213
+ <Checkbox
214
+ checked={all ? true : some ? 'indeterminate' : false}
215
+ onCheckedChange={() => setChecked(checked.map(() => !all))}
216
+ >
217
+ <Checkbox.Control />
218
+ <Checkbox.Label>전체 선택</Checkbox.Label>
219
+ </Checkbox>
220
+ <Stack gap={2} pl={6}>
221
+ {CHANNELS.map((channel, i) => (
222
+ <Checkbox
223
+ key={channel}
224
+ checked={checked[i]}
225
+ onCheckedChange={(e) =>
226
+ setChecked(checked.map((v, j) => (j === i ? !!e.checked : v)))
227
+ }
228
+ >
229
+ <Checkbox.Control />
230
+ <Checkbox.Label>{channel}</Checkbox.Label>
231
+ </Checkbox>
232
+ ))}
233
+ </Stack>
234
+ </Stack>
235
+ );
236
+ },
237
+ };
238
+
239
+ export const DontNegativeLabel: Story = {
240
+ tags: ['!dev'],
241
+ parameters: { layout: 'padded' },
242
+ name: "Usage / Don't: a negative label",
243
+ render: () => (
244
+ <Checkbox>
245
+ <Checkbox.Control />
246
+ <Checkbox.Label>마케팅 메일 받지 않기</Checkbox.Label>
247
+ </Checkbox>
248
+ ),
249
+ };
250
+
251
+ export const DoHiddenLabelInTable: Story = {
252
+ tags: ['!dev'],
253
+ parameters: { layout: 'padded' },
254
+ name: 'Usage / Do: a hidden label when the row names it',
255
+ render: () => (
256
+ <HStack gap={3}>
257
+ <Checkbox>
258
+ <Checkbox.Control />
259
+ <Checkbox.Label srOnly>김민지 선택</Checkbox.Label>
260
+ </Checkbox>
261
+ <Text>김민지</Text>
262
+ <Text color="fg.muted">minji@company.com</Text>
263
+ </HStack>
264
+ ),
265
+ };
266
+
267
+ /** Tokens `CheckboxControl` reads, as written in `CheckboxControl.tsx`. */
268
+ export const UsageTokens: Story = {
269
+ tags: ['!dev'],
270
+ parameters: { layout: 'padded' },
271
+ name: 'Usage / Tokens',
272
+ render: () => (
273
+ <TokenTable
274
+ rows={[
275
+ {
276
+ token: 'bg.surface',
277
+ use: <T en="Unchecked box" ko="선택 전 상자" />,
278
+ },
279
+ {
280
+ token: 'border.control',
281
+ use: <T en="Unchecked border (3:1)" ko="선택 전 테두리(3:1)" />,
282
+ },
283
+ {
284
+ token: 'primary.main',
285
+ use: (
286
+ <T en="Checked and indeterminate fill" ko="선택·일부 선택 채움" />
287
+ ),
288
+ },
289
+ { token: 'fg.onPrimary', use: <T en="Check mark" ko="체크 표시" /> },
290
+ { token: 'disabled.bg', use: <T en="Disabled box" ko="비활성 상자" /> },
291
+ {
292
+ token: 'disabled.fg',
293
+ use: <T en="Disabled mark" ko="비활성 표시" />,
294
+ },
295
+ {
296
+ token: 'focus.ring',
297
+ use: <T en="Keyboard focus ring" ko="키보드 초점 링" />,
298
+ },
299
+ ]}
300
+ />
301
+ ),
302
+ };
@@ -0,0 +1,214 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as CheckboxStories from './Checkbox.stories';
5
+
6
+ <Meta of={CheckboxStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Checkbox
13
+
14
+ A box the user ticks to include an item or agree to something. Each checkbox
15
+ is independent of the others.
16
+
17
+ ## When to use
18
+
19
+ - Picking any number of items from a short list: notification channels,
20
+ table rows, members to invite.
21
+ - A single yes/no that takes effect when the form is submitted: agreeing to
22
+ terms, "include subgroups".
23
+ - A "select all" row over a list, with `indeterminate` when only some are
24
+ ticked.
25
+
26
+ ## When not to use
27
+
28
+ - Exactly one option out of several → `Radio`, or `SelectField` for a long
29
+ list.
30
+ - A setting that reads as on or off, such as a feature toggle in a settings
31
+ row → `Switch`.
32
+ - An action that runs as soon as it is clicked → `Button`.
33
+
34
+ ## Props
35
+
36
+ </En>
37
+
38
+ <Ko>
39
+
40
+ # Checkbox
41
+
42
+ 항목을 포함하거나 무언가에 동의할 때 표시하는 상자입니다. 체크박스는 서로 영향을
43
+ 주지 않습니다.
44
+
45
+ ## 언제 쓰나요
46
+
47
+ - 짧은 목록에서 원하는 만큼 고를 때: 알림 받을 곳, 표의 행, 초대할 멤버.
48
+ - 폼을 제출할 때 반영되는 예/아니요 하나: 약관 동의, "하위 그룹 포함".
49
+ - 목록 위의 "전체 선택" 행. 일부만 선택됐다면 `indeterminate`를 씁니다.
50
+
51
+ ## 언제 쓰지 않나요
52
+
53
+ - 여러 선택지 중 하나만 고른다면 `Radio`를, 목록이 길면 `SelectField`를 씁니다.
54
+ - 설정 목록의 기능 켜기처럼 켜짐과 꺼짐으로 읽히는 설정은 `Switch`를 씁니다.
55
+ - 누르자마자 실행되는 동작은 `Button`을 씁니다.
56
+
57
+ ## 속성
58
+
59
+ </Ko>
60
+
61
+ <ArgTypes
62
+ of={CheckboxStories}
63
+ include={[
64
+ 'checked',
65
+ 'defaultChecked',
66
+ 'onCheckedChange',
67
+ 'disabled',
68
+ 'invalid',
69
+ 'size',
70
+ 'inputRef',
71
+ ]}
72
+ />
73
+
74
+ <En>
75
+
76
+ Compose it from parts: `<Checkbox>` (the root, rendered as a `<label>`),
77
+ `<Checkbox.Control />` (the box) and `<Checkbox.Label>`. Clicking the label
78
+ toggles the box. `checked` takes `true`, `false` or `'indeterminate'`; `size`
79
+ defaults to `sm`. The tick is drawn on after the box fills, and both happen at
80
+ once when the user prefers reduced motion.
81
+
82
+ ## Do / Don't
83
+
84
+ </En>
85
+
86
+ <Ko>
87
+
88
+ 부품을 조합해서 씁니다. `<Checkbox>`(루트, `<label>`로 그려짐), `<Checkbox.Control />`
89
+ (상자), `<Checkbox.Label>`입니다. 라벨을 눌러도 상자가 바뀝니다. `checked`에는
90
+ `true`, `false`, `'indeterminate'`를 넘기고, `size` 기본값은 `sm`입니다. 상자가 채워진
91
+ 뒤 체크 표시가 그려지며, 사용자가 동작 줄이기를 설정했다면 한 번에 나타납니다.
92
+
93
+ ## 이렇게 하세요 / 이렇게 하지 마세요
94
+
95
+ </Ko>
96
+
97
+ <Canvas of={CheckboxStories.DoLabelledList} />
98
+ <Verdict
99
+ kind="do"
100
+ en="Stack independent choices under a short heading, one per line, label to the right of the box."
101
+ ko="서로 상관없는 선택지는 짧은 제목 아래 한 줄에 하나씩, 상자 오른쪽에 라벨을 두고 쌓습니다."
102
+ />
103
+
104
+ <Canvas of={CheckboxStories.DoSelectAll} />
105
+ <Verdict
106
+ kind="do"
107
+ en="Use indeterminate on the parent when only some children are ticked. Clicking it ticks or clears them all."
108
+ ko="하위 항목이 일부만 선택됐다면 상위 상자를 indeterminate로 둡니다. 상위 상자를 누르면 전부 선택하거나 전부 해제합니다."
109
+ />
110
+
111
+ <Canvas of={CheckboxStories.DontNegativeLabel} />
112
+ <Verdict
113
+ kind="dont"
114
+ en="Write the label as a negative. Ticking 'Don't send' makes the reader undo a double negative to know what they chose."
115
+ ko="라벨을 부정문으로 쓰지 마세요. '받지 않기'에 표시하면 이중 부정을 풀어야 무엇을 골랐는지 압니다."
116
+ />
117
+
118
+ <Canvas of={CheckboxStories.DoHiddenLabelInTable} />
119
+ <Verdict
120
+ kind="do"
121
+ en="When the row already shows what the box selects, keep a Checkbox.Label with srOnly so the box still has a name."
122
+ ko="무엇을 고르는지 행에 이미 보인다면 Checkbox.Label에 srOnly를 주어, 보이지 않아도 상자에 이름이 남게 합니다."
123
+ />
124
+
125
+ <En>
126
+
127
+ ## Content
128
+
129
+ - Phrase the label so that ticking it means yes: 마케팅 메일 받기, not 마케팅
130
+ 메일 받지 않기.
131
+ - Keep labels short and parallel. If one needs explaining, put the
132
+ explanation in a second, muted line inside the label.
133
+ - A heading over a group says what the choices are about (알림 받을 곳).
134
+
135
+ ## Accessibility
136
+
137
+ What Checkbox does for you:
138
+
139
+ - A native checkbox input sits inside the root, so Tab focuses it and Space
140
+ toggles it. The whole label is the click target.
141
+ - The keyboard focus ring (`focus.ring` on a `bg.canvas` gap) shows on the box
142
+ (WCAG 2.4.7). The unchecked border uses `border.control`, built for 3:1
143
+ against the page (WCAG 1.4.11).
144
+ - Checked and indeterminate are drawn with a mark as well as a fill, so the
145
+ state does not rely on colour alone (WCAG 1.4.1).
146
+
147
+ What you still have to do:
148
+
149
+ - **Always render `Checkbox.Label`**, with `srOnly` when it should not show.
150
+ Without it the box has no name (WCAG 4.1.2; KWCAG 5.3.4.1 레이블 제공).
151
+ - Give a group of checkboxes a visible heading so it is clear what the choices
152
+ are about (WCAG 1.3.1).
153
+ - If a choice is required (agreeing to terms), say so in the label or helper
154
+ text and show an error in words when it is missing (WCAG 3.3.1).
155
+
156
+ ## Tokens
157
+
158
+ </En>
159
+
160
+ <Ko>
161
+
162
+ ## 문구
163
+
164
+ - 표시하면 "예"가 되도록 씁니다. "마케팅 메일 받지 않기"가 아니라 "마케팅 메일
165
+ 받기"입니다.
166
+ - 라벨은 짧고 같은 형식으로 씁니다. 설명이 필요하면 라벨 안에 흐린 글자로 한 줄을 더
167
+ 둡니다.
168
+ - 묶음 위의 제목은 무엇에 관한 선택인지 알려 줍니다(알림 받을 곳).
169
+
170
+ ## 접근성
171
+
172
+ Checkbox가 알아서 하는 일
173
+
174
+ - 루트 안에 네이티브 체크박스가 있어서 Tab으로 초점을 옮기고 Space로 바꿀 수
175
+ 있습니다. 라벨 전체를 눌러도 됩니다.
176
+ - 키보드 초점 링(`bg.canvas` 간격 위의 `focus.ring`)이 상자에 보입니다(WCAG 2.4.7).
177
+ 선택 전 테두리는 배경과 3:1이 되도록 만든 `border.control`을 씁니다(WCAG 1.4.11).
178
+ - 선택과 일부 선택 상태는 채움과 함께 표시로도 그려지므로 색에만 기대지 않습니다
179
+ (WCAG 1.4.1).
180
+
181
+ 직접 챙겨야 하는 일
182
+
183
+ - **`Checkbox.Label`을 항상 그립니다.** 보이지 않아야 한다면 `srOnly`를 줍니다.
184
+ 라벨이 없으면 상자에 이름이 없습니다(WCAG 4.1.2, KWCAG 5.3.4.1 레이블 제공).
185
+ - 체크박스 묶음에는 보이는 제목을 두어 무엇에 관한 선택인지 알 수 있게 합니다(WCAG
186
+ 1.3.1).
187
+ - 약관 동의처럼 꼭 선택해야 한다면 라벨이나 도움말에 그렇게 적고, 빠졌을 때는 문구로
188
+ 오류를 알립니다(WCAG 3.3.1).
189
+
190
+ ## 토큰
191
+
192
+ </Ko>
193
+
194
+ <Canvas of={CheckboxStories.UsageTokens} sourceState="none" />
195
+
196
+ <En>
197
+
198
+ ## Related
199
+
200
+ - **Radio**: one option out of several.
201
+ - **Switch**: a setting that is on or off.
202
+ - **Table**: row selection.
203
+
204
+ </En>
205
+
206
+ <Ko>
207
+
208
+ ## 관련 컴포넌트
209
+
210
+ - **Radio**: 여러 선택지 중 하나.
211
+ - **Switch**: 켜짐과 꺼짐으로 읽히는 설정.
212
+ - **Table**: 행 선택.
213
+
214
+ </Ko>