@mindlogic-ai/logician-ui 5.0.0-alpha.3 → 5.0.0-alpha.30

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 (610) hide show
  1. package/MIGRATION-5.0.md +40 -1
  2. package/README.md +1 -0
  3. package/USAGE.md +20 -0
  4. package/dist/components/Avatar/Avatar.d.ts +68 -11
  5. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  6. package/dist/components/Avatar/Avatar.js +41 -5
  7. package/dist/components/Avatar/Avatar.js.map +1 -1
  8. package/dist/components/Avatar/Avatar.mjs +40 -5
  9. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  10. package/dist/components/Avatar/index.d.ts +2 -2
  11. package/dist/components/Avatar/index.d.ts.map +1 -1
  12. package/dist/components/Banner/Banner.types.d.ts +24 -1
  13. package/dist/components/Banner/Banner.types.d.ts.map +1 -1
  14. package/dist/components/BottomSheet/BottomSheet.styles.d.ts +2 -2
  15. package/dist/components/Button/Button.d.ts.map +1 -1
  16. package/dist/components/Button/Button.js +31 -3
  17. package/dist/components/Button/Button.js.map +1 -1
  18. package/dist/components/Button/Button.mjs +31 -3
  19. package/dist/components/Button/Button.mjs.map +1 -1
  20. package/dist/components/Button/Button.types.d.ts +38 -1
  21. package/dist/components/Button/Button.types.d.ts.map +1 -1
  22. package/dist/components/Card/Card.types.d.ts +12 -0
  23. package/dist/components/Card/Card.types.d.ts.map +1 -1
  24. package/dist/components/Code/shikiAdapter.d.ts +3 -1
  25. package/dist/components/Code/shikiAdapter.d.ts.map +1 -1
  26. package/dist/components/Code/shikiAdapter.js +29 -8
  27. package/dist/components/Code/shikiAdapter.js.map +1 -1
  28. package/dist/components/Code/shikiAdapter.mjs +29 -8
  29. package/dist/components/Code/shikiAdapter.mjs.map +1 -1
  30. package/dist/components/CodeTabs/CodeTabs.styles.d.ts +6 -5
  31. package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
  32. package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
  33. package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
  34. package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
  35. package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
  36. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  37. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  38. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  39. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  40. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  41. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  42. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  43. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  44. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  45. package/dist/components/Confetti/confettiColors.js +5 -5
  46. package/dist/components/Confetti/confettiColors.mjs +5 -5
  47. package/dist/components/DatePicker/DatePicker.types.d.ts +12 -0
  48. package/dist/components/DatePicker/DatePicker.types.d.ts.map +1 -0
  49. package/dist/components/DatePicker/RangeDatePicker.d.ts +2 -1
  50. package/dist/components/DatePicker/RangeDatePicker.d.ts.map +1 -1
  51. package/dist/components/DatePicker/RangeDatePicker.js +4 -2
  52. package/dist/components/DatePicker/RangeDatePicker.js.map +1 -1
  53. package/dist/components/DatePicker/RangeDatePicker.mjs +4 -2
  54. package/dist/components/DatePicker/RangeDatePicker.mjs.map +1 -1
  55. package/dist/components/DatePicker/SingleDatePicker.d.ts +2 -1
  56. package/dist/components/DatePicker/SingleDatePicker.d.ts.map +1 -1
  57. package/dist/components/DatePicker/SingleDatePicker.js +4 -2
  58. package/dist/components/DatePicker/SingleDatePicker.js.map +1 -1
  59. package/dist/components/DatePicker/SingleDatePicker.mjs +4 -2
  60. package/dist/components/DatePicker/SingleDatePicker.mjs.map +1 -1
  61. package/dist/components/DatePicker/index.d.ts +1 -0
  62. package/dist/components/DatePicker/index.d.ts.map +1 -1
  63. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  64. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  65. package/dist/components/ExpandableText/ExpandableText.d.ts.map +1 -1
  66. package/dist/components/ExpandableText/ExpandableText.js +1 -1
  67. package/dist/components/ExpandableText/ExpandableText.js.map +1 -1
  68. package/dist/components/ExpandableText/ExpandableText.mjs +1 -1
  69. package/dist/components/ExpandableText/ExpandableText.mjs.map +1 -1
  70. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
  71. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
  72. package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
  73. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
  74. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
  75. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
  76. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
  77. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  78. package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
  79. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
  80. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
  81. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
  82. package/dist/components/Input/Input.d.ts.map +1 -1
  83. package/dist/components/Input/Input.js +4 -0
  84. package/dist/components/Input/Input.js.map +1 -1
  85. package/dist/components/Input/Input.mjs +4 -0
  86. package/dist/components/Input/Input.mjs.map +1 -1
  87. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  88. package/dist/components/LineGraph/LineGraph.js +4 -5
  89. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  90. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  91. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  92. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  93. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  94. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  95. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  96. package/dist/components/LineGraph/seriesColors.js +8 -7
  97. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  98. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  99. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  100. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  101. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  102. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  103. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  104. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  105. package/dist/components/Modal/ModalCloseButton.js +1 -1
  106. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  107. package/dist/components/MonthPicker/MonthPicker.d.ts.map +1 -1
  108. package/dist/components/MonthPicker/MonthPicker.js +3 -2
  109. package/dist/components/MonthPicker/MonthPicker.js.map +1 -1
  110. package/dist/components/MonthPicker/MonthPicker.mjs +3 -2
  111. package/dist/components/MonthPicker/MonthPicker.mjs.map +1 -1
  112. package/dist/components/MonthPicker/MonthPicker.types.d.ts +7 -1
  113. package/dist/components/MonthPicker/MonthPicker.types.d.ts.map +1 -1
  114. package/dist/components/NavList/NavList.d.ts +35 -0
  115. package/dist/components/NavList/NavList.d.ts.map +1 -0
  116. package/dist/components/NavList/NavList.js +113 -0
  117. package/dist/components/NavList/NavList.js.map +1 -0
  118. package/dist/components/NavList/NavList.mjs +111 -0
  119. package/dist/components/NavList/NavList.mjs.map +1 -0
  120. package/dist/components/NavList/NavList.styles.d.ts +90 -0
  121. package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
  122. package/dist/components/NavList/NavList.styles.js +104 -0
  123. package/dist/components/NavList/NavList.styles.js.map +1 -0
  124. package/dist/components/NavList/NavList.styles.mjs +97 -0
  125. package/dist/components/NavList/NavList.styles.mjs.map +1 -0
  126. package/dist/components/NavList/NavList.translations.json.js +19 -0
  127. package/dist/components/NavList/NavList.translations.json.js.map +1 -0
  128. package/dist/components/NavList/NavList.translations.json.mjs +14 -0
  129. package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
  130. package/dist/components/NavList/NavList.types.d.ts +140 -0
  131. package/dist/components/NavList/NavList.types.d.ts.map +1 -0
  132. package/dist/components/NavList/NavListContext.d.ts +30 -0
  133. package/dist/components/NavList/NavListContext.d.ts.map +1 -0
  134. package/dist/components/NavList/NavListContext.js +16 -0
  135. package/dist/components/NavList/NavListContext.js.map +1 -0
  136. package/dist/components/NavList/NavListContext.mjs +13 -0
  137. package/dist/components/NavList/NavListContext.mjs.map +1 -0
  138. package/dist/components/NavList/NavListGroup.d.ts +31 -0
  139. package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
  140. package/dist/components/NavList/NavListGroup.js +115 -0
  141. package/dist/components/NavList/NavListGroup.js.map +1 -0
  142. package/dist/components/NavList/NavListGroup.mjs +113 -0
  143. package/dist/components/NavList/NavListGroup.mjs.map +1 -0
  144. package/dist/components/NavList/NavListItem.d.ts +16 -0
  145. package/dist/components/NavList/NavListItem.d.ts.map +1 -0
  146. package/dist/components/NavList/NavListItem.js +284 -0
  147. package/dist/components/NavList/NavListItem.js.map +1 -0
  148. package/dist/components/NavList/NavListItem.mjs +282 -0
  149. package/dist/components/NavList/NavListItem.mjs.map +1 -0
  150. package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
  151. package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
  152. package/dist/components/NavList/NavListSkeleton.js +33 -0
  153. package/dist/components/NavList/NavListSkeleton.js.map +1 -0
  154. package/dist/components/NavList/NavListSkeleton.mjs +31 -0
  155. package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
  156. package/dist/components/NavList/index.d.ts +7 -0
  157. package/dist/components/NavList/index.d.ts.map +1 -0
  158. package/dist/components/Pagination/Pagination.d.ts +11 -10
  159. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  160. package/dist/components/Pagination/Pagination.js +11 -10
  161. package/dist/components/Pagination/Pagination.js.map +1 -1
  162. package/dist/components/Pagination/Pagination.mjs +11 -10
  163. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  164. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  165. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  166. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  167. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  168. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  169. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  170. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  171. package/dist/components/SegmentedControl/SegmentedControl.js +34 -33
  172. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  173. package/dist/components/SegmentedControl/SegmentedControl.mjs +35 -34
  174. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  175. package/dist/components/SegmentedControl/SegmentedControl.styles.d.ts +24 -0
  176. package/dist/components/SegmentedControl/SegmentedControl.styles.d.ts.map +1 -1
  177. package/dist/components/SegmentedControl/SegmentedControl.styles.js +30 -0
  178. package/dist/components/SegmentedControl/SegmentedControl.styles.js.map +1 -1
  179. package/dist/components/SegmentedControl/SegmentedControl.styles.mjs +29 -1
  180. package/dist/components/SegmentedControl/SegmentedControl.styles.mjs.map +1 -1
  181. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  182. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  183. package/dist/components/Select/Combobox.d.ts +1 -1
  184. package/dist/components/Select/Combobox.d.ts.map +1 -1
  185. package/dist/components/Select/Combobox.js +9 -2
  186. package/dist/components/Select/Combobox.js.map +1 -1
  187. package/dist/components/Select/Combobox.mjs +10 -3
  188. package/dist/components/Select/Combobox.mjs.map +1 -1
  189. package/dist/components/Select/Select.d.ts +1 -1
  190. package/dist/components/Select/Select.d.ts.map +1 -1
  191. package/dist/components/Select/Select.js +14 -2
  192. package/dist/components/Select/Select.js.map +1 -1
  193. package/dist/components/Select/Select.mjs +15 -3
  194. package/dist/components/Select/Select.mjs.map +1 -1
  195. package/dist/components/Select/Select.styles.d.ts +97 -1
  196. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  197. package/dist/components/Select/Select.styles.js +83 -0
  198. package/dist/components/Select/Select.styles.js.map +1 -1
  199. package/dist/components/Select/Select.styles.mjs +82 -1
  200. package/dist/components/Select/Select.styles.mjs.map +1 -1
  201. package/dist/components/Switch/SwitchControl.d.ts.map +1 -1
  202. package/dist/components/Switch/SwitchControl.js +26 -11
  203. package/dist/components/Switch/SwitchControl.js.map +1 -1
  204. package/dist/components/Switch/SwitchControl.mjs +27 -12
  205. package/dist/components/Switch/SwitchControl.mjs.map +1 -1
  206. package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
  207. package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
  208. package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
  209. package/dist/components/Tag/Tag.d.ts.map +1 -1
  210. package/dist/components/Tag/Tag.js +14 -2
  211. package/dist/components/Tag/Tag.js.map +1 -1
  212. package/dist/components/Tag/Tag.mjs +15 -3
  213. package/dist/components/Tag/Tag.mjs.map +1 -1
  214. package/dist/components/Tag/Tag.styles.d.ts +20 -2
  215. package/dist/components/Tag/Tag.styles.d.ts.map +1 -1
  216. package/dist/components/Tag/Tag.styles.js +81 -0
  217. package/dist/components/Tag/Tag.styles.js.map +1 -1
  218. package/dist/components/Tag/Tag.styles.mjs +81 -1
  219. package/dist/components/Tag/Tag.styles.mjs.map +1 -1
  220. package/dist/components/Tag/Tag.types.d.ts +15 -2
  221. package/dist/components/Tag/Tag.types.d.ts.map +1 -1
  222. package/dist/components/Tag/index.d.ts +2 -2
  223. package/dist/components/Tag/index.d.ts.map +1 -1
  224. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  225. package/dist/components/Textarea/Textarea.js +4 -0
  226. package/dist/components/Textarea/Textarea.js.map +1 -1
  227. package/dist/components/Textarea/Textarea.mjs +4 -0
  228. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  229. package/dist/components/Toast/Toast.d.ts.map +1 -1
  230. package/dist/components/Toast/Toast.js +5 -1
  231. package/dist/components/Toast/Toast.js.map +1 -1
  232. package/dist/components/Toast/Toast.mjs +5 -1
  233. package/dist/components/Toast/Toast.mjs.map +1 -1
  234. package/dist/components/Toast/Toast.styles.d.ts +13 -2
  235. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  236. package/dist/components/Toast/Toast.styles.js +19 -7
  237. package/dist/components/Toast/Toast.styles.js.map +1 -1
  238. package/dist/components/Toast/Toast.styles.mjs +19 -7
  239. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  240. package/dist/components/Typography/Caption.d.ts.map +1 -1
  241. package/dist/components/Typography/Caption.js +1 -1
  242. package/dist/components/Typography/Caption.js.map +1 -1
  243. package/dist/components/Typography/Caption.mjs +1 -1
  244. package/dist/components/Typography/Caption.mjs.map +1 -1
  245. package/dist/components/Typography/H1.d.ts.map +1 -1
  246. package/dist/components/Typography/H1.js +1 -1
  247. package/dist/components/Typography/H1.js.map +1 -1
  248. package/dist/components/Typography/H1.mjs +1 -1
  249. package/dist/components/Typography/H1.mjs.map +1 -1
  250. package/dist/components/Typography/H2.d.ts.map +1 -1
  251. package/dist/components/Typography/H2.js +1 -1
  252. package/dist/components/Typography/H2.js.map +1 -1
  253. package/dist/components/Typography/H2.mjs +1 -1
  254. package/dist/components/Typography/H2.mjs.map +1 -1
  255. package/dist/components/Typography/H3.d.ts.map +1 -1
  256. package/dist/components/Typography/H3.js +1 -1
  257. package/dist/components/Typography/H3.js.map +1 -1
  258. package/dist/components/Typography/H3.mjs +1 -1
  259. package/dist/components/Typography/H3.mjs.map +1 -1
  260. package/dist/components/Typography/H4.d.ts.map +1 -1
  261. package/dist/components/Typography/H4.js +1 -1
  262. package/dist/components/Typography/H4.js.map +1 -1
  263. package/dist/components/Typography/H4.mjs +1 -1
  264. package/dist/components/Typography/H4.mjs.map +1 -1
  265. package/dist/components/Typography/H5.d.ts.map +1 -1
  266. package/dist/components/Typography/H5.js +1 -1
  267. package/dist/components/Typography/H5.js.map +1 -1
  268. package/dist/components/Typography/H5.mjs +1 -1
  269. package/dist/components/Typography/H5.mjs.map +1 -1
  270. package/dist/components/Typography/Link.d.ts.map +1 -1
  271. package/dist/components/Typography/Link.js +1 -1
  272. package/dist/components/Typography/Link.js.map +1 -1
  273. package/dist/components/Typography/Link.mjs +1 -1
  274. package/dist/components/Typography/Link.mjs.map +1 -1
  275. package/dist/components/Typography/Overline.d.ts.map +1 -1
  276. package/dist/components/Typography/Overline.js +1 -1
  277. package/dist/components/Typography/Overline.js.map +1 -1
  278. package/dist/components/Typography/Overline.mjs +1 -1
  279. package/dist/components/Typography/Overline.mjs.map +1 -1
  280. package/dist/components/Typography/Subtext.d.ts.map +1 -1
  281. package/dist/components/Typography/Subtext.js +1 -1
  282. package/dist/components/Typography/Subtext.js.map +1 -1
  283. package/dist/components/Typography/Subtext.mjs +1 -1
  284. package/dist/components/Typography/Subtext.mjs.map +1 -1
  285. package/dist/components/Typography/Subtitle.d.ts.map +1 -1
  286. package/dist/components/Typography/Subtitle.js +1 -1
  287. package/dist/components/Typography/Subtitle.js.map +1 -1
  288. package/dist/components/Typography/Subtitle.mjs +1 -1
  289. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  290. package/dist/components/Typography/Text.d.ts.map +1 -1
  291. package/dist/components/Typography/Text.js +1 -1
  292. package/dist/components/Typography/Text.js.map +1 -1
  293. package/dist/components/Typography/Text.mjs +1 -1
  294. package/dist/components/Typography/Text.mjs.map +1 -1
  295. package/dist/hooks/useLanguage.d.ts +5 -0
  296. package/dist/hooks/useLanguage.d.ts.map +1 -1
  297. package/dist/hooks/useLanguage.js +7 -3
  298. package/dist/hooks/useLanguage.js.map +1 -1
  299. package/dist/hooks/useLanguage.mjs +7 -4
  300. package/dist/hooks/useLanguage.mjs.map +1 -1
  301. package/dist/hooks/useTranslate.d.ts.map +1 -1
  302. package/dist/hooks/useTranslate.js +8 -5
  303. package/dist/hooks/useTranslate.js.map +1 -1
  304. package/dist/hooks/useTranslate.mjs +8 -5
  305. package/dist/hooks/useTranslate.mjs.map +1 -1
  306. package/dist/index.d.ts +3 -1
  307. package/dist/index.d.ts.map +1 -1
  308. package/dist/index.js +22 -0
  309. package/dist/index.js.map +1 -1
  310. package/dist/index.mjs +9 -3
  311. package/dist/index.mjs.map +1 -1
  312. package/dist/theme/colors.d.ts +2 -2
  313. package/dist/theme/colors.d.ts.map +1 -1
  314. package/dist/theme/colors.js +63 -19
  315. package/dist/theme/colors.js.map +1 -1
  316. package/dist/theme/colors.mjs +64 -20
  317. package/dist/theme/colors.mjs.map +1 -1
  318. package/dist/theme/controlSizes.d.ts +91 -0
  319. package/dist/theme/controlSizes.d.ts.map +1 -0
  320. package/dist/theme/controlSizes.js +143 -0
  321. package/dist/theme/controlSizes.js.map +1 -0
  322. package/dist/theme/controlSizes.mjs +135 -0
  323. package/dist/theme/controlSizes.mjs.map +1 -0
  324. package/dist/theme/global.d.ts.map +1 -1
  325. package/dist/theme/global.js +19 -1
  326. package/dist/theme/global.js.map +1 -1
  327. package/dist/theme/global.mjs +19 -1
  328. package/dist/theme/global.mjs.map +1 -1
  329. package/dist/theme/index.d.ts.map +1 -1
  330. package/dist/theme/index.js +14 -43
  331. package/dist/theme/index.js.map +1 -1
  332. package/dist/theme/index.mjs +14 -43
  333. package/dist/theme/index.mjs.map +1 -1
  334. package/dist/theme/palette.generated.d.ts +295 -162
  335. package/dist/theme/palette.generated.d.ts.map +1 -1
  336. package/dist/theme/palette.generated.js +296 -162
  337. package/dist/theme/palette.generated.js.map +1 -1
  338. package/dist/theme/palette.generated.mjs +296 -163
  339. package/dist/theme/palette.generated.mjs.map +1 -1
  340. package/dist/theme/paletteSwatches.d.ts +20 -0
  341. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  342. package/dist/theme/recipes/avatar.d.ts +30 -0
  343. package/dist/theme/recipes/avatar.d.ts.map +1 -0
  344. package/dist/theme/recipes/avatar.js +96 -0
  345. package/dist/theme/recipes/avatar.js.map +1 -0
  346. package/dist/theme/recipes/avatar.mjs +94 -0
  347. package/dist/theme/recipes/avatar.mjs.map +1 -0
  348. package/dist/theme/recipes/controls.d.ts +94 -0
  349. package/dist/theme/recipes/controls.d.ts.map +1 -0
  350. package/dist/theme/recipes/controls.js +154 -0
  351. package/dist/theme/recipes/controls.js.map +1 -0
  352. package/dist/theme/recipes/controls.mjs +144 -0
  353. package/dist/theme/recipes/controls.mjs.map +1 -0
  354. package/dist/translations/Defaults.translations.json.js +19 -1
  355. package/dist/translations/Defaults.translations.json.js.map +1 -1
  356. package/dist/translations/Defaults.translations.json.mjs +18 -2
  357. package/dist/translations/Defaults.translations.json.mjs.map +1 -1
  358. package/dist/utils/disabledControl.d.ts +8 -1
  359. package/dist/utils/disabledControl.d.ts.map +1 -1
  360. package/dist/utils/disabledControl.js +8 -1
  361. package/dist/utils/disabledControl.js.map +1 -1
  362. package/dist/utils/disabledControl.mjs +8 -1
  363. package/dist/utils/disabledControl.mjs.map +1 -1
  364. package/dist/utils/focusRing.d.ts +22 -0
  365. package/dist/utils/focusRing.d.ts.map +1 -1
  366. package/dist/utils/focusRing.js +22 -0
  367. package/dist/utils/focusRing.js.map +1 -1
  368. package/dist/utils/focusRing.mjs +21 -1
  369. package/dist/utils/focusRing.mjs.map +1 -1
  370. package/package.json +2 -1
  371. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  372. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  373. package/src/components/Appear/Appear.usage.mdx +107 -0
  374. package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
  375. package/src/components/Avatar/Avatar.stories.tsx +199 -24
  376. package/src/components/Avatar/Avatar.tsx +118 -21
  377. package/src/components/Avatar/Avatar.usage.mdx +185 -0
  378. package/src/components/Avatar/index.tsx +8 -1
  379. package/src/components/Banner/Banner.stories.tsx +152 -2
  380. package/src/components/Banner/Banner.types.ts +30 -1
  381. package/src/components/Banner/Banner.usage.mdx +233 -0
  382. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  383. package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
  384. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  385. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  386. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  387. package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
  388. package/src/components/Button/Button.stories.tsx +332 -3
  389. package/src/components/Button/Button.tsx +46 -3
  390. package/src/components/Button/Button.types.ts +38 -1
  391. package/src/components/Button/Button.usage.mdx +358 -0
  392. package/src/components/Button/Button.variants.test.tsx +13 -1
  393. package/src/components/Card/Card.stories.tsx +106 -0
  394. package/src/components/Card/Card.types.ts +12 -0
  395. package/src/components/Card/Card.usage.mdx +216 -0
  396. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  397. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  398. package/src/components/Chip/Chip.usage.mdx +78 -0
  399. package/src/components/Code/Code.stories.tsx +60 -0
  400. package/src/components/Code/Code.test.tsx +116 -0
  401. package/src/components/Code/Code.usage.mdx +187 -0
  402. package/src/components/Code/shikiAdapter.ts +38 -9
  403. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  404. package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
  405. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  406. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  407. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  408. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  409. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  410. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  411. package/src/components/Confetti/Confetti.types.ts +5 -1
  412. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  413. package/src/components/Confetti/confettiColors.ts +5 -5
  414. package/src/components/Container/Container.stories.tsx +32 -0
  415. package/src/components/Container/Container.usage.mdx +130 -0
  416. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  417. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  418. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  419. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  420. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  421. package/src/components/DatePicker/DatePicker.types.ts +12 -0
  422. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  423. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  424. package/src/components/DatePicker/RangeDatePicker.tsx +7 -1
  425. package/src/components/DatePicker/SingleDatePicker.tsx +7 -1
  426. package/src/components/DatePicker/index.ts +1 -0
  427. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  428. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  429. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  430. package/src/components/ExpandableText/ExpandableText.tsx +0 -1
  431. package/src/components/ExpandableText/ExpandableText.usage.mdx +178 -0
  432. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  433. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  434. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  435. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  436. package/src/components/FileList/FileList.stories.tsx +25 -0
  437. package/src/components/FileList/FileList.usage.mdx +165 -0
  438. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  439. package/src/components/Form/Form.stories.tsx +149 -0
  440. package/src/components/Form/Form.usage.mdx +203 -0
  441. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
  442. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
  443. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
  444. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
  445. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  446. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  447. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  448. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  449. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  450. package/src/components/Icon/Icon.stories.tsx +61 -1
  451. package/src/components/Icon/Icon.usage.mdx +158 -0
  452. package/src/components/IconButton/IconButton.stories.tsx +213 -5
  453. package/src/components/IconButton/IconButton.usage.mdx +275 -0
  454. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  455. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  456. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  457. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  458. package/src/components/Input/Input.stories.tsx +180 -0
  459. package/src/components/Input/Input.tsx +4 -0
  460. package/src/components/Input/Input.usage.mdx +278 -0
  461. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  462. package/src/components/LineGraph/LineGraph.tsx +4 -5
  463. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  464. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  465. package/src/components/LineGraph/seriesColors.test.ts +10 -9
  466. package/src/components/LineGraph/seriesColors.ts +18 -16
  467. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  468. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  469. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  470. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  471. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  472. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  473. package/src/components/Masonry/Masonry.types.ts +8 -3
  474. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  475. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  476. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  477. package/src/components/Menu/Menu.stories.tsx +146 -2
  478. package/src/components/Menu/Menu.usage.mdx +238 -0
  479. package/src/components/Menu/MenuItem.types.ts +8 -0
  480. package/src/components/Modal/Modal.stories.tsx +177 -1
  481. package/src/components/Modal/Modal.usage.mdx +262 -0
  482. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  483. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  484. package/src/components/MonthPicker/MonthPicker.tsx +7 -1
  485. package/src/components/MonthPicker/MonthPicker.types.ts +8 -1
  486. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  487. package/src/components/NavList/NavList.stories.tsx +927 -0
  488. package/src/components/NavList/NavList.styles.ts +114 -0
  489. package/src/components/NavList/NavList.test.tsx +1306 -0
  490. package/src/components/NavList/NavList.translations.json +9 -0
  491. package/src/components/NavList/NavList.tsx +160 -0
  492. package/src/components/NavList/NavList.types.ts +155 -0
  493. package/src/components/NavList/NavList.usage.mdx +545 -0
  494. package/src/components/NavList/NavListContext.ts +25 -0
  495. package/src/components/NavList/NavListGroup.tsx +243 -0
  496. package/src/components/NavList/NavListItem.tsx +543 -0
  497. package/src/components/NavList/NavListSkeleton.tsx +57 -0
  498. package/src/components/NavList/index.ts +15 -0
  499. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  500. package/src/components/Pagination/Pagination.tsx +11 -10
  501. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  502. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  503. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  504. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  505. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  506. package/src/components/Popover/Popover.stories.tsx +104 -1
  507. package/src/components/Popover/Popover.usage.mdx +197 -0
  508. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  509. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  510. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  511. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  512. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  513. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  514. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  515. package/src/components/Radio/Radio.stories.tsx +119 -0
  516. package/src/components/Radio/Radio.usage.mdx +187 -0
  517. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  518. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  519. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  520. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  521. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  522. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  523. package/src/components/SegmentedControl/SegmentedControl.styles.ts +38 -0
  524. package/src/components/SegmentedControl/SegmentedControl.tsx +43 -37
  525. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +216 -0
  526. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  527. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  528. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  529. package/src/components/Select/Combobox.tsx +28 -3
  530. package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
  531. package/src/components/Select/Select.stories.tsx +290 -1
  532. package/src/components/Select/Select.styles.ts +89 -0
  533. package/src/components/Select/Select.tsx +28 -2
  534. package/src/components/Select/Select.usage.mdx +341 -0
  535. package/src/components/Shake/Shake.usage.mdx +107 -0
  536. package/src/components/Slider/Slider.stories.tsx +116 -0
  537. package/src/components/Slider/Slider.usage.mdx +179 -0
  538. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  539. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  540. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  541. package/src/components/Switch/Switch.stories.tsx +139 -6
  542. package/src/components/Switch/Switch.usage.mdx +200 -0
  543. package/src/components/Switch/SwitchControl.tsx +32 -15
  544. package/src/components/Table/Table.stories.tsx +159 -1
  545. package/src/components/Table/Table.usage.mdx +235 -0
  546. package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
  547. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  548. package/src/components/Tabs/Tabs.usage.mdx +263 -0
  549. package/src/components/Tag/Tag.stories.tsx +181 -4
  550. package/src/components/Tag/Tag.styles.ts +117 -2
  551. package/src/components/Tag/Tag.test.tsx +87 -1
  552. package/src/components/Tag/Tag.tsx +22 -1
  553. package/src/components/Tag/Tag.types.ts +16 -2
  554. package/src/components/Tag/Tag.usage.mdx +257 -0
  555. package/src/components/Tag/index.ts +2 -0
  556. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  557. package/src/components/Textarea/Textarea.tsx +4 -0
  558. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  559. package/src/components/Toast/Toast.stories.tsx +185 -3
  560. package/src/components/Toast/Toast.styles.ts +19 -7
  561. package/src/components/Toast/Toast.tsx +8 -1
  562. package/src/components/Toast/Toast.usage.mdx +265 -0
  563. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  564. package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
  565. package/src/components/Tree/Tree.stories.tsx +89 -0
  566. package/src/components/Tree/Tree.usage.mdx +207 -0
  567. package/src/components/Typography/Caption.tsx +0 -1
  568. package/src/components/Typography/H1.tsx +0 -1
  569. package/src/components/Typography/H2.tsx +0 -1
  570. package/src/components/Typography/H3.tsx +0 -1
  571. package/src/components/Typography/H4.tsx +0 -1
  572. package/src/components/Typography/H5.tsx +0 -1
  573. package/src/components/Typography/Link.tsx +0 -1
  574. package/src/components/Typography/Overline.tsx +0 -1
  575. package/src/components/Typography/Subtext.tsx +0 -1
  576. package/src/components/Typography/Subtitle.tsx +0 -1
  577. package/src/components/Typography/Text.tsx +0 -1
  578. package/src/components/Typography/Typography.stories.tsx +117 -0
  579. package/src/components/Typography/Typography.usage.mdx +257 -0
  580. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  581. package/src/components/a11y.kwcag.test.tsx +78 -21
  582. package/src/components/claude.md +24 -1
  583. package/src/components/noRawScales.test.ts +5 -1
  584. package/src/foundations/BrandAssets.mdx +637 -0
  585. package/src/foundations/BrandAssets.stories.tsx +680 -0
  586. package/src/foundations/BrandColour.mdx +103 -4
  587. package/src/foundations/BrandColour.stories.tsx +135 -2
  588. package/src/hooks/useLanguage.ts +8 -3
  589. package/src/hooks/useTranslate.test.tsx +46 -0
  590. package/src/hooks/useTranslate.ts +7 -5
  591. package/src/index.ts +19 -1
  592. package/src/theme/BazePalette.stories.tsx +111 -1
  593. package/src/theme/ControlSizes.stories.tsx +586 -0
  594. package/src/theme/Palette.stories.tsx +2 -2
  595. package/src/theme/SemanticTokens.mdx +118 -19
  596. package/src/theme/claude.md +34 -9
  597. package/src/theme/colors.ts +82 -19
  598. package/src/theme/contrast.test.ts +67 -0
  599. package/src/theme/controlSizes.test.ts +153 -0
  600. package/src/theme/controlSizes.ts +162 -0
  601. package/src/theme/global.ts +20 -1
  602. package/src/theme/index.ts +23 -46
  603. package/src/theme/palette.generated.ts +296 -162
  604. package/src/theme/paletteSwatches.test.ts +1 -1
  605. package/src/theme/paletteSwatches.ts +35 -0
  606. package/src/theme/recipes/avatar.ts +92 -0
  607. package/src/theme/recipes/controls.ts +171 -0
  608. package/src/translations/Defaults.translations.json +14 -0
  609. package/src/utils/disabledControl.ts +8 -1
  610. package/src/utils/focusRing.ts +23 -0
