@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,142 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as MasonryStories from './Masonry.stories';
5
+
6
+ <Meta of={MasonryStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Masonry
13
+
14
+ Equal-width columns that pack items of different heights without gaps,
15
+ re-measuring as items resize. FactChat uses it for the model and voice menus.
16
+
17
+ ## When to use
18
+
19
+ - Unordered groups or cards whose heights differ a lot, where a grid would
20
+ leave holes.
21
+
22
+ ## When not to use
23
+
24
+ - Items with similar heights → `SimpleGrid` / `Grid`, which keeps row order.
25
+ - Anything with an order (steps, a ranking, a timeline, search results) →
26
+ a list or a grid. Masonry's reading order is column by column.
27
+ - A data list → `Table`.
28
+
29
+ ## Props
30
+
31
+ </En>
32
+
33
+ <Ko>
34
+
35
+ # Masonry
36
+
37
+ 너비가 같은 열에 높이가 다른 항목을 빈틈없이 채우고, 항목 크기가 바뀌면 다시 재는
38
+ 레이아웃입니다. FactChat은 모델 메뉴와 음성 메뉴에 씁니다.
39
+
40
+ ## 언제 쓰나요
41
+
42
+ - 순서가 없고 높이 차이가 커서 격자로 놓으면 빈칸이 생기는 묶음이나 카드.
43
+
44
+ ## 언제 쓰지 않나요
45
+
46
+ - 높이가 비슷한 항목은 행 순서를 지키는 `SimpleGrid` / `Grid`를 씁니다.
47
+ - 순서가 있는 것(단계, 순위, 타임라인, 검색 결과)은 목록이나 격자를 씁니다.
48
+ Masonry의 읽기 순서는 열 단위입니다.
49
+ - 데이터 목록은 `Table`을 씁니다.
50
+
51
+ ## 속성
52
+
53
+ </Ko>
54
+
55
+ <ArgTypes of={MasonryStories} include={['numCols', 'gap', 'horizontalArrangement']} />
56
+
57
+ <En>
58
+
59
+ ## Do / Don't
60
+
61
+ </En>
62
+
63
+ <Ko>
64
+
65
+ ## 이렇게 하세요 / 이렇게 하지 마세요
66
+
67
+ </Ko>
68
+
69
+ <Canvas of={MasonryStories.DoUnorderedGroups} />
70
+ <Verdict
71
+ kind="do"
72
+ en="Pack unordered groups of different heights. Nothing depends on which comes first."
73
+ ko="높이가 다르고 순서가 없는 묶음을 빈틈없이 채웁니다. 어느 것이 먼저 오든 상관없습니다."
74
+ />
75
+
76
+ <Canvas of={MasonryStories.DontOrderedContent} />
77
+ <Verdict
78
+ kind="dont"
79
+ en="Lay out steps in it. Placement follows height, so the visual order scrambles, and keyboard and screen-reader order runs down each column."
80
+ ko="단계를 Masonry로 늘어놓지 마세요. 높이에 따라 자리가 정해져 눈에 보이는 순서가 뒤섞이고, 키보드와 화면 낭독기는 열마다 위에서 아래로 읽습니다."
81
+ />
82
+
83
+ <En>
84
+
85
+ ## Accessibility
86
+
87
+ What Masonry does for you:
88
+
89
+ - Nothing beyond layout. It renders plain boxes, one column after another.
90
+
91
+ What you still have to do:
92
+
93
+ - **Keep the content order-free** (WCAG 1.3.2, 2.4.3). The DOM order is
94
+ column 1 top to bottom, then column 2, so Tab and a screen reader follow
95
+ columns, not the rows a sighted reader sees.
96
+ - **Set `numCols` for the viewport** with `useBreakpointValue`; at 320px wide
97
+ one column avoids sideways scrolling (WCAG 1.4.10).
98
+
99
+ ## Tokens
100
+
101
+ Masonry sets no colour tokens.
102
+
103
+ </En>
104
+
105
+ <Ko>
106
+
107
+ ## 접근성
108
+
109
+ Masonry가 알아서 하는 일
110
+
111
+ - 레이아웃 말고는 없습니다. 열을 하나씩 차례로 그리는 일반 상자입니다.
112
+
113
+ 직접 챙겨야 하는 일
114
+
115
+ - **순서가 없는 내용에만 씁니다**(WCAG 1.3.2, 2.4.3). DOM 순서가 1열 위에서 아래, 그다음
116
+ 2열이라, Tab과 화면 낭독기는 눈에 보이는 행이 아니라 열을 따라갑니다.
117
+ - **화면 너비에 맞게 `numCols`를 정합니다.** `useBreakpointValue`를 쓰고, 폭 320px에서는
118
+ 한 열로 두어 가로 스크롤을 막습니다(WCAG 1.4.10).
119
+
120
+ ## 토큰
121
+
122
+ Masonry는 색 토큰을 쓰지 않습니다.
123
+
124
+ </Ko>
125
+
126
+ <En>
127
+
128
+ ## Related
129
+
130
+ - **Card**: what usually goes in each cell.
131
+ - **Container**: page width.
132
+
133
+ </En>
134
+
135
+ <Ko>
136
+
137
+ ## 관련 컴포넌트
138
+
139
+ - **Card**: 칸마다 주로 들어가는 것.
140
+ - **Container**: 페이지 너비.
141
+
142
+ </Ko>
@@ -1,5 +1,10 @@
1
+ import { useState } from 'react';
2
+ import { Box, chakra, Flex } from '@chakra-ui/react';
1
3
  import { Meta, StoryObj } from '@storybook/react';
2
4
 
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
7
+ import { Textarea } from '../Textarea';
3
8
  import { MaxLengthIndicator } from '.';
4
9
 
5
10
  const meta = {
@@ -24,3 +29,55 @@ export default meta;
24
29
  type Story = StoryObj<typeof MaxLengthIndicator>;
25
30
 
26
31
  export const Basic: Story = {};
32
+
33
+ // ───────────────────────── Usage-page specimens ─────────────────────────
34
+ // Pulled into `MaxLengthIndicator.usage.mdx` with <Canvas of={…} />. Hidden
35
+ // from the sidebar (`!dev`).
36
+
37
+ const LIMIT = 200;
38
+
39
+ export const DoUnderField: Story = {
40
+ tags: ['!dev'],
41
+ parameters: { layout: 'padded' },
42
+ name: 'Usage / Do: under the field, tied to it, with the real limit',
43
+ render: function DoUnderFieldStory() {
44
+ const [text, setText] = useState('신입 사원을 위한 사내 규정 안내 챗봇입니다.');
45
+ return (
46
+ <Box w="360px">
47
+ <chakra.label
48
+ display="block"
49
+ htmlFor="bot-description"
50
+ fontSize="sm"
51
+ fontWeight="semibold"
52
+ mb={1}
53
+ >
54
+ 설명
55
+ </chakra.label>
56
+ <Textarea
57
+ id="bot-description"
58
+ value={text}
59
+ maxLength={LIMIT}
60
+ aria-describedby="bot-description-count"
61
+ onChange={(event) => setText(event.target.value)}
62
+ />
63
+ <Flex justify="flex-end" mt={1}>
64
+ <MaxLengthIndicator
65
+ id="bot-description-count"
66
+ value={text.length}
67
+ maxLength={LIMIT}
68
+ />
69
+ </Flex>
70
+ </Box>
71
+ );
72
+ },
73
+ };
74
+
75
+ /** Tokens the indicator reads, from `MaxLengthIndicator.tsx`. */
76
+ export const UsageTokens: Story = {
77
+ tags: ['!dev'],
78
+ parameters: { layout: 'padded' },
79
+ name: 'Usage / Tokens',
80
+ render: () => (
81
+ <TokenTable rows={[{ token: 'fg.subtle', use: <T en="count text" ko="개수 글자" /> }]} />
82
+ ),
83
+ };
@@ -0,0 +1,125 @@
1
+ import { Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as MaxLengthIndicatorStories from './MaxLengthIndicator.stories';
5
+
6
+ <Meta of={MaxLengthIndicatorStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # MaxLengthIndicator
13
+
14
+ A small `value/maxLength` counter under a text field that has a length limit.
15
+
16
+ ## When to use
17
+
18
+ - Under an `Input` or `Textarea` with a hard character limit the reader is
19
+ likely to reach: a description, a prompt, a name with a short limit.
20
+
21
+ ## When not to use
22
+
23
+ - No limit, or one nobody comes near → leave it out.
24
+ - A count of items, not characters → plain text or `CountBadge`.
25
+
26
+ ## How it works
27
+
28
+ - It only displays the two numbers, in `subtext` style and `fg.subtle`. It does
29
+ not count, enforce the limit, change colour near the limit or announce
30
+ anything.
31
+ - Pass the field's current length as `value` and the same limit you set on the
32
+ field's `maxLength`, which is what actually stops input.
33
+ - Other `Text` props (`id`, `textAlign`, …) pass through.
34
+
35
+ ## Do
36
+
37
+ </En>
38
+
39
+ <Ko>
40
+
41
+ # MaxLengthIndicator
42
+
43
+ 글자 수 제한이 있는 입력란 아래에 `value/maxLength`를 보여 주는 작은 숫자입니다.
44
+
45
+ ## 언제 쓰나요
46
+
47
+ - 설명, 프롬프트, 짧은 이름처럼 사용자가 닿을 만한 글자 수 제한이 있는 `Input`이나
48
+ `Textarea` 아래에 둡니다.
49
+
50
+ ## 언제 쓰지 않나요
51
+
52
+ - 제한이 없거나 아무도 닿지 않을 제한이라면 두지 않습니다.
53
+ - 글자가 아니라 항목의 개수라면 일반 글자나 `CountBadge`를 씁니다.
54
+
55
+ ## 동작 방식
56
+
57
+ - 숫자 두 개를 `subtext` 스타일과 `fg.subtle` 색으로 보여 주기만 합니다. 글자를
58
+ 세거나, 제한을 지키게 하거나, 제한에 가까워질 때 색을 바꾸거나, 무언가를 알려 주지
59
+ 않습니다.
60
+ - 입력란의 현재 길이를 `value`로, 입력란의 `maxLength`와 같은 제한 값을 `maxLength`로
61
+ 넘깁니다. 입력을 실제로 막는 것은 입력란의 `maxLength`입니다.
62
+ - `id`, `textAlign` 같은 다른 `Text` 속성은 그대로 전달됩니다.
63
+
64
+ ## 이렇게 하세요
65
+
66
+ </Ko>
67
+
68
+ <Canvas of={MaxLengthIndicatorStories.DoUnderField} />
69
+ <Verdict
70
+ kind="do"
71
+ en="Put it under the field, set the same limit as the field's maxLength, and point the field's aria-describedby at the counter's id so the limit is read with the field."
72
+ ko="입력란 아래에 두고, 입력란의 maxLength와 같은 제한 값을 쓰며, 입력란의 aria-describedby가 카운터의 id를 가리키게 해서 제한이 입력란과 함께 읽히게 합니다."
73
+ />
74
+
75
+ <En>
76
+
77
+ ## Accessibility
78
+
79
+ - Tie the counter to the field with `aria-describedby`, so the limit is
80
+ announced when the field gets focus (WCAG 1.3.1).
81
+ - It does not announce changes while typing, which is usually right: a
82
+ number read out on every keystroke is noise. If reaching the limit matters,
83
+ say so once in a `role="status"` region (WCAG 4.1.3).
84
+ - `fg.subtle` is for secondary text. If the counter is the only place the
85
+ limit is stated, check its contrast on the field's background (WCAG 1.4.3).
86
+
87
+ ## Tokens
88
+
89
+ </En>
90
+
91
+ <Ko>
92
+
93
+ ## 접근성
94
+
95
+ - `aria-describedby`로 카운터를 입력란에 연결해서, 입력란에 초점이 오면 제한이 함께
96
+ 읽히게 합니다(WCAG 1.3.1).
97
+ - 입력하는 동안 바뀐 숫자를 알려 주지 않습니다. 대개는 이것이 맞습니다. 글자를 칠 때마다
98
+ 숫자를 읽으면 소음이 됩니다. 제한에 닿았다는 사실이 중요하다면 `role="status"`
99
+ 영역으로 한 번만 알립니다(WCAG 4.1.3).
100
+ - `fg.subtle`은 보조 글자용 색입니다. 카운터가 제한을 알리는 유일한 곳이라면 입력란
101
+ 배경 위에서 대비를 확인합니다(WCAG 1.4.3).
102
+
103
+ ## 토큰
104
+
105
+ </Ko>
106
+
107
+ <Canvas of={MaxLengthIndicatorStories.UsageTokens} sourceState="none" />
108
+
109
+ <En>
110
+
111
+ ## Related
112
+
113
+ - **Input** / **Textarea**: the field and its `maxLength`.
114
+ - **FormControl**: label, help and error text for the field.
115
+
116
+ </En>
117
+
118
+ <Ko>
119
+
120
+ ## 관련 컴포넌트
121
+
122
+ - **Input** / **Textarea**: 입력란과 그 `maxLength`.
123
+ - **FormControl**: 입력란의 라벨, 도움말, 오류 문구.
124
+
125
+ </Ko>
@@ -1,8 +1,18 @@
1
- import { useState } from 'react';
1
+ import { type ReactNode, useState } from 'react';
2
+ import { Box } from '@chakra-ui/react';
2
3
  import type { Meta, StoryObj } from '@storybook/react';
3
4
 
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
4
7
  import { Button } from '../Button/Button';
5
- import { IoChevronDownOutline, SlSettings } from '../Icon';
8
+ import {
9
+ CopyIcon,
10
+ EditIcon,
11
+ IoChevronDownOutline,
12
+ SlSettings,
13
+ TrashIcon,
14
+ VerticalEllipsisIcon,
15
+ } from '../Icon';
6
16
  import { IconButton } from '../IconButton';
7
17
  import { Menu } from './Menu';
8
18
  import { MenuItemProps } from './MenuItem.types';
@@ -223,3 +233,137 @@ export const SelectiveIcon: Story = {
223
233
  );
224
234
  },
225
235
  };
236
+
237
+ // ───────────────────────── Usage-page specimens ─────────────────────────
238
+ // Pulled into `Menu.usage.mdx` with <Canvas of={…} />. Hidden from the
239
+ // sidebar (`!dev`). Each menu is held open and rendered in place
240
+ // (`portalled={false}`) so it sits inside its canvas.
241
+
242
+ const OpenMenu = ({
243
+ trigger,
244
+ children,
245
+ }: {
246
+ trigger: ReactNode;
247
+ children: ReactNode;
248
+ }) => (
249
+ <Box h="200px">
250
+ <Menu
251
+ open
252
+ closeOnSelect={false}
253
+ positioning={{ placement: 'bottom-start', flip: false }}
254
+ >
255
+ <Menu.Trigger asChild>{trigger}</Menu.Trigger>
256
+ {/* The list caps itself at the viewport space left below the
257
+ trigger; a canvas near the fold would clip the last row. */}
258
+ <Menu.List portalled={false} maxH="none">
259
+ {children}
260
+ </Menu.List>
261
+ </Menu>
262
+ </Box>
263
+ );
264
+
265
+ // An element, not a component: `Menu.Trigger asChild` passes its ref and
266
+ // props to its direct child, which must be the button itself.
267
+ const rowTrigger = (
268
+ <IconButton aria-label="김민지 님 작업 메뉴" variant="ghost">
269
+ <VerticalEllipsisIcon aria-hidden />
270
+ </IconButton>
271
+ );
272
+
273
+ export const DoRowActions: Story = {
274
+ tags: ['!dev'],
275
+ parameters: { layout: 'padded' },
276
+ name: 'Usage / Do: actions on one row, danger last',
277
+ render: () => (
278
+ <OpenMenu trigger={rowTrigger}>
279
+ <Menu.Item value="rename" icon={<EditIcon aria-hidden />}>
280
+ 이름 변경
281
+ </Menu.Item>
282
+ <Menu.Item value="duplicate" icon={<CopyIcon aria-hidden />}>
283
+ 복제
284
+ </Menu.Item>
285
+ <Menu.Separator />
286
+ <Menu.Item
287
+ value="delete"
288
+ variant="danger"
289
+ icon={<TrashIcon aria-hidden />}
290
+ >
291
+ 삭제
292
+ </Menu.Item>
293
+ </OpenMenu>
294
+ ),
295
+ };
296
+
297
+ export const DontDangerEverywhere: Story = {
298
+ tags: ['!dev'],
299
+ parameters: { layout: 'padded' },
300
+ name: "Usage / Don't: danger on actions that are not destructive",
301
+ render: () => (
302
+ <OpenMenu trigger={rowTrigger}>
303
+ <Menu.Item value="rename" variant="danger">
304
+ 이름 변경
305
+ </Menu.Item>
306
+ <Menu.Item value="archive" variant="danger">
307
+ 보관
308
+ </Menu.Item>
309
+ <Menu.Item value="delete" variant="danger">
310
+ 삭제
311
+ </Menu.Item>
312
+ </OpenMenu>
313
+ ),
314
+ };
315
+
316
+ export const DontUnnamedTrigger: Story = {
317
+ tags: ['!dev'],
318
+ parameters: { layout: 'padded' },
319
+ name: "Usage / Don't: the same unnamed trigger on every row",
320
+ render: () => (
321
+ <OpenMenu
322
+ trigger={
323
+ <IconButton aria-label="메뉴" variant="ghost">
324
+ <VerticalEllipsisIcon aria-hidden />
325
+ </IconButton>
326
+ }
327
+ >
328
+ <Menu.Item value="rename">이름 변경</Menu.Item>
329
+ <Menu.Item value="delete" variant="danger">
330
+ 삭제
331
+ </Menu.Item>
332
+ </OpenMenu>
333
+ ),
334
+ };
335
+
336
+ /** Tokens a menu row reads, as set in `MenuItem.tsx` and `MenuList.tsx`. */
337
+ export const UsageTokens: Story = {
338
+ tags: ['!dev'],
339
+ parameters: { layout: 'padded' },
340
+ name: 'Usage / Tokens',
341
+ render: () => (
342
+ <TokenTable
343
+ rows={[
344
+ { token: 'bg.panel', use: <T en="List" ko="목록" /> },
345
+ {
346
+ token: 'border.subtle',
347
+ use: <T en="List border" ko="목록 테두리" />,
348
+ },
349
+ { token: 'fg.muted', use: <T en="Row · text" ko="줄 · 글자" /> },
350
+ {
351
+ token: 'fg.default',
352
+ use: <T en="Row · highlighted text" ko="줄 · 강조된 글자" />,
353
+ },
354
+ {
355
+ token: 'primary.wash',
356
+ use: <T en="Row · highlighted" ko="줄 · 강조 배경" />,
357
+ },
358
+ {
359
+ token: 'danger.fg',
360
+ use: <T en="Danger row · text" ko="위험 줄 · 글자" />,
361
+ },
362
+ {
363
+ token: 'danger.bg',
364
+ use: <T en="Danger row · highlighted" ko="위험 줄 · 강조 배경" />,
365
+ },
366
+ ]}
367
+ />
368
+ ),
369
+ };