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

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 (525) 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/CodeTabs/CodeTabs.styles.d.ts +6 -5
  30. package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
  31. package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
  32. package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
  33. package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
  34. package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
  35. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  36. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  37. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  38. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  39. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  40. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  41. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  42. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  43. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  44. package/dist/components/Confetti/confettiColors.js +5 -5
  45. package/dist/components/Confetti/confettiColors.mjs +5 -5
  46. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  47. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  48. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  49. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  50. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  51. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  52. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  53. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  54. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  55. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  56. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  57. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  58. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  59. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  60. package/dist/components/Input/Input.d.ts.map +1 -1
  61. package/dist/components/Input/Input.js +4 -0
  62. package/dist/components/Input/Input.js.map +1 -1
  63. package/dist/components/Input/Input.mjs +4 -0
  64. package/dist/components/Input/Input.mjs.map +1 -1
  65. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  66. package/dist/components/LineGraph/LineGraph.js +4 -5
  67. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  68. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  69. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  70. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  71. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  72. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  73. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  74. package/dist/components/LineGraph/seriesColors.js +8 -7
  75. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  76. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  77. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  78. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  79. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  80. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  81. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  82. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  83. package/dist/components/Modal/ModalCloseButton.js +1 -1
  84. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  85. package/dist/components/NavList/NavList.d.ts +35 -0
  86. package/dist/components/NavList/NavList.d.ts.map +1 -0
  87. package/dist/components/NavList/NavList.js +113 -0
  88. package/dist/components/NavList/NavList.js.map +1 -0
  89. package/dist/components/NavList/NavList.mjs +111 -0
  90. package/dist/components/NavList/NavList.mjs.map +1 -0
  91. package/dist/components/NavList/NavList.styles.d.ts +90 -0
  92. package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
  93. package/dist/components/NavList/NavList.styles.js +104 -0
  94. package/dist/components/NavList/NavList.styles.js.map +1 -0
  95. package/dist/components/NavList/NavList.styles.mjs +97 -0
  96. package/dist/components/NavList/NavList.styles.mjs.map +1 -0
  97. package/dist/components/NavList/NavList.translations.json.js +19 -0
  98. package/dist/components/NavList/NavList.translations.json.js.map +1 -0
  99. package/dist/components/NavList/NavList.translations.json.mjs +14 -0
  100. package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
  101. package/dist/components/NavList/NavList.types.d.ts +140 -0
  102. package/dist/components/NavList/NavList.types.d.ts.map +1 -0
  103. package/dist/components/NavList/NavListContext.d.ts +30 -0
  104. package/dist/components/NavList/NavListContext.d.ts.map +1 -0
  105. package/dist/components/NavList/NavListContext.js +16 -0
  106. package/dist/components/NavList/NavListContext.js.map +1 -0
  107. package/dist/components/NavList/NavListContext.mjs +13 -0
  108. package/dist/components/NavList/NavListContext.mjs.map +1 -0
  109. package/dist/components/NavList/NavListGroup.d.ts +31 -0
  110. package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
  111. package/dist/components/NavList/NavListGroup.js +115 -0
  112. package/dist/components/NavList/NavListGroup.js.map +1 -0
  113. package/dist/components/NavList/NavListGroup.mjs +113 -0
  114. package/dist/components/NavList/NavListGroup.mjs.map +1 -0
  115. package/dist/components/NavList/NavListItem.d.ts +16 -0
  116. package/dist/components/NavList/NavListItem.d.ts.map +1 -0
  117. package/dist/components/NavList/NavListItem.js +284 -0
  118. package/dist/components/NavList/NavListItem.js.map +1 -0
  119. package/dist/components/NavList/NavListItem.mjs +282 -0
  120. package/dist/components/NavList/NavListItem.mjs.map +1 -0
  121. package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
  122. package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
  123. package/dist/components/NavList/NavListSkeleton.js +33 -0
  124. package/dist/components/NavList/NavListSkeleton.js.map +1 -0
  125. package/dist/components/NavList/NavListSkeleton.mjs +31 -0
  126. package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
  127. package/dist/components/NavList/index.d.ts +7 -0
  128. package/dist/components/NavList/index.d.ts.map +1 -0
  129. package/dist/components/Pagination/Pagination.d.ts +11 -10
  130. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  131. package/dist/components/Pagination/Pagination.js +11 -10
  132. package/dist/components/Pagination/Pagination.js.map +1 -1
  133. package/dist/components/Pagination/Pagination.mjs +11 -10
  134. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  135. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  136. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  137. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  138. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  139. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  140. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  141. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  142. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  143. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  144. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  145. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  146. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  147. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  148. package/dist/components/Select/Combobox.d.ts +1 -1
  149. package/dist/components/Select/Combobox.d.ts.map +1 -1
  150. package/dist/components/Select/Combobox.js +9 -2
  151. package/dist/components/Select/Combobox.js.map +1 -1
  152. package/dist/components/Select/Combobox.mjs +10 -3
  153. package/dist/components/Select/Combobox.mjs.map +1 -1
  154. package/dist/components/Select/Select.d.ts +1 -1
  155. package/dist/components/Select/Select.d.ts.map +1 -1
  156. package/dist/components/Select/Select.js +14 -2
  157. package/dist/components/Select/Select.js.map +1 -1
  158. package/dist/components/Select/Select.mjs +15 -3
  159. package/dist/components/Select/Select.mjs.map +1 -1
  160. package/dist/components/Select/Select.styles.d.ts +97 -1
  161. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  162. package/dist/components/Select/Select.styles.js +83 -0
  163. package/dist/components/Select/Select.styles.js.map +1 -1
  164. package/dist/components/Select/Select.styles.mjs +82 -1
  165. package/dist/components/Select/Select.styles.mjs.map +1 -1
  166. package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
  167. package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
  168. package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
  169. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  170. package/dist/components/Textarea/Textarea.js +4 -0
  171. package/dist/components/Textarea/Textarea.js.map +1 -1
  172. package/dist/components/Textarea/Textarea.mjs +4 -0
  173. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  174. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  175. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  176. package/dist/components/Toast/Toast.styles.js +18 -10
  177. package/dist/components/Toast/Toast.styles.js.map +1 -1
  178. package/dist/components/Toast/Toast.styles.mjs +18 -10
  179. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  180. package/dist/components/Typography/Caption.d.ts.map +1 -1
  181. package/dist/components/Typography/Caption.js +1 -1
  182. package/dist/components/Typography/Caption.js.map +1 -1
  183. package/dist/components/Typography/Caption.mjs +1 -1
  184. package/dist/components/Typography/Caption.mjs.map +1 -1
  185. package/dist/components/Typography/H1.d.ts.map +1 -1
  186. package/dist/components/Typography/H1.js +1 -1
  187. package/dist/components/Typography/H1.js.map +1 -1
  188. package/dist/components/Typography/H1.mjs +1 -1
  189. package/dist/components/Typography/H1.mjs.map +1 -1
  190. package/dist/components/Typography/H2.d.ts.map +1 -1
  191. package/dist/components/Typography/H2.js +1 -1
  192. package/dist/components/Typography/H2.js.map +1 -1
  193. package/dist/components/Typography/H2.mjs +1 -1
  194. package/dist/components/Typography/H2.mjs.map +1 -1
  195. package/dist/components/Typography/H3.d.ts.map +1 -1
  196. package/dist/components/Typography/H3.js +1 -1
  197. package/dist/components/Typography/H3.js.map +1 -1
  198. package/dist/components/Typography/H3.mjs +1 -1
  199. package/dist/components/Typography/H3.mjs.map +1 -1
  200. package/dist/components/Typography/H4.d.ts.map +1 -1
  201. package/dist/components/Typography/H4.js +1 -1
  202. package/dist/components/Typography/H4.js.map +1 -1
  203. package/dist/components/Typography/H4.mjs +1 -1
  204. package/dist/components/Typography/H4.mjs.map +1 -1
  205. package/dist/components/Typography/H5.d.ts.map +1 -1
  206. package/dist/components/Typography/H5.js +1 -1
  207. package/dist/components/Typography/H5.js.map +1 -1
  208. package/dist/components/Typography/H5.mjs +1 -1
  209. package/dist/components/Typography/H5.mjs.map +1 -1
  210. package/dist/components/Typography/Link.d.ts.map +1 -1
  211. package/dist/components/Typography/Link.js +1 -1
  212. package/dist/components/Typography/Link.js.map +1 -1
  213. package/dist/components/Typography/Link.mjs +1 -1
  214. package/dist/components/Typography/Link.mjs.map +1 -1
  215. package/dist/components/Typography/Overline.d.ts.map +1 -1
  216. package/dist/components/Typography/Overline.js +1 -1
  217. package/dist/components/Typography/Overline.js.map +1 -1
  218. package/dist/components/Typography/Overline.mjs +1 -1
  219. package/dist/components/Typography/Overline.mjs.map +1 -1
  220. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  221. package/dist/components/Typography/Subtext.js +1 -1
  222. package/dist/components/Typography/Subtext.js.map +1 -1
  223. package/dist/components/Typography/Subtext.mjs +1 -1
  224. package/dist/components/Typography/Subtext.mjs.map +1 -1
  225. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  226. package/dist/components/Typography/Subtitle.js +1 -1
  227. package/dist/components/Typography/Subtitle.js.map +1 -1
  228. package/dist/components/Typography/Subtitle.mjs +1 -1
  229. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  230. package/dist/components/Typography/Text.d.ts.map +1 -1
  231. package/dist/components/Typography/Text.js +1 -1
  232. package/dist/components/Typography/Text.js.map +1 -1
  233. package/dist/components/Typography/Text.mjs +1 -1
  234. package/dist/components/Typography/Text.mjs.map +1 -1
  235. package/dist/hooks/useLanguage.d.ts +5 -0
  236. package/dist/hooks/useLanguage.d.ts.map +1 -1
  237. package/dist/hooks/useLanguage.js +7 -3
  238. package/dist/hooks/useLanguage.js.map +1 -1
  239. package/dist/hooks/useLanguage.mjs +7 -4
  240. package/dist/hooks/useLanguage.mjs.map +1 -1
  241. package/dist/hooks/useTranslate.d.ts.map +1 -1
  242. package/dist/hooks/useTranslate.js +8 -5
  243. package/dist/hooks/useTranslate.js.map +1 -1
  244. package/dist/hooks/useTranslate.mjs +8 -5
  245. package/dist/hooks/useTranslate.mjs.map +1 -1
  246. package/dist/index.d.ts +2 -1
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +13 -0
  249. package/dist/index.js.map +1 -1
  250. package/dist/index.mjs +7 -2
  251. package/dist/index.mjs.map +1 -1
  252. package/dist/theme/colors.d.ts +2 -2
  253. package/dist/theme/colors.d.ts.map +1 -1
  254. package/dist/theme/colors.js +54 -18
  255. package/dist/theme/colors.js.map +1 -1
  256. package/dist/theme/colors.mjs +55 -19
  257. package/dist/theme/colors.mjs.map +1 -1
  258. package/dist/theme/global.d.ts.map +1 -1
  259. package/dist/theme/global.js +19 -1
  260. package/dist/theme/global.js.map +1 -1
  261. package/dist/theme/global.mjs +19 -1
  262. package/dist/theme/global.mjs.map +1 -1
  263. package/dist/theme/index.d.ts.map +1 -1
  264. package/dist/theme/index.js +2 -0
  265. package/dist/theme/index.js.map +1 -1
  266. package/dist/theme/index.mjs +2 -0
  267. package/dist/theme/index.mjs.map +1 -1
  268. package/dist/theme/palette.generated.d.ts +232 -123
  269. package/dist/theme/palette.generated.d.ts.map +1 -1
  270. package/dist/theme/palette.generated.js +233 -123
  271. package/dist/theme/palette.generated.js.map +1 -1
  272. package/dist/theme/palette.generated.mjs +233 -124
  273. package/dist/theme/palette.generated.mjs.map +1 -1
  274. package/dist/theme/paletteSwatches.d.ts +20 -0
  275. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  276. package/dist/theme/recipes/avatar.d.ts +30 -0
  277. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  278. package/dist/theme/recipes/avatar.js +96 -0
  279. package/dist/theme/recipes/avatar.js.map +1 -0
  280. package/dist/theme/recipes/avatar.mjs +94 -0
  281. package/dist/theme/recipes/avatar.mjs.map +1 -0
  282. package/dist/translations/Defaults.translations.json.js +19 -1
  283. package/dist/translations/Defaults.translations.json.js.map +1 -1
  284. package/dist/translations/Defaults.translations.json.mjs +18 -2
  285. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  286. package/dist/utils/disabledControl.d.ts +8 -1
  287. package/dist/utils/disabledControl.d.ts.map +1 -1
  288. package/dist/utils/disabledControl.js +8 -1
  289. package/dist/utils/disabledControl.js.map +1 -1
  290. package/dist/utils/disabledControl.mjs +8 -1
  291. package/dist/utils/disabledControl.mjs.map +1 -1
  292. package/dist/utils/focusRing.d.ts +22 -0
  293. package/dist/utils/focusRing.d.ts.map +1 -1
  294. package/dist/utils/focusRing.js +22 -0
  295. package/dist/utils/focusRing.js.map +1 -1
  296. package/dist/utils/focusRing.mjs +21 -1
  297. package/dist/utils/focusRing.mjs.map +1 -1
  298. package/package.json +2 -1
  299. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  300. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  301. package/src/components/Appear/Appear.usage.mdx +107 -0
  302. package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
  303. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  304. package/src/components/Avatar/Avatar.tsx +118 -21
  305. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  306. package/src/components/Avatar/index.tsx +8 -1
  307. package/src/components/Badge/Badge.stories.tsx +193 -3
  308. package/src/components/Badge/Badge.tsx +5 -3
  309. package/src/components/Badge/Badge.types.ts +7 -5
  310. package/src/components/Badge/Badge.usage.mdx +265 -0
  311. package/src/components/Banner/Banner.stories.tsx +152 -2
  312. package/src/components/Banner/Banner.types.ts +30 -1
  313. package/src/components/Banner/Banner.usage.mdx +233 -0
  314. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  315. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  316. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  317. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  318. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  319. package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
  320. package/src/components/Button/Button.stories.tsx +332 -3
  321. package/src/components/Button/Button.tsx +46 -3
  322. package/src/components/Button/Button.types.ts +38 -1
  323. package/src/components/Button/Button.usage.mdx +358 -0
  324. package/src/components/Button/Button.variants.test.tsx +13 -1
  325. package/src/components/Card/Card.stories.tsx +106 -0
  326. package/src/components/Card/Card.types.ts +12 -0
  327. package/src/components/Card/Card.usage.mdx +216 -0
  328. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  329. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  330. package/src/components/Chip/Chip.usage.mdx +78 -0
  331. package/src/components/Code/Code.stories.tsx +60 -0
  332. package/src/components/Code/Code.usage.mdx +187 -0
  333. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  334. package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
  335. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  336. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  337. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  338. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  339. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  340. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  341. package/src/components/Confetti/Confetti.types.ts +5 -1
  342. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  343. package/src/components/Confetti/confettiColors.ts +5 -5
  344. package/src/components/Container/Container.stories.tsx +32 -0
  345. package/src/components/Container/Container.usage.mdx +130 -0
  346. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  347. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  348. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  349. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  350. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  351. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  352. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  353. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  354. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  355. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  356. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  357. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  358. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  359. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  360. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  361. package/src/components/FileList/FileList.stories.tsx +25 -0
  362. package/src/components/FileList/FileList.usage.mdx +165 -0
  363. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  364. package/src/components/Form/Form.stories.tsx +149 -0
  365. package/src/components/Form/Form.usage.mdx +203 -0
  366. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  367. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  368. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  369. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  370. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  371. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  372. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  373. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  374. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  375. package/src/components/Icon/Icon.stories.tsx +61 -1
  376. package/src/components/Icon/Icon.usage.mdx +158 -0
  377. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  378. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  379. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  380. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  381. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  382. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  383. package/src/components/Input/Input.stories.tsx +180 -0
  384. package/src/components/Input/Input.tsx +4 -0
  385. package/src/components/Input/Input.usage.mdx +278 -0
  386. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  387. package/src/components/LineGraph/LineGraph.tsx +4 -5
  388. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  389. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  390. package/src/components/LineGraph/seriesColors.test.ts +10 -9
  391. package/src/components/LineGraph/seriesColors.ts +18 -16
  392. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  393. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  394. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  395. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  396. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  397. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  398. package/src/components/Masonry/Masonry.types.ts +8 -3
  399. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  400. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  401. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  402. package/src/components/Menu/Menu.stories.tsx +146 -2
  403. package/src/components/Menu/Menu.usage.mdx +238 -0
  404. package/src/components/Menu/MenuItem.types.ts +8 -0
  405. package/src/components/Modal/Modal.stories.tsx +177 -1
  406. package/src/components/Modal/Modal.usage.mdx +262 -0
  407. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  408. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  409. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  410. package/src/components/NavList/NavList.stories.tsx +927 -0
  411. package/src/components/NavList/NavList.styles.ts +114 -0
  412. package/src/components/NavList/NavList.test.tsx +1306 -0
  413. package/src/components/NavList/NavList.translations.json +9 -0
  414. package/src/components/NavList/NavList.tsx +160 -0
  415. package/src/components/NavList/NavList.types.ts +155 -0
  416. package/src/components/NavList/NavList.usage.mdx +545 -0
  417. package/src/components/NavList/NavListContext.ts +25 -0
  418. package/src/components/NavList/NavListGroup.tsx +243 -0
  419. package/src/components/NavList/NavListItem.tsx +543 -0
  420. package/src/components/NavList/NavListSkeleton.tsx +57 -0
  421. package/src/components/NavList/index.ts +15 -0
  422. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  423. package/src/components/Pagination/Pagination.tsx +11 -10
  424. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  425. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  426. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  427. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  428. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  429. package/src/components/Popover/Popover.stories.tsx +104 -1
  430. package/src/components/Popover/Popover.usage.mdx +197 -0
  431. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  432. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  433. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  434. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  435. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  436. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  437. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  438. package/src/components/Radio/Radio.stories.tsx +119 -0
  439. package/src/components/Radio/Radio.usage.mdx +187 -0
  440. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  441. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  442. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  443. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  444. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  445. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  446. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  447. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  448. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  449. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  450. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  451. package/src/components/Select/Combobox.tsx +28 -3
  452. package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
  453. package/src/components/Select/Select.stories.tsx +290 -1
  454. package/src/components/Select/Select.styles.ts +89 -0
  455. package/src/components/Select/Select.tsx +28 -2
  456. package/src/components/Select/Select.usage.mdx +341 -0
  457. package/src/components/Shake/Shake.usage.mdx +107 -0
  458. package/src/components/Slider/Slider.stories.tsx +116 -0
  459. package/src/components/Slider/Slider.usage.mdx +179 -0
  460. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  461. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  462. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  463. package/src/components/Switch/Switch.stories.tsx +131 -6
  464. package/src/components/Switch/Switch.usage.mdx +199 -0
  465. package/src/components/Table/Table.stories.tsx +159 -1
  466. package/src/components/Table/Table.usage.mdx +235 -0
  467. package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
  468. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  469. package/src/components/Tabs/Tabs.usage.mdx +263 -0
  470. package/src/components/Tag/Tag.stories.tsx +181 -4
  471. package/src/components/Tag/Tag.usage.mdx +257 -0
  472. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  473. package/src/components/Textarea/Textarea.tsx +4 -0
  474. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  475. package/src/components/Toast/Toast.stories.tsx +185 -3
  476. package/src/components/Toast/Toast.styles.ts +18 -10
  477. package/src/components/Toast/Toast.usage.mdx +265 -0
  478. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  479. package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
  480. package/src/components/Tree/Tree.stories.tsx +89 -0
  481. package/src/components/Tree/Tree.usage.mdx +207 -0
  482. package/src/components/Typography/Caption.tsx +0 -1
  483. package/src/components/Typography/H1.tsx +0 -1
  484. package/src/components/Typography/H2.tsx +0 -1
  485. package/src/components/Typography/H3.tsx +0 -1
  486. package/src/components/Typography/H4.tsx +0 -1
  487. package/src/components/Typography/H5.tsx +0 -1
  488. package/src/components/Typography/Link.tsx +0 -1
  489. package/src/components/Typography/Overline.tsx +0 -1
  490. package/src/components/Typography/Subtext.tsx +0 -1
  491. package/src/components/Typography/Subtitle.tsx +0 -1
  492. package/src/components/Typography/Text.tsx +0 -1
  493. package/src/components/Typography/Typography.stories.tsx +117 -0
  494. package/src/components/Typography/Typography.usage.mdx +257 -0
  495. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  496. package/src/components/a11y.kwcag.test.tsx +66 -0
  497. package/src/components/claude.md +1 -1
  498. package/src/components/noRawScales.test.ts +5 -1
  499. package/src/foundations/BrandAssets.mdx +637 -0
  500. package/src/foundations/BrandAssets.stories.tsx +680 -0
  501. package/src/foundations/BrandColour.mdx +366 -0
  502. package/src/foundations/BrandColour.stories.tsx +343 -0
  503. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  504. package/src/guidelines/FeedbackActions.mdx +162 -23
  505. package/src/guidelines/_components/Lang.tsx +175 -0
  506. package/src/guidelines/_components/TokenTable.tsx +136 -0
  507. package/src/hooks/useLanguage.ts +8 -3
  508. package/src/hooks/useTranslate.test.tsx +46 -0
  509. package/src/hooks/useTranslate.ts +7 -5
  510. package/src/index.ts +7 -1
  511. package/src/theme/BazePalette.stories.tsx +111 -1
  512. package/src/theme/Palette.stories.tsx +2 -2
  513. package/src/theme/SemanticTokens.mdx +76 -17
  514. package/src/theme/claude.md +23 -9
  515. package/src/theme/colors.ts +71 -18
  516. package/src/theme/contrast.test.ts +57 -0
  517. package/src/theme/global.ts +20 -1
  518. package/src/theme/index.ts +2 -0
  519. package/src/theme/palette.generated.ts +233 -123
  520. package/src/theme/paletteSwatches.test.ts +1 -1
  521. package/src/theme/paletteSwatches.ts +35 -0
  522. package/src/theme/recipes/avatar.ts +92 -0
  523. package/src/translations/Defaults.translations.json +14 -0
  524. package/src/utils/disabledControl.ts +8 -1
  525. package/src/utils/focusRing.ts +23 -0