@@ -1,10 +1,19 @@
1
- import { TagRootProps } from '@chakra-ui/react';
1
+ import type {
2
+ ConditionalValue,
3
+ SystemStyleObject,
4
+ TagRootProps,
5
+ } from '@chakra-ui/react';
2
6
 
3
7
  import type { SystemHue } from '@/theme/colors';
8
+ import {
9
+ CONTROL_RADIUS,
10
+ type ControlSizeSpec,
11
+ getControlSize,
12
+ } from '@/theme/controlSizes';
4
13
  import { disabledControl } from '@/utils/disabledControl';
5
14
  import { isDev } from '@/utils/isDev';
6
15
 
7
- import { TagColorPalette, TagTone, TagVariant } from './Tag.types';
16
+ import { TagColorPalette, TagSize, TagTone, TagVariant } from './Tag.types';
8
17
 
9
18
  type StyleProps = Partial<TagRootProps>;
10
19
 
@@ -111,6 +120,112 @@ export const getTagStyles = ({
111
120
  };
112
121
  };
113
122
 
123
+ type ResponsiveTagSize = ConditionalValue<TagSize>;
124
+
125
+ const isPlainObject = (value: unknown): value is Record<string, unknown> =>
126
+ typeof value === 'object' && value !== null && !Array.isArray(value);
127
+
128
+ /**
129
+ * Map every leaf of a Chakra conditional value (`'sm'`, `['xs', null, 'md']`,
130
+ * `{ base: 'xs', md: 'lg' }`, nested conditions) through `fn`, keeping its
131
+ * shape so Chakra still applies each result at its breakpoint. `null` array
132
+ * slots ("no change at this breakpoint") stay `null`.
133
+ */
134
+ const mapConditional = <R>(
135
+ value: ResponsiveTagSize,
136
+ fn: (size: TagSize) => R
137
+ ): ConditionalValue<R> => {
138
+ if (Array.isArray(value)) {
139
+ return value.map((v) => (v == null ? null : (mapConditional(v, fn) as R)));
140
+ }
141
+ if (isPlainObject(value)) {
142
+ return Object.fromEntries(
143
+ Object.entries(value).map(([k, v]) => [
144
+ k,
145
+ v == null ? v : mapConditional(v as ResponsiveTagSize, fn),
146
+ ])
147
+ ) as ConditionalValue<R>;
148
+ }
149
+ return fn(value as TagSize);
150
+ };
151
+
152
+ /**
153
+ * An interactive tag must draw a control size at every width. A responsive
154
+ * value that starts above `base` (`{ md: 'lg' }`, `[null, 'sm']`) would leave
155
+ * the narrowest screens on the badge recipe, so they start at the default `md`.
156
+ */
157
+ const withBaseSize = (
158
+ size: ResponsiveTagSize | undefined
159
+ ): ResponsiveTagSize => {
160
+ if (size == null) return 'md';
161
+ if (Array.isArray(size)) {
162
+ return size[0] == null ? ['md', ...size.slice(1)] : size;
163
+ }
164
+ if (isPlainObject(size)) {
165
+ return 'base' in size && size.base != null ? size : { base: 'md', ...size };
166
+ }
167
+ return size;
168
+ };
169
+
170
+ /**
171
+ * Size styles for a tag.
172
+ *
173
+ * - **Interactive** (a filter chip, a toggle, a link): the shared control
174
+ * scale — the same height, type, inline padding, gap, icon size and radius
175
+ * as a `Button` of that `size` (default `md`), so a chip row lines up with
176
+ * the search field and buttons next to it. A responsive `size` resolves the
177
+ * scale per breakpoint. A composed `TagLabel` inherits the control type
178
+ * instead of the badge recipe's smaller label type.
179
+ * - **Static** (a badge): Chakra's tag sizes, unchanged. `xs` exists only on
180
+ * the control scale, so a static `xs` falls back to the smallest badge.
181
+ */
182
+ export const getTagSizeStyles = (
183
+ size: ResponsiveTagSize | undefined,
184
+ interactive: boolean
185
+ ): {
186
+ sizeStyles: StyleProps;
187
+ recipeSize: TagRootProps['size'];
188
+ cssVars?: SystemStyleObject;
189
+ } => {
190
+ const recipeSize =
191
+ size == null
192
+ ? undefined
193
+ : (mapConditional(size, (s) =>
194
+ s === 'xs' ? 'sm' : s
195
+ ) as TagRootProps['size']);
196
+ if (!interactive) return { sizeStyles: { fontSize: 'sm' }, recipeSize };
197
+ const scale = withBaseSize(size);
198
+ const pick = <K extends keyof ControlSizeSpec>(key: K) =>
199
+ mapConditional(scale, (s) => getControlSize(s)[key]);
200
+ const height = pick('height');
201
+ return {
202
+ sizeStyles: {
203
+ h: height,
204
+ minH: height,
205
+ px: pick('actionPaddingX'),
206
+ gap: pick('gap'),
207
+ textStyle: pick('textStyle') as StyleProps['textStyle'],
208
+ borderRadius: CONTROL_RADIUS,
209
+ },
210
+ recipeSize,
211
+ cssVars: {
212
+ // The `icon` slot is sized by this variable.
213
+ '--tag-element-size': mapConditional(
214
+ scale,
215
+ (s) =>
216
+ `var(--chakra-sizes-${getControlSize(s).iconSize.replace('.', '\\.')})`
217
+ ),
218
+ // The tag recipe gives its label the badge type (`xs` at sm/md). Inside
219
+ // a control that would shrink the label below the root's control type
220
+ // (12.25px instead of Button's 14px at desktop md), so it inherits.
221
+ '& .chakra-tag__label': {
222
+ fontSize: 'inherit',
223
+ lineHeight: 'inherit',
224
+ },
225
+ } as SystemStyleObject,
226
+ };
227
+ };
228
+
114
229
  /**
115
230
  * Result of mapping a 4.x `colorPalette × variant` pair onto 5.0 Tag props.
116
231
  * `needsHuman` marks a pair 5.0 cannot render faithfully (a status `solid`
@@ -6,7 +6,12 @@ import { system } from '../../theme';
6
6
  import { Badge } from '../Badge';
7
7
  import { Chip } from '../Chip';
8
8
  import { Tag } from './Tag';
9
- import { getTagStyles, mapLegacyTagProps } from './Tag.styles';
9
+ import {
10
+ getTagSizeStyles,
11
+ getTagStyles,
12
+ mapLegacyTagProps,
13
+ } from './Tag.styles';
14
+ import { TagLabel } from './TagLabel';
10
15
 
11
16
  const wrap = (ui: React.ReactNode) =>
12
17
  render(<ChakraProvider value={system}>{ui}</ChakraProvider>);
@@ -113,3 +118,84 @@ describe('deprecated aliases', () => {
113
118
  expect(warn).toHaveBeenCalledTimes(1);
114
119
  });
115
120
  });
121
+
122
+ describe('Tag size', () => {
123
+ it('resolves a responsive size per breakpoint on an interactive tag', () => {
124
+ const { sizeStyles, cssVars, recipeSize } = getTagSizeStyles(
125
+ { base: 'xs', md: 'lg' },
126
+ true
127
+ );
128
+ expect(sizeStyles).toMatchObject({
129
+ h: { base: '8', md: '11' },
130
+ minH: { base: '8', md: '11' },
131
+ px: { base: '2.5', md: '5' },
132
+ gap: { base: '1', md: '3' },
133
+ textStyle: { base: 'xs', md: 'md' },
134
+ });
135
+ expect(cssVars?.['--tag-element-size']).toEqual({
136
+ base: 'var(--chakra-sizes-4)',
137
+ md: 'var(--chakra-sizes-5)',
138
+ });
139
+ // `xs` is not a badge recipe size.
140
+ expect(recipeSize).toEqual({ base: 'sm', md: 'lg' });
141
+ });
142
+
143
+ it('keeps array slots and starts a base-less value at md', () => {
144
+ expect(getTagSizeStyles(['sm', null, 'lg'], true).sizeStyles.h).toEqual([
145
+ '9',
146
+ null,
147
+ '11',
148
+ ]);
149
+ expect(getTagSizeStyles([null, 'xs'], true).sizeStyles.h).toEqual([
150
+ '10',
151
+ '8',
152
+ ]);
153
+ expect(getTagSizeStyles({ lg: 'xs' }, true).sizeStyles.h).toEqual({
154
+ base: '10',
155
+ lg: '8',
156
+ });
157
+ });
158
+
159
+ it('leaves a responsive static badge on the recipe', () => {
160
+ const { sizeStyles, recipeSize, cssVars } = getTagSizeStyles(
161
+ { base: 'xs', md: 'lg' },
162
+ false
163
+ );
164
+ expect(sizeStyles).toEqual({ fontSize: 'sm' });
165
+ expect(recipeSize).toEqual({ base: 'sm', md: 'lg' });
166
+ expect(cssVars).toBeUndefined();
167
+ });
168
+
169
+ it('a TagLabel inside an interactive tag inherits the control type', () => {
170
+ const { cssVars } = getTagSizeStyles('md', true);
171
+ expect(cssVars?.['& .chakra-tag__label']).toEqual({
172
+ fontSize: 'inherit',
173
+ lineHeight: 'inherit',
174
+ });
175
+ wrap(
176
+ <Tag as="button" selected={false} size={{ base: 'sm', md: 'lg' }}>
177
+ <TagLabel>Images</TagLabel>
178
+ </Tag>
179
+ );
180
+ const label = screen.getByText('Images');
181
+ expect(label.className).toContain('chakra-tag__label');
182
+ const css = Array.from(document.querySelectorAll('style'))
183
+ .map((s) => s.textContent)
184
+ .join('\n');
185
+ expect(css).toMatch(/\.chakra-tag__label\s*\{[^}]*font-size:\s*inherit/);
186
+ });
187
+
188
+ it('accepts responsive sizes on Tag and the Chip alias (type-level)', () => {
189
+ wrap(
190
+ <>
191
+ <Tag size={{ base: 'sm', md: 'lg' }}>Static</Tag>
192
+ <Tag size={['xs', 'md']} onClick={() => {}}>
193
+ Clickable
194
+ </Tag>
195
+ <Chip size={{ base: 'sm', lg: 'md' }}>Chip</Chip>
196
+ </>
197
+ );
198
+ expect(screen.getByText('Static')).toBeTruthy();
199
+ expect(screen.getByText('Chip')).toBeTruthy();
200
+ });
201
+ });
@@ -2,9 +2,11 @@ import { ElementType, ForwardedRef, forwardRef, MouseEvent } from 'react';
2
2
  import { Tag as ChakraTag } from '@chakra-ui/react';
3
3
 
4
4
  import { focusRing } from '@/utils/focusRing';
5
+ import { mergeCss } from '@/utils/mergeCss';
5
6
 
6
7
  import { polymorphic } from '../../types/polymorphic';
7
8
  import {
9
+ getTagSizeStyles,
8
10
  getTagStyles,
9
11
  mapLegacyTagProps,
10
12
  warnLegacyTagProps,
@@ -36,6 +38,13 @@ type LegacyTagInput = {
36
38
  * toggle (`selected` passed) or renders as a `button` / `a`. Render filter
37
39
  * chips `as="button"` so they are keyboard-operable.
38
40
  *
41
+ * **Size depends on that.** A static tag is a badge and keeps Chakra's badge
42
+ * sizes (`sm` 15.75px · `md` 17.5px · `lg` 21px · `xl` 28px at the 14px root).
43
+ * An interactive tag is a control that sits in a row with buttons and inputs,
44
+ * so its `size` (`xs`–`xl`, default `md`) follows the shared control scale
45
+ * (`controlSizes`): the same height, type, padding and icon size as a
46
+ * `Button` of that size.
47
+ *
39
48
  * @example
40
49
  * ```tsx
41
50
  * <Tag>Draft</Tag>
@@ -58,6 +67,8 @@ const TagImpl = forwardRef(
58
67
  colorPalette: legacyPalette,
59
68
  variant: legacyVariant,
60
69
  as,
70
+ size,
71
+ css: cssProp,
61
72
  __legacyComponent: legacyComponent,
62
73
  ...rest
63
74
  } = props as TagOwnProps & LegacyTagInput;
@@ -94,6 +105,14 @@ const TagImpl = forwardRef(
94
105
 
95
106
  const styles = getTagStyles({ tone, selected, category, interactive });
96
107
 
108
+ // Decided on `wantsInteraction`, not `interactive`, so disabling a filter
109
+ // chip does not shrink it.
110
+ const { sizeStyles, recipeSize, cssVars } = getTagSizeStyles(
111
+ size,
112
+ wantsInteraction
113
+ );
114
+ const css = cssVars ? mergeCss(cssVars, cssProp) : cssProp;
115
+
97
116
  const handleClick = disabled
98
117
  ? (event: MouseEvent<HTMLSpanElement>) => event.preventDefault()
99
118
  : onClick;
@@ -103,8 +122,9 @@ const TagImpl = forwardRef(
103
122
  border="1px solid"
104
123
  borderRadius="md"
105
124
  boxShadow="none"
106
- fontSize="sm"
107
125
  fontWeight="semibold"
126
+ size={recipeSize}
127
+ {...sizeStyles}
108
128
  {...styles}
109
129
  {...focusRing}
110
130
  data-selected={selected ? '' : undefined}
@@ -119,6 +139,7 @@ const TagImpl = forwardRef(
119
139
  // After `rest`: a disabled link must not stay reachable by Tab.
120
140
  {...(disabledNonNative && { tabIndex: -1 })}
121
141
  as={as}
142
+ css={css}
122
143
  ref={ref}
123
144
  >
124
145
  {icon != null ? (
@@ -1,5 +1,5 @@
1
1
  import type { ElementType, ReactNode } from 'react';
2
- import { TagRootProps } from '@chakra-ui/react';
2
+ import type { ConditionalValue, TagRootProps } from '@chakra-ui/react';
3
3
 
4
4
  import type { SystemHue } from '@/theme/colors';
5
5
 
@@ -13,6 +13,9 @@ import type { PolymorphicProps } from '../../types/polymorphic';
13
13
  * - `success` / `warning` / `danger` / `info`: status family `.bg` + `.fg`.
14
14
  * Use them only when the tag reports a status.
15
15
  */
