@mindlogic-ai/logician-ui 5.0.0-alpha.1 → 5.0.0-alpha.11

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 (433) hide show
  1. package/dist/components/Avatar/Avatar.d.ts +68 -11
  2. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  3. package/dist/components/Avatar/Avatar.js +38 -5
  4. package/dist/components/Avatar/Avatar.js.map +1 -1
  5. package/dist/components/Avatar/Avatar.mjs +37 -5
  6. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  7. package/dist/components/Avatar/index.d.ts +2 -2
  8. package/dist/components/Avatar/index.d.ts.map +1 -1
  9. package/dist/components/Badge/Badge.d.ts.map +1 -1
  10. package/dist/components/Badge/Badge.js +5 -3
  11. package/dist/components/Badge/Badge.js.map +1 -1
  12. package/dist/components/Badge/Badge.mjs +5 -3
  13. package/dist/components/Badge/Badge.mjs.map +1 -1
  14. package/dist/components/Badge/Badge.types.d.ts +7 -5
  15. package/dist/components/Badge/Badge.types.d.ts.map +1 -1
  16. package/dist/components/Banner/Banner.types.d.ts +24 -1
  17. package/dist/components/Banner/Banner.types.d.ts.map +1 -1
  18. package/dist/components/BottomSheet/BottomSheet.styles.d.ts +2 -2
  19. package/dist/components/Button/Button.d.ts.map +1 -1
  20. package/dist/components/Button/Button.js +10 -2
  21. package/dist/components/Button/Button.js.map +1 -1
  22. package/dist/components/Button/Button.mjs +10 -2
  23. package/dist/components/Button/Button.mjs.map +1 -1
  24. package/dist/components/Card/Card.types.d.ts +12 -0
  25. package/dist/components/Card/Card.types.d.ts.map +1 -1
  26. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  27. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  28. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  29. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  30. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  31. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  32. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  33. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  34. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  35. package/dist/components/Confetti/confettiColors.js +5 -5
  36. package/dist/components/Confetti/confettiColors.mjs +5 -5
  37. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  38. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  39. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  40. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  41. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  42. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  43. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  44. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  45. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  46. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  47. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  48. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  49. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  50. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  51. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  52. package/dist/components/LineGraph/LineGraph.js +4 -5
  53. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  54. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  55. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  56. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  57. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  58. package/dist/components/LineGraph/seriesColors.d.ts +12 -6
  59. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  60. package/dist/components/LineGraph/seriesColors.js +8 -7
  61. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  62. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  63. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  64. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  65. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  66. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  67. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  68. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  69. package/dist/components/Modal/ModalCloseButton.js +1 -1
  70. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  71. package/dist/components/Pagination/Pagination.d.ts +11 -10
  72. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  73. package/dist/components/Pagination/Pagination.js +11 -10
  74. package/dist/components/Pagination/Pagination.js.map +1 -1
  75. package/dist/components/Pagination/Pagination.mjs +11 -10
  76. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  77. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  78. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  79. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  80. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  81. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  82. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  83. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  84. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  85. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  86. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  87. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  88. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  89. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  90. package/dist/components/Select/Select.d.ts +5 -1
  91. package/dist/components/Select/Select.d.ts.map +1 -1
  92. package/dist/components/Select/Select.js +2 -2
  93. package/dist/components/Select/Select.js.map +1 -1
  94. package/dist/components/Select/Select.mjs +3 -3
  95. package/dist/components/Select/Select.mjs.map +1 -1
  96. package/dist/components/Select/Select.styles.d.ts +38 -0
  97. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  98. package/dist/components/Select/Select.styles.js +40 -0
  99. package/dist/components/Select/Select.styles.js.map +1 -1
  100. package/dist/components/Select/Select.styles.mjs +40 -2
  101. package/dist/components/Select/Select.styles.mjs.map +1 -1
  102. package/dist/components/Select/Select.types.d.ts +10 -0
  103. package/dist/components/Select/Select.types.d.ts.map +1 -1
  104. package/dist/components/Select/SelectField.d.ts +1 -1
  105. package/dist/components/Select/SelectField.d.ts.map +1 -1
  106. package/dist/components/Select/SelectField.js +3 -2
  107. package/dist/components/Select/SelectField.js.map +1 -1
  108. package/dist/components/Select/SelectField.mjs +3 -2
  109. package/dist/components/Select/SelectField.mjs.map +1 -1
  110. package/dist/components/Select/index.d.ts +1 -0
  111. package/dist/components/Select/index.d.ts.map +1 -1
  112. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  113. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  114. package/dist/components/Toast/Toast.styles.js +18 -10
  115. package/dist/components/Toast/Toast.styles.js.map +1 -1
  116. package/dist/components/Toast/Toast.styles.mjs +18 -10
  117. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  118. package/dist/components/Typography/Caption.d.ts.map +1 -1
  119. package/dist/components/Typography/Caption.js +1 -1
  120. package/dist/components/Typography/Caption.js.map +1 -1
  121. package/dist/components/Typography/Caption.mjs +1 -1
  122. package/dist/components/Typography/Caption.mjs.map +1 -1
  123. package/dist/components/Typography/H1.d.ts.map +1 -1
  124. package/dist/components/Typography/H1.js +1 -1
  125. package/dist/components/Typography/H1.js.map +1 -1
  126. package/dist/components/Typography/H1.mjs +1 -1
  127. package/dist/components/Typography/H1.mjs.map +1 -1
  128. package/dist/components/Typography/H2.d.ts.map +1 -1
  129. package/dist/components/Typography/H2.js +1 -1
  130. package/dist/components/Typography/H2.js.map +1 -1
  131. package/dist/components/Typography/H2.mjs +1 -1
  132. package/dist/components/Typography/H2.mjs.map +1 -1
  133. package/dist/components/Typography/H3.d.ts.map +1 -1
  134. package/dist/components/Typography/H3.js +1 -1
  135. package/dist/components/Typography/H3.js.map +1 -1
  136. package/dist/components/Typography/H3.mjs +1 -1
  137. package/dist/components/Typography/H3.mjs.map +1 -1
  138. package/dist/components/Typography/H4.d.ts.map +1 -1
  139. package/dist/components/Typography/H4.js +1 -1
  140. package/dist/components/Typography/H4.js.map +1 -1
  141. package/dist/components/Typography/H4.mjs +1 -1
  142. package/dist/components/Typography/H4.mjs.map +1 -1
  143. package/dist/components/Typography/H5.d.ts.map +1 -1
  144. package/dist/components/Typography/H5.js +1 -1
  145. package/dist/components/Typography/H5.js.map +1 -1
  146. package/dist/components/Typography/H5.mjs +1 -1
  147. package/dist/components/Typography/H5.mjs.map +1 -1
  148. package/dist/components/Typography/Link.d.ts.map +1 -1
  149. package/dist/components/Typography/Link.js +1 -1
  150. package/dist/components/Typography/Link.js.map +1 -1
  151. package/dist/components/Typography/Link.mjs +1 -1
  152. package/dist/components/Typography/Link.mjs.map +1 -1
  153. package/dist/components/Typography/Overline.d.ts.map +1 -1
  154. package/dist/components/Typography/Overline.js +1 -1
  155. package/dist/components/Typography/Overline.js.map +1 -1
  156. package/dist/components/Typography/Overline.mjs +1 -1
  157. package/dist/components/Typography/Overline.mjs.map +1 -1
  158. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  159. package/dist/components/Typography/Subtext.js +1 -1
  160. package/dist/components/Typography/Subtext.js.map +1 -1
  161. package/dist/components/Typography/Subtext.mjs +1 -1
  162. package/dist/components/Typography/Subtext.mjs.map +1 -1
  163. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  164. package/dist/components/Typography/Subtitle.js +1 -1
  165. package/dist/components/Typography/Subtitle.js.map +1 -1
  166. package/dist/components/Typography/Subtitle.mjs +1 -1
  167. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  168. package/dist/components/Typography/Text.d.ts.map +1 -1
  169. package/dist/components/Typography/Text.js +1 -1
  170. package/dist/components/Typography/Text.js.map +1 -1
  171. package/dist/components/Typography/Text.mjs +1 -1
  172. package/dist/components/Typography/Text.mjs.map +1 -1
  173. package/dist/hooks/useLanguage.d.ts +5 -0
  174. package/dist/hooks/useLanguage.d.ts.map +1 -1
  175. package/dist/hooks/useLanguage.js +7 -3
  176. package/dist/hooks/useLanguage.js.map +1 -1
  177. package/dist/hooks/useLanguage.mjs +7 -4
  178. package/dist/hooks/useLanguage.mjs.map +1 -1
  179. package/dist/hooks/useTranslate.d.ts.map +1 -1
  180. package/dist/hooks/useTranslate.js +8 -5
  181. package/dist/hooks/useTranslate.js.map +1 -1
  182. package/dist/hooks/useTranslate.mjs +8 -5
  183. package/dist/hooks/useTranslate.mjs.map +1 -1
  184. package/dist/index.js +1 -0
  185. package/dist/index.js.map +1 -1
  186. package/dist/index.mjs +1 -1
  187. package/dist/theme/colors.d.ts +2 -2
  188. package/dist/theme/colors.d.ts.map +1 -1
  189. package/dist/theme/colors.js +37 -2
  190. package/dist/theme/colors.js.map +1 -1
  191. package/dist/theme/colors.mjs +38 -3
  192. package/dist/theme/colors.mjs.map +1 -1
  193. package/dist/theme/global.d.ts.map +1 -1
  194. package/dist/theme/global.js +18 -0
  195. package/dist/theme/global.js.map +1 -1
  196. package/dist/theme/global.mjs +18 -0
  197. package/dist/theme/global.mjs.map +1 -1
  198. package/dist/theme/index.d.ts.map +1 -1
  199. package/dist/theme/index.js +2 -0
  200. package/dist/theme/index.js.map +1 -1
  201. package/dist/theme/index.mjs +2 -0
  202. package/dist/theme/index.mjs.map +1 -1
  203. package/dist/theme/palette.generated.d.ts +106 -0
  204. package/dist/theme/palette.generated.d.ts.map +1 -1
  205. package/dist/theme/palette.generated.js +107 -0
  206. package/dist/theme/palette.generated.js.map +1 -1
  207. package/dist/theme/palette.generated.mjs +107 -1
  208. package/dist/theme/palette.generated.mjs.map +1 -1
  209. package/dist/theme/paletteSwatches.d.ts +20 -0
  210. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  211. package/dist/theme/recipes/avatar.d.ts +30 -0
  212. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  213. package/dist/theme/recipes/avatar.js +96 -0
  214. package/dist/theme/recipes/avatar.js.map +1 -0
  215. package/dist/theme/recipes/avatar.mjs +94 -0
  216. package/dist/theme/recipes/avatar.mjs.map +1 -0
  217. package/dist/translations/Defaults.translations.json.js +9 -0
  218. package/dist/translations/Defaults.translations.json.js.map +1 -1
  219. package/dist/translations/Defaults.translations.json.mjs +9 -1
  220. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  221. package/dist/utils/disabledControl.d.ts +8 -1
  222. package/dist/utils/disabledControl.d.ts.map +1 -1
  223. package/dist/utils/disabledControl.js +8 -1
  224. package/dist/utils/disabledControl.js.map +1 -1
  225. package/dist/utils/disabledControl.mjs +8 -1
  226. package/dist/utils/disabledControl.mjs.map +1 -1
  227. package/package.json +1 -1
  228. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  229. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  230. package/src/components/Appear/Appear.usage.mdx +107 -0
  231. package/src/components/Avatar/Avatar.recipe.test.tsx +171 -0
  232. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  233. package/src/components/Avatar/Avatar.tsx +112 -21
  234. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  235. package/src/components/Avatar/index.tsx +8 -1
  236. package/src/components/Badge/Badge.stories.tsx +193 -3
  237. package/src/components/Badge/Badge.tsx +5 -3
  238. package/src/components/Badge/Badge.types.ts +7 -5
  239. package/src/components/Badge/Badge.usage.mdx +265 -0
  240. package/src/components/Banner/Banner.stories.tsx +152 -2
  241. package/src/components/Banner/Banner.types.ts +30 -1
  242. package/src/components/Banner/Banner.usage.mdx +233 -0
  243. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  244. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  245. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  246. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  247. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  248. package/src/components/Button/Button.stories.tsx +267 -3
  249. package/src/components/Button/Button.tsx +15 -2
  250. package/src/components/Button/Button.usage.mdx +344 -0
  251. package/src/components/Button/Button.variants.test.tsx +13 -1
  252. package/src/components/Card/Card.stories.tsx +106 -0
  253. package/src/components/Card/Card.types.ts +12 -0
  254. package/src/components/Card/Card.usage.mdx +216 -0
  255. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  256. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  257. package/src/components/Chip/Chip.usage.mdx +78 -0
  258. package/src/components/Code/Code.stories.tsx +60 -0
  259. package/src/components/Code/Code.usage.mdx +187 -0
  260. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  261. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  262. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  263. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  264. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  265. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  266. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  267. package/src/components/Confetti/Confetti.types.ts +5 -1
  268. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  269. package/src/components/Confetti/confettiColors.ts +5 -5
  270. package/src/components/Container/Container.stories.tsx +32 -0
  271. package/src/components/Container/Container.usage.mdx +130 -0
  272. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  273. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  274. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  275. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  276. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  277. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  278. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  279. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  280. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  281. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  282. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  283. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  284. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  285. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  286. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  287. package/src/components/FileList/FileList.stories.tsx +25 -0
  288. package/src/components/FileList/FileList.usage.mdx +165 -0
  289. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  290. package/src/components/Form/Form.stories.tsx +149 -0
  291. package/src/components/Form/Form.usage.mdx +203 -0
  292. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  293. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  294. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  295. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  296. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  297. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  298. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  299. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  300. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  301. package/src/components/Icon/Icon.stories.tsx +61 -1
  302. package/src/components/Icon/Icon.usage.mdx +158 -0
  303. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  304. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  305. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  306. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  307. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  308. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  309. package/src/components/Input/Input.stories.tsx +180 -0
  310. package/src/components/Input/Input.usage.mdx +278 -0
  311. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  312. package/src/components/LineGraph/LineGraph.tsx +4 -5
  313. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  314. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  315. package/src/components/LineGraph/seriesColors.test.ts +11 -10
  316. package/src/components/LineGraph/seriesColors.ts +18 -14
  317. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  318. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  319. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  320. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  321. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  322. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  323. package/src/components/Masonry/Masonry.types.ts +8 -3
  324. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  325. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  326. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  327. package/src/components/Menu/Menu.stories.tsx +146 -2
  328. package/src/components/Menu/Menu.usage.mdx +230 -0
  329. package/src/components/Menu/MenuItem.types.ts +8 -0
  330. package/src/components/Modal/Modal.stories.tsx +177 -1
  331. package/src/components/Modal/Modal.usage.mdx +262 -0
  332. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  333. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  334. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  335. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  336. package/src/components/Pagination/Pagination.tsx +11 -10
  337. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  338. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  339. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  340. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  341. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  342. package/src/components/Popover/Popover.stories.tsx +104 -1
  343. package/src/components/Popover/Popover.usage.mdx +197 -0
  344. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  345. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  346. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  347. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  348. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  349. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  350. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  351. package/src/components/Radio/Radio.stories.tsx +119 -0
  352. package/src/components/Radio/Radio.usage.mdx +187 -0
  353. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  354. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  355. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  356. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  357. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  358. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  359. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  360. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  361. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  362. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  363. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  364. package/src/components/Select/Comparison.stories.tsx +19 -0
  365. package/src/components/Select/Select.stories.tsx +264 -1
  366. package/src/components/Select/Select.styles.ts +41 -1
  367. package/src/components/Select/Select.tsx +13 -3
  368. package/src/components/Select/Select.types.ts +11 -0
  369. package/src/components/Select/Select.usage.mdx +278 -0
  370. package/src/components/Select/SelectField.tsx +7 -3
  371. package/src/components/Select/index.ts +1 -0
  372. package/src/components/Shake/Shake.usage.mdx +107 -0
  373. package/src/components/Slider/Slider.stories.tsx +116 -0
  374. package/src/components/Slider/Slider.usage.mdx +179 -0
  375. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  376. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  377. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  378. package/src/components/Switch/Switch.stories.tsx +131 -6
  379. package/src/components/Switch/Switch.usage.mdx +199 -0
  380. package/src/components/Table/Table.stories.tsx +159 -1
  381. package/src/components/Table/Table.usage.mdx +235 -0
  382. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  383. package/src/components/Tabs/Tabs.usage.mdx +219 -0
  384. package/src/components/Tag/Tag.stories.tsx +181 -4
  385. package/src/components/Tag/Tag.usage.mdx +257 -0
  386. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  387. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  388. package/src/components/Toast/Toast.stories.tsx +185 -3
  389. package/src/components/Toast/Toast.styles.ts +18 -10
  390. package/src/components/Toast/Toast.usage.mdx +265 -0
  391. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  392. package/src/components/Tooltip/Tooltip.usage.mdx +211 -0
  393. package/src/components/Tree/Tree.stories.tsx +89 -0
  394. package/src/components/Tree/Tree.usage.mdx +207 -0
  395. package/src/components/Typography/Caption.tsx +0 -1
  396. package/src/components/Typography/H1.tsx +0 -1
  397. package/src/components/Typography/H2.tsx +0 -1
  398. package/src/components/Typography/H3.tsx +0 -1
  399. package/src/components/Typography/H4.tsx +0 -1
  400. package/src/components/Typography/H5.tsx +0 -1
  401. package/src/components/Typography/Link.tsx +0 -1
  402. package/src/components/Typography/Overline.tsx +0 -1
  403. package/src/components/Typography/Subtext.tsx +0 -1
  404. package/src/components/Typography/Subtitle.tsx +0 -1
  405. package/src/components/Typography/Text.tsx +0 -1
  406. package/src/components/Typography/Typography.stories.tsx +117 -0
  407. package/src/components/Typography/Typography.usage.mdx +257 -0
  408. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  409. package/src/components/noRawScales.test.ts +5 -1
  410. package/src/foundations/BrandAssets.mdx +637 -0
  411. package/src/foundations/BrandAssets.stories.tsx +680 -0
  412. package/src/foundations/BrandColour.mdx +366 -0
  413. package/src/foundations/BrandColour.stories.tsx +343 -0
  414. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  415. package/src/guidelines/FeedbackActions.mdx +162 -23
  416. package/src/guidelines/_components/Lang.tsx +175 -0
  417. package/src/guidelines/_components/TokenTable.tsx +136 -0
  418. package/src/hooks/useLanguage.ts +8 -3
  419. package/src/hooks/useTranslate.test.tsx +46 -0
  420. package/src/hooks/useTranslate.ts +7 -5
  421. package/src/theme/BazePalette.stories.tsx +111 -1
  422. package/src/theme/Palette.stories.tsx +2 -2
  423. package/src/theme/SemanticTokens.mdx +87 -2
  424. package/src/theme/claude.md +16 -7
  425. package/src/theme/colors.ts +53 -7
  426. package/src/theme/contrast.test.ts +57 -0
  427. package/src/theme/global.ts +19 -0
  428. package/src/theme/index.ts +2 -0
  429. package/src/theme/palette.generated.ts +107 -0
  430. package/src/theme/paletteSwatches.ts +35 -0
  431. package/src/theme/recipes/avatar.ts +92 -0
  432. package/src/translations/Defaults.translations.json +7 -0
  433. package/src/utils/disabledControl.ts +8 -1
