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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/README.md +1 -0
  2. package/dist/components/Avatar/Avatar.d.ts +68 -11
  3. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  4. package/dist/components/Avatar/Avatar.js +41 -5
  5. package/dist/components/Avatar/Avatar.js.map +1 -1
  6. package/dist/components/Avatar/Avatar.mjs +40 -5
  7. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  8. package/dist/components/Avatar/index.d.ts +2 -2
  9. package/dist/components/Avatar/index.d.ts.map +1 -1
  10. package/dist/components/Badge/Badge.d.ts.map +1 -1
  11. package/dist/components/Badge/Badge.js +5 -3
  12. package/dist/components/Badge/Badge.js.map +1 -1
  13. package/dist/components/Badge/Badge.mjs +5 -3
  14. package/dist/components/Badge/Badge.mjs.map +1 -1
  15. package/dist/components/Badge/Badge.types.d.ts +7 -5
  16. package/dist/components/Badge/Badge.types.d.ts.map +1 -1
  17. package/dist/components/Banner/Banner.types.d.ts +24 -1
  18. package/dist/components/Banner/Banner.types.d.ts.map +1 -1
  19. package/dist/components/BottomSheet/BottomSheet.styles.d.ts +2 -2
  20. package/dist/components/Button/Button.d.ts.map +1 -1
  21. package/dist/components/Button/Button.js +31 -3
  22. package/dist/components/Button/Button.js.map +1 -1
  23. package/dist/components/Button/Button.mjs +31 -3
  24. package/dist/components/Button/Button.mjs.map +1 -1
  25. package/dist/components/Button/Button.types.d.ts +38 -1
  26. package/dist/components/Button/Button.types.d.ts.map +1 -1
  27. package/dist/components/Card/Card.types.d.ts +12 -0
  28. package/dist/components/Card/Card.types.d.ts.map +1 -1
  29. package/dist/components/Code/shikiAdapter.d.ts +3 -1
  30. package/dist/components/Code/shikiAdapter.d.ts.map +1 -1
  31. package/dist/components/Code/shikiAdapter.js +29 -8
  32. package/dist/components/Code/shikiAdapter.js.map +1 -1
  33. package/dist/components/Code/shikiAdapter.mjs +29 -8
  34. package/dist/components/Code/shikiAdapter.mjs.map +1 -1
  35. package/dist/components/CodeTabs/CodeTabs.styles.d.ts +6 -5
  36. package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
  37. package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
  38. package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
  39. package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
  40. package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
  41. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  42. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  43. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  44. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  45. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  46. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  47. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  48. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  49. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  50. package/dist/components/Confetti/confettiColors.js +5 -5
  51. package/dist/components/Confetti/confettiColors.mjs +5 -5
  52. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  53. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  54. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  55. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  56. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  57. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  58. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  59. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  60. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  61. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  62. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  63. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  64. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  65. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  66. package/dist/components/Input/Input.d.ts.map +1 -1
  67. package/dist/components/Input/Input.js +4 -0
  68. package/dist/components/Input/Input.js.map +1 -1
  69. package/dist/components/Input/Input.mjs +4 -0
  70. package/dist/components/Input/Input.mjs.map +1 -1
  71. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  72. package/dist/components/LineGraph/LineGraph.js +4 -5
  73. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  74. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  75. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  76. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  77. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  78. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  79. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  80. package/dist/components/LineGraph/seriesColors.js +8 -7
  81. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  82. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  83. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  84. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  85. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  86. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  87. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  88. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  89. package/dist/components/Modal/ModalCloseButton.js +1 -1
  90. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  91. package/dist/components/NavList/NavList.d.ts +35 -0
  92. package/dist/components/NavList/NavList.d.ts.map +1 -0
  93. package/dist/components/NavList/NavList.js +113 -0
  94. package/dist/components/NavList/NavList.js.map +1 -0
  95. package/dist/components/NavList/NavList.mjs +111 -0
  96. package/dist/components/NavList/NavList.mjs.map +1 -0
  97. package/dist/components/NavList/NavList.styles.d.ts +90 -0
  98. package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
  99. package/dist/components/NavList/NavList.styles.js +104 -0
  100. package/dist/components/NavList/NavList.styles.js.map +1 -0
  101. package/dist/components/NavList/NavList.styles.mjs +97 -0
  102. package/dist/components/NavList/NavList.styles.mjs.map +1 -0
  103. package/dist/components/NavList/NavList.translations.json.js +19 -0
  104. package/dist/components/NavList/NavList.translations.json.js.map +1 -0
  105. package/dist/components/NavList/NavList.translations.json.mjs +14 -0
  106. package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
  107. package/dist/components/NavList/NavList.types.d.ts +140 -0
  108. package/dist/components/NavList/NavList.types.d.ts.map +1 -0
  109. package/dist/components/NavList/NavListContext.d.ts +30 -0
  110. package/dist/components/NavList/NavListContext.d.ts.map +1 -0
  111. package/dist/components/NavList/NavListContext.js +16 -0
  112. package/dist/components/NavList/NavListContext.js.map +1 -0
  113. package/dist/components/NavList/NavListContext.mjs +13 -0
  114. package/dist/components/NavList/NavListContext.mjs.map +1 -0
  115. package/dist/components/NavList/NavListGroup.d.ts +31 -0
  116. package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
  117. package/dist/components/NavList/NavListGroup.js +115 -0
  118. package/dist/components/NavList/NavListGroup.js.map +1 -0
  119. package/dist/components/NavList/NavListGroup.mjs +113 -0
  120. package/dist/components/NavList/NavListGroup.mjs.map +1 -0
  121. package/dist/components/NavList/NavListItem.d.ts +16 -0
  122. package/dist/components/NavList/NavListItem.d.ts.map +1 -0
  123. package/dist/components/NavList/NavListItem.js +284 -0
  124. package/dist/components/NavList/NavListItem.js.map +1 -0
  125. package/dist/components/NavList/NavListItem.mjs +282 -0
  126. package/dist/components/NavList/NavListItem.mjs.map +1 -0
  127. package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
  128. package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
  129. package/dist/components/NavList/NavListSkeleton.js +33 -0
  130. package/dist/components/NavList/NavListSkeleton.js.map +1 -0
  131. package/dist/components/NavList/NavListSkeleton.mjs +31 -0
  132. package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
  133. package/dist/components/NavList/index.d.ts +7 -0
  134. package/dist/components/NavList/index.d.ts.map +1 -0
  135. package/dist/components/Pagination/Pagination.d.ts +11 -10
  136. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  137. package/dist/components/Pagination/Pagination.js +11 -10
  138. package/dist/components/Pagination/Pagination.js.map +1 -1
  139. package/dist/components/Pagination/Pagination.mjs +11 -10
  140. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  141. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  142. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  143. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  144. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  145. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  146. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  147. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  148. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  149. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  150. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  151. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  152. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  153. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  154. package/dist/components/Select/Combobox.d.ts +1 -1
  155. package/dist/components/Select/Combobox.d.ts.map +1 -1
  156. package/dist/components/Select/Combobox.js +9 -2
  157. package/dist/components/Select/Combobox.js.map +1 -1
  158. package/dist/components/Select/Combobox.mjs +10 -3
  159. package/dist/components/Select/Combobox.mjs.map +1 -1
  160. package/dist/components/Select/Select.d.ts +1 -1
  161. package/dist/components/Select/Select.d.ts.map +1 -1
  162. package/dist/components/Select/Select.js +14 -2
  163. package/dist/components/Select/Select.js.map +1 -1
  164. package/dist/components/Select/Select.mjs +15 -3
  165. package/dist/components/Select/Select.mjs.map +1 -1
  166. package/dist/components/Select/Select.styles.d.ts +97 -1
  167. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  168. package/dist/components/Select/Select.styles.js +83 -0
  169. package/dist/components/Select/Select.styles.js.map +1 -1
  170. package/dist/components/Select/Select.styles.mjs +82 -1
  171. package/dist/components/Select/Select.styles.mjs.map +1 -1
  172. package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
  173. package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
  174. package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
  175. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  176. package/dist/components/Textarea/Textarea.js +4 -0
  177. package/dist/components/Textarea/Textarea.js.map +1 -1
  178. package/dist/components/Textarea/Textarea.mjs +4 -0
  179. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  180. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  181. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  182. package/dist/components/Toast/Toast.styles.js +18 -10
  183. package/dist/components/Toast/Toast.styles.js.map +1 -1
  184. package/dist/components/Toast/Toast.styles.mjs +18 -10
  185. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  186. package/dist/components/Typography/Caption.d.ts.map +1 -1
  187. package/dist/components/Typography/Caption.js +1 -1
  188. package/dist/components/Typography/Caption.js.map +1 -1
  189. package/dist/components/Typography/Caption.mjs +1 -1
  190. package/dist/components/Typography/Caption.mjs.map +1 -1
  191. package/dist/components/Typography/H1.d.ts.map +1 -1
  192. package/dist/components/Typography/H1.js +1 -1
  193. package/dist/components/Typography/H1.js.map +1 -1
  194. package/dist/components/Typography/H1.mjs +1 -1
  195. package/dist/components/Typography/H1.mjs.map +1 -1
  196. package/dist/components/Typography/H2.d.ts.map +1 -1
  197. package/dist/components/Typography/H2.js +1 -1
  198. package/dist/components/Typography/H2.js.map +1 -1
  199. package/dist/components/Typography/H2.mjs +1 -1
  200. package/dist/components/Typography/H2.mjs.map +1 -1
  201. package/dist/components/Typography/H3.d.ts.map +1 -1
  202. package/dist/components/Typography/H3.js +1 -1
  203. package/dist/components/Typography/H3.js.map +1 -1
  204. package/dist/components/Typography/H3.mjs +1 -1
  205. package/dist/components/Typography/H3.mjs.map +1 -1
  206. package/dist/components/Typography/H4.d.ts.map +1 -1
  207. package/dist/components/Typography/H4.js +1 -1
  208. package/dist/components/Typography/H4.js.map +1 -1
  209. package/dist/components/Typography/H4.mjs +1 -1
  210. package/dist/components/Typography/H4.mjs.map +1 -1
  211. package/dist/components/Typography/H5.d.ts.map +1 -1
  212. package/dist/components/Typography/H5.js +1 -1
  213. package/dist/components/Typography/H5.js.map +1 -1
  214. package/dist/components/Typography/H5.mjs +1 -1
  215. package/dist/components/Typography/H5.mjs.map +1 -1
  216. package/dist/components/Typography/Link.d.ts.map +1 -1
  217. package/dist/components/Typography/Link.js +1 -1
  218. package/dist/components/Typography/Link.js.map +1 -1
  219. package/dist/components/Typography/Link.mjs +1 -1
  220. package/dist/components/Typography/Link.mjs.map +1 -1
  221. package/dist/components/Typography/Overline.d.ts.map +1 -1
  222. package/dist/components/Typography/Overline.js +1 -1
  223. package/dist/components/Typography/Overline.js.map +1 -1
  224. package/dist/components/Typography/Overline.mjs +1 -1
  225. package/dist/components/Typography/Overline.mjs.map +1 -1
  226. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  227. package/dist/components/Typography/Subtext.js +1 -1
  228. package/dist/components/Typography/Subtext.js.map +1 -1
  229. package/dist/components/Typography/Subtext.mjs +1 -1
  230. package/dist/components/Typography/Subtext.mjs.map +1 -1
  231. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  232. package/dist/components/Typography/Subtitle.js +1 -1
  233. package/dist/components/Typography/Subtitle.js.map +1 -1
  234. package/dist/components/Typography/Subtitle.mjs +1 -1
  235. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  236. package/dist/components/Typography/Text.d.ts.map +1 -1
  237. package/dist/components/Typography/Text.js +1 -1
  238. package/dist/components/Typography/Text.js.map +1 -1
  239. package/dist/components/Typography/Text.mjs +1 -1
  240. package/dist/components/Typography/Text.mjs.map +1 -1
  241. package/dist/hooks/useLanguage.d.ts +5 -0
  242. package/dist/hooks/useLanguage.d.ts.map +1 -1
  243. package/dist/hooks/useLanguage.js +7 -3
  244. package/dist/hooks/useLanguage.js.map +1 -1
  245. package/dist/hooks/useLanguage.mjs +7 -4
  246. package/dist/hooks/useLanguage.mjs.map +1 -1
  247. package/dist/hooks/useTranslate.d.ts.map +1 -1
  248. package/dist/hooks/useTranslate.js +8 -5
  249. package/dist/hooks/useTranslate.js.map +1 -1
  250. package/dist/hooks/useTranslate.mjs +8 -5
  251. package/dist/hooks/useTranslate.mjs.map +1 -1
  252. package/dist/index.d.ts +2 -1
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +13 -0
  255. package/dist/index.js.map +1 -1
  256. package/dist/index.mjs +7 -2
  257. package/dist/index.mjs.map +1 -1
  258. package/dist/theme/colors.d.ts +2 -2
  259. package/dist/theme/colors.d.ts.map +1 -1
  260. package/dist/theme/colors.js +54 -18
  261. package/dist/theme/colors.js.map +1 -1
  262. package/dist/theme/colors.mjs +55 -19
  263. package/dist/theme/colors.mjs.map +1 -1
  264. package/dist/theme/global.d.ts.map +1 -1
  265. package/dist/theme/global.js +19 -1
  266. package/dist/theme/global.js.map +1 -1
  267. package/dist/theme/global.mjs +19 -1
  268. package/dist/theme/global.mjs.map +1 -1
  269. package/dist/theme/index.d.ts.map +1 -1
  270. package/dist/theme/index.js +2 -0
  271. package/dist/theme/index.js.map +1 -1
  272. package/dist/theme/index.mjs +2 -0
  273. package/dist/theme/index.mjs.map +1 -1
  274. package/dist/theme/palette.generated.d.ts +232 -123
  275. package/dist/theme/palette.generated.d.ts.map +1 -1
  276. package/dist/theme/palette.generated.js +233 -123
  277. package/dist/theme/palette.generated.js.map +1 -1
  278. package/dist/theme/palette.generated.mjs +233 -124
  279. package/dist/theme/palette.generated.mjs.map +1 -1
  280. package/dist/theme/paletteSwatches.d.ts +20 -0
  281. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  282. package/dist/theme/recipes/avatar.d.ts +30 -0
  283. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  284. package/dist/theme/recipes/avatar.js +96 -0
  285. package/dist/theme/recipes/avatar.js.map +1 -0
  286. package/dist/theme/recipes/avatar.mjs +94 -0
  287. package/dist/theme/recipes/avatar.mjs.map +1 -0
  288. package/dist/translations/Defaults.translations.json.js +19 -1
  289. package/dist/translations/Defaults.translations.json.js.map +1 -1
  290. package/dist/translations/Defaults.translations.json.mjs +18 -2
  291. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  292. package/dist/utils/disabledControl.d.ts +8 -1
  293. package/dist/utils/disabledControl.d.ts.map +1 -1
  294. package/dist/utils/disabledControl.js +8 -1
  295. package/dist/utils/disabledControl.js.map +1 -1
  296. package/dist/utils/disabledControl.mjs +8 -1
  297. package/dist/utils/disabledControl.mjs.map +1 -1
  298. package/dist/utils/focusRing.d.ts +22 -0
  299. package/dist/utils/focusRing.d.ts.map +1 -1
  300. package/dist/utils/focusRing.js +22 -0
  301. package/dist/utils/focusRing.js.map +1 -1
  302. package/dist/utils/focusRing.mjs +21 -1
  303. package/dist/utils/focusRing.mjs.map +1 -1
  304. package/package.json +2 -1
  305. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  306. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  307. package/src/components/Appear/Appear.usage.mdx +107 -0
  308. package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
  309. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  310. package/src/components/Avatar/Avatar.tsx +118 -21
  311. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  312. package/src/components/Avatar/index.tsx +8 -1
  313. package/src/components/Badge/Badge.stories.tsx +193 -3
  314. package/src/components/Badge/Badge.tsx +5 -3
  315. package/src/components/Badge/Badge.types.ts +7 -5
  316. package/src/components/Badge/Badge.usage.mdx +265 -0
  317. package/src/components/Banner/Banner.stories.tsx +152 -2
  318. package/src/components/Banner/Banner.types.ts +30 -1
  319. package/src/components/Banner/Banner.usage.mdx +233 -0
  320. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  321. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  322. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  323. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  324. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  325. package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
  326. package/src/components/Button/Button.stories.tsx +332 -3
  327. package/src/components/Button/Button.tsx +46 -3
  328. package/src/components/Button/Button.types.ts +38 -1
  329. package/src/components/Button/Button.usage.mdx +358 -0
  330. package/src/components/Button/Button.variants.test.tsx +13 -1
  331. package/src/components/Card/Card.stories.tsx +106 -0
  332. package/src/components/Card/Card.types.ts +12 -0
  333. package/src/components/Card/Card.usage.mdx +216 -0
  334. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  335. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  336. package/src/components/Chip/Chip.usage.mdx +78 -0
  337. package/src/components/Code/Code.stories.tsx +60 -0
  338. package/src/components/Code/Code.test.tsx +116 -0
  339. package/src/components/Code/Code.usage.mdx +187 -0
  340. package/src/components/Code/shikiAdapter.ts +38 -9
  341. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  342. package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
  343. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  344. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  345. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  346. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  347. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  348. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  349. package/src/components/Confetti/Confetti.types.ts +5 -1
  350. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  351. package/src/components/Confetti/confettiColors.ts +5 -5
  352. package/src/components/Container/Container.stories.tsx +32 -0
  353. package/src/components/Container/Container.usage.mdx +130 -0
  354. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  355. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  356. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  357. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  358. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  359. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  360. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  361. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  362. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  363. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  364. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  365. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  366. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  367. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  368. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  369. package/src/components/FileList/FileList.stories.tsx +25 -0
  370. package/src/components/FileList/FileList.usage.mdx +165 -0
  371. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  372. package/src/components/Form/Form.stories.tsx +149 -0
  373. package/src/components/Form/Form.usage.mdx +203 -0
  374. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  375. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  376. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  377. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  378. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  379. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  380. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  381. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  382. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  383. package/src/components/Icon/Icon.stories.tsx +61 -1
  384. package/src/components/Icon/Icon.usage.mdx +158 -0
  385. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  386. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  387. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  388. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  389. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  390. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  391. package/src/components/Input/Input.stories.tsx +180 -0
  392. package/src/components/Input/Input.tsx +4 -0
  393. package/src/components/Input/Input.usage.mdx +278 -0
  394. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  395. package/src/components/LineGraph/LineGraph.tsx +4 -5
  396. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  397. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  398. package/src/components/LineGraph/seriesColors.test.ts +10 -9
  399. package/src/components/LineGraph/seriesColors.ts +18 -16
  400. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  401. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  402. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  403. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  404. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  405. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  406. package/src/components/Masonry/Masonry.types.ts +8 -3
  407. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  408. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  409. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  410. package/src/components/Menu/Menu.stories.tsx +146 -2
  411. package/src/components/Menu/Menu.usage.mdx +238 -0
  412. package/src/components/Menu/MenuItem.types.ts +8 -0
  413. package/src/components/Modal/Modal.stories.tsx +177 -1
  414. package/src/components/Modal/Modal.usage.mdx +262 -0
  415. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  416. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  417. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  418. package/src/components/NavList/NavList.stories.tsx +927 -0
  419. package/src/components/NavList/NavList.styles.ts +114 -0
  420. package/src/components/NavList/NavList.test.tsx +1306 -0
  421. package/src/components/NavList/NavList.translations.json +9 -0
  422. package/src/components/NavList/NavList.tsx +160 -0
  423. package/src/components/NavList/NavList.types.ts +155 -0
  424. package/src/components/NavList/NavList.usage.mdx +545 -0
  425. package/src/components/NavList/NavListContext.ts +25 -0
  426. package/src/components/NavList/NavListGroup.tsx +243 -0
  427. package/src/components/NavList/NavListItem.tsx +543 -0
  428. package/src/components/NavList/NavListSkeleton.tsx +57 -0
  429. package/src/components/NavList/index.ts +15 -0
  430. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  431. package/src/components/Pagination/Pagination.tsx +11 -10
  432. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  433. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  434. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  435. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  436. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  437. package/src/components/Popover/Popover.stories.tsx +104 -1
  438. package/src/components/Popover/Popover.usage.mdx +197 -0
  439. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  440. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  441. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  442. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  443. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  444. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  445. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  446. package/src/components/Radio/Radio.stories.tsx +119 -0
  447. package/src/components/Radio/Radio.usage.mdx +187 -0
  448. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  449. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  450. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  451. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  452. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  453. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  454. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  455. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  456. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  457. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  458. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  459. package/src/components/Select/Combobox.tsx +28 -3
  460. package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
  461. package/src/components/Select/Select.stories.tsx +290 -1
  462. package/src/components/Select/Select.styles.ts +89 -0
  463. package/src/components/Select/Select.tsx +28 -2
  464. package/src/components/Select/Select.usage.mdx +341 -0
  465. package/src/components/Shake/Shake.usage.mdx +107 -0
  466. package/src/components/Slider/Slider.stories.tsx +116 -0
  467. package/src/components/Slider/Slider.usage.mdx +179 -0
  468. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  469. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  470. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  471. package/src/components/Switch/Switch.stories.tsx +131 -6
  472. package/src/components/Switch/Switch.usage.mdx +199 -0
  473. package/src/components/Table/Table.stories.tsx +159 -1
  474. package/src/components/Table/Table.usage.mdx +235 -0
  475. package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
  476. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  477. package/src/components/Tabs/Tabs.usage.mdx +263 -0
  478. package/src/components/Tag/Tag.stories.tsx +181 -4
  479. package/src/components/Tag/Tag.usage.mdx +257 -0
  480. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  481. package/src/components/Textarea/Textarea.tsx +4 -0
  482. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  483. package/src/components/Toast/Toast.stories.tsx +185 -3
  484. package/src/components/Toast/Toast.styles.ts +18 -10
  485. package/src/components/Toast/Toast.usage.mdx +265 -0
  486. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  487. package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
  488. package/src/components/Tree/Tree.stories.tsx +89 -0
  489. package/src/components/Tree/Tree.usage.mdx +207 -0
  490. package/src/components/Typography/Caption.tsx +0 -1
  491. package/src/components/Typography/H1.tsx +0 -1
  492. package/src/components/Typography/H2.tsx +0 -1
  493. package/src/components/Typography/H3.tsx +0 -1
  494. package/src/components/Typography/H4.tsx +0 -1
  495. package/src/components/Typography/H5.tsx +0 -1
  496. package/src/components/Typography/Link.tsx +0 -1
  497. package/src/components/Typography/Overline.tsx +0 -1
  498. package/src/components/Typography/Subtext.tsx +0 -1
  499. package/src/components/Typography/Subtitle.tsx +0 -1
  500. package/src/components/Typography/Text.tsx +0 -1
  501. package/src/components/Typography/Typography.stories.tsx +117 -0
  502. package/src/components/Typography/Typography.usage.mdx +257 -0
  503. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  504. package/src/components/a11y.kwcag.test.tsx +66 -0
  505. package/src/components/claude.md +1 -1
  506. package/src/components/noRawScales.test.ts +5 -1
  507. package/src/foundations/BrandAssets.mdx +637 -0
  508. package/src/foundations/BrandAssets.stories.tsx +680 -0
  509. package/src/foundations/BrandColour.mdx +366 -0
  510. package/src/foundations/BrandColour.stories.tsx +343 -0
  511. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  512. package/src/guidelines/FeedbackActions.mdx +162 -23
  513. package/src/guidelines/_components/Lang.tsx +175 -0
  514. package/src/guidelines/_components/TokenTable.tsx +136 -0
  515. package/src/hooks/useLanguage.ts +8 -3
  516. package/src/hooks/useTranslate.test.tsx +46 -0
  517. package/src/hooks/useTranslate.ts +7 -5
  518. package/src/index.ts +7 -1
  519. package/src/theme/BazePalette.stories.tsx +111 -1
  520. package/src/theme/Palette.stories.tsx +2 -2
  521. package/src/theme/SemanticTokens.mdx +76 -17
  522. package/src/theme/claude.md +23 -9
  523. package/src/theme/colors.ts +71 -18
  524. package/src/theme/contrast.test.ts +57 -0
  525. package/src/theme/global.ts +20 -1
  526. package/src/theme/index.ts +2 -0
  527. package/src/theme/palette.generated.ts +233 -123
  528. package/src/theme/paletteSwatches.test.ts +1 -1
  529. package/src/theme/paletteSwatches.ts +35 -0
  530. package/src/theme/recipes/avatar.ts +92 -0
  531. package/src/translations/Defaults.translations.json +14 -0
  532. package/src/utils/disabledControl.ts +8 -1
  533. package/src/utils/focusRing.ts +23 -0