16
+ /** Tag sizes: the badge sizes plus `xs`, which only interactive tags draw. */
17
+ export type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
+
16
19
  export type TagTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';
17
20
 
18
21
  /**
@@ -36,8 +39,19 @@ export type TagVariant = 'soft' | 'solid' | 'outline';
36
39
 
37
40
  export type TagOwnProps = Omit<
38
41
  TagRootProps,
39
- 'colorPalette' | 'variant' | 'as'
42
+ 'colorPalette' | 'variant' | 'as' | 'size'
40
43
  > & {
44
+ /**
45
+ * A static tag uses the badge sizes (`sm` · `md` · `lg` · `xl`; `xs` falls
46
+ * back to `sm`). An interactive tag — `onClick`, `selected`, `as="button"`
47
+ * or a link — uses the shared control scale (`xs`–`xl`), so it matches a
48
+ * `Button` / `Input` of the same size in a row.
49
+ *
50
+ * Responsive values (`{ base: 'xs', md: 'sm' }`, arrays) work for both;
51
+ * an interactive tag resolves the control scale per breakpoint.
52
+ * @default 'md'
53
+ */
54
+ size?: ConditionalValue<TagSize>;
41
55
  /**
42
56
  * Colour role of the tag. Ignored while `selected` is true or `category`
43
57
  * is set.
@@ -0,0 +1,257 @@
1
+ import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
4
+ import * as TagStories from './Tag.stories';
5
+
6
+ <Meta of={TagStories} name="Usage" />
7
+
8
+ <LangToggle />
9
+
10
+ <En>
11
+
12
+ # Tag
13
+
14
+ A compact label that classifies an item, or that the reader can select or
15
+ remove: a topic, a filter, a chosen group.
16
+
17
+ ## When to use
18
+
19
+ - To classify items into groups with no fixed meaning: topics, file types,
20
+ departments. Use `category`.
21
+ - As a filter chip the reader turns on and off. Render it `as="button"` with
22
+ `selected`.
23
+ - To show a choice the reader made and can take back: a selected group in a
24
+ picker, an active filter. Add `TagCloseButton`.
25
+
26
+ ## When not to use
27
+
28
+ - A status or a well-defined system fact (완료, 실패, 이 그룹만) → `Badge`.
29
+ - One choice out of a few, where exactly one is always on → `SegmentedControl`
30
+ or `Tabs`.
31
+ - A count → `CountBadge`.
32
+ - `Chip` is a deprecated alias of Tag; new code uses Tag.
33
+
34
+ ## Variants and what they mean
35
+
36
+ </En>
37
+
38
+ <Ko>
39
+
40
+ # Tag
41
+
42
+ 항목을 분류하거나, 사용자가 고르거나 지울 수 있는 작은 라벨입니다. 주제, 필터, 선택한
43
+ 그룹 같은 곳에 씁니다.
44
+
45
+ ## 언제 쓰나요
46
+
47
+ - 정해진 뜻이 없는 묶음으로 항목을 나눌 때: 주제, 파일 종류, 부서. `category`를 씁니다.
48
+ - 사용자가 켜고 끄는 필터 칩으로 쓸 때. `as="button"`으로 그리고 `selected`를 넘깁니다.
49
+ - 사용자가 고른 뒤 다시 뺄 수 있는 선택을 보여 줄 때: 선택기에서 고른 그룹, 적용 중인
50
+ 필터. `TagCloseButton`을 붙입니다.
51
+
52
+ ## 언제 쓰지 않나요
53
+
54
+ - 상태나 뜻이 명확한 시스템 사실(완료, 실패, 이 그룹만)은 `Badge`를 씁니다.
55
+ - 몇 가지 중 늘 하나만 켜져 있는 선택은 `SegmentedControl`이나 `Tabs`를 씁니다.
56
+ - 개수는 `CountBadge`를 씁니다.
57
+ - `Chip`은 Tag의 지원 중단된 별칭입니다. 새 코드에서는 Tag를 씁니다.
58
+
59
+ ## 변형과 뜻
60
+
61
+ </Ko>
62
+
63
+ <ArgTypes of={TagStories} include={['tone', 'selected', 'category', 'icon', 'disabled']} />
64
+
65
+ <En>
66
+
67
+ | Prop | Means | Use for |
68
+ | --- | --- | --- |
69
+ | `tone="neutral"` (default) | A plain label | Group names, file extensions, active filters |
70
+ | `category` | A group with no meaning beyond telling items apart | Topics, departments, projects |
71
+ | `selected` | A filter chip that is on (black fill) | Filter bars |
72
+ | `tone="success"` / `warning` / `danger` / `info` | A status every reader shares | Rare on Tag; usually `Badge` is the right component |
73
+ | `disabled` | Cannot be used right now | A filter with no results |
74
+
75
+ When more than one is set, `selected` wins over `category`, and `category`
76
+ wins over `tone`.
77
+
78
+ A tag becomes interactive (pointer, hover border) when it has `onClick`, is a
79
+ toggle (`selected` passed, true or false), or renders as a button or a link.
80
+ With `as="button"` it gets `type="button"`, `aria-pressed` for a toggle, and the
81
+ native `disabled` attribute.
82
+
83
+ ## Do / Don't
84
+
85
+ </En>
86
+
87
+ <Ko>
88
+
89
+ | 속성 | 뜻 | 예 |
90
+ | --- | --- | --- |
91
+ | `tone="neutral"` (기본) | 단순한 라벨 | 그룹 이름, 파일 확장자, 적용 중인 필터 |
92
+ | `category` | 항목을 나누는 것 말고는 뜻이 없는 묶음 | 주제, 부서, 프로젝트 |
93
+ | `selected` | 켜져 있는 필터 칩(검은 바탕) | 필터 막대 |
94
+ | `tone="success"` / `warning` / `danger` / `info` | 모든 사용자가 같은 뜻으로 읽는 상태 | Tag에서는 드뭅니다. 대개 `Badge`가 맞습니다 |
95
+ | `disabled` | 지금은 쓸 수 없음 | 결과가 없는 필터 |
96
+
97
+ 여러 속성을 함께 주면 `selected`가 `category`보다, `category`가 `tone`보다
98
+ 우선합니다.
99
+
100
+ `onClick`이 있거나, 토글이거나(`selected`를 true든 false든 넘긴 경우), 버튼이나
101
+ 링크로 그리면 Tag는 누를 수 있는 모양(포인터, 호버 테두리)이 됩니다. `as="button"`으로
102
+ 그리면 `type="button"`이 붙고, 토글이면 `aria-pressed`가, 비활성이면 기본
103
+ `disabled` 속성이 붙습니다.
104
+
105
+ ## 이렇게 하세요 / 이렇게 하지 마세요
106
+
107
+ </Ko>
108
+
109
+ <Canvas of={TagStories.DoCategoryForTopics} />
110
+ <Verdict
111
+ kind="do"
112
+ en="Use category hues for topics. They tell items apart without implying that one is good and another is bad."
113
+ ko="주제에는 category 색을 씁니다. 항목을 나누면서도 어느 쪽이 좋고 나쁘다는 뜻을 담지 않습니다."
114
+ />
115
+
116
+ <Canvas of={TagStories.DontToneForTopics} />
117
+ <Verdict
118
+ kind="dont"
119
+ en="Borrow status tones to colour topics. Readers will take 수업 to be an error."
120
+ ko="주제에 색을 입히려고 상태 tone을 빌려 쓰지 마세요. 사용자는 '수업'을 오류로 읽습니다."
121
+ />
122
+
123
+ <Canvas of={TagStories.DoFilterToggle} />
124
+ <Verdict
125
+ kind="do"
126
+ en='Render filter chips as="button" and pass selected. They are then reachable with Tab, work with Enter and Space, and announce pressed or not pressed.'
127
+ ko='필터 칩은 as="button"으로 그리고 selected를 넘깁니다. 그래야 Tab으로 이동하고 Enter와 Space로 누를 수 있으며, 눌림 여부가 읽힙니다.'
128
+ />
129
+
130
+ <Canvas of={TagStories.DoRemovableWithName} />
131
+ <Verdict
132
+ kind="do"
133
+ en="Give every remove button its own name, such as '마케팅팀 삭제'. Three buttons all called 'close' are impossible to tell apart."
134
+ ko="삭제 버튼마다 '마케팅팀 삭제'처럼 고유한 이름을 붙입니다. 이름이 모두 '닫기'인 버튼 세 개는 서로 구분할 수 없습니다."
135
+ />
136
+
137
+ <Canvas of={TagStories.DontSelectedForStatus} />
138
+ <Verdict
139
+ kind="dont"
140
+ en="Use the selected fill to show a status. Black means 'this filter is on'. For 게시됨 use a Badge."
141
+ ko="상태를 보여 주려고 selected 바탕을 쓰지 마세요. 검은 바탕은 '이 필터가 켜져 있음'이라는 뜻입니다. '게시됨'에는 Badge를 씁니다."
142
+ />
143
+
144
+ <En>
145
+
146
+ ## Content
147
+
148
+ - One to three words. No full stop.
149
+ - Nouns, not verbs: 이미지, not 이미지 보기.
150
+ - Sentence case in English. No 「」, quotation marks or brackets around
151
+ Korean labels.
152
+ - For a long name, shorten the label and keep the full name in the remove
153
+ button's `aria-label` or a `Tooltip`.
154
+
155
+ ## Accessibility
156
+
157
+ What Tag does for you:
158
+
159
+ - A plain tag is a `<span>`, so it is safe inside a button or link (phrasing
160
+ content, `ACCESSIBILITY.md` §5, KWCAG 5.4.1.1).
161
+ - `as="button"` adds `type="button"`, `aria-pressed` for a toggle, the native
162
+ `disabled` attribute and the house focus ring (WCAG 2.4.7, 4.1.2).
163
+ - A disabled tag that would otherwise be a link or clickable span gets
164
+ `aria-disabled`, leaves the Tab order and ignores clicks.
165
+ - Text on every tone and on `selected` passes the contrast audit in both modes
166
+ (WCAG 1.4.3).
167
+
168
+ What you still have to do:
169
+
170
+ - **Clickable means a button or a link** (WCAG 2.1.1). `onClick` on the default
171
+ `<span>` is not reachable by keyboard. Use `as="button"`, or `as="a"` with
172
+ `href` when it navigates.
173
+ - **Name the remove button.** `TagCloseButton` is an icon-only `<button>` with
174
+ no name and no handler of its own. Pass `aria-label` (for example
175
+ `` `${label} 삭제` ``) and `onClick` (WCAG 4.1.2). Inside a `<form>`, also
176
+ pass `type="button"`, or it submits the form.
177
+ - Group related filter chips under a label (`role="group"` with
178
+ `aria-label`, or a visible heading) so a screen reader knows what they
179
+ filter.
180
+ - Words, not colour alone (WCAG 1.4.1): category hues only tell items apart;
181
+ the label carries the meaning.
182
+
183
+ ## Tokens
184
+
185
+ The table is generated from `Tag.styles.ts` and the theme.
186
+
187
+ </En>
188
+
189
+ <Ko>
190
+
191
+ ## 문구
192
+
193
+ - 한 단어에서 세 단어까지 씁니다. 마침표를 찍지 않습니다.
194
+ - 동사가 아니라 명사로 씁니다. "이미지 보기"가 아니라 "이미지"라고 씁니다.
195
+ - 영어는 문장형 대소문자를 씁니다. 한국어 라벨에는 「」, 따옴표, 괄호를 두르지
196
+ 않습니다.
197
+ - 이름이 길면 라벨은 줄이고, 전체 이름은 삭제 버튼의 `aria-label`이나 `Tooltip`에
198
+ 담습니다.
199
+
200
+ ## 접근성
201
+
202
+ Tag가 알아서 하는 일
203
+
204
+ - 기본 Tag는 `<span>`이라 버튼이나 링크 안에 넣어도 됩니다(구문 콘텐츠,
205
+ `ACCESSIBILITY.md` §5, KWCAG 5.4.1.1).
206
+ - `as="button"`으로 그리면 `type="button"`, 토글일 때 `aria-pressed`, 기본
207
+ `disabled` 속성, 공통 초점 링이 붙습니다(WCAG 2.4.7, 4.1.2).
208
+ - 링크나 누를 수 있는 span이 비활성이면 `aria-disabled`가 붙고, Tab 순서에서 빠지며,
209
+ 클릭을 무시합니다.
210
+ - 모든 tone과 `selected`의 글자 색은 라이트·다크 모두 대비 감사를 통과합니다(WCAG
211
+ 1.4.3).
212
+
213
+ 직접 챙겨야 하는 일
214
+
215
+ - **누를 수 있다면 버튼이나 링크로 그립니다**(WCAG 2.1.1). 기본 `<span>`에
216
+ `onClick`만 달면 키보드로 닿지 않습니다. `as="button"`을 쓰고, 다른 곳으로
217
+ 이동한다면 `href`와 함께 `as="a"`를 씁니다.
218
+ - **삭제 버튼에 이름을 붙입니다.** `TagCloseButton`은 아이콘만 있는 `<button>`이며,
219
+ 이름도 동작도 스스로 갖지 않습니다. `aria-label`(예: `` `${label} 삭제` ``)과
220
+ `onClick`을 넘깁니다(WCAG 4.1.2). `<form>` 안에서는 `type="button"`도 넘겨야
221
+ 폼이 제출되지 않습니다.
222
+ - 관련된 필터 칩은 라벨로 묶습니다(`aria-label`을 단 `role="group"`, 또는 눈에 보이는
223
+ 제목). 그래야 화면 낭독기 사용자가 무엇을 거르는 필터인지 압니다.
224
+ - 색만으로 알리지 않습니다(WCAG 1.4.1). category 색은 항목을 나눌 뿐이고, 뜻은 라벨이
225
+ 전합니다.
226
+
227
+ ## 토큰
228
+
229
+ 아래 표는 `Tag.styles.ts`와 테마에서 자동으로 만듭니다.
230
+
231
+ </Ko>
232
+
233
+ <Canvas of={TagStories.UsageTokens} sourceState="none" />
234
+
235
+ <En>
236
+
237
+ ## Related
238
+
239
+ - **Badge**: a status or a well-defined system fact.
240
+ - **CountBadge**: a number.
241
+ - **Chip**: deprecated alias of Tag; see its migration table.
242
+ - **SegmentedControl**: exactly one of a few options.
243
+ - **Foundations/Brand & colour usage**: category hues vs status colours.
244
+
245
+ </En>
246
+
247
+ <Ko>
248
+
249
+ ## 관련 컴포넌트
250
+
251
+ - **Badge**: 상태나 뜻이 명확한 시스템 사실.
252
+ - **CountBadge**: 숫자.
253
+ - **Chip**: Tag의 지원 중단된 별칭. 바꾸는 방법은 Chip 페이지의 표를 봅니다.
254
+ - **SegmentedControl**: 몇 가지 중 정확히 하나.
255
+ - **Foundations/Brand & colour usage**: category 색과 상태색의 차이.
256
+
257
+ </Ko>
@@ -3,6 +3,7 @@ import { Icon } from '@chakra-ui/react';
3
3
  export { Tag } from './Tag';
4
4
  export type { LegacyTagResolution, TagStyleOptions } from './Tag.styles';
5
5
  export {
6
+ getTagSizeStyles,
6
7
  getTagStyles,
7
8
  mapLegacyTagProps,
8
9
  tagTones,
@@ -12,6 +13,7 @@ export type {
12
13
  TagColorPalette,
13
14
  TagOwnProps,
14
15
  TagProps,
16
+ TagSize,
15
17
  TagTone,
16
18
  TagVariant,
17
19
  } from './Tag.types';