@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
@@ -37,9 +37,27 @@ const fieldBase = {
37
37
  },
38
38
  };
39
39
 
40
+ /**
41
+ * Room for the × and its divider at the end of the value, while the × shows.
42
+ *
43
+ * The indicator group overlays the value. Chakra keeps the value off the
44
+ * chevron with `maxW: 80%` on a Select (too little in a narrow filter) and a
45
+ * 1.5× height padding on a Combobox, and neither counts the × with its
46
+ * divider. This reserves the whole group instead: padding on both sides, the
47
+ * × (`8`) with its `me` (`3`), the group `gap` (`1`) and the chevron (`1em`),
48
+ * so a long value ends in an ellipsis before the ×.
49
+ */
50
+ const clearTriggerRoom = (paddingVar: string) => ({
51
+ '[data-part=control]:has([data-part=clear-trigger]:not([hidden])) > &': {
52
+ pe: `calc(var(${paddingVar}) * 2 + 4em)`,
53
+ '& [data-part=value-text]': { maxW: 'none' },
54
+ },
55
+ });
56
+
40
57
  /** Select trigger — the clickable control. */
41
58
  export const triggerStyles = {
42
59
  ...fieldBase,
60
+ ...clearTriggerRoom('--select-trigger-padding-x'),
43
61
  cursor: 'pointer',
44
62
  _open: {
45
63
  borderColor: 'primary.main',
@@ -67,6 +85,11 @@ export const ghostTriggerStyles = {
67
85
  _hover: { borderColor: 'border.control' },
68
86
  _disabled: {
69
87
  ...disabledText,
88
+ // A field, not a ghost button: the value text stays readable at
89
+ // `disabled.fg` (well apart from the resting `fg.default` already).
90
+ // `disabled.fgGhost` is for fill-less buttons whose resting glyph is
91
+ // `fg.icon`.
92
+ color: 'disabled.fg',
70
93
  cursor: 'not-allowed',
71
94
  fontWeight: 'semibold',
72
95
  },
@@ -75,6 +98,7 @@ export const ghostTriggerStyles = {
75
98
  /** Combobox text input — the typeable control. */
76
99
  export const inputStyles = {
77
100
  ...fieldBase,
101
+ ...clearTriggerRoom('--combobox-input-padding-x'),
78
102
  };
79
103
 
80
104
  /** Dropdown panel for both Select and Combobox. */
@@ -115,3 +139,68 @@ export const itemStyles = {
115
139
  export const indicatorStyles = {
116
140
  color: 'fg.muted',
117
141
  };
142
+
143
+ /**
144
+ * Clear (×) button for both Select and Combobox.
145
+ *
146
+ * Chakra's recipe gives this part a colour and no size, and its default icon
147
+ * is `1em`, so a bare `ClearTrigger` drew a 21px × next to a 14px chevron. The
148
+ * × is the secondary action, so it is smaller (`3.5`, 12px at 14px text) and
149
+ * lighter (`fg.icon`) than the chevron, on an `8` box. `& svg` rather than
150
+ * `_icon` so the size also wins over an icon passed with its own `boxSize`.
151
+ *
152
+ * On a touch screen the hit area widens to 44px, toward the value only: the
153
+ * chevron sits to the right and has to keep opening the list. The height stays
154
+ * the control's own height (`heightVar`), so the area never reaches the field
155
+ * above or below. Every control height is over the 24px KWCAG minimum.
156
+ */
157
+ const clearTriggerStyles = (heightVar: string) => ({
158
+ position: 'relative',
159
+ display: 'inline-flex',
160
+ alignItems: 'center',
161
+ justifyContent: 'center',
162
+ boxSize: '8',
163
+ // The divider sits `1` past the box. `3` leaves the same space between the
164
+ // divider and the chevron glyph as between the × glyph and the divider
165
+ // (about 13px at 14px text).
166
+ me: '3',
167
+ color: 'fg.icon',
168
+ cursor: 'pointer',
169
+ _hover: { color: 'fg.default' },
170
+ // The divider marks where opening starts: it sits in the `me` gap, takes no
171
+ // clicks, and everything right of it belongs to the chevron.
172
+ _after: {
173
+ content: '""',
174
+ position: 'absolute',
175
+ insetEnd: '-1',
176
+ top: '50%',
177
+ transform: 'translateY(-50%)',
178
+ h: '4',
179
+ borderEndWidth: '1px',
180
+ borderColor: 'border.subtle',
181
+ pointerEvents: 'none',
182
+ },
183
+ // zag hides the × with the `hidden` attribute while nothing is selected,
184
+ // and the `display` above would otherwise override it.
185
+ _hidden: { display: 'none' },
186
+ '& svg': { width: '3.5', height: '3.5' },
187
+ '@media (pointer: coarse)': {
188
+ '&::before': {
189
+ content: '""',
190
+ position: 'absolute',
191
+ insetEnd: 0,
192
+ top: '50%',
193
+ transform: 'translateY(-50%)',
194
+ width: '44px',
195
+ height: `var(${heightVar})`,
196
+ },
197
+ },
198
+ });
199
+
200
+ export const selectClearTriggerStyles = clearTriggerStyles(
201
+ '--select-trigger-height'
202
+ );
203
+
204
+ export const comboboxClearTriggerStyles = clearTriggerStyles(
205
+ '--combobox-input-height'
206
+ );
@@ -1,13 +1,16 @@
1
1
  import { forwardRef } from 'react';
2
2
  import { Select as ChakraSelect } from '@chakra-ui/react';
3
3
 
4
+ import { useTranslate } from '@/hooks/useTranslate';
4
5
  import { mergeCss } from '@/utils/mergeCss';
5
6
 
7
+ import { CloseIcon } from '../Icon';
6
8
  import {
7
9
  contentStyles,
8
10
  ghostTriggerStyles,
9
11
  indicatorStyles,
10
12
  itemStyles,
13
+ selectClearTriggerStyles,
11
14
  triggerStyles,
12
15
  } from './Select.styles';
13
16
  import type { SelectVariant } from './Select.types';
@@ -67,10 +70,33 @@ const Indicator = forwardRef<HTMLDivElement, ChakraSelect.IndicatorProps>(
67
70
  }
68
71
  );
69
72
 
73
+ /**
74
+ * The × that empties the selection. Draws `CloseIcon` when no children are
75
+ * passed, and names itself in the provider's language: Chakra's own name is
76
+ * the English "Clear value" in every locale. Pass `aria-label` to say what is
77
+ * being cleared ("조직 선택 지우기").
78
+ */
79
+ const ClearTrigger = forwardRef<
80
+ HTMLButtonElement,
81
+ ChakraSelect.ClearTriggerProps
82
+ >(function SelectClearTrigger({ css, children, ...props }, ref) {
83
+ const translate = useTranslate();
84
+ return (
85
+ <ChakraSelect.ClearTrigger
86
+ ref={ref}
87
+ aria-label={translate('clear_selection') as string}
88
+ {...props}
89
+ css={mergeCss(selectClearTriggerStyles, css)}
90
+ >
91
+ {children ?? <CloseIcon aria-hidden />}
92
+ </ChakraSelect.ClearTrigger>
93
+ );
94
+ });
95
+
70
96
  /**
71
97
  * Compound Select primitives — Chakra's `Select` namespace with the Logician
72
98
  * design-system styling baked into the visual parts (`Trigger`, `Content`,
73
- * `Item`, `Indicator`). Use these directly for full compositional control
99
+ * `Item`, `Indicator`, `ClearTrigger`). Use these directly for full compositional control
74
100
  * (multi-select, grouped options, custom layouts); use `SelectField` for the
75
101
  * common single-select case.
76
102
  */
@@ -84,7 +110,7 @@ export const Select = {
84
110
  ValueText: ChakraSelect.ValueText,
85
111
  IndicatorGroup: ChakraSelect.IndicatorGroup,
86
112
  Indicator,
87
- ClearTrigger: ChakraSelect.ClearTrigger,
113
+ ClearTrigger,
88
114
  HiddenSelect: ChakraSelect.HiddenSelect,
89
115
  Positioner: ChakraSelect.Positioner,
90
116
  Content,
@@ -0,0 +1,341 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as SelectStories from './Select.stories';
5
+ import { SelectField } from './SelectField';
6
+
7
+ <Meta of={SelectStories} name="Usage" />
8
+
9
+ <LangToggle />
10
+
11
+ <En>
12
+
13
+ # Select, SelectField, Combobox, ComboboxField
14
+
15
+ Pick one value from a list that is too long to show in full. `SelectField` and
16
+ `ComboboxField` are ready-made fields; `Select` and `Combobox` are the styled
17
+ parts for building your own.
18
+
19
+ | Component | Use it for |
20
+ | --------------- | ------------------------------------------------------------------------------------ |
21
+ | `SelectField` | One value from a short, fixed list. Pass `options`, `value`, `onChange`. |
22
+ | `ComboboxField` | One value from a long list the user would rather search than scroll. |
23
+ | `Select.*` | Multi-select, grouped options, options with icons or descriptions, a custom trigger. |
24
+ | `Combobox.*` | A searchable list with groups or custom rows. |
25
+
26
+ ## When to use
27
+
28
+ - Five or more options, or options that would crowd the page if shown at once:
29
+ a language, a model, a role.
30
+ - A setting in a dense list where each row ends in a choice: `SelectField`
31
+ with `variant="ghost"`.
32
+ - A list the user searches by name, such as groups or members:
33
+ `ComboboxField`.
34
+
35
+ ## When not to use
36
+
37
+ - Two to four options that fit on screen → `Radio`, so the user sees every
38
+ option without opening anything. A single on/off → `Switch` or `Checkbox`.
39
+ - Switching the view of the same content → `SegmentedControl` or `Tabs`.
40
+ - Running an action (Rename, Delete) → `Menu`. A select holds a value; a menu
41
+ does something.
42
+ - Free text with suggestions the user may ignore → `Input`.
43
+
44
+ ## Variants and props
45
+
46
+ </En>
47
+
48
+ <Ko>
49
+
50
+ # Select, SelectField, Combobox, ComboboxField
51
+
52
+ 다 펼쳐 보이기에는 긴 목록에서 값 하나를 고르게 합니다. `SelectField`와
53
+ `ComboboxField`는 바로 쓰는 필드이고, `Select`와 `Combobox`는 직접 조합할 때 쓰는
54
+ 스타일이 입혀진 부품입니다.
55
+
56
+ | 컴포넌트 | 쓰는 곳 |
57
+ | --------------- | ------------------------------------------------------------------------ |
58
+ | `SelectField` | 짧고 정해진 목록에서 값 하나. `options`, `value`, `onChange`를 넘깁니다. |
59
+ | `ComboboxField` | 스크롤보다 검색이 편한 긴 목록에서 값 하나. |
60
+ | `Select.*` | 여러 개 선택, 묶은 항목, 아이콘이나 설명이 붙은 항목, 직접 만든 트리거. |
61
+ | `Combobox.*` | 묶음이나 직접 만든 행이 있는 검색 목록. |
62
+
63
+ ## 언제 쓰나요
64
+
65
+ - 선택지가 다섯 개 이상이거나, 한꺼번에 보이면 화면이 복잡해질 때: 언어, 모델, 역할.
66
+ - 행마다 끝에 선택이 하나씩 있는 촘촘한 설정 목록: `variant="ghost"`인 `SelectField`.
67
+ - 이름으로 찾는 목록(그룹, 멤버): `ComboboxField`.
68
+
69
+ ## 언제 쓰지 않나요
70
+
71
+ - 화면에 다 들어가는 두세 개의 선택지는 `Radio`를 씁니다. 아무것도 열지 않고 모든
72
+ 선택지를 볼 수 있습니다. 켜고 끄는 값 하나는 `Switch`나 `Checkbox`를 씁니다.
73
+ - 같은 내용의 보기 방식을 바꿀 때는 `SegmentedControl`이나 `Tabs`를 씁니다.
74
+ - 이름 바꾸기, 삭제 같은 동작은 `Menu`를 씁니다. 셀렉트는 값을 담고, 메뉴는 일을
75
+ 합니다.
76
+ - 제안을 무시하고 자유롭게 써도 되는 텍스트는 `Input`을 씁니다.
77
+
78
+ ## 변형과 속성
79
+
80
+ </Ko>
81
+
82
+ <ArgTypes
83
+ of={SelectField}
84
+ include={['variant', 'label', 'ariaLabel', 'placeholder', 'stagger']}
85
+ />
86
+
87
+ <En>
88
+
89
+ | Variant | Means | Use for |
90
+ | ------------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
91
+ | `outline` (default) | A bordered field, the same as `Input`. Width defaults to `full`. | Forms, modals, filters |
92
+ | `ghost` | No border until hover or focus; sized to its value. An invalid field keeps its red border. | The trailing choice in a settings row, where a column of bordered triggers would outweigh the card |
93
+
94
+ Other props: `size` (`xs`–`lg`, default `md`), `invalid`, `disabled`,
95
+ `readOnly`, `required`, `name`, `width`. `onChange` receives the value, or
96
+ `null` when the selection is cleared. `ComboboxField` adds `emptyText`; it has
97
+ no `variant` or `stagger`.
98
+
99
+ ## Clearing the value
100
+
101
+ When "nothing chosen" is a valid value, let the user empty the field again: a
102
+ filter, or a form field that is not required. Do not offer it on a required
103
+ field.
104
+
105
+ `ComboboxField` already has the button. `SelectField` has none, so a
106
+ clearable select is composed from `Select.*`. With `Select.*` or
107
+ `Combobox.*`, put `ClearTrigger` in the indicator group, before the chevron:
108
+
109
+ ```tsx
110
+ <Select.IndicatorGroup>
111
+ <Select.ClearTrigger aria-label="조직 선택 지우기" />
112
+ <Select.Indicator />
113
+ </Select.IndicatorGroup>
114
+ ```
115
+
116
+ The part does the rest. It shows only while something is selected. It draws
117
+ its own icon, smaller and lighter than the chevron, with a divider between
118
+ them. While it shows, the value ends in an ellipsis before it. On a touch
119
+ screen its hit area widens to 44px toward the value, at the field's own
120
+ height. Do not pass a size, a colour or your own divider.
121
+
122
+ `onValueChange` receives an empty value when it is pressed;
123
+ `ComboboxField` passes `null` to `onChange`.
124
+
125
+ ## Do / Don't
126
+
127
+ </En>
128
+
129
+ <Ko>
130
+
131
+ | 변형 | 뜻 | 쓰는 곳 |
132
+ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
133
+ | `outline` (기본) | `Input`과 같은 테두리가 있는 필드. 너비 기본값은 `full`입니다. | 폼, 모달, 필터 |
134
+ | `ghost` | 마우스를 올리거나 초점을 받기 전에는 테두리가 없고, 값 길이에 맞춰 너비가 정해집니다. 오류 상태에서는 빨간 테두리가 남습니다. | 설정 목록의 행 끝 선택. 테두리 있는 트리거가 줄지어 있으면 카드보다 무거워 보이는 곳 |
135
+
136
+ 그 밖의 속성: `size`(`xs`~`lg`, 기본 `md`), `invalid`, `disabled`, `readOnly`,
137
+ `required`, `name`, `width`. `onChange`는 고른 값을 받고, 선택을 지우면 `null`을
138
+ 받습니다. `ComboboxField`에는 `emptyText`가 더 있고, `variant`와 `stagger`는
139
+ 없습니다.
140
+
141
+ ## 선택 지우기
142
+
143
+ "아무것도 고르지 않음"도 올바른 값일 때는 사용자가 필드를 다시 비울 수 있게 합니다.
144
+ 필터나 필수가 아닌 폼 필드가 그렇습니다. 필수 필드에는 두지 않습니다.
145
+
146
+ `ComboboxField`에는 이미 들어 있습니다. `SelectField`에는 없으므로, 지울 수 있는
147
+ 셀렉트는 `Select.*`로 조합합니다. `Select.*`나 `Combobox.*`로 조합할 때는
148
+ `ClearTrigger`를 indicator group 안, 화살표 앞에 둡니다.
149
+
150
+ ```tsx
151
+ <Select.IndicatorGroup>
152
+ <Select.ClearTrigger aria-label="조직 선택 지우기" />
153
+ <Select.Indicator />
154
+ </Select.IndicatorGroup>
155
+ ```
156
+
157
+ 나머지는 부품이 처리합니다. 무언가 골라져 있을 때만 보입니다. 아이콘을 직접 그리고,
158
+ 화살표보다 작고 옅게 그리며, 화살표와의 사이에 구분선을 둡니다. 보이는 동안 값은
159
+ 버튼 앞에서 말줄임으로 끝납니다. 터치 화면에서는 누르는 영역이 값 쪽으로 44px까지
160
+ 넓어지고, 높이는 필드 높이를 따릅니다. 크기, 색, 구분선을 따로 넘기지 마세요.
161
+
162
+ 누르면 `onValueChange`가 빈 값을 받습니다. `ComboboxField`는 `onChange`에
163
+ `null`을 넘깁니다.
164
+
165
+ ## 이렇게 하세요 / 이렇게 하지 마세요
166
+
167
+ </Ko>
168
+
169
+ <Canvas of={SelectStories.DoLabelled} />
170
+ <Verdict
171
+ kind="do"
172
+ en="Give the field a visible label with the label prop. It is rendered as the part the trigger is named by."
173
+ ko="label 속성으로 보이는 라벨을 붙입니다. 라벨은 트리거의 이름이 되는 부품으로 그려집니다."
174
+ />
175
+
176
+ <Canvas of={SelectStories.DontNameless} />
177
+ <Verdict
178
+ kind="dont"
179
+ en="Leave out label, ariaLabel and placeholder. The text next to it is not connected, so a screen reader announces a bare 'button', whatever the value says (KWCAG 5.3.4.1)."
180
+ ko="label, ariaLabel, placeholder를 모두 빼지 마세요. 옆에 있는 글자는 연결되지 않으므로, 화면 낭독기는 값이 무엇이든 그냥 '버튼'이라고만 읽습니다(KWCAG 5.3.4.1)."
181
+ />
182
+
183
+ <Canvas of={SelectStories.Ghost} />
184
+ <Verdict
185
+ kind="do"
186
+ en="In a settings list, use the ghost variant and pass the row title as ariaLabel."
187
+ ko="설정 목록에서는 ghost 변형을 쓰고, 행 제목을 ariaLabel로 넘깁니다."
188
+ />
189
+
190
+ <Canvas of={SelectStories.DoComboboxForLongList} />
191
+ <Verdict
192
+ kind="do"
193
+ en="Use ComboboxField when the user knows the name and the list is long. Translate emptyText; the default is English."
194
+ ko="사용자가 이름을 알고 목록이 길다면 ComboboxField를 씁니다. emptyText의 기본값은 영어이므로 번역해서 넘깁니다."
195
+ />
196
+
197
+ <Canvas of={SelectStories.Clearable} />
198
+ <Verdict
199
+ kind="do"
200
+ en="On an optional field, put ClearTrigger before the chevron and pass an aria-label that says what is cleared. Without one it is named 'Clear selection' in the provider language."
201
+ ko="필수가 아닌 필드에는 화살표 앞에 ClearTrigger를 두고, 무엇을 지우는지 aria-label로 넘깁니다. 넘기지 않으면 provider 언어의 '선택 지우기'로 읽힙니다."
202
+ />
203
+
204
+ <Canvas of={SelectStories.DontSelectForTwo} />
205
+ <Verdict
206
+ kind="dont"
207
+ en="Hide two options behind a dropdown. The user has to open it to learn there is only one alternative."
208
+ ko="선택지 두 개를 드롭다운 안에 숨기지 마세요. 다른 선택지가 하나뿐이라는 것을 열어 봐야 압니다."
209
+ />
210
+
211
+ <Canvas of={SelectStories.DoRadioForTwo} />
212
+ <Verdict
213
+ kind="do"
214
+ en="Show a few options as Radio, so the choice is visible at a glance."
215
+ ko="선택지가 몇 개뿐이면 Radio로 펼쳐서 한눈에 보이게 합니다."
216
+ />
217
+
218
+ <En>
219
+
220
+ ## Content
221
+
222
+ - Label: a noun for what is chosen (답변 언어, 역할), not an instruction (언어를
223
+ 선택하세요).
224
+ - Placeholder: only when "nothing chosen yet" is a real state. It also becomes
225
+ the hidden name if there is no label, so make it meaningful, but prefer
226
+ `label` or `ariaLabel`.
227
+ - Options: short, parallel, sentence case, sorted in a predictable order
228
+ (frequency, size, or alphabetical). Do not repeat the label in each option.
229
+ - `emptyText` on `ComboboxField`: say what was not found (일치하는 그룹이
230
+ 없습니다).
231
+
232
+ ## Accessibility
233
+
234
+ What these components do for you:
235
+
236
+ - **A name, if you give one.** `SelectField` and `ComboboxField` always render
237
+ the label part the trigger points at: visibly for `label`, visually hidden
238
+ for `ariaLabel` (or `placeholder` as a fallback). The name is in the server
239
+ markup, not added after hydration (KWCAG 5.3.4.1 레이블 제공).
240
+ - **Keyboard.** The Chakra / Zag listbox handles it: Enter, Space or the arrow
241
+ keys open the list; arrows move; Enter selects; Escape closes and returns
242
+ focus to the trigger. In `ComboboxField` typing filters the list.
243
+ - **A name for the clear button.** `ClearTrigger` is named 「선택 지우기」 /
244
+ "Clear selection" in the provider language, instead of Chakra's English
245
+ "Clear value" in every locale. A caller's `aria-label` wins.
246
+ - **Focus and states.** The trigger shows a `primary.main` border and ring on
247
+ focus and while open (WCAG 2.4.7). The selected option is bold on
248
+ `primary.selected` and carries a check mark, so it does not rely on colour
249
+ alone (WCAG 1.4.1).
250
+
251
+ What you still have to do:
252
+
253
+ - **Always pass `label` or `ariaLabel`.** Inside `FieldRow`, the row's label
254
+ does not reach the trigger: pass the same text as `ariaLabel`. The type does
255
+ not stop you from leaving all three out.
256
+ - **Compose `Select.*` / `Combobox.*` with a `Label` part.** Leave it out and
257
+ the trigger has no name. When the label is elsewhere on screen, render
258
+ `<Select.Label srOnly>`.
259
+ - Put errors in words (`FieldRow` `error`) as well as `invalid` (WCAG 3.3.1).
260
+
261
+ ## Tokens
262
+
263
+ Generated from `Select.styles.ts`. Select and Combobox share these.
264
+
265
+ </En>
266
+
267
+ <Ko>
268
+
269
+ ## 문구
270
+
271
+ - 라벨: 고르는 대상을 명사로 씁니다(답변 언어, 역할). "언어를 선택하세요" 같은 지시문은
272
+ 쓰지 않습니다.
273
+ - 플레이스홀더: "아직 고르지 않음"이 실제로 있는 상태일 때만 씁니다. 라벨이 없으면
274
+ 숨은 이름으로도 쓰이므로 뜻이 통하게 쓰되, 되도록 `label`이나 `ariaLabel`을 씁니다.
275
+ - 선택지: 짧고 같은 형식으로 쓰며, 자주 쓰는 순, 크기순, 가나다순처럼 예측할 수 있는
276
+ 순서로 둡니다. 선택지마다 라벨을 되풀이하지 않습니다.
277
+ - `ComboboxField`의 `emptyText`: 무엇을 찾지 못했는지 씁니다(일치하는 그룹이
278
+ 없습니다).
279
+
280
+ ## 접근성
281
+
282
+ 이 컴포넌트들이 알아서 하는 일
283
+
284
+ - **이름을 주면 그대로 씁니다.** `SelectField`와 `ComboboxField`는 트리거가 가리키는
285
+ 라벨 부품을 항상 그립니다. `label`이면 보이게, `ariaLabel`(없으면 `placeholder`)이면
286
+ 시각적으로 숨겨서 그립니다. 이름은 하이드레이션 뒤에 붙는 것이 아니라 서버가 보낸
287
+ 마크업 안에 있습니다(KWCAG 5.3.4.1 레이블 제공).
288
+ - **키보드.** Chakra와 Zag의 목록 상자가 처리합니다. Enter, Space, 방향키로 목록을
289
+ 열고, 방향키로 옮기고, Enter로 고르며, Escape로 닫으면 초점이 트리거로 돌아갑니다.
290
+ `ComboboxField`에서는 입력하면 목록이 걸러집니다.
291
+ - **지우기 버튼의 이름.** `ClearTrigger`는 provider 언어로 「선택 지우기」
292
+ ("Clear selection")라는 이름을 가집니다. Chakra 기본값은 어느 언어에서나 영어
293
+ "Clear value"였습니다. 호출부에서 넘긴 `aria-label`이 우선합니다.
294
+ - **초점과 상태.** 트리거는 초점을 받거나 열려 있는 동안 `primary.main` 테두리와 링을
295
+ 보여 줍니다(WCAG 2.4.7). 선택된 항목은 `primary.selected` 위에 굵은 글자와 체크
296
+ 표시로 나타나므로 색에만 기대지 않습니다(WCAG 1.4.1).
297
+
298
+ 직접 챙겨야 하는 일
299
+
300
+ - **`label`이나 `ariaLabel`을 반드시 넘깁니다.** `FieldRow` 안에서는 행의 라벨이
301
+ 트리거까지 닿지 않으므로 같은 글자를 `ariaLabel`로 넘깁니다. 셋 다 빠뜨려도 타입
302
+ 검사에서 걸리지 않습니다.
303
+ - **`Select.*`나 `Combobox.*`로 조합할 때는 `Label` 부품을 넣습니다.** 빼면 트리거에
304
+ 이름이 없습니다. 라벨이 화면의 다른 곳에 있다면 `<Select.Label srOnly>`를 씁니다.
305
+ - 오류는 `invalid`와 함께 `FieldRow`의 `error`로 문구를 보여 줍니다(WCAG 3.3.1).
306
+
307
+ ## 토큰
308
+
309
+ `Select.styles.ts`에서 자동으로 만듭니다. Select와 Combobox가 함께 씁니다.
310
+
311
+ </Ko>
312
+
313
+ <Canvas of={SelectStories.UsageTokens} sourceState="none" />
314
+
315
+ <En>
316
+
317
+ ## Related
318
+
319
+ - **Radio**: a few options, all visible.
320
+ - **Switch** / **Checkbox**: on or off.
321
+ - **SegmentedControl** / **Tabs**: switching views.
322
+ - **Menu**: actions, not values.
323
+ - **FieldRow**: label, helper and error around the field.
324
+ - More compositions: the _Multi Select_, _Grouped Options_ and _Custom Items_
325
+ stories under Components/Select and Components/Combobox.
326
+
327
+ </En>
328
+
329
+ <Ko>
330
+
331
+ ## 관련 컴포넌트
332
+
333
+ - **Radio**: 몇 개 안 되는 선택지를 모두 보여 줄 때.
334
+ - **Switch** / **Checkbox**: 켜고 끄는 값.
335
+ - **SegmentedControl** / **Tabs**: 보기 전환.
336
+ - **Menu**: 값이 아니라 동작.
337
+ - **FieldRow**: 필드를 둘러싼 라벨, 도움말, 오류 문구.
338
+ - 조합 예시: Components/Select와 Components/Combobox 아래의 _Multi Select_,
339
+ _Grouped Options_, _Custom Items_ 스토리.
340
+
341
+ </Ko>
@@ -0,0 +1,107 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle } from '../../guidelines/_components/Lang';
4
+ import * as ShakeStories from './Shake.stories';
5
+
6
+ <Meta of={ShakeStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Shake
13
+
14
+ Shakes its content once each time `trigger` changes: the "no, not that"
15
+ gesture for a rejected answer, an invalid field or a refused action.
16
+
17
+ </En>
18
+
19
+ <Ko>
20
+
21
+ # Shake
22
+
23
+ `trigger`가 바뀔 때마다 내용을 한 번 좌우로 흔듭니다. 틀린 답, 잘못 입력한 칸, 거절된
24
+ 동작에 "그건 아니에요"라고 답하는 몸짓입니다.
25
+
26
+ </Ko>
27
+
28
+ <Canvas of={ShakeStories.Default} />
29
+
30
+ <En>
31
+
32
+ ## When to use
33
+
34
+ - A wrong answer in a quiz or a choice list, with the option row itself
35
+ shaking (`display="block"` and `w="100%"` keep a full-width row full width).
36
+ - A submit that was refused because a field is invalid, shaking that field.
37
+
38
+ ## When not to use
39
+
40
+ - The change is good news or plain emphasis → `Pulse`. A shake used as
41
+ emphasis reads as an error the reader then goes looking for.
42
+ - As the only error signal → never. Pair it with colour, an icon and words.
43
+ - On the first render → it never shakes then; show the error state instead.
44
+
45
+ ## Reduced motion and accessibility
46
+
47
+ - With `prefers-reduced-motion: reduce` the shake is removed entirely, so for
48
+ some readers nothing moves at all. The refusal must be readable without it:
49
+ describe the error in text (WCAG 3.3.1) and do not rely on colour alone
50
+ (WCAG 1.4.1). The **동작 줄이기에서 남는 것** story shows both columns.
51
+ - Replaying does not remount the children, so the keyboard focus of the person
52
+ who was just told no stays where it was.
53
+ - Shake adds one `div` (`display: inline-flex`) around `children`. Inside a
54
+ `<button>` pass `as="span"` (ACCESSIBILITY.md §5).
55
+
56
+ </En>
57
+
58
+ <Ko>
59
+
60
+ ## 언제 쓰나요
61
+
62
+ - 퀴즈나 선택지 목록에서 틀린 답을 골랐을 때 그 선택지 행을 흔듭니다. 가로로 꽉 찬
63
+ 행이라면 `display="block"`과 `w="100%"`를 넘겨 너비를 유지합니다.
64
+ - 입력란이 잘못되어 제출이 거절됐을 때 그 입력란을 흔듭니다.
65
+
66
+ ## 언제 쓰지 않나요
67
+
68
+ - 좋은 소식이거나 단순한 강조라면 `Pulse`를 씁니다. 강조하려고 흔들면 사용자는
69
+ 오류로 읽고 무엇이 잘못됐는지 찾아 나섭니다.
70
+ - 오류를 알리는 유일한 신호로는 쓰지 않습니다. 색, 아이콘, 문구와 함께 씁니다.
71
+ - 첫 렌더에서는 흔들리지 않습니다. 처음부터 오류 상태라면 그 상태를 그대로 보여 줍니다.
72
+
73
+ ## 동작 줄이기와 접근성
74
+
75
+ - `prefers-reduced-motion: reduce`에서는 흔들림을 아예 빼므로, 어떤 사용자에게는 아무것도
76
+ 움직이지 않습니다. 흔들림 없이도 거절이 읽혀야 합니다. 오류를 문구로 설명하고
77
+ (WCAG 3.3.1) 색에만 기대지 않습니다(WCAG 1.4.1). **동작 줄이기에서 남는 것**
78
+ 스토리에서 두 경우를 나란히 볼 수 있습니다.
79
+ - 다시 재생할 때 자식을 새로 마운트하지 않으므로, 방금 거절당한 사람의 키보드 초점이
80
+ 제자리에 남습니다.
81
+ - Shake는 `children` 바깥에 `div`(`display: inline-flex`)를 하나 더합니다. `<button>`
82
+ 안에서는 `as="span"`을 넘깁니다(ACCESSIBILITY.md 5절).
83
+
84
+ </Ko>
85
+
86
+ <Canvas of={ShakeStories.ReducedMotion} />
87
+
88
+ <En>
89
+
90
+ ## Props
91
+
92
+ Any changing value works as `trigger`: an attempt counter, a verdict, a
93
+ timestamp. Two rejections of the same answer are two shakes if the counter
94
+ moves.
95
+
96
+ </En>
97
+
98
+ <Ko>
99
+
100
+ ## 속성
101
+
102
+ `trigger`에는 바뀌는 값이면 무엇이든 넣을 수 있습니다. 시도 횟수, 판정 결과,
103
+ 타임스탬프 모두 됩니다. 같은 답을 두 번 틀려도 카운터가 올라가면 두 번 흔들립니다.
104
+
105
+ </Ko>
106
+
107
+ <ArgTypes of={ShakeStories} include={['trigger', 'distance']} />