@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
@@ -1,7 +1,11 @@
1
1
  import { useState } from 'react';
2
- import { Box, VStack } from '@chakra-ui/react';
2
+ import { Box, Stack, VStack } from '@chakra-ui/react';
3
3
  import { Meta, StoryObj } from '@storybook/react';
4
4
 
5
+ import { T } from '../../guidelines/_components/Lang';
6
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
7
+ import { Text } from '../Typography';
8
+
5
9
  import { Pagination } from './Pagination';
6
10
 
7
11
  const meta = {
@@ -188,3 +192,88 @@ export const InScrollableContainer: Story = {
188
192
  );
189
193
  },
190
194
  };
195
+
196
+ // ───────────────────────── Usage-page specimens ─────────────────────────
197
+ // Pulled into `Pagination.usage.mdx` with <Canvas of={…} />. Hidden from the
198
+ // sidebar (`!dev`).
199
+
200
+ const ROWS = ['김민지', '이서준', '박지우'];
201
+
202
+ export const DoUnderTheList: Story = {
203
+ tags: ['!dev'],
204
+ parameters: { layout: 'padded' },
205
+ name: 'Usage / Do: under the list it pages, with a page-size choice',
206
+ render: () => {
207
+ const [page, setPage] = useState(2);
208
+ const [perPage, setPerPage] = useState(30);
209
+ const max = Math.ceil(124 / perPage);
210
+ return (
211
+ <Stack gap={3} maxW="560px">
212
+ {ROWS.map((name) => (
213
+ <Text
214
+ key={name}
215
+ borderBottomWidth="1px"
216
+ borderColor="border.subtle"
217
+ py={2}
218
+ >
219
+ {name}
220
+ </Text>
221
+ ))}
222
+ <Pagination
223
+ numTotalItems={124}
224
+ itemsPerPage={perPage}
225
+ itemsPerPageOptions={[10, 30, 50]}
226
+ currentPage={page}
227
+ onCurrentPageChange={setPage}
228
+ onItemsPerPageOptionChange={setPerPage}
229
+ onBack={() => setPage((p) => Math.max(p - 1, 1))}
230
+ onNext={() => setPage((p) => Math.min(p + 1, max))}
231
+ />
232
+ </Stack>
233
+ );
234
+ },
235
+ };
236
+
237
+ export const DontOnePage: Story = {
238
+ tags: ['!dev'],
239
+ parameters: { layout: 'padded' },
240
+ name: "Usage / Don't: a pagination row for a list that fits",
241
+ render: () => (
242
+ <Stack gap={3} maxW="560px">
243
+ {ROWS.map((name) => (
244
+ <Text
245
+ key={name}
246
+ borderBottomWidth="1px"
247
+ borderColor="border.subtle"
248
+ py={2}
249
+ >
250
+ {name}
251
+ </Text>
252
+ ))}
253
+ <Pagination numTotalItems={3} itemsPerPage={30} currentPage={1} />
254
+ </Stack>
255
+ ),
256
+ };
257
+
258
+ /** Tokens the page buttons read, as set in `Pagination.tsx`. */
259
+ export const UsageTokens: Story = {
260
+ tags: ['!dev'],
261
+ parameters: { layout: 'padded' },
262
+ name: 'Usage / Tokens',
263
+ render: () => (
264
+ <TokenTable
265
+ rows={[
266
+ { token: 'fg.muted', use: <T en="Page button" ko="페이지 버튼" /> },
267
+ {
268
+ token: 'fg.subtle',
269
+ use: (
270
+ <T
271
+ en="Page button at the first or last page"
272
+ ko="첫·마지막 페이지의 버튼"
273
+ />
274
+ ),
275
+ },
276
+ ]}
277
+ />
278
+ ),
279
+ };
@@ -10,18 +10,19 @@ import { SelectField } from '../Select';
10
10
  import { PaginationProps } from './Pagination.types';
11
11
 