@@ -1,7 +1,11 @@
1
1
  import { Box, HStack, VStack } from '@chakra-ui/react';
2
2
  import { Meta, StoryObj } from '@storybook/react';
3
3
 
4
- import { Subtitle, Text } from '../Typography';
4
+ import { T } from '../../guidelines/_components/Lang';
5
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
6
+ import { Card } from '../Card';
7
+ import { Input } from '../Input';
8
+ import { Subtext, Subtitle, Text } from '../Typography';
5
9
  import { InfoSprinkle } from './InfoSprinkle';
6
10
 
7
11
  const meta = {
@@ -39,3 +43,75 @@ export const LargerBaseFontSize: Story = {
39
43
  baseFontSize: '18px',
40
44
  },
41
45
  };
46
+
47
+ // ───────────────────────── Usage-page specimens ─────────────────────────
48
+ // Pulled into `InfoSprinkle.usage.mdx` with <Canvas of={…} />. Hidden from the
49
+ // sidebar (`!dev`). Each card is held open (`open`) so the page shows it
50
+ // without a hover.
51
+
52
+ export const DoDefineALabel: Story = {
53
+ tags: ['!dev'],
54
+ parameters: { layout: 'padded' },
55
+ name: 'Usage / Do: define the label next to it',
56
+ render: () => (
57
+ <Box pt="96px" px={16}>
58
+ <Card p={4} w="240px">
59
+ <HStack gap={1}>
60
+ <Subtext>활성 멤버</Subtext>
61
+ <InfoSprinkle
62
+ open
63
+ iconButtonProps={{ size: 'xs', 'aria-label': '활성 멤버 설명' }}
64
+ >
65
+ <Text maxW="220px">
66
+ 최근 30일 동안 한 번 이상 대화한 멤버 수입니다.
67
+ </Text>
68
+ </InfoSprinkle>
69
+ </HStack>
70
+ <Text fontWeight="bold" fontSize="lg">
71
+ 128
72
+ </Text>
73
+ </Card>
74
+ </Box>
75
+ ),
76
+ };
77
+
78
+ export const DontHideTheRule: Story = {
79
+ tags: ['!dev'],
80
+ parameters: { layout: 'padded' },
81
+ name: "Usage / Don't: hide a rule the user must follow",
82
+ render: () => (
83
+ <Box pt="96px" px={16}>
84
+ <VStack align="stretch" gap={1} w="260px">
85
+ <HStack gap={1}>
86
+ <Text as="label" htmlFor="usage-password" fontWeight="semibold">
87
+ 새 비밀번호
88
+ </Text>
89
+ <InfoSprinkle
90
+ open
91
+ iconButtonProps={{ size: 'xs', 'aria-label': '비밀번호 규칙' }}
92
+ >
93
+ <Text maxW="220px">
94
+ 8자 이상, 숫자와 특수문자를 포함해야 합니다.
95
+ </Text>
96
+ </InfoSprinkle>
97
+ </HStack>
98
+ <Input id="usage-password" type="password" />
99
+ </VStack>
100
+ </Box>
101
+ ),
102
+ };
103
+
104
+ /** Tokens the trigger and card read: the icon colour from `InfoSprinkle.tsx`, the card from the Chakra HoverCard recipe. */
105
+ export const UsageTokens: Story = {
106
+ tags: ['!dev'],
107
+ parameters: { layout: 'padded' },
108
+ name: 'Usage / Tokens',
109
+ render: () => (
110
+ <TokenTable
111
+ rows={[
112
+ { token: 'fg.muted', use: <T en="Icon" ko="아이콘" /> },
113
+ { token: 'bg.panel', use: <T en="Card" ko="카드" /> },
114
+ ]}
115
+ />
116
+ ),
117
+ };
@@ -0,0 +1,189 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as InfoSprinkleStories from './InfoSprinkle.stories';
5
+
6
+ <Meta of={InfoSprinkleStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # InfoSprinkle
13
+
14
+ A small info icon next to a label that opens a card with a definition or a
15
+ short explanation, on hover, on focus, or on tap.
16
+
17
+ ## When to use
18
+
19
+ - To define a term on a stat card or a table header: what "활성 멤버" counts,
20
+ whether a member count includes subgroups.
21
+ - To explain how a number is calculated, such as rounding.
22
+ - To say when something runs, such as an analysis schedule.
23
+
24
+ ## When not to use
25
+
26
+ - A rule the user must follow to succeed (password rules, file limits) → put it
27
+ in visible helper text under the field.
28
+ - The name of an icon-only button → `Tooltip`.
29
+ - Content with links or controls → `Popover`.
30
+ - A warning or a status → `Banner` or `Badge`.
31
+
32
+ ## Variants and what they mean
33
+
34
+ InfoSprinkle has no visual variants. Set the size and name of the icon with
35
+ `iconButtonProps`, the card's padding with `contentProps`, and its placement
36
+ with `positioning` (default `top`).
37
+
38
+ </En>
39
+
40
+ <Ko>
41
+
42
+ # InfoSprinkle
43
+
44
+ 라벨 옆의 작은 정보 아이콘입니다. 포인터를 올리거나, 초점이 닿거나, 누르면 용어 설명이나
45
+ 짧은 해설을 담은 카드가 열립니다.
46
+
47
+ ## 언제 쓰나요
48
+
49
+ - 통계 카드나 표 머리글의 용어를 설명할 때: "활성 멤버"가 무엇을 세는지, 멤버 수에 하위
50
+ 그룹이 들어가는지.
51
+ - 반올림처럼 숫자를 계산하는 방식을 설명할 때.
52
+ - 분석 일정처럼 무언가가 언제 실행되는지 알릴 때.
53
+
54
+ ## 언제 쓰지 않나요
55
+
56
+ - 비밀번호 규칙이나 파일 제한처럼 사용자가 꼭 지켜야 하는 규칙은 입력란 아래에 눈에 보이는
57
+ 도움말로 씁니다.
58
+ - 아이콘만 있는 버튼의 이름은 `Tooltip`으로 보입니다.
59
+ - 링크나 컨트롤이 들어가는 내용은 `Popover`에 넣습니다.
60
+ - 경고나 상태는 `Banner`나 `Badge`로 알립니다.
61
+
62
+ ## 변형과 뜻
63
+
64
+ InfoSprinkle에는 모양 변형이 없습니다. 아이콘의 크기와 이름은 `iconButtonProps`로,
65
+ 카드 여백은 `contentProps`로, 위치는 `positioning`(기본 `top`)으로 정합니다.
66
+
67
+ </Ko>
68
+
69
+ <ArgTypes of={InfoSprinkleStories} include={['iconButtonProps', 'contentProps', 'baseFontSize']} />
70
+
71
+ <En>
72
+
73
+ ## Do / Don't
74
+
75
+ </En>
76
+
77
+ <Ko>
78
+
79
+ ## 이렇게 하세요 / 이렇게 하지 마세요
80
+
81
+ </Ko>
82
+
83
+ <Canvas of={InfoSprinkleStories.DoDefineALabel} />
84
+ <Verdict
85
+ kind="do"
86
+ en="Put it right after the label it explains, and name the icon after that label ('활성 멤버 설명')."
87
+ ko="설명하는 라벨 바로 뒤에 두고, 아이콘 이름도 그 라벨을 따라 붙입니다('활성 멤버 설명')."
88
+ />
89
+
90
+ <Canvas of={InfoSprinkleStories.DontHideTheRule} />
91
+ <Verdict
92
+ kind="dont"
93
+ en="Hide a rule the user must follow behind the icon. Most people will not open it, and they find out only when the form is rejected. Show the rule under the field."
94
+ ko="꼭 지켜야 하는 규칙을 아이콘 뒤에 숨기지 마세요. 대부분은 열어 보지 않고, 양식이 거부된 뒤에야 알게 됩니다. 규칙은 입력란 아래에 보이게 씁니다."
95
+ />
96
+
97
+ <En>
98
+
99
+ ## Content
100
+
101
+ - One or two sentences that define or explain. Full stops, sentence case.
102
+ - Start with the answer: "최근 30일 동안 한 번 이상 대화한 멤버 수입니다.", not
103
+ "이 숫자는 …를 뜻합니다".
104
+ - No links or buttons inside; the card closes as soon as the pointer or focus
105
+ leaves the icon.
106
+
107
+ ## Accessibility
108
+
109
+ What InfoSprinkle does for you:
110
+
111
+ - The trigger is a real `IconButton`, so it is reachable with `Tab`
112
+ (WCAG 2.1.1). The card opens on hover and on focus, and on tap on touch
113
+ devices that have no hover.
114
+ - The card is portalled and closes when the pointer or focus moves away.
115
+
116
+ What you still have to do:
117
+
118
+ - **Name each icon.** The default `aria-label` is the English "Info", and every
119
+ icon on the screen gets the same one. Pass a name through `iconButtonProps`
120
+ that says what it explains: `'aria-label': '활성 멤버 설명'` (WCAG 2.4.6,
121
+ 4.1.2).
122
+ - **Do not rely on screen readers reading the card.** It is a Chakra
123
+ `HoverCard`: the trigger has no `aria-describedby` or `aria-expanded`
124
+ pointing at it, and the card sits at the end of the page. Keep the
125
+ information a screen reader user needs in visible text or in the label.
126
+ - Do not put the only copy of required information in it.
127
+
128
+ ## Tokens
129
+
130
+ The icon colour is set in `InfoSprinkle.tsx`; the card colour comes from
131
+ Chakra's HoverCard recipe.
132
+
133
+ </En>
134
+
135
+ <Ko>
136
+
137
+ ## 문구
138
+
139
+ - 용어를 정의하거나 해설하는 한두 문장을 씁니다. 마침표를 찍습니다.
140
+ - 답부터 씁니다. "이 숫자는 …를 뜻합니다"가 아니라 "최근 30일 동안 한 번 이상 대화한
141
+ 멤버 수입니다."처럼 씁니다.
142
+ - 안에 링크나 버튼을 넣지 않습니다. 포인터나 초점이 아이콘을 떠나면 카드가 바로 닫힙니다.
143
+
144
+ ## 접근성
145
+
146
+ InfoSprinkle이 알아서 하는 일
147
+
148
+ - 여는 요소가 실제 `IconButton`이라 `Tab`으로 닿을 수 있습니다(WCAG 2.1.1). 포인터를
149
+ 올리거나 초점이 닿으면 카드가 열리고, 마우스 올리기가 없는 터치 기기에서는 누르면
150
+ 열립니다.
151
+ - 카드는 포털로 그려지며, 포인터나 초점이 떠나면 닫힙니다.
152
+
153
+ 직접 챙겨야 하는 일
154
+
155
+ - **아이콘마다 이름을 붙입니다.** 기본 `aria-label`은 영어 "Info"라서 화면의 모든 아이콘이
156
+ 같은 이름을 갖게 됩니다. `iconButtonProps`로 무엇을 설명하는지 밝힌 이름을 넘깁니다.
157
+ 예: `'aria-label': '활성 멤버 설명'`(WCAG 2.4.6, 4.1.2).
158
+ - **화면 낭독기가 카드를 읽어 줄 것이라 기대하지 않습니다.** Chakra `HoverCard`라서
159
+ 여는 버튼에 카드를 가리키는 `aria-describedby`나 `aria-expanded`가 없고, 카드는 페이지
160
+ 맨 끝에 붙습니다. 화면 낭독기 사용자에게 필요한 정보는 보이는 문구나 라벨에 둡니다.
161
+ - 꼭 필요한 정보를 이 카드에만 두지 않습니다.
162
+
163
+ ## 토큰
164
+
165
+ 아이콘 색은 `InfoSprinkle.tsx`에서, 카드 색은 Chakra HoverCard 레시피에서 정합니다.
166
+
167
+ </Ko>
168
+
169
+ <Canvas of={InfoSprinkleStories.UsageTokens} sourceState="none" />
170
+
171
+ <En>
172
+
173
+ ## Related
174
+
175
+ - **Tooltip**: the name of an icon-only button.
176
+ - **Popover**: a panel with links or controls.
177
+ - **FormControl**: helper text under a field, for rules the user must follow.
178
+
179
+ </En>
180
+
181
+ <Ko>
182
+
183
+ ## 관련 컴포넌트
184
+
185
+ - **Tooltip**: 아이콘만 있는 버튼의 이름.
186
+ - **Popover**: 링크나 컨트롤이 있는 패널.
187
+ - **FormControl**: 사용자가 지켜야 하는 규칙을 담는 입력란 아래 도움말.
188
+
189
+ </Ko>
@@ -0,0 +1,75 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { T } from '../../guidelines/_components/Lang';
4
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
5
+ import { Text } from '../Typography';
6
+ import { InlineCode } from './InlineCode';
7
+
8
+ const meta = {
9
+ title: 'Components/InlineCode',
10
+ component: InlineCode,
11
+ args: {
12
+ children: 'model_id',
13
+ },
14
+ } satisfies Meta<typeof InlineCode>;
15
+
16
+ export default meta;
17
+
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Basic: Story = {};
21
+
22
+ /** In running text, where it is meant to be used. */
23
+ export const InSentence: Story = {
24
+ render: (args) => (
25
+ <Text>
26
+ 요청 본문의 <InlineCode {...args} /> 칸에 모델 이름을 넣습니다.
27
+ </Text>
28
+ ),
29
+ };
30
+
31
+ // ───────────────────────── Usage-page specimens ─────────────────────────
32
+ // Pulled into `InlineCode.usage.mdx` with <Canvas of={…} />. Hidden from the
33
+ // sidebar (`!dev`); `tags` is written out on each story because the indexer
34
+ // reads CSF statically.
35
+
36
+ export const DoIdentifierInSentence: Story = {
37
+ tags: ['!dev'],
38
+ parameters: { layout: 'padded' },
39
+ name: 'Usage / Do: names the user types or sees in code',
40
+ render: () => (
41
+ <Text>
42
+ 응답이 끊기면 <InlineCode>finish_reason</InlineCode> 값이{' '}
43
+ <InlineCode>length</InlineCode>인지 확인하세요.
44
+ </Text>
45
+ ),
46
+ };
47
+
48
+ export const DontEmphasis: Story = {
49
+ tags: ['!dev'],
50
+ parameters: { layout: 'padded' },
51
+ name: "Usage / Don't: code styling for emphasis",
52
+ render: () => (
53
+ <Text>
54
+ 이 작업은 <InlineCode>되돌릴 수 없습니다</InlineCode>.
55
+ </Text>
56
+ ),
57
+ };
58
+
59
+ export const UsageTokens: Story = {
60
+ tags: ['!dev'],
61
+ parameters: { layout: 'padded' },
62
+ name: 'Usage / Tokens',
63
+ render: () => (
64
+ <TokenTable
65
+ rows={[
66
+ { token: 'bg.subtle', use: <T en="Chip fill" ko="칩 배경" /> },
67
+ { token: 'fg.default', use: <T en="Text" ko="글자" /> },
68
+ {
69
+ token: 'border.subtle',
70
+ use: <T en="1px ring (box-shadow)" ko="1px 테두리(box-shadow)" />,
71
+ },
72
+ ]}
73
+ />
74
+ ),
75
+ };
@@ -0,0 +1,142 @@
1
+ import { Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as InlineCodeStories from './InlineCode.stories';
5
+
6
+ <Meta of={InlineCodeStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # InlineCode
13
+
14
+ Code inside a sentence: a field name, a value, a shortcut. A small chip one
15
+ size below the text around it (`textStyle="subtext"`, em-relative), with a
16
+ `bg.subtle` fill and a hairline ring.
17
+
18
+ ## When to use
19
+
20
+ - Identifiers the user types or will see in code or settings:
21
+ `finish_reason`, `model_id`, a file name.
22
+
23
+ ## When not to use
24
+
25
+ - More than one line → `Code`.
26
+ - A value the user only needs to copy → `CopyableCode`.
27
+ - Emphasis or warnings → plain text, bold if it must stand out.
28
+ - Keyboard keys in instructions → write them out (Ctrl + C); the chip says
29
+ "code", not "key".
30
+
31
+ ## Do / Don't
32
+
33
+ </En>
34
+
35
+ <Ko>
36
+
37
+ # InlineCode
38
+
39
+ 문장 안의 코드입니다. 필드 이름, 값, 단축키 같은 것을 씁니다. 주변 글자보다 한 단계
40
+ 작은 칩으로 그려지고(`textStyle="subtext"`, em 단위), `bg.subtle` 배경과 얇은 테두리가
41
+ 있습니다.
42
+
43
+ ## 언제 쓰나요
44
+
45
+ - 사용자가 직접 입력하거나 코드·설정에서 보게 될 식별자: `finish_reason`,
46
+ `model_id`, 파일 이름.
47
+
48
+ ## 언제 쓰지 않나요
49
+
50
+ - 두 줄 이상이라면 `Code`를 씁니다.
51
+ - 복사만 하면 되는 값은 `CopyableCode`를 씁니다.
52
+ - 강조나 경고에는 일반 글자를 쓰고, 꼭 눈에 띄어야 하면 굵게 씁니다.
53
+ - 안내문의 키보드 키는 글자로 씁니다(Ctrl + C). 이 칩은 '코드'라는 뜻이지 '키'라는
54
+ 뜻이 아닙니다.
55
+
56
+ ## 이렇게 하세요 / 이렇게 하지 마세요
57
+
58
+ </Ko>
59
+
60
+ <Canvas of={InlineCodeStories.DoIdentifierInSentence} />
61
+ <Verdict
62
+ kind="do"
63
+ en="Mark names and values the user will meet in code."
64
+ ko="사용자가 코드에서 만나게 될 이름과 값을 표시합니다."
65
+ />
66
+
67
+ <Canvas of={InlineCodeStories.DontEmphasis} />
68
+ <Verdict
69
+ kind="dont"
70
+ en="Use code styling to make words stand out. It tells the reader the words are code."
71
+ ko="말을 돋보이게 하려고 코드 모양을 쓰지 마세요. 읽는 사람은 그 말을 코드로 받아들입니다."
72
+ />
73
+
74
+ <En>
75
+
76
+ ## Content
77
+
78
+ - Write the identifier exactly as it appears, including case.
79
+ - Keep Korean particles outside the chip: `length`인지, not `length인지`.
80
+
81
+ ## Accessibility
82
+
83
+ What InlineCode does for you:
84
+
85
+ - It renders `<code>`, so assistive technology that reports code can, and
86
+ the chip ring keeps it visible on `bg.sunken`, where the fill alone would
87
+ vanish.
88
+
89
+ What you still have to do:
90
+
91
+ - Nothing in the chip is read differently by most screen readers. Do not
92
+ rely on the code styling to carry meaning (WCAG 1.3.1); the sentence must
93
+ make sense on its own.
94
+
95
+ ## Tokens
96
+
97
+ </En>
98
+
99
+ <Ko>
100
+
101
+ ## 문구
102
+
103
+ - 식별자는 대소문자까지 보이는 그대로 씁니다.
104
+ - 한국어 조사는 칩 밖에 둡니다. `length인지`가 아니라 `length`인지로 씁니다.
105
+
106
+ ## 접근성
107
+
108
+ InlineCode가 알아서 하는 일
109
+
110
+ - `<code>`로 그리므로 코드를 구분해 알려 주는 보조 기술은 그렇게 읽습니다. 배경만으로는
111
+ `bg.sunken` 위에서 칩이 사라지기 때문에 테두리를 둡니다.
112
+
113
+ 직접 챙겨야 하는 일
114
+
115
+ - 대부분의 화면 낭독기는 칩 안의 글자를 다르게 읽지 않습니다. 코드 모양에 뜻을 맡기지
116
+ 말고(WCAG 1.3.1), 문장만으로 뜻이 통하게 씁니다.
117
+
118
+ ## 토큰
119
+
120
+ </Ko>
121
+
122
+ <Canvas of={InlineCodeStories.UsageTokens} sourceState="none" />
123
+
124
+ <En>
125
+
126
+ ## Related
127
+
128
+ - **Code**: multi-line code.
129
+ - **CopyableCode**: a value with a copy button.
130
+ - **Typography**: the text InlineCode sits in.
131
+
132
+ </En>
133
+
134
+ <Ko>
135
+
136
+ ## 관련 컴포넌트
137
+
138
+ - **Code**: 여러 줄 코드.
139
+ - **CopyableCode**: 복사 버튼이 있는 값.
140
+ - **Typography**: InlineCode가 들어가는 본문.
141
+
142
+ </Ko>
@@ -3,6 +3,9 @@ import { Meta, StoryObj } from '@storybook/react';
3
3
  import { useState } from 'react';
4
4
 
5
5
  import { PhoneFilledIcon, SearchIcon, MailIcon } from '@/components/Icon';
6
+ import { T } from '../../guidelines/_components/Lang';
7
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
8
+ import { FieldRow } from '../Form';
6
9
  import { MaxLengthIndicator } from '../MaxLengthIndicator';
7
10
 
8
11
  import { Input } from './Input';
@@ -257,3 +260,180 @@ export const FocusState: Story = {
257
260
  );
258
261
  },
259
262
  };
263
+
264
+ // ───────────────────────── Usage-page specimens ─────────────────────────
265
+ // Pulled into `Input.usage.mdx` with <Canvas of={…} />. Hidden from the
266
+ // sidebar (`!dev`); `tags` is written out on each story because the indexer
267
+ // reads CSF statically.
268
+
269
+ export const DoLabelAbove: Story = {
270
+ tags: ['!dev'],
271
+ parameters: { layout: 'padded' },
272
+ name: 'Usage / Do: a label above the field',
273
+ render: () => (
274
+ <Box maxW="360px">
275
+ <FieldRow
276
+ label="업무용 이메일"
277
+ helperText="초대 메일이 이 주소로 갑니다."
278
+ required
279
+ >
280
+ <Input
281
+ type="email"
282
+ autoComplete="email"
283
+ placeholder="name@company.com"
284
+ />
285
+ </FieldRow>
286
+ </Box>
287
+ ),
288
+ };
289
+
290
+ export const DontPlaceholderAsLabel: Story = {
291
+ tags: ['!dev'],
292
+ parameters: { layout: 'padded' },
293
+ name: "Usage / Don't: the placeholder as the label",
294
+ render: () => (
295
+ <Box maxW="360px">
296
+ <Input type="email" placeholder="업무용 이메일" />
297
+ </Box>
298
+ ),
299
+ };
300
+
301
+ export const DoErrorInWords: Story = {
302
+ tags: ['!dev'],
303
+ parameters: { layout: 'padded' },
304
+ name: 'Usage / Do: say what is wrong, under the field',
305
+ render: () => (
306
+ <Box maxW="360px">
307
+ <FieldRow label="업무용 이메일" error="이메일 주소 형식이 아닙니다.">
308
+ <Input type="email" value="name@company" onChange={() => {}} />
309
+ </FieldRow>
310
+ </Box>
311
+ ),
312
+ };
313
+
314
+ export const DontBorderOnly: Story = {
315
+ tags: ['!dev'],
316
+ parameters: { layout: 'padded' },
317
+ name: "Usage / Don't: a red border and nothing else",
318
+ render: () => (
319
+ <Box maxW="360px">
320
+ <Input type="email" value="name@company" onChange={() => {}} invalid />
321
+ </Box>
322
+ ),
323
+ };
324
+
325
+ export const DoMaskedAmount: Story = {
326
+ tags: ['!dev'],
327
+ parameters: { layout: 'padded' },
328
+ name: 'Usage / Do: maskNumber for amounts',
329
+ render: () => {
330
+ const [value, setValue] = useState('2000000');
331
+ return (
332
+ <Box maxW="360px">
333
+ <FieldRow
334
+ label="월 크레딧 한도"
335
+ helperText={`저장되는 값: ${value || '(비어 있음)'}`}
336
+ >
337
+ <Input
338
+ type="number"
339
+ maskNumber
340
+ value={value}
341
+ onChange={(e) => setValue(e.target.value)}
342
+ />
343
+ </FieldRow>
344
+ </Box>
345
+ );
346
+ },
347
+ };
348
+
349
+ export const DoCountWithLimit: Story = {
350
+ tags: ['!dev'],
351
+ parameters: { layout: 'padded' },
352
+ name: 'Usage / Do: show the limit next to maxLength',
353
+ render: () => {
354
+ const [value, setValue] = useState('마케팅팀');
355
+ return (
356
+ <Box maxW="360px">
357
+ <FieldRow
358
+ label="그룹 이름"
359
+ endAdornment={
360
+ <MaxLengthIndicator value={value.length} maxLength={20} />
361
+ }
362
+ >
363
+ <Input
364
+ maxLength={20}
365
+ value={value}
366
+ onChange={(e) => setValue(e.target.value)}
367
+ />
368
+ </FieldRow>
369
+ </Box>
370
+ );
371
+ },
372
+ };
373
+
374
+ /**
375
+ * Tokens Input reads. Input has no styles file — the values are written in
376
+ * `Input.tsx` (and mirrored by `Select.styles.ts`); this list follows that file.
377
+ */
378
+ export const UsageTokens: Story = {
379
+ tags: ['!dev'],
380
+ parameters: { layout: 'padded' },
381
+ name: 'Usage / Tokens',
382
+ render: () => (
383
+ <TokenTable
384
+ rows={[
385
+ {
386
+ token: 'bg.surface',
387
+ use: <T en="Field background" ko="입력란 배경" />,
388
+ },
389
+ { token: 'fg.default', use: <T en="Typed text" ko="입력한 글자" /> },
390
+ {
391
+ token: 'border.control',
392
+ use: (
393
+ <T
394
+ en="Border at rest (3:1 against the page)"
395
+ ko="평소 테두리(배경과 3:1)"
396
+ />
397
+ ),
398
+ },
399
+ {
400
+ token: 'fg.icon',
401
+ use: <T en="Border on hover" ko="마우스를 올렸을 때 테두리" />,
402
+ },
403
+ {
404
+ token: 'primary.main',
405
+ use: (
406
+ <T
407
+ en="Border and 1px ring on focus"
408
+ ko="초점을 받았을 때 테두리와 1px 링"
409
+ />
410
+ ),
411
+ },
412
+ {
413
+ token: 'danger.solid',
414
+ use: <T en="Border when invalid" ko="오류 상태 테두리" />,
415
+ },
416
+ {
417
+ token: 'bg.subtle',
418
+ use: <T en="Read-only background" ko="읽기 전용 배경" />,
419
+ },
420
+ {
421
+ token: 'fg.muted',
422
+ use: <T en="Read-only text" ko="읽기 전용 글자" />,
423
+ },
424
+ {
425
+ token: 'border.subtle',
426
+ use: <T en="Read-only border" ko="읽기 전용 테두리" />,
427
+ },
428
+ {
429
+ token: 'disabled.bg',
430
+ use: <T en="Disabled background" ko="비활성 배경" />,
431
+ },
432
+ {
433
+ token: 'disabled.fg',
434
+ use: <T en="Disabled text" ko="비활성 글자" />,
435
+ },
436
+ ]}
437
+ />
438
+ ),
439
+ };
@@ -352,6 +352,10 @@ export const Input = forwardRef(
352
352
  bg: 'bg.subtle',
353
353
  color: 'fg.muted',
354
354
  borderColor: 'border.subtle',
355
+ // Nothing can be typed here, so hovering must not promise an edit.
356
+ _hover: {
357
+ borderColor: 'border.subtle',
358
+ },
355
359
  }}
356
360
  _disabled={{
357
361
  ...disabledControl,