@@ -0,0 +1,145 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as SegmentedProgressBarStories from './SegmentedProgressBar.stories';
5
+
6
+ <Meta of={SegmentedProgressBarStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # SegmentedProgressBar
13
+
14
+ One bar split into parts of a single whole, such as messages sent, failed and
15
+ still to go.
16
+
17
+ ## When to use
18
+
19
+ - A batch job with more than one outcome: sent and failed, accepted and
20
+ rejected.
21
+ - A total split into two or three parts the reader compares at a glance.
22
+
23
+ ## When not to use
24
+
25
+ - A single value against a limit → `ProgressBar`.
26
+ - Many categories, or a share of storage or budget → `RadialProgress` with a
27
+ legend, or a table.
28
+
29
+ ## How it works
30
+
31
+ - `<SegmentedProgressBar max={total}>` draws the `bg.track` remainder; each
32
+ `<ProgressSegment value={n} filledTrackColor="…" />` inside it takes
33
+ `n / max` of the width, in order.
34
+ - `height` defaults to 16px; pass `height` for a slimmer bar.
35
+
36
+ </En>
37
+
38
+ <Ko>
39
+
40
+ # SegmentedProgressBar
41
+
42
+ 보낸 메시지, 실패한 메시지, 남은 메시지처럼 하나의 전체를 이루는 부분을 막대 하나에
43
+ 나눠 보여 줍니다.
44
+
45
+ ## 언제 쓰나요
46
+
47
+ - 결과가 둘 이상인 일괄 작업: 보냄과 실패, 승인과 거절.
48
+ - 전체를 두세 부분으로 나눠 한눈에 비교할 때.
49
+
50
+ ## 언제 쓰지 않나요
51
+
52
+ - 한도에 대한 값 하나는 `ProgressBar`를 씁니다.
53
+ - 분류가 많거나 저장 공간, 예산의 비율이라면 범례를 붙인 `RadialProgress`나 표를
54
+ 씁니다.
55
+
56
+ ## 동작 방식
57
+
58
+ - `<SegmentedProgressBar max={total}>`이 `bg.track` 바탕을 그리고, 그 안의
59
+ `<ProgressSegment value={n} filledTrackColor="…" />`가 차례대로 폭의 `n / max`만큼
60
+ 차지합니다.
61
+ - 높이 기본값은 16px입니다. 더 얇게 하려면 `height`를 넘깁니다.
62
+
63
+ </Ko>
64
+
65
+ <ArgTypes of={SegmentedProgressBarStories} include={['max', 'height']} />
66
+
67
+ <En>
68
+
69
+ ## Do / Don't
70
+
71
+ </En>
72
+
73
+ <Ko>
74
+
75
+ ## 이렇게 하세요 / 이렇게 하지 마세요
76
+
77
+ </Ko>
78
+
79
+ <Canvas of={SegmentedProgressBarStories.DoCountsInText} />
80
+ <Verdict
81
+ kind="do"
82
+ en="Write each count next to the bar and colour the failure count's text too. Hide the bar itself from screen readers (aria-hidden) when the text says everything."
83
+ ko="부분별 개수를 막대 옆에 글자로 쓰고, 실패 개수는 글자에도 색을 입힙니다. 글자가 모든 정보를 전한다면 막대는 화면 낭독기에서 숨깁니다(aria-hidden)."
84
+ />
85
+
86
+ <Canvas of={SegmentedProgressBarStories.DontColourOnly} />
87
+ <Verdict
88
+ kind="dont"
89
+ en="Show the segments with no words. Green and red are the only way to tell them apart, and each segment is announced as a full progress bar."
90
+ ko="글자 없이 세그먼트만 보여 주지 마세요. 초록과 빨강 말고는 구분할 방법이 없고, 세그먼트마다 꽉 찬 진행 막대로 읽힙니다."
91
+ />
92
+
93
+ <En>
94
+
95
+ ## Accessibility
96
+
97
+ - **Each segment is announced as a separate, full progress bar.**
98
+ `ProgressSegment` is a `ProgressBar` with `max` set to its own `value`, so a
99
+ screen reader hears "100%" once per segment, and the container has no role
100
+ or name. Until that changes, put the counts in text and set `aria-hidden` on
101
+ the bar (WCAG 1.3.1, 4.1.2).
102
+ - **Words, not colour alone** (WCAG 1.4.1).
103
+ - Status colours (`success.solid`, `danger.solid`) only when the parts are
104
+ outcomes; other parts take `primary.main` or category tokens. Use tokens,
105
+ not hex.
106
+
107
+ ## Tokens
108
+
109
+ </En>
110
+
111
+ <Ko>
112
+
113
+ ## 접근성
114
+
115
+ - **세그먼트마다 따로, 꽉 찬 진행 막대로 읽힙니다.** `ProgressSegment`는 `max`를 자기
116
+ `value`로 정한 `ProgressBar`라서, 화면 낭독기는 세그먼트마다 "100%"라고 읽습니다.
117
+ 바깥 요소에는 역할도 이름도 없습니다. 이 문제가 고쳐질 때까지는 개수를 글자로 쓰고
118
+ 막대에 `aria-hidden`을 붙입니다(WCAG 1.3.1, 4.1.2).
119
+ - **색만으로 알리지 않습니다**(WCAG 1.4.1).
120
+ - 부분이 작업 결과일 때만 상태색(`success.solid`, `danger.solid`)을 씁니다. 그 밖의
121
+ 부분은 `primary.main`이나 category 토큰을 씁니다. 16진수가 아니라 토큰을 씁니다.
122
+
123
+ ## 토큰
124
+
125
+ </Ko>
126
+
127
+ <Canvas of={SegmentedProgressBarStories.UsageTokens} sourceState="none" />
128
+
129
+ <En>
130
+
131
+ ## Related
132
+
133
+ - **ProgressBar**: one value against a limit.
134
+ - **RadialProgress**: a share split into categories.
135
+
136
+ </En>
137
+
138
+ <Ko>
139
+
140
+ ## 관련 컴포넌트
141
+
142
+ - **ProgressBar**: 한도에 대한 값 하나.
143
+ - **RadialProgress**: 분류별로 나눈 비율.
144
+
145
+ </Ko>
@@ -1,10 +1,17 @@
1
1
  import { forwardRef } from 'react';
2
2
  import { Combobox as ChakraCombobox } from '@chakra-ui/react';
3
3
 
4
+ import { useTranslate } from '@/hooks/useTranslate';
4
5
  import { noZoomOnFocus } from '@/theme/formControls';
5
6
  import { mergeCss } from '@/utils/mergeCss';
6
7
 
7
- import { contentStyles, inputStyles, itemStyles } from './Select.styles';
8
+ import { CloseIcon } from '../Icon';
9
+ import {
10
+ comboboxClearTriggerStyles,
11
+ contentStyles,
12
+ inputStyles,
13
+ itemStyles,
14
+ } from './Select.styles';
8
15
 
9
16
  const Input = forwardRef<HTMLInputElement, ChakraCombobox.InputProps>(
10
17
  function ComboboxInput({ css, ...props }, ref) {
@@ -47,10 +54,28 @@ const Item = forwardRef<HTMLDivElement, ChakraCombobox.ItemProps>(
47
54
  }
48
55
  );
49
56
 
57
+ /** Same × as `Select.ClearTrigger`; see there. */
58
+ const ClearTrigger = forwardRef<
59
+ HTMLButtonElement,
60
+ ChakraCombobox.ClearTriggerProps
61
+ >(function ComboboxClearTrigger({ css, children, ...props }, ref) {
62
+ const translate = useTranslate();
63
+ return (
64
+ <ChakraCombobox.ClearTrigger
65
+ ref={ref}
66
+ aria-label={translate('clear_selection') as string}
67
+ {...props}
68
+ css={mergeCss(comboboxClearTriggerStyles, css)}
69
+ >
70
+ {children ?? <CloseIcon aria-hidden />}
71
+ </ChakraCombobox.ClearTrigger>
72
+ );
73
+ });
74
+
50
75
  /**
51
76
  * Compound Combobox primitives — Chakra's `Combobox` namespace with the
52
77
  * Logician design-system styling baked into the visual parts (`Input`,
53
- * `Content`, `Item`). Use these directly for full compositional control;
78
+ * `Content`, `Item`, `ClearTrigger`). Use these directly for full compositional control;
54
79
  * use `ComboboxField` for the common single-select case.
55
80
  */
56
81
  export const Combobox = {
@@ -62,7 +87,7 @@ export const Combobox = {
62
87
  Input,
63
88
  Trigger: ChakraCombobox.Trigger,
64
89
  IndicatorGroup: ChakraCombobox.IndicatorGroup,
65
- ClearTrigger: ChakraCombobox.ClearTrigger,
90
+ ClearTrigger,
66
91
  Positioner: ChakraCombobox.Positioner,
67
92
  Content,
68
93
  Empty: ChakraCombobox.Empty,
@@ -0,0 +1,76 @@
1
+ import { ChakraProvider, createListCollection } from '@chakra-ui/react';
2
+ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
3
+ import { describe, expect, it, vi } from 'vitest';
4
+
5
+ import { system } from '../../theme';
6
+ import { Select } from './Select';
7
+
8
+ const collection = createListCollection({
9
+ items: [
10
+ { label: 'React', value: 'react' },
11
+ { label: 'Vue', value: 'vue' },
12
+ ],
13
+ });
14
+
15
+ const renderClearable = (
16
+ clearTrigger: React.ReactNode,
17
+ onValueChange = vi.fn(),
18
+ defaultValue = ['react']
19
+ ) =>
20
+ render(
21
+ <ChakraProvider value={system}>
22
+ <Select.Root
23
+ collection={collection}
24
+ defaultValue={defaultValue}
25
+ onValueChange={onValueChange}
26
+ >
27
+ <Select.HiddenSelect />
28
+ <Select.Control>
29
+ <Select.Trigger>
30
+ <Select.ValueText />
31
+ </Select.Trigger>
32
+ <Select.IndicatorGroup>
33
+ {clearTrigger}
34
+ <Select.Indicator />
35
+ </Select.IndicatorGroup>
36
+ </Select.Control>
37
+ </Select.Root>
38
+ </ChakraProvider>
39
+ );
40
+
41
+ describe('Select.ClearTrigger', () => {
42
+ it('names itself in the library language instead of "Clear value"', () => {
43
+ renderClearable(<Select.ClearTrigger />);
44
+
45
+ const button = screen.getByRole('button', { name: '선택 지우기' });
46
+ expect(button.querySelector('svg')).not.toBeNull();
47
+ expect(screen.queryByRole('button', { name: 'Clear value' })).toBeNull();
48
+ });
49
+
50
+ it("keeps the caller's aria-label and still clears the value", async () => {
51
+ const onValueChange = vi.fn();
52
+ renderClearable(
53
+ <Select.ClearTrigger aria-label="조직 선택 지우기" />,
54
+ onValueChange
55
+ );
56
+
57
+ fireEvent.click(screen.getByRole('button', { name: '조직 선택 지우기' }));
58
+
59
+ await waitFor(() =>
60
+ expect(onValueChange).toHaveBeenCalledWith(
61
+ expect.objectContaining({ value: [] })
62
+ )
63
+ );
64
+ });
65
+
66
+ it('stays hidden while nothing is selected', () => {
67
+ renderClearable(<Select.ClearTrigger />, vi.fn(), []);
68
+
69
+ const button = document.querySelector<HTMLElement>(
70
+ '[data-part="clear-trigger"]'
71
+ );
72
+ expect(button).not.toBeNull();
73
+ expect(button).toHaveAttribute('hidden');
74
+ expect(getComputedStyle(button!).display).toBe('none');
75
+ });
76
+ });
@@ -9,11 +9,22 @@ import {
9
9
  Stack,
10
10
  Text,
11
11
  } from '@chakra-ui/react';
12
- import { Meta } from '@storybook/react';
12
+ import { Meta, StoryObj } from '@storybook/react';
13
13
 
14
+ import { T } from '../../guidelines/_components/Lang';
15
+ import { TokenTable } from '../../guidelines/_components/TokenTable';
14
16
  import { Badge } from '../Badge';
17
+ import { Radio, RadioGroup } from '../Radio';
15
18
  import { IoCall, IoChatbubbleEllipses, IoIosMail } from '../Icon';
19
+ import { ComboboxField } from './ComboboxField';
16
20
  import { Select } from './Select';
21
+ import {
22
+ contentStyles,
23
+ indicatorStyles,
24
+ itemStyles,
25
+ selectClearTriggerStyles,
26
+ triggerStyles,
27
+ } from './Select.styles';
17
28
  import { SelectField } from './SelectField';
18
29
 
19
30
  const meta = {
@@ -188,6 +199,76 @@ export const MultiSelect = () => (
188
199
  </Box>
189
200
  );
190
201
 
202
+ /**
203
+ * An optional field the member can empty again. `ClearTrigger` goes before
204
+ * the chevron and shows only while something is selected. It draws its own
205
+ * icon and is named 「선택 지우기」 in the provider's language; pass
206
+ * `aria-label` to say what is cleared. A divider separates it from the
207
+ * chevron, and a long value ends in an ellipsis before it. On a touch screen
208
+ * its hit area widens to 44px toward the value, at the field's own height.
209
+ */
210
+ const longValueCollection = createListCollection({
211
+ items: [
212
+ {
213
+ label: 'Engineering / Platform / Developer Experience',
214
+ value: 'dx',
215
+ },
216
+ { label: 'Design', value: 'design' },
217
+ ],
218
+ });
219
+
220
+ export const Clearable = () => (
221
+ <Stack maxW="320px" gap={4}>
222
+ <Box maxW="180px">
223
+ <Select.Root collection={longValueCollection} defaultValue={['dx']}>
224
+ <Select.HiddenSelect />
225
+ <Select.Label>Team (180px)</Select.Label>
226
+ <Select.Control>
227
+ <Select.Trigger>
228
+ <Select.ValueText placeholder="Select a team" />
229
+ </Select.Trigger>
230
+ <Select.IndicatorGroup>
231
+ <Select.ClearTrigger />
232
+ <Select.Indicator />
233
+ </Select.IndicatorGroup>
234
+ </Select.Control>
235
+ </Select.Root>
236
+ </Box>
237
+ {(['xs', 'sm', 'md', 'lg'] as const).map((size) => (
238
+ <Select.Root
239
+ key={size}
240
+ size={size}
241
+ collection={frameworkCollection}
242
+ defaultValue={['react']}
243
+ >
244
+ <Select.HiddenSelect />
245
+ <Select.Label>{`Framework (${size})`}</Select.Label>
246
+ <Select.Control>
247
+ <Select.Trigger>
248
+ <Select.ValueText placeholder="Select a framework" />
249
+ </Select.Trigger>
250
+ <Select.IndicatorGroup>
251
+ <Select.ClearTrigger />
252
+ <Select.Indicator />
253
+ </Select.IndicatorGroup>
254
+ </Select.Control>
255
+ <Portal>
256
+ <Select.Positioner>
257
+ <Select.Content>
258
+ {frameworkCollection.items.map((item) => (
259
+ <Select.Item item={item} key={item.value}>
260
+ <Select.ItemText>{item.label}</Select.ItemText>
261
+ <Select.ItemIndicator />
262
+ </Select.Item>
263
+ ))}
264
+ </Select.Content>
265
+ </Select.Positioner>
266
+ </Portal>
267
+ </Select.Root>
268
+ ))}
269
+ </Stack>
270
+ );
271
+
191
272
  /* -------------------------------------------------------------------------
192
273
  * Custom children
193
274
  *
@@ -771,3 +852,211 @@ export const WithOpenChange = () => {
771
852
  </HStack>
772
853
  );
773
854
  };
855
+
856
+ // ───────────────────────── Usage-page specimens ─────────────────────────
857
+ // Pulled into `Select.usage.mdx` with <Canvas of={…} />. Hidden from the
858
+ // sidebar (`!dev`); `tags` is written out on each story because the indexer
859
+ // reads CSF statically.
860
+
861
+ type UsageStory = StoryObj;
862
+
863
+ const LANGUAGES = [
864
+ { label: '한국어', value: 'ko' },
865
+ { label: 'English', value: 'en' },
866
+ { label: '日本語', value: 'ja' },
867
+ ];
868
+
869
+ const GROUPS = [
870
+ '경영지원팀',
871
+ '고객성공팀',
872
+ '데이터팀',
873
+ '디자인팀',
874
+ '마케팅팀',
875
+ '백엔드팀',
876
+ '법무팀',
877
+ '보안팀',
878
+ '사업개발팀',
879
+ '세일즈팀',
880
+ '인사팀',
881
+ '재무팀',
882
+ '프론트엔드팀',
883
+ ].map((name) => ({ label: name, value: name }));
884
+
885
+ export const DoLabelled: UsageStory = {
886
+ tags: ['!dev'],
887
+ parameters: { layout: 'padded' },
888
+ name: 'Usage / Do: a visible label',
889
+ render: () => (
890
+ <Box maxW="320px">
891
+ <SelectField label="답변 언어" options={LANGUAGES} defaultValue="ko" />
892
+ </Box>
893
+ ),
894
+ };
895
+
896
+ export const DontNameless: UsageStory = {
897
+ tags: ['!dev'],
898
+ parameters: { layout: 'padded' },
899
+ name: "Usage / Don't: no label, ariaLabel or placeholder",
900
+ render: () => (
901
+ <Flex maxW="480px" align="center" justify="space-between" gap={4}>
902
+ <Text fontWeight="semibold">답변 언어</Text>
903
+ <Box w="180px">
904
+ <SelectField options={LANGUAGES} defaultValue="ko" />
905
+ </Box>
906
+ </Flex>
907
+ ),
908
+ };
909
+
910
+ export const DoComboboxForLongList: UsageStory = {
911
+ tags: ['!dev'],
912
+ parameters: { layout: 'padded' },
913
+ name: 'Usage / Do: ComboboxField for a long list',
914
+ render: () => (
915
+ <Box maxW="320px">
916
+ <ComboboxField
917
+ label="그룹"
918
+ placeholder="그룹 이름으로 찾기"
919
+ options={GROUPS}
920
+ emptyText="일치하는 그룹이 없습니다"
921
+ />
922
+ </Box>
923
+ ),
924
+ };
925
+
926
+ export const DontSelectForTwo: UsageStory = {
927
+ tags: ['!dev'],
928
+ parameters: { layout: 'padded' },
929
+ name: "Usage / Don't: a dropdown for two options",
930
+ render: () => (
931
+ <Box maxW="320px">
932
+ <SelectField
933
+ label="공개 범위"
934
+ options={[
935
+ { label: '전체 공개', value: 'public' },
936
+ { label: '그룹만', value: 'group' },
937
+ ]}
938
+ defaultValue="public"
939
+ />
940
+ </Box>
941
+ ),
942
+ };
943
+
944
+ export const DoRadioForTwo: UsageStory = {
945
+ tags: ['!dev'],
946
+ parameters: { layout: 'padded' },
947
+ name: 'Usage / Do: Radio for two visible options',
948
+ render: () => (
949
+ <Stack gap={2} maxW="320px">
950
+ <Text id="usage-visibility" fontWeight="semibold">
951
+ 공개 범위
952
+ </Text>
953
+ <RadioGroup
954
+ defaultValue="public"
955
+ aria-labelledby="usage-visibility"
956
+ display="flex"
957
+ gap={4}
958
+ >
959
+ <Radio value="public">
960
+ <Radio.Control />
961
+ <Radio.Text>전체 공개</Radio.Text>
962
+ </Radio>
963
+ <Radio value="group">
964
+ <Radio.Control />
965
+ <Radio.Text>그룹만</Radio.Text>
966
+ </Radio>
967
+ </RadioGroup>
968
+ </Stack>
969
+ ),
970
+ };
971
+
972
+ /**
973
+ * Tokens the trigger, list and options read, taken from the style objects in
974
+ * `Select.styles.ts` (shared by Select and Combobox).
975
+ */
976
+ export const UsageTokens: UsageStory = {
977
+ tags: ['!dev'],
978
+ parameters: { layout: 'padded' },
979
+ name: 'Usage / Tokens',
980
+ render: () => (
981
+ <TokenTable
982
+ rows={[
983
+ {
984
+ token: triggerStyles.bg,
985
+ use: <T en="Trigger background" ko="트리거 배경" />,
986
+ },
987
+ {
988
+ token: triggerStyles.color,
989
+ use: <T en="Selected value" ko="선택한 값" />,
990
+ },
991
+ {
992
+ token: triggerStyles.borderColor,
993
+ use: <T en="Trigger border at rest" ko="트리거 평소 테두리" />,
994
+ },
995
+ {
996
+ token: triggerStyles._hover.borderColor,
997
+ use: <T en="Border on hover" ko="마우스를 올렸을 때 테두리" />,
998
+ },
999
+ {
1000
+ token: triggerStyles._focus.borderColor,
1001
+ use: (
1002
+ <T
1003
+ en="Border and ring on focus or open"
1004
+ ko="초점을 받거나 열렸을 때 테두리와 링"
1005
+ />
1006
+ ),
1007
+ },
1008
+ {
1009
+ token: triggerStyles._invalid.borderColor,
1010
+ use: <T en="Border when invalid" ko="오류 상태 테두리" />,
1011
+ },
1012
+ {
1013
+ token: triggerStyles._disabled.bg,
1014
+ use: <T en="Disabled background" ko="비활성 배경" />,
1015
+ },
1016
+ {
1017
+ token: triggerStyles._disabled.color,
1018
+ use: <T en="Disabled text" ko="비활성 글자" />,
1019
+ },
1020
+ {
1021
+ token: indicatorStyles.color,
1022
+ use: <T en="Chevron" ko="펼침 화살표" />,
1023
+ },
1024
+ {
1025
+ token: selectClearTriggerStyles.color,
1026
+ use: <T en="Clear (×) button" ko="선택 지우기(×) 버튼" />,
1027
+ },
1028
+ {
1029
+ token: selectClearTriggerStyles._hover.color,
1030
+ use: (
1031
+ <T en="Clear button on hover" ko="마우스를 올렸을 때 지우기 버튼" />
1032
+ ),
1033
+ },
1034
+ {
1035
+ token: contentStyles.bg,
1036
+ use: <T en="List background" ko="목록 배경" />,
1037
+ },
1038
+ {
1039
+ token: contentStyles.borderColor,
1040
+ use: <T en="List border" ko="목록 테두리" />,
1041
+ },
1042
+ {
1043
+ token: itemStyles._highlighted.bg,
1044
+ use: (
1045
+ <T
1046
+ en="Option under the pointer or keyboard"
1047
+ ko="포인터나 키보드가 가리키는 항목"
1048
+ />
1049
+ ),
1050
+ },
1051
+ {
1052
+ token: itemStyles._checked.bg,
1053
+ use: <T en="Selected option" ko="선택된 항목" />,
1054
+ },
1055
+ {
1056
+ token: itemStyles._disabled.color,
1057
+ use: <T en="Disabled option" ko="선택할 수 없는 항목" />,
1058
+ },
1059
+ ]}
1060
+ />
1061
+ ),
1062
+ };