@@ -0,0 +1,199 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as SwitchStories from './Switch.stories';
5
+
6
+ <Meta of={SwitchStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Switch
13
+
14
+ A toggle for one setting that is either on or off.
15
+
16
+ ## When to use
17
+
18
+ - A single feature or setting the user turns on or off: pin an announcement,
19
+ show it as a pop-up, enable a connector.
20
+ - A row in a settings list, with the label on the left and the switch at the
21
+ end.
22
+
23
+ ## When not to use
24
+
25
+ - Picking items from a list, or several choices that belong together →
26
+ `Checkbox`.
27
+ - Agreeing to something → `Checkbox`. "On" is not the same as "I agree".
28
+ - One of more than two states → `Radio` or `SelectField`.
29
+
30
+ ## Props
31
+
32
+ </En>
33
+
34
+ <Ko>
35
+
36
+ # Switch
37
+
38
+ 켜거나 끄는 설정 하나를 바꾸는 토글입니다.
39
+
40
+ ## 언제 쓰나요
41
+
42
+ - 사용자가 켜거나 끄는 기능이나 설정 하나: 공지 상단 고정, 팝업으로 보여 주기, 커넥터
43
+ 사용.
44
+ - 설정 목록의 한 행. 라벨은 왼쪽에, 스위치는 행 끝에 둡니다.
45
+
46
+ ## 언제 쓰지 않나요
47
+
48
+ - 목록에서 항목을 고르거나, 함께 묶이는 여러 선택은 `Checkbox`를 씁니다.
49
+ - 동의를 받을 때는 `Checkbox`를 씁니다. "켜짐"은 "동의합니다"와 다릅니다.
50
+ - 상태가 셋 이상이라면 `Radio`나 `SelectField`를 씁니다.
51
+
52
+ ## 속성
53
+
54
+ </Ko>
55
+
56
+ <ArgTypes
57
+ of={SwitchStories}
58
+ include={['checked', 'defaultChecked', 'onCheckedChange', 'disabled', 'size']}
59
+ />
60
+
61
+ <En>
62
+
63
+ Compose it from `<Switch>`, `<Switch.Control />` and `<Switch.Label>`. The
64
+ root is the click target, so the label toggles it too. The thumb settles with
65
+ a small overshoot; under reduced motion it moves without it.
66
+
67
+ If the change is saved the moment the switch flips, say so on the screen (a
68
+ toast, or a "saved" line). If it is saved with the rest of the form, keep it
69
+ in the form and save on submit, the same as every other field.
70
+
71
+ ## Do / Don't
72
+
73
+ </En>
74
+
75
+ <Ko>
76
+
77
+ `<Switch>`, `<Switch.Control />`, `<Switch.Label>`을 조합해서 씁니다. 루트 전체를 눌러도
78
+ 되므로 라벨을 눌러도 바뀝니다. 손잡이는 살짝 지나쳤다가 제자리에 멈추고, 동작 줄이기
79
+ 설정에서는 그 움직임 없이 옮겨 갑니다.
80
+
81
+ 스위치를 바꾸는 순간 저장된다면 화면에서 그렇게 알려 줍니다(토스트나 "저장됨" 문구).
82
+ 폼의 다른 값과 함께 저장된다면 다른 필드처럼 폼 안에 두고 제출할 때 저장합니다.
83
+
84
+ ## 이렇게 하세요 / 이렇게 하지 마세요
85
+
86
+ </Ko>
87
+
88
+ <Canvas of={SwitchStories.DoSettingRow} />
89
+ <Verdict
90
+ kind="do"
91
+ en="Name the setting in the label, describe its effect in a muted line, and put the switch at the end of the row."
92
+ ko="라벨에 설정 이름을 쓰고, 효과는 흐린 글자로 한 줄 덧붙이며, 스위치는 행 끝에 둡니다."
93
+ />
94
+
95
+ <Canvas of={SwitchStories.DontStateInLabel} />
96
+ <Verdict
97
+ kind="dont"
98
+ en="Make the label say the current state. The label should name the setting; the switch already shows the state, and a screen reader announces it."
99
+ ko="라벨에 현재 상태를 쓰지 마세요. 라벨은 설정의 이름이어야 합니다. 상태는 스위치가 이미 보여 주고, 화면 낭독기도 읽어 줍니다."
100
+ />
101
+
102
+ <Canvas of={SwitchStories.DontSwitchList} />
103
+ <Verdict
104
+ kind="dont"
105
+ en="Use switches to pick items from a list. Teams are not settings that are on or off."
106
+ ko="목록에서 항목을 고르는 데 스위치를 쓰지 마세요. 팀은 켜고 끄는 설정이 아닙니다."
107
+ />
108
+
109
+ <Canvas of={SwitchStories.DoCheckboxList} />
110
+ <Verdict
111
+ kind="do"
112
+ en="Use checkboxes to pick items."
113
+ ko="항목을 고를 때는 체크박스를 씁니다."
114
+ />
115
+
116
+ <En>
117
+
118
+ ## Content
119
+
120
+ - The label names the setting or feature (상단에 고정), not the action (고정하기)
121
+ and not the state (켜짐).
122
+ - One muted line under the label says what changes when it is on.
123
+ - No question marks.
124
+
125
+ ## Accessibility
126
+
127
+ What Switch does for you:
128
+
129
+ - A native checkbox input carries the state, so Tab focuses it and Space
130
+ toggles it.
131
+ - The keyboard focus ring shows on the track (WCAG 2.4.7). The off track is
132
+ `bg.track`, a filled track that stays visible on any surface (WCAG 1.4.11).
133
+
134
+ What you still have to do:
135
+
136
+ - **Always render `Switch.Label`** (with `srOnly` if the row's title is
137
+ elsewhere). Without it the switch has no name (WCAG 4.1.2; KWCAG 5.3.4.1
138
+ 레이블 제공).
139
+ - Position, not colour, shows the state; keep the default thumb so it stays
140
+ that way (WCAG 1.4.1).
141
+ - If flipping it saves immediately, announce the result (a toast), so the
142
+ user knows the change was not lost (WCAG 4.1.3).
143
+
144
+ ## Tokens
145
+
146
+ </En>
147
+
148
+ <Ko>
149
+
150
+ ## 문구
151
+
152
+ - 라벨에는 설정이나 기능의 이름을 씁니다(상단에 고정). 동작(고정하기)이나 상태(켜짐)는
153
+ 쓰지 않습니다.
154
+ - 라벨 아래 흐린 글자 한 줄로 켜면 무엇이 달라지는지 씁니다.
155
+ - 물음표를 쓰지 않습니다.
156
+
157
+ ## 접근성
158
+
159
+ Switch가 알아서 하는 일
160
+
161
+ - 상태는 네이티브 체크박스 입력이 가지고 있어서 Tab으로 초점을 옮기고 Space로 바꿀 수
162
+ 있습니다.
163
+ - 키보드 초점 링이 트랙에 보입니다(WCAG 2.4.7). 꺼짐 트랙은 어떤 면 위에서도 보이도록
164
+ 채워진 `bg.track`을 씁니다(WCAG 1.4.11).
165
+
166
+ 직접 챙겨야 하는 일
167
+
168
+ - **`Switch.Label`을 항상 그립니다.** 행 제목이 다른 곳에 있다면 `srOnly`를 줍니다.
169
+ 라벨이 없으면 스위치에 이름이 없습니다(WCAG 4.1.2, KWCAG 5.3.4.1 레이블 제공).
170
+ - 상태는 색이 아니라 손잡이 위치로 드러납니다. 기본 손잡이를 그대로 두어 이 점을
171
+ 지킵니다(WCAG 1.4.1).
172
+ - 바꾸는 즉시 저장된다면 토스트 등으로 결과를 알려, 바뀐 내용이 사라지지 않았다는 것을
173
+ 알 수 있게 합니다(WCAG 4.1.3).
174
+
175
+ ## 토큰
176
+
177
+ </Ko>
178
+
179
+ <Canvas of={SwitchStories.UsageTokens} sourceState="none" />
180
+
181
+ <En>
182
+
183
+ ## Related
184
+
185
+ - **Checkbox**: picking items, agreeing.
186
+ - **Radio** / **SelectField**: more than two states.
187
+ - **Toast**: confirming a change that saved immediately.
188
+
189
+ </En>
190
+
191
+ <Ko>
192
+
193
+ ## 관련 컴포넌트
194
+
195
+ - **Checkbox**: 항목 고르기, 동의.
196
+ - **Radio** / **SelectField**: 상태가 셋 이상일 때.
197
+ - **Toast**: 바로 저장된 변경 알림.
198
+
199
+ </Ko>
@@ -2,9 +2,13 @@ import { useState } from 'react';
2
2
  import { Flex } from '@chakra-ui/react';
3
3
  import { Meta, StoryObj } from '@storybook/react';
4
4
 
5
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
6
+ import { tableSlotRecipe } from '../../theme/recipes/table';
7
+ import { Badge } from '../Badge';
5
8
  import { Button } from '../Button';
6
9
  import { IoChevronDownOutline } from '../Icon';
7
10
  import { IconButton } from '../IconButton';
11
+ import { Link } from '../Typography';
8
12
  import {
9
13
  ExpandingTr,
10
14
  Table,
@@ -126,7 +130,7 @@ export const Default: Story = {
126
130
  /**
127
131
  * Rows that receive `onClick` (or `role="button"` / `tabIndex`) automatically
128
132
  * get the interactive treatment from the table recipe: pointer cursor,
129
- * `bg.muted` hover, and a focus-visible outline. Static rows never highlight.
133
+ * `primary.wash` hover, and a focus-visible outline. Static rows never highlight.
130
134
  */
131
135
  export const InteractiveRows: Story = {
132
136
  render: (args) => (
@@ -699,3 +703,157 @@ export const StickyOffsetsSurvivePagination: Story = {
699
703
  args: { width: '220%' },
700
704
  argTypes: {},
701
705
  };
706
+
707
+ // ───────────────────────── Usage-page specimens ─────────────────────────
708
+ // Pulled into `Table.usage.mdx` with <Canvas of={…} />. Hidden from the
709
+ // sidebar (`!dev`); `tags` is written out on each story because the indexer
710
+ // reads CSF statically.
711
+
712
+ const USAGE_ROWS = [
713
+ { name: '김지민', group: '마케팅', credits: 12480, status: 'ok' },
714
+ { name: '이서준', group: '영업', credits: 830, status: 'ok' },
715
+ { name: '박하은', group: '개발', credits: 0, status: 'invalid' },
716
+ ] as const;
717
+
718
+ export const DoNumbersAligned: Story = {
719
+ tags: ['!dev'],
720
+ parameters: { layout: 'padded' },
721
+ name: 'Usage / Do: a link in the name cell, numbers aligned to the end',
722
+ render: () => (
723
+ <TableContainer maxW="520px">
724
+ <Table>
725
+ <Thead>
726
+ <Tr>
727
+ <Th>이름</Th>
728
+ <Th>그룹</Th>
729
+ <Th textAlign="end">사용 크레딧</Th>
730
+ </Tr>
731
+ </Thead>
732
+ <Tbody>
733
+ {USAGE_ROWS.map((row) => (
734
+ <Tr key={row.name}>
735
+ <Td>
736
+ <Link href={`#member-${row.name}`}>{row.name}</Link>
737
+ </Td>
738
+ <Td>{row.group}</Td>
739
+ <Td textAlign="end" fontVariantNumeric="tabular-nums">
740
+ {row.credits.toLocaleString('ko-KR')}
741
+ </Td>
742
+ </Tr>
743
+ ))}
744
+ </Tbody>
745
+ </Table>
746
+ </TableContainer>
747
+ ),
748
+ };
749
+
750
+ export const DoStateWithWords: Story = {
751
+ tags: ['!dev'],
752
+ parameters: { layout: 'padded' },
753
+ name: 'Usage / Do: a row state backed by words',
754
+ render: () => (
755
+ <TableContainer maxW="520px">
756
+ <Table>
757
+ <Thead>
758
+ <Tr>
759
+ <Th>이름</Th>
760
+ <Th>상태</Th>
761
+ </Tr>
762
+ </Thead>
763
+ <Tbody>
764
+ {USAGE_ROWS.map((row) => (
765
+ <Tr
766
+ key={row.name}
767
+ state={row.status === 'invalid' ? 'invalid' : undefined}
768
+ >
769
+ <Td>{row.name}</Td>
770
+ <Td>
771
+ {row.status === 'invalid' ? (
772
+ <Badge variant="danger">이메일 오류</Badge>
773
+ ) : (
774
+ <Badge variant="success">정상</Badge>
775
+ )}
776
+ </Td>
777
+ </Tr>
778
+ ))}
779
+ </Tbody>
780
+ </Table>
781
+ </TableContainer>
782
+ ),
783
+ };
784
+
785
+ export const DontStateColourOnly: Story = {
786
+ tags: ['!dev'],
787
+ parameters: { layout: 'padded' },
788
+ name: "Usage / Don't: a tinted row with no words",
789
+ render: () => (
790
+ <TableContainer maxW="520px">
791
+ <Table>
792
+ <Thead>
793
+ <Tr>
794
+ <Th>이름</Th>
795
+ <Th>그룹</Th>
796
+ </Tr>
797
+ </Thead>
798
+ <Tbody>
799
+ {USAGE_ROWS.map((row) => (
800
+ <Tr
801
+ key={row.name}
802
+ state={row.status === 'invalid' ? 'invalid' : undefined}
803
+ >
804
+ <Td>{row.name}</Td>
805
+ <Td>{row.group}</Td>
806
+ </Tr>
807
+ ))}
808
+ </Tbody>
809
+ </Table>
810
+ </TableContainer>
811
+ ),
812
+ };
813
+
814
+ /**
815
+ * Every colour token in the table slot recipe (`theme/recipes/table.ts`),
816
+ * collected by walking the recipe, so a recipe change shows up here.
817
+ */
818
+ const recipeTokens = (
819
+ node: unknown,
820
+ path: string[] = []
821
+ ): { token: string; use: string }[] => {
822
+ if (typeof node === 'string') {
823
+ return /^[a-z]+(\.[a-zA-Z0-9]+)+$/.test(node)
824
+ ? [{ token: node, use: path.join(' › ') }]
825
+ : [];
826
+ }
827
+ if (node && typeof node === 'object') {
828
+ return Object.entries(node).flatMap(([key, value]) =>
829
+ recipeTokens(value, [...path, key])
830
+ );
831
+ }
832
+ return [];
833
+ };
834
+
835
+ /** One row per token; the places it is read from are listed together. */
836
+ const mergeByToken = (rows: { token: string; use: string }[]) =>
837
+ [...new Set(rows.map((row) => row.token))].map((token) => ({
838
+ token,
839
+ use: rows
840
+ .filter((row) => row.token === token)
841
+ .map((row) => row.use)
842
+ .join(', '),
843
+ }));
844
+
845
+ export const UsageTokens: Story = {
846
+ tags: ['!dev'],
847
+ parameters: { layout: 'padded' },
848
+ name: 'Usage / Tokens',
849
+ render: () => (
850
+ <TokenTable
851
+ rows={mergeByToken([
852
+ ...recipeTokens(tableSlotRecipe.base),
853
+ { token: 'border.subtle', use: 'TableContainer › border' },
854
+ { token: 'bg.subtle', use: 'Th isSticky › background' },
855
+ { token: 'bg.surface', use: 'Td isSticky › background' },
856
+ ])}
857
+ />
858
+ ),
859
+ };
@@ -0,0 +1,235 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as TableStories from './Table.stories';
5
+ import { Tr } from './Tr';
6
+
7
+ <Meta of={TableStories} name="Usage" />
8
+
9
+ <LangToggle />
10
+
11
+ <En>
12
+
13
+ # Table
14
+
15
+ Rows of records that share the same columns, for reading and comparing
16
+ values: members, usage, invoices, API keys.
17
+
18
+ `TableContainer` › `Table` › `Thead` / `Tbody` › `Tr` › `Th` / `Td`. The
19
+ container draws the rounded border, scrolls horizontally, and tracks scroll
20
+ position for sticky columns.
21
+
22
+ ## When to use
23
+
24
+ - A list where each item has the same attributes and the reader compares
25
+ across rows: a member list, usage by model, call history.
26
+ - When the reader scans a column (a date, an amount, a status).
27
+
28
+ ## When not to use
29
+
30
+ - Items that are read one at a time and have different shapes → `Card` in a
31
+ list or grid.
32
+ - Two to five label–value pairs about one thing → a plain stack of `Text`.
33
+ - A hierarchy (groups inside groups) → `Tree`.
34
+ - Page layout. A table is for data only.
35
+
36
+ ## Row states and options
37
+
38
+ </En>
39
+
40
+ <Ko>
41
+
42
+ # Table
43
+
44
+ 같은 열을 가진 기록을 행으로 늘어놓고 값을 읽고 비교하게 하는 컴포넌트입니다.
45
+ 멤버, 사용량, 청구서, API 키 목록에 씁니다.
46
+
47
+ 구조는 `TableContainer` › `Table` › `Thead` / `Tbody` › `Tr` › `Th` / `Td`입니다.
48
+ 컨테이너가 둥근 테두리를 그리고, 가로 스크롤을 맡고, 고정 열을 위해 스크롤 위치를
49
+ 추적합니다.
50
+
51
+ ## 언제 쓰나요
52
+
53
+ - 항목마다 같은 속성이 있고 행끼리 비교해 읽는 목록: 멤버 목록, 모델별 사용량, 호출
54
+ 기록.
55
+ - 읽는 사람이 한 열(날짜, 금액, 상태)을 훑어볼 때.
56
+
57
+ ## 언제 쓰지 않나요
58
+
59
+ - 하나씩 읽는 항목이고 모양이 서로 다르다면 목록이나 격자 안의 `Card`를 씁니다.
60
+ - 한 대상의 라벨과 값 두세 쌍이라면 `Text`를 쌓아서 보여 줍니다.
61
+ - 그룹 안의 그룹 같은 계층은 `Tree`를 씁니다.
62
+ - 페이지 레이아웃에는 쓰지 않습니다. 표는 데이터에만 씁니다.
63
+
64
+ ## 행 상태와 옵션
65
+
66
+ </Ko>
67
+
68
+ <ArgTypes of={Tr} include={['state']} />
69
+
70
+ <En>
71
+
72
+ | Option | Means | Use for |
73
+ | --- | --- | --- |
74
+ | `<Tr state="selected">` | The row is part of the current selection (`primary.selected`) | Rows ticked for a bulk action |
75
+ | `<Tr state="invalid">` | Something in the row is wrong (`bg.invalid.subtle`) | A failed import row |
76
+ | `<Tr state="highlighted">` | Draw the eye to one row (`bg.highlighted`) | The row just added or edited |
77
+ | `onClick` / `tabIndex` / `role="button"` on `Tr` | The row is clickable; it gets the pointer, `primary.wash` hover and a focus outline | Opening a detail drawer |
78
+ | `<Thead sticky>` | The header stays at the top of the scroll area | Long lists in a fixed-height container |
79
+ | `isSticky` + `stickyDirection` + `stickyIndex` on `Th`/`Td` | The column stays put while the table scrolls sideways | A name column on a wide table |
80
+ | `Td wrap` | Long text wraps instead of being cut off | Addresses, descriptions |
81
+ | `ExpandingTr` | A row with a detail row under it, opened by `isExpanded` | Error details for one row |
82
+
83
+ ## Do / Don't
84
+
85
+ </En>
86
+
87
+ <Ko>
88
+
89
+ | 옵션 | 뜻 | 쓰는 곳 |
90
+ | --- | --- | --- |
91
+ | `<Tr state="selected">` | 현재 선택에 포함된 행(`primary.selected`) | 일괄 작업을 위해 체크한 행 |
92
+ | `<Tr state="invalid">` | 행 안의 무언가가 잘못됨(`bg.invalid.subtle`) | 가져오기에 실패한 행 |
93
+ | `<Tr state="highlighted">` | 한 행으로 눈길을 끎(`bg.highlighted`) | 방금 추가하거나 고친 행 |
94
+ | `Tr`의 `onClick` / `tabIndex` / `role="button"` | 누를 수 있는 행. 포인터, `primary.wash` 호버, 초점 테두리가 생김 | 상세 서랍 열기 |
95
+ | `<Thead sticky>` | 스크롤해도 머리글이 위에 남음 | 높이가 정해진 영역 안의 긴 목록 |
96
+ | `Th`/`Td`의 `isSticky` + `stickyDirection` + `stickyIndex` | 표를 옆으로 스크롤해도 그 열은 그대로 있음 | 넓은 표의 이름 열 |
97
+ | `Td wrap` | 긴 글을 자르지 않고 줄바꿈함 | 주소, 설명 |
98
+ | `ExpandingTr` | 아래에 상세 행이 붙은 행. `isExpanded`로 엶 | 한 행의 오류 상세 |
99
+
100
+ ## 이렇게 하세요 / 이렇게 하지 마세요
101
+
102
+ </Ko>
103
+
104
+ <Canvas of={TableStories.DoNumbersAligned} />
105
+ <Verdict
106
+ kind="do"
107
+ en="Put a real link in the name cell, and align numbers to the end with tabular figures so they line up."
108
+ ko="이름 칸에는 실제 링크를 두고, 숫자는 끝에 맞추고 고정폭 숫자를 써서 자릿수가 맞게 합니다."
109
+ />
110
+
111
+ <Canvas of={TableStories.DoStateWithWords} />
112
+ <Verdict
113
+ kind="do"
114
+ en="Back a row state with words in a cell. The tint draws the eye; the Badge says what is wrong."
115
+ ko="행 상태는 칸 안의 문구로 함께 알립니다. 배경색은 눈길을 끌고, Badge가 무엇이 잘못됐는지 말합니다."
116
+ />
117
+
118
+ <Canvas of={TableStories.DontStateColourOnly} />
119
+ <Verdict
120
+ kind="dont"
121
+ en="Rely on the row tint alone. A screen reader does not announce it, and in some modes it is hard to see at all."
122
+ ko="행 배경색만으로 알리지 마세요. 화면 낭독기는 배경색을 읽지 않고, 모드에 따라 거의 보이지 않기도 합니다."
123
+ />
124
+
125
+ <En>
126
+
127
+ ## Content
128
+
129
+ - Column headers are short nouns: 이름, 그룹, 사용 크레딧. Put the unit in
130
+ the header, not in every cell.
131
+ - Numbers and amounts align to the end (`textAlign="end"`); text aligns to the
132
+ start.
133
+ - An empty value is "—", not a blank cell, so the reader knows nothing is
134
+ missing from the page.
135
+ - Keep a status in its own column with a `Badge`, rather than colouring a
136
+ whole row.
137
+
138
+ ## Accessibility
139
+
140
+ What Table does for you:
141
+
142
+ - It renders native table elements (`<table>`, `<th>`, `<td>`), so screen
143
+ readers announce row and column positions.
144
+ - A clickable `Tr` gets a pointer, a hover tint and a 2px inset focus
145
+ outline when focused from the keyboard. Static rows never highlight.
146
+ - Sticky header and sticky columns get an opaque background, so text never
147
+ shows through.
148
+
149
+ What you still have to do:
150
+
151
+ - **A clickable row is not a button by itself.** `Tr` only styles it. Give
152
+ it `tabIndex={0}` and handle Enter in `onKeyDown` (WCAG 2.1.1), or better,
153
+ put a real link or button in the row and let that be the target (WCAG
154
+ 4.1.2). Never put a button inside a row that is also `role="button"`
155
+ (nested interactive controls, see `ACCESSIBILITY.md` §3).
156
+ - **Row states need words** (WCAG 1.4.1). `state` only tints the row.
157
+ - **Name icon-only buttons in cells**: `aria-label` on the `IconButton`
158
+ (WCAG 4.1.2). For an `ExpandingTr` toggle, also pass `aria-expanded`.
159
+ - Give the table a caption or a heading next to it so it has a name
160
+ (WCAG 1.3.1).
161
+ - A cell cut off with an ellipsis hides content. Use `wrap`, or make the full
162
+ value available another way (WCAG 1.4.10).
163
+
164
+ ## Tokens
165
+
166
+ Read from the table slot recipe (`theme/recipes/table.ts`) and the sticky
167
+ styles in `Table.styles.ts`.
168
+
169
+ </En>
170
+
171
+ <Ko>
172
+
173
+ ## 문구
174
+
175
+ - 열 머리글은 짧은 명사로 씁니다: 이름, 그룹, 사용 크레딧. 단위는 칸마다 쓰지 않고
176
+ 머리글에 씁니다.
177
+ - 숫자와 금액은 끝에 맞추고(`textAlign="end"`), 글은 앞에 맞춥니다.
178
+ - 값이 없으면 빈칸 대신 "—"를 써서, 화면에서 빠진 것이 없다는 것을 알립니다.
179
+ - 상태는 행 전체에 색을 칠하지 않고 `Badge`로 따로 열을 둡니다.
180
+
181
+ ## 접근성
182
+
183
+ Table이 알아서 하는 일
184
+
185
+ - 기본 표 요소(`<table>`, `<th>`, `<td>`)로 그리므로 화면 낭독기가 행과 열의 위치를
186
+ 읽어 줍니다.
187
+ - 누를 수 있는 `Tr`에는 포인터, 호버 배경, 키보드 초점 시 안쪽 2px 테두리가 생깁니다.
188
+ 누를 수 없는 행은 강조되지 않습니다.
189
+ - 고정 머리글과 고정 열은 불투명한 배경을 가지므로 뒤의 글자가 비치지 않습니다.
190
+
191
+ 직접 챙겨야 하는 일
192
+
193
+ - **누를 수 있는 행이 저절로 버튼이 되지는 않습니다.** `Tr`은 모양만 바꿉니다.
194
+ `tabIndex={0}`를 주고 `onKeyDown`에서 Enter를 처리하거나(WCAG 2.1.1), 행 안에 실제
195
+ 링크나 버튼을 두고 그것을 누르게 하는 편이 낫습니다(WCAG 4.1.2). `role="button"`인
196
+ 행 안에 다시 버튼을 넣지 않습니다(상호작용 요소 중첩, `ACCESSIBILITY.md` 3절).
197
+ - **행 상태는 문구로도 알립니다**(WCAG 1.4.1). `state`는 배경색만 바꿉니다.
198
+ - **칸 안의 아이콘 버튼에는 이름을 붙입니다.** `IconButton`에 `aria-label`을 줍니다
199
+ (WCAG 4.1.2). `ExpandingTr`을 여닫는 버튼에는 `aria-expanded`도 줍니다.
200
+ - 표에 캡션을 달거나 옆에 제목을 두어 이름을 붙입니다(WCAG 1.3.1).
201
+ - 말줄임표로 잘린 칸은 내용을 숨깁니다. `wrap`을 쓰거나 전체 값을 다른 방법으로
202
+ 볼 수 있게 합니다(WCAG 1.4.10).
203
+
204
+ ## 토큰
205
+
206
+ 표 슬롯 레시피(`theme/recipes/table.ts`)와 `Table.styles.ts`의 고정 열 스타일에서
207
+ 읽습니다.
208
+
209
+ </Ko>
210
+
211
+ <Canvas of={TableStories.UsageTokens} sourceState="none" />
212
+
213
+ <En>
214
+
215
+ ## Related
216
+
217
+ - **Badge**: a status in its own column.
218
+ - **Pagination**: long lists split into pages.
219
+ - **Checkbox**: row selection for bulk actions, with `state="selected"`.
220
+ - **Tree**: hierarchical data.
221
+ - **Card**: items with different shapes.
222
+
223
+ </En>
224
+
225
+ <Ko>
226
+
227
+ ## 관련 컴포넌트
228
+
229
+ - **Badge**: 따로 둔 열의 상태 표시.
230
+ - **Pagination**: 긴 목록을 쪽으로 나눕니다.
231
+ - **Checkbox**: 일괄 작업을 위한 행 선택. `state="selected"`와 함께 씁니다.
232
+ - **Tree**: 계층이 있는 데이터.
233
+ - **Card**: 모양이 서로 다른 항목.
234
+
235
+ </Ko>