12
12
  /**
13
- * A pagination component that allows users to navigate through pages.
14
- * Displays the current page number and the maximum page count.
15
- * Supports both controlled and uncontrolled modes.
13
+ * Previous / next page buttons with a "current / last" counter, and an
14
+ * optional page-size select. The last page is derived:
15
+ * `Math.ceil(numTotalItems / itemsPerPage)`; the buttons are hidden when there
16
+ * is only one page.
16
17
  *
17
- * - **Controlled Mode**: Pass `currentPage` and `onBack`/`onNext` props to fully control the pagination behavior.
18
- * - **Uncontrolled Mode**: If `currentPage` is not provided, the component manages its own internal state for the current page.
18
+ * - **Controlled:** pass `currentPage` and update it from `onBack` / `onNext`
19
+ * (and `onCurrentPageChange`, which fires when a larger page size puts the
20
+ * current page past the new last page).
21
+ * - **Uncontrolled:** leave `currentPage` out and the component keeps the page
22
+ * itself.
19
23
  *
20
- * @param {PaginationProps} props - Props for the Pagination component.
21
- * @param {number} [props.currentPage] - The current page number (controlled mode).
22
- * @param {number} props.maxPage - The maximum number of pages available.
23
- * @param {() => void} [props.onBack] - Callback triggered when the "Back" button is clicked.
24
- * @param {() => void} [props.onNext] - Callback triggered when the "Next" button is clicked.
24
+ * `itemsPerPage` is always controlled: update it from
25
+ * `onItemsPerPageOptionChange`.
25
26
  */
26
27
  export const Pagination = ({
27
28
  currentPage: controlledCurrentPage,
@@ -0,0 +1,186 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as PaginationStories from './Pagination.stories';
5
+
6
+ <Meta of={PaginationStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Pagination
13
+
14
+ Previous and next buttons with a "current / last" page counter, and an
15
+ optional page-size select, for a list or table that is longer than one page.
16
+
17
+ ## When to use
18
+
19
+ - Under a table or list that the server returns one page at a time: members,
20
+ audit logs, API call history, inquiries.
21
+ - When the user needs to come back to a known position, such as page 3 of the
22
+ audit log.
23
+
24
+ ## When not to use
25
+
26
+ - The list fits on one page → show it all, without a pagination row.
27
+ - A feed the user scrolls through without looking for a position → load more
28
+ as they scroll.
29
+ - To move between steps or sections → a stepper or `Tabs`.
30
+
31
+ ## Variants and what they mean
32
+
33
+ Pagination has no visual variants. The props decide what it shows:
34
+
35
+ </En>
36
+
37
+ <Ko>
38
+
39
+ # Pagination
40
+
41
+ 한 페이지보다 긴 목록이나 표에 쓰는 이전·다음 버튼과 "현재 / 마지막" 쪽 번호입니다.
42
+ 페이지당 항목 수를 고르는 선택 상자를 함께 둘 수 있습니다.
43
+
44
+ ## 언제 쓰나요
45
+
46
+ - 서버가 한 페이지씩 돌려주는 표나 목록 아래: 멤버, 감사 로그, API 호출 기록, 문의.
47
+ - 사용자가 감사 로그 3쪽처럼 알고 있는 위치로 돌아와야 할 때.
48
+
49
+ ## 언제 쓰지 않나요
50
+
51
+ - 한 페이지에 다 들어가는 목록은 페이지 줄 없이 모두 보입니다.
52
+ - 위치를 찾지 않고 계속 내려 보는 피드는 스크롤하면 더 불러옵니다.
53
+ - 단계나 구역 사이를 오가는 것은 단계 표시나 `Tabs`가 맡습니다.
54
+
55
+ ## 변형과 뜻
56
+
57
+ Pagination에는 모양 변형이 없습니다. 무엇을 보일지는 속성이 정합니다.
58
+
59
+ </Ko>
60
+
61
+ <ArgTypes of={PaginationStories} include={['numTotalItems', 'itemsPerPage', 'itemsPerPageOptions', 'currentPage']} />
62
+
63
+ <En>
64
+
65
+ | Prop | Effect |
66
+ | --- | --- |
67
+ | `numTotalItems` + `itemsPerPage` | The last page is `Math.ceil(numTotalItems / itemsPerPage)`. With one page the buttons are hidden and only "1 / 1" remains. |
68
+ | `itemsPerPageOptions` | Adds the page-size select on the left. `itemsPerPage` is always yours to update, from `onItemsPerPageOptionChange`. |
69
+ | `currentPage` | Controlled. Update it from `onBack` / `onNext`, and from `onCurrentPageChange`, which fires when a larger page size puts the current page past the end. Leave it out and the component keeps the page itself. |
70
+
71
+ ## Do / Don't
72
+
73
+ </En>
74
+
75
+ <Ko>
76
+
77
+ | 속성 | 효과 |
78
+ | --- | --- |
79
+ | `numTotalItems` + `itemsPerPage` | 마지막 쪽은 `Math.ceil(numTotalItems / itemsPerPage)`입니다. 한 쪽뿐이면 버튼이 사라지고 "1 / 1"만 남습니다. |
80
+ | `itemsPerPageOptions` | 왼쪽에 페이지당 항목 수 선택 상자를 더합니다. `itemsPerPage`는 언제나 호출부가 `onItemsPerPageOptionChange`에서 바꿔 줍니다. |
81
+ | `currentPage` | 제어 모드입니다. `onBack`/`onNext`에서, 그리고 페이지 크기를 키워 현재 쪽이 범위를 벗어날 때 불리는 `onCurrentPageChange`에서 값을 바꿉니다. 넘기지 않으면 컴포넌트가 직접 쪽을 기억합니다. |
82
+
83
+ ## 이렇게 하세요 / 이렇게 하지 마세요
84
+
85
+ </Ko>
86
+
87
+ <Canvas of={PaginationStories.DoUnderTheList} />
88
+ <Verdict
89
+ kind="do"
90
+ en="Put it directly under the list it pages, full width, and keep the page when the data refetches so the row does not jump."
91
+ ko="넘기는 목록 바로 아래에 전체 너비로 둡니다. 데이터를 다시 불러오는 동안에도 쪽 번호를 유지해 줄이 들썩이지 않게 합니다."
92
+ />
93
+
94
+ <Canvas of={PaginationStories.DontOnePage} />
95
+ <Verdict
96
+ kind="dont"
97
+ en="Show a pagination row for a list that fits on one page. '1 / 1' tells the user nothing."
98
+ ko="한 페이지에 다 들어가는 목록에 페이지 줄을 두지 마세요. '1 / 1'은 아무것도 알려 주지 않습니다."
99
+ />
100
+
101
+ <En>
102
+
103
+ ## Content
104
+
105
+ - The counter and the button names come from the library's translations
106
+ (이전 / 다음, 항목 수). Do not add your own labels beside them.
107
+ - If the total matters, say it above the list ("멤버 124명"), not in the
108
+ pagination row.
109
+
110
+ ## Accessibility
111
+
112
+ What Pagination does for you:
113
+
114
+ - The previous and next buttons are `IconButton`s with translated names (이전,
115
+ 다음), and are disabled on the first and last page (WCAG 4.1.2).
116
+ - The page-size select carries the same words as the visible text beside it
117
+ as its accessible name (WCAG 2.5.3; KWCAG 5.3.4.1).
118
+ - The counter is a paragraph, not a heading, so it stays out of the page
119
+ outline.
120
+
121
+ What you still have to do:
122
+
123
+ - **Look after focus on page change.** The counter is not a live region, and
124
+ on the first or last page the button the user just pressed becomes disabled
125
+ and drops focus. Move focus to the other button or to the top of the list
126
+ when that happens (WCAG 2.4.3).
127
+ - Keep `currentPage` at the page you requested while the data loads, so the
128
+ next button cannot request a page past the end.
129
+
130
+ ## Tokens
131
+
132
+ The table lists the tokens set in `Pagination.tsx`.
133
+
134
+ </En>
135
+
136
+ <Ko>
137
+
138
+ ## 문구
139
+
140
+ - 쪽 번호와 버튼 이름은 라이브러리 번역(이전 / 다음, 항목 수)에서 옵니다. 옆에 따로 라벨을
141
+ 붙이지 않습니다.
142
+ - 전체 개수가 중요하다면 페이지 줄이 아니라 목록 위에 씁니다("멤버 124명").
143
+
144
+ ## 접근성
145
+
146
+ Pagination이 알아서 하는 일
147
+
148
+ - 이전·다음 버튼은 번역된 이름(이전, 다음)이 붙은 `IconButton`이며, 첫 쪽과 마지막
149
+ 쪽에서는 비활성이 됩니다(WCAG 4.1.2).
150
+ - 페이지당 항목 수 선택 상자는 옆에 보이는 문구와 같은 말을 접근 가능한 이름으로
151
+ 갖습니다(WCAG 2.5.3, KWCAG 5.3.4.1).
152
+ - 쪽 번호는 제목이 아니라 문단이라 문서 개요에 끼어들지 않습니다.
153
+
154
+ 직접 챙겨야 하는 일
155
+
156
+ - **쪽을 넘길 때 초점을 챙깁니다.** 쪽 번호는 라이브 영역이 아니고, 첫 쪽이나 마지막 쪽에
157
+ 닿으면 방금 누른 버튼이 비활성이 되면서 초점을 잃습니다. 그럴 때는 반대쪽 버튼이나 목록
158
+ 맨 위로 초점을 옮깁니다(WCAG 2.4.3).
159
+ - 데이터를 불러오는 동안 `currentPage`를 요청한 쪽으로 유지합니다. 그래야 다음 버튼이
160
+ 범위 밖의 쪽을 요청하지 않습니다.
161
+
162
+ ## 토큰
163
+
164
+ 아래 표는 `Pagination.tsx`에서 정한 토큰입니다.
165
+
166
+ </Ko>
167
+
168
+ <Canvas of={PaginationStories.UsageTokens} sourceState="none" />
169
+
170
+ <En>
171
+
172
+ ## Related
173
+
174
+ - **Table**: the usual thing Pagination sits under.
175
+ - **Select**: the page-size control inside it.
176
+
177
+ </En>
178
+
179
+ <Ko>
180
+
181
+ ## 관련 컴포넌트
182
+
183
+ - **Table**: Pagination이 보통 그 아래에 놓이는 표.
184
+ - **Select**: 안에 들어 있는 페이지 크기 선택 상자.
185
+
186
+ </Ko>
@@ -2,6 +2,7 @@ import { Meta, StoryObj } from '@storybook/react';
2
2
  import { useState } from 'react';
3
3
  import { Stack, Text } from '@chakra-ui/react';
4
4
 
5
+ import { FieldRow } from '../Form';
5
6
  import { PasswordInput } from './PasswordInput';
6
7
 
7
8
  const meta = {
@@ -54,3 +55,53 @@ export const Disabled: Story = {
54
55
  defaultValue: 'password123',
55
56
  },
56
57
  };
58
+
59
+ // ───────────────────────── Usage-page specimens ─────────────────────────
60
+ // Pulled into `PasswordInput.usage.mdx` with <Canvas of={…} />. Hidden (`!dev`).
61
+
62
+ export const DoSignInPassword: Story = {
63
+ tags: ['!dev'],
64
+ parameters: { layout: 'padded' },
65
+ name: 'Usage / Do: labelled, with autocomplete',
66
+ render: () => (
67
+ <Stack maxW="360px">
68
+ <FieldRow label="비밀번호" required>
69
+ <PasswordInput autoComplete="current-password" />
70
+ </FieldRow>
71
+ </Stack>
72
+ ),
73
+ };
74
+
75
+ export const DoRulesBeforeTyping: Story = {
76
+ tags: ['!dev'],
77
+ parameters: { layout: 'padded' },
78
+ name: 'Usage / Do: state the rule before the user types',
79
+ render: () => (
80
+ <Stack maxW="360px">
81
+ <FieldRow
82
+ label="새 비밀번호"
83
+ helperText="영문, 숫자, 특수문자를 섞어 8자 이상 입력합니다."
84
+ required
85
+ >
86
+ <PasswordInput autoComplete="new-password" />
87
+ </FieldRow>
88
+ </Stack>
89
+ ),
90
+ };
91
+
92
+ export const DontRuleOnlyInError: Story = {
93
+ tags: ['!dev'],
94
+ parameters: { layout: 'padded' },
95
+ name: "Usage / Don't: reveal the rule only as an error",
96
+ render: () => (
97
+ <Stack maxW="360px">
98
+ <FieldRow
99
+ label="새 비밀번호"
100
+ error="비밀번호가 올바르지 않습니다."
101
+ required
102
+ >
103
+ <PasswordInput autoComplete="new-password" defaultValue="abcd" />
104
+ </FieldRow>
105
+ </Stack>
106
+ ),
107
+ };
@@ -0,0 +1,193 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as PasswordInputStories from './PasswordInput.stories';
5
+
6
+ <Meta of={PasswordInputStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # PasswordInput
13
+
14
+ An `Input` for passwords and other secrets, with an eye button that shows or
15
+ hides what was typed.
16
+
17
+ ## When to use
18
+
19
+ - Sign-in, sign-up and password reset.
20
+ - A secret the user pastes once, such as an OAuth client secret or an API key.
21
+
22
+ ## When not to use
23
+
24
+ - A one-time code sent by email or SMS → `PinInput`.
25
+ - A secret the user only needs to copy, not type → `CopyableCode`.
26
+ - Any value that is not secret → `Input`. Hiding it only makes it harder to
27
+ check.
28
+
29
+ ## Props
30
+
31
+ </En>
32
+
33
+ <Ko>
34
+
35
+ # PasswordInput
36
+
37
+ 비밀번호 같은 비밀 값을 받는 `Input`입니다. 눈 모양 버튼으로 입력한 내용을 보이거나
38
+ 가립니다.
39
+
40
+ ## 언제 쓰나요
41
+
42
+ - 로그인, 회원가입, 비밀번호 재설정.
43
+ - OAuth 클라이언트 시크릿이나 API 키처럼 한 번 붙여 넣는 비밀 값.
44
+
45
+ ## 언제 쓰지 않나요
46
+
47
+ - 메일이나 문자로 받은 일회용 코드는 `PinInput`을 씁니다.
48
+ - 입력하지 않고 복사만 하면 되는 비밀 값은 `CopyableCode`를 씁니다.
49
+ - 비밀이 아닌 값은 `Input`을 씁니다. 가리면 확인하기만 어려워집니다.
50
+
51
+ ## 속성
52
+
53
+ </Ko>
54
+
55
+ <ArgTypes
56
+ of={PasswordInputStories}
57
+ include={[
58
+ 'defaultVisible',
59
+ 'visible',
60
+ 'onVisibleChange',
61
+ 'visibilityIcon',
62
+ 'rootProps',
63
+ ]}
64
+ />
65
+
66
+ <En>
67
+
68
+ Every other prop goes to the inner `Input`, so `noSpaces`, `invalid`,
69
+ `autoComplete` and `name` work the same way. `type` is not accepted; the
70
+ component sets it from `visible`.
71
+
72
+ ## Do / Don't
73
+
74
+ </En>
75
+
76
+ <Ko>
77
+
78
+ 나머지 속성은 모두 안쪽 `Input`에 그대로 전달되므로 `noSpaces`, `invalid`,
79
+ `autoComplete`, `name`이 `Input`과 똑같이 동작합니다. `type`은 받지 않으며 `visible`에
80
+ 따라 컴포넌트가 정합니다.
81
+
82
+ ## 이렇게 하세요 / 이렇게 하지 마세요
83
+
84
+ </Ko>
85
+
86
+ <Canvas of={PasswordInputStories.DoSignInPassword} />
87
+ <Verdict
88
+ kind="do"
89
+ en="Label it and set autoComplete: current-password to sign in, new-password to create one, so password managers fill the right field (WCAG 1.3.5)."
90
+ ko="라벨을 붙이고 autoComplete를 지정합니다. 로그인에는 current-password, 새로 만들 때는 new-password를 써야 비밀번호 관리자가 알맞은 칸을 채웁니다(WCAG 1.3.5)."
91
+ />
92
+
93
+ <Canvas of={PasswordInputStories.DoRulesBeforeTyping} />
94
+ <Verdict
95
+ kind="do"
96
+ en="State the password rule in helper text before the user types."
97
+ ko="비밀번호 규칙은 입력하기 전에 도움말로 알려 줍니다."
98
+ />
99
+
100
+ <Canvas of={PasswordInputStories.DontRuleOnlyInError} />
101
+ <Verdict
102
+ kind="dont"
103
+ en="Reveal the rule only after a failed attempt, in an error that does not say what is wrong."
104
+ ko="실패한 뒤에야 규칙을 알려 주거나, 무엇이 틀렸는지 말하지 않는 오류 문구를 쓰지 마세요."
105
+ />
106
+
107
+ <En>
108
+
109
+ ## Content
110
+
111
+ - Label: "Password", "New password", "Client secret". Korean: 비밀번호, 새
112
+ 비밀번호.
113
+ - Do not repeat the rule in the placeholder; it disappears on the first
114
+ keystroke.
115
+ - Error text names the rule that failed: 8자 이상 입력해 주세요, not
116
+ 비밀번호가 올바르지 않습니다.
117
+
118
+ ## Accessibility
119
+
120
+ What PasswordInput does for you:
121
+
122
+ - The field itself is the `Input`: native `<input>`, labelled and wired by
123
+ `FieldRow` / `FormControl`.
124
+ - The eye button has an accessible name ("Toggle password visibility") and
125
+ does nothing while the field is `disabled`.
126
+
127
+ What you still have to do, and known gaps:
128
+
129
+ - **The eye button is mouse and touch only.** It has `tabIndex={-1}` and acts
130
+ on pointer down, so a keyboard user cannot reveal the password (WCAG
131
+ 2.1.1). Until the component is fixed, do not make showing the password the
132
+ only way to check it; a confirm field or a clear error works for everyone.
133
+ - **Its name is English and its state is not announced.** The label is fixed
134
+ and there is no `aria-pressed`, so a screen reader does not say whether the
135
+ password is shown (WCAG 4.1.2).
136
+ - Label the field (WCAG 4.1.2; KWCAG 5.3.4.1 레이블 제공) and put errors in
137
+ `FieldRow` `error` (WCAG 3.3.1).
138
+
139
+ ## Tokens
140
+
141
+ PasswordInput has no colours of its own. The field reads the `Input` tokens;
142
+ the eye button is a ghost `IconButton`.
143
+
144
+ ## Related
145
+
146
+ - **Input**: the field it wraps, and its tokens.
147
+ - **PinInput**: one-time codes.
148
+ - **FieldRow**: label, rule and error.
149
+
150
+ </En>
151
+
152
+ <Ko>
153
+
154
+ ## 문구
155
+
156
+ - 라벨: 비밀번호, 새 비밀번호, 클라이언트 시크릿.
157
+ - 규칙을 플레이스홀더에 되풀이하지 않습니다. 첫 글자를 입력하면 사라집니다.
158
+ - 오류 문구는 어긋난 규칙을 말합니다. "비밀번호가 올바르지 않습니다"가 아니라 "8자
159
+ 이상 입력해 주세요"라고 씁니다.
160
+
161
+ ## 접근성
162
+
163
+ PasswordInput이 알아서 하는 일
164
+
165
+ - 입력란은 `Input` 그대로입니다. 네이티브 `<input>`이고, `FieldRow`나 `FormControl`
166
+ 안에서 라벨과 연결됩니다.
167
+ - 눈 모양 버튼에는 접근 가능한 이름("Toggle password visibility")이 있고, 입력란이
168
+ `disabled`이면 동작하지 않습니다.
169
+
170
+ 직접 챙겨야 하는 일과 알려진 한계
171
+
172
+ - **눈 모양 버튼은 마우스와 터치로만 동작합니다.** `tabIndex={-1}`이고 포인터를 누를
173
+ 때만 반응하므로 키보드 사용자는 비밀번호를 볼 수 없습니다(WCAG 2.1.1). 컴포넌트가
174
+ 고쳐지기 전까지는 비밀번호 보기를 유일한 확인 방법으로 두지 마세요. 확인 입력란이나
175
+ 분명한 오류 문구는 누구에게나 통합니다.
176
+ - **버튼 이름이 영어이고 상태를 알리지 않습니다.** 라벨이 고정되어 있고
177
+ `aria-pressed`가 없어서, 화면 낭독기는 지금 비밀번호가 보이는지 알려 주지 않습니다
178
+ (WCAG 4.1.2).
179
+ - 입력란에 라벨을 붙이고(WCAG 4.1.2, KWCAG 5.3.4.1 레이블 제공), 오류는 `FieldRow`의
180
+ `error`로 보여 줍니다(WCAG 3.3.1).
181
+
182
+ ## 토큰
183
+
184
+ PasswordInput에는 따로 정한 색이 없습니다. 입력란은 `Input`의 토큰을 쓰고, 눈 모양
185
+ 버튼은 ghost `IconButton`입니다.
186
+
187
+ ## 관련 컴포넌트
188
+
189
+ - **Input**: 감싸고 있는 입력란과 그 토큰.
190
+ - **PinInput**: 일회용 코드.
191
+ - **FieldRow**: 라벨, 규칙, 오류 문구.
192
+
193
+ </Ko>
@@ -1,6 +1,12 @@
1
1
  import { Meta, StoryObj } from '@storybook/react';
2
2
  import { useState } from 'react';
3
3
 
4
+ import { Stack } from '@chakra-ui/react';
5
+
6
+ import { T } from '../../guidelines/_components/Lang';
7
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
8
+ import { FieldRow } from '../Form';
9
+ import { Subtext } from '../Typography';
4
10
  import { PinInput } from '.';
5
11
 
6
12
  const meta = {
@@ -55,3 +61,88 @@ export const Invalid: Story = {
55
61
  args: { length: 5, invalid: true },
56
62
  render: (args) => <Controlled {...args} />,
57
63
  };
64
+
65
+ // ───────────────────────── Usage-page specimens ─────────────────────────
66
+ // Pulled into `PinInput.usage.mdx` with <Canvas of={…} />. Hidden (`!dev`).
67
+
68
+ export const DoSayWhereTheCodeWent: Story = {
69
+ tags: ['!dev'],
70
+ parameters: { layout: 'padded' },
71
+ name: 'Usage / Do: say where the code was sent',
72
+ render: () => {
73
+ const [value, setValue] = useState('');
74
+ return (
75
+ <Stack gap={2} maxW="420px">
76
+ <Subtext color="fg.muted">
77
+ name@company.com 으로 보낸 6자리 코드를 입력하세요.
78
+ </Subtext>
79
+ <PinInput
80
+ length={6}
81
+ type="numeric"
82
+ otp
83
+ value={value}
84
+ onChange={setValue}
85
+ />
86
+ </Stack>
87
+ );
88
+ },
89
+ };
90
+
91
+ export const DontCodeWithoutContext: Story = {
92
+ tags: ['!dev'],
93
+ parameters: { layout: 'padded' },
94
+ name: "Usage / Don't: boxes with no context",
95
+ render: () => <PinInput length={6} type="numeric" />,
96
+ };
97
+
98
+ export const DoErrorBelow: Story = {
99
+ tags: ['!dev'],
100
+ parameters: { layout: 'padded' },
101
+ name: 'Usage / Do: a wrong code, in words',
102
+ render: () => (
103
+ <Stack maxW="420px">
104
+ <FieldRow error="코드가 맞지 않습니다. 메일을 다시 확인해 주세요.">
105
+ <PinInput length={6} type="numeric" value="123456" invalid />
106
+ </FieldRow>
107
+ </Stack>
108
+ ),
109
+ };
110
+
111
+ /** Tokens each box reads, as written in `PinInput.tsx`. */
112
+ export const UsageTokens: Story = {
113
+ tags: ['!dev'],
114
+ parameters: { layout: 'padded' },
115
+ name: 'Usage / Tokens',
116
+ render: () => (
117
+ <TokenTable
118
+ rows={[
119
+ { token: 'bg.surface', use: <T en="Box background" ko="칸 배경" /> },
120
+ { token: 'fg.default', use: <T en="Character" ko="글자" /> },
121
+ {
122
+ token: 'border.control',
123
+ use: <T en="Border at rest" ko="평소 테두리" />,
124
+ },
125
+ {
126
+ token: 'fg.icon',
127
+ use: <T en="Border on hover" ko="마우스를 올렸을 때 테두리" />,
128
+ },
129
+ {
130
+ token: 'primary.main',
131
+ use: <T en="Border and ring on focus" ko="초점 테두리와 링" />,
132
+ },
133
+ {
134
+ token: 'danger.solid',
135
+ use: <T en="Border when invalid" ko="오류 상태 테두리" />,
136
+ },
137
+ {
138
+ token: 'disabled.bg',
139
+ use: <T en="Disabled background" ko="비활성 배경" />,
140
+ },
141
+ {
142
+ token: 'disabled.fg',
143
+ use: <T en="Disabled text" ko="비활성 글자" />,
144
+ },
145
+ ]}
146
+ />
147
+ ),
148
+ };