@panneau/ui 5.0.0-alpha.1 → 5.0.0-alpha.3

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 (396) hide show
  1. package/README.md +276 -13
  2. package/bin/check-theme.js +5 -0
  3. package/dist/alert/Alert.css +28 -42
  4. package/dist/alert/Alert.d.ts +18 -4
  5. package/dist/alert/Alert.d.ts.map +1 -1
  6. package/dist/alert/Alert.js +4 -3
  7. package/dist/alert/Alert.js.map +1 -1
  8. package/dist/alert/Alert.module.js +14 -16
  9. package/dist/alert/Alert.module.js.map +1 -1
  10. package/dist/alert/tokens.d.ts +3 -0
  11. package/dist/alert/tokens.d.ts.map +1 -0
  12. package/dist/alert/tokens.js +21 -0
  13. package/dist/alert/tokens.js.map +1 -0
  14. package/dist/badge/Badge.css +24 -36
  15. package/dist/badge/Badge.d.ts +18 -3
  16. package/dist/badge/Badge.d.ts.map +1 -1
  17. package/dist/badge/Badge.js +3 -2
  18. package/dist/badge/Badge.js.map +1 -1
  19. package/dist/badge/Badge.module.js +9 -13
  20. package/dist/badge/Badge.module.js.map +1 -1
  21. package/dist/badge/tokens.d.ts +3 -0
  22. package/dist/badge/tokens.d.ts.map +1 -0
  23. package/dist/badge/tokens.js +23 -0
  24. package/dist/badge/tokens.js.map +1 -0
  25. package/dist/button/Button.css +58 -42
  26. package/dist/button/Button.d.ts +30 -3
  27. package/dist/button/Button.d.ts.map +1 -1
  28. package/dist/button/Button.js +27 -2
  29. package/dist/button/Button.js.map +1 -1
  30. package/dist/button/Button.module.js +14 -14
  31. package/dist/button/Button.module.js.map +1 -1
  32. package/dist/button/tokens.d.ts +3 -0
  33. package/dist/button/tokens.d.ts.map +1 -0
  34. package/dist/button/tokens.js +25 -0
  35. package/dist/button/tokens.js.map +1 -0
  36. package/dist/card/Card.css +27 -20
  37. package/dist/card/Card.js +1 -1
  38. package/dist/card/Card.js.map +1 -1
  39. package/dist/card/Card.module.js +5 -5
  40. package/dist/card/Card.module.js.map +1 -1
  41. package/dist/card/tokens.d.ts +3 -0
  42. package/dist/card/tokens.d.ts.map +1 -0
  43. package/dist/card/tokens.js +31 -0
  44. package/dist/card/tokens.js.map +1 -0
  45. package/dist/checkbox/Checkbox.css +22 -21
  46. package/dist/checkbox/Checkbox.d.ts.map +1 -1
  47. package/dist/checkbox/Checkbox.js +2 -1
  48. package/dist/checkbox/Checkbox.js.map +1 -1
  49. package/dist/checkbox/Checkbox.module.js +6 -6
  50. package/dist/checkbox/Checkbox.module.js.map +1 -1
  51. package/dist/checkbox/ChoiceChrome.d.ts +3 -1
  52. package/dist/checkbox/ChoiceChrome.d.ts.map +1 -1
  53. package/dist/checkbox/ChoiceChrome.js +2 -2
  54. package/dist/checkbox/ChoiceChrome.js.map +1 -1
  55. package/dist/checkbox/tokens.d.ts +3 -0
  56. package/dist/checkbox/tokens.d.ts.map +1 -0
  57. package/dist/checkbox/tokens.js +21 -0
  58. package/dist/checkbox/tokens.js.map +1 -0
  59. package/dist/combo-box/ComboBox.css +4 -4
  60. package/dist/combo-box/ComboBox.js +1 -1
  61. package/dist/combo-box/ComboBox.js.map +1 -1
  62. package/dist/combo-box/ComboBox.module.js +3 -3
  63. package/dist/container/Container.css +32 -0
  64. package/dist/container/Container.d.ts +15 -0
  65. package/dist/container/Container.d.ts.map +1 -0
  66. package/dist/container/Container.js +18 -0
  67. package/dist/container/Container.js.map +1 -0
  68. package/dist/container/Container.module.js +20 -0
  69. package/dist/container/Container.module.js.map +1 -0
  70. package/dist/container/tokens.d.ts +3 -0
  71. package/dist/container/tokens.d.ts.map +1 -0
  72. package/dist/container/tokens.js +19 -0
  73. package/dist/container/tokens.js.map +1 -0
  74. package/dist/date-picker/DatePicker.css +30 -30
  75. package/dist/date-picker/DatePicker.js +1 -1
  76. package/dist/date-picker/DatePicker.js.map +1 -1
  77. package/dist/date-picker/DatePicker.module.js +11 -11
  78. package/dist/date-picker/DatePicker.module.js.map +1 -1
  79. package/dist/date-picker/calendarTokens.d.ts +3 -0
  80. package/dist/date-picker/calendarTokens.d.ts.map +1 -0
  81. package/dist/date-picker/calendarTokens.js +17 -0
  82. package/dist/date-picker/calendarTokens.js.map +1 -0
  83. package/dist/dialog/Dialog.css +40 -36
  84. package/dist/dialog/Dialog.js +1 -1
  85. package/dist/dialog/Dialog.js.map +1 -1
  86. package/dist/dialog/Dialog.module.js +11 -11
  87. package/dist/dialog/Dialog.module.js.map +1 -1
  88. package/dist/dialog/tokens.d.ts +3 -0
  89. package/dist/dialog/tokens.d.ts.map +1 -0
  90. package/dist/dialog/tokens.js +29 -0
  91. package/dist/dialog/tokens.js.map +1 -0
  92. package/dist/disclosure/Disclosure.css +12 -12
  93. package/dist/disclosure/Disclosure.d.ts.map +1 -1
  94. package/dist/disclosure/Disclosure.js +1 -1
  95. package/dist/disclosure/Disclosure.js.map +1 -1
  96. package/dist/disclosure/Disclosure.module.js +7 -7
  97. package/dist/disclosure/Disclosure.module.js.map +1 -1
  98. package/dist/disclosure/tokens.d.ts +3 -0
  99. package/dist/disclosure/tokens.d.ts.map +1 -0
  100. package/dist/disclosure/tokens.js +15 -0
  101. package/dist/disclosure/tokens.js.map +1 -0
  102. package/dist/divider/Divider.css +17 -0
  103. package/dist/divider/Divider.d.ts +8 -0
  104. package/dist/divider/Divider.d.ts.map +1 -0
  105. package/dist/divider/Divider.js +21 -0
  106. package/dist/divider/Divider.js.map +1 -0
  107. package/dist/divider/Divider.module.js +12 -0
  108. package/dist/divider/Divider.module.js.map +1 -0
  109. package/dist/divider/tokens.d.ts +3 -0
  110. package/dist/divider/tokens.d.ts.map +1 -0
  111. package/dist/divider/tokens.js +13 -0
  112. package/dist/divider/tokens.js.map +1 -0
  113. package/dist/field/Field.css +40 -37
  114. package/dist/field/Field.module.js +11 -11
  115. package/dist/field/Field.module.js.map +1 -1
  116. package/dist/field/Fieldset.js +1 -1
  117. package/dist/field/Fieldset.js.map +1 -1
  118. package/dist/field/inputTokens.d.ts +3 -0
  119. package/dist/field/inputTokens.d.ts.map +1 -0
  120. package/dist/field/inputTokens.js +21 -0
  121. package/dist/field/inputTokens.js.map +1 -0
  122. package/dist/field/tokens.d.ts +3 -0
  123. package/dist/field/tokens.d.ts.map +1 -0
  124. package/dist/field/tokens.js +15 -0
  125. package/dist/field/tokens.js.map +1 -0
  126. package/dist/grid/Grid.css +174 -0
  127. package/dist/grid/Grid.d.ts +28 -0
  128. package/dist/grid/Grid.d.ts.map +1 -0
  129. package/dist/grid/Grid.js +31 -0
  130. package/dist/grid/Grid.js.map +1 -0
  131. package/dist/grid/Grid.module.js +12 -0
  132. package/dist/grid/Grid.module.js.map +1 -0
  133. package/dist/grid/GridItem.css +59 -0
  134. package/dist/grid/GridItem.module.js +7 -0
  135. package/dist/grid/GridItem.module.js.map +1 -0
  136. package/dist/grid/tokens.d.ts +3 -0
  137. package/dist/grid/tokens.d.ts.map +1 -0
  138. package/dist/grid/tokens.js +10 -0
  139. package/dist/grid/tokens.js.map +1 -0
  140. package/dist/heading/Heading.css +52 -0
  141. package/dist/heading/Heading.d.ts +17 -0
  142. package/dist/heading/Heading.d.ts.map +1 -0
  143. package/dist/heading/Heading.js +17 -0
  144. package/dist/heading/Heading.js.map +1 -0
  145. package/dist/heading/Heading.module.js +16 -0
  146. package/dist/heading/Heading.module.js.map +1 -0
  147. package/dist/heading/tokens.d.ts +6 -0
  148. package/dist/heading/tokens.d.ts.map +1 -0
  149. package/dist/heading/tokens.js +66 -0
  150. package/dist/heading/tokens.js.map +1 -0
  151. package/dist/icon/Icon.css +1 -1
  152. package/dist/icon/Icon.js +1 -1
  153. package/dist/icon/Icon.js.map +1 -1
  154. package/dist/icon/Icon.module.js +1 -1
  155. package/dist/icon/lucideIconLoader.d.ts +9 -0
  156. package/dist/icon/lucideIconLoader.d.ts.map +1 -0
  157. package/dist/icon/lucideIconLoader.js +22 -0
  158. package/dist/icon/lucideIconLoader.js.map +1 -0
  159. package/dist/icon/namedIcons.d.ts +15 -8
  160. package/dist/icon/namedIcons.d.ts.map +1 -1
  161. package/dist/icon/namedIcons.js +43 -29
  162. package/dist/icon/namedIcons.js.map +1 -1
  163. package/dist/icon-button/IconButton.css +2 -2
  164. package/dist/icon-button/IconButton.d.ts +1 -1
  165. package/dist/icon-button/IconButton.d.ts.map +1 -1
  166. package/dist/icon-button/IconButton.js +3 -3
  167. package/dist/icon-button/IconButton.js.map +1 -1
  168. package/dist/icon-button/IconButton.module.js +2 -2
  169. package/dist/index.d.ts +26 -6
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +21 -3
  172. package/dist/inline/Inline.css +142 -0
  173. package/dist/inline/Inline.d.ts +17 -0
  174. package/dist/inline/Inline.d.ts.map +1 -0
  175. package/dist/inline/Inline.js +21 -0
  176. package/dist/inline/Inline.js.map +1 -0
  177. package/dist/inline/Inline.module.js +12 -0
  178. package/dist/inline/Inline.module.js.map +1 -0
  179. package/dist/inline/tokens.d.ts +3 -0
  180. package/dist/inline/tokens.d.ts.map +1 -0
  181. package/dist/inline/tokens.js +10 -0
  182. package/dist/inline/tokens.js.map +1 -0
  183. package/dist/layout/responsive.d.ts +38 -0
  184. package/dist/layout/responsive.d.ts.map +1 -0
  185. package/dist/layout/responsive.js +49 -0
  186. package/dist/layout/responsive.js.map +1 -0
  187. package/dist/menu/Menu.js +2 -2
  188. package/dist/menu/Menu.js.map +1 -1
  189. package/dist/named-icons/index.d.ts +2 -0
  190. package/dist/named-icons/index.d.ts.map +1 -0
  191. package/dist/named-icons/index.js +1 -0
  192. package/dist/number-input/NumberInput.css +12 -12
  193. package/dist/number-input/NumberInput.js +1 -1
  194. package/dist/number-input/NumberInput.js.map +1 -1
  195. package/dist/number-input/NumberInput.module.js +4 -4
  196. package/dist/number-input/NumberInput.module.js.map +1 -1
  197. package/dist/number-input/tokens.d.ts +3 -0
  198. package/dist/number-input/tokens.d.ts.map +1 -0
  199. package/dist/number-input/tokens.js +10 -0
  200. package/dist/number-input/tokens.js.map +1 -0
  201. package/dist/popover/Popover.css +13 -12
  202. package/dist/popover/Popover.js +2 -2
  203. package/dist/popover/Popover.js.map +1 -1
  204. package/dist/popover/Popover.module.js +3 -3
  205. package/dist/popover/Popover.module.js.map +1 -1
  206. package/dist/popover/tokens.d.ts +3 -0
  207. package/dist/popover/tokens.d.ts.map +1 -0
  208. package/dist/popover/tokens.js +19 -0
  209. package/dist/popover/tokens.js.map +1 -0
  210. package/dist/prose/Prose.css +141 -0
  211. package/dist/prose/Prose.d.ts +11 -0
  212. package/dist/prose/Prose.d.ts.map +1 -0
  213. package/dist/prose/Prose.js +18 -0
  214. package/dist/prose/Prose.js.map +1 -0
  215. package/dist/prose/Prose.module.js +8 -0
  216. package/dist/prose/Prose.module.js.map +1 -0
  217. package/dist/prose/tokens.d.ts +3 -0
  218. package/dist/prose/tokens.d.ts.map +1 -0
  219. package/dist/prose/tokens.js +33 -0
  220. package/dist/prose/tokens.js.map +1 -0
  221. package/dist/radio-group/RadioGroup.css +21 -20
  222. package/dist/radio-group/RadioGroup.d.ts.map +1 -1
  223. package/dist/radio-group/RadioGroup.js +2 -2
  224. package/dist/radio-group/RadioGroup.js.map +1 -1
  225. package/dist/radio-group/RadioGroup.module.js +6 -6
  226. package/dist/radio-group/RadioGroup.module.js.map +1 -1
  227. package/dist/radio-group/tokens.d.ts +3 -0
  228. package/dist/radio-group/tokens.d.ts.map +1 -0
  229. package/dist/radio-group/tokens.js +19 -0
  230. package/dist/radio-group/tokens.js.map +1 -0
  231. package/dist/root/PanneauRoot.css +243 -20
  232. package/dist/root/PanneauRoot.d.ts +35 -4
  233. package/dist/root/PanneauRoot.d.ts.map +1 -1
  234. package/dist/root/PanneauRoot.js +107 -20
  235. package/dist/root/PanneauRoot.js.map +1 -1
  236. package/dist/root/PanneauRoot.module.js +11 -3
  237. package/dist/root/PanneauRoot.module.js.map +1 -1
  238. package/dist/root/ThemeScope.d.ts +24 -0
  239. package/dist/root/ThemeScope.d.ts.map +1 -0
  240. package/dist/root/ThemeScope.js +49 -0
  241. package/dist/root/ThemeScope.js.map +1 -0
  242. package/dist/select/ListBox.css +23 -22
  243. package/dist/select/ListBox.module.js +12 -12
  244. package/dist/select/ListBox.module.js.map +1 -1
  245. package/dist/select/Select.js +1 -1
  246. package/dist/select/Select.js.map +1 -1
  247. package/dist/select/listBoxTokens.d.ts +3 -0
  248. package/dist/select/listBoxTokens.d.ts.map +1 -0
  249. package/dist/select/listBoxTokens.js +19 -0
  250. package/dist/select/listBoxTokens.js.map +1 -0
  251. package/dist/spinner/Spinner.css +8 -8
  252. package/dist/spinner/Spinner.js +1 -1
  253. package/dist/spinner/Spinner.js.map +1 -1
  254. package/dist/spinner/Spinner.module.js +5 -5
  255. package/dist/spinner/Spinner.module.js.map +1 -1
  256. package/dist/spinner/tokens.d.ts +3 -0
  257. package/dist/spinner/tokens.d.ts.map +1 -0
  258. package/dist/spinner/tokens.js +10 -0
  259. package/dist/spinner/tokens.js.map +1 -0
  260. package/dist/stack/Stack.css +135 -0
  261. package/dist/stack/Stack.d.ts +15 -0
  262. package/dist/stack/Stack.d.ts.map +1 -0
  263. package/dist/stack/Stack.js +21 -0
  264. package/dist/stack/Stack.js.map +1 -0
  265. package/dist/stack/Stack.module.js +8 -0
  266. package/dist/stack/Stack.module.js.map +1 -0
  267. package/dist/stack/tokens.d.ts +3 -0
  268. package/dist/stack/tokens.d.ts.map +1 -0
  269. package/dist/stack/tokens.js +10 -0
  270. package/dist/stack/tokens.js.map +1 -0
  271. package/dist/switch/Switch.css +34 -25
  272. package/dist/switch/Switch.d.ts.map +1 -1
  273. package/dist/switch/Switch.js +2 -1
  274. package/dist/switch/Switch.js.map +1 -1
  275. package/dist/switch/Switch.module.js +6 -5
  276. package/dist/switch/Switch.module.js.map +1 -1
  277. package/dist/switch/tokens.d.ts +3 -0
  278. package/dist/switch/tokens.d.ts.map +1 -0
  279. package/dist/switch/tokens.js +25 -0
  280. package/dist/switch/tokens.js.map +1 -0
  281. package/dist/tabs/Tabs.css +24 -23
  282. package/dist/tabs/Tabs.js +4 -4
  283. package/dist/tabs/Tabs.js.map +1 -1
  284. package/dist/tabs/Tabs.module.js +4 -4
  285. package/dist/tabs/Tabs.module.js.map +1 -1
  286. package/dist/tabs/tokens.d.ts +3 -0
  287. package/dist/tabs/tokens.d.ts.map +1 -0
  288. package/dist/tabs/tokens.js +25 -0
  289. package/dist/tabs/tokens.js.map +1 -0
  290. package/dist/text/Text.css +74 -0
  291. package/dist/text/Text.d.ts +27 -0
  292. package/dist/text/Text.d.ts.map +1 -0
  293. package/dist/text/Text.js +16 -0
  294. package/dist/text/Text.js.map +1 -0
  295. package/dist/text/Text.module.js +30 -0
  296. package/dist/text/Text.module.js.map +1 -0
  297. package/dist/text/tokens.d.ts +3 -0
  298. package/dist/text/tokens.d.ts.map +1 -0
  299. package/dist/text/tokens.js +10 -0
  300. package/dist/text/tokens.js.map +1 -0
  301. package/dist/text-area/TextArea.css +1 -1
  302. package/dist/text-area/TextArea.js +2 -2
  303. package/dist/text-area/TextArea.js.map +1 -1
  304. package/dist/text-area/TextArea.module.js +3 -3
  305. package/dist/text-area/TextArea.module.js.map +1 -1
  306. package/dist/text-input/TextInput.js +1 -1
  307. package/dist/text-input/TextInput.js.map +1 -1
  308. package/dist/theme/Tone.css +70 -0
  309. package/dist/theme/Tone.module.js +20 -0
  310. package/dist/theme/Tone.module.js.map +1 -0
  311. package/dist/theme/bootstrap.d.ts +10 -0
  312. package/dist/theme/bootstrap.d.ts.map +1 -1
  313. package/dist/theme/bootstrap.js +48 -5
  314. package/dist/theme/bootstrap.js.map +1 -1
  315. package/dist/theme/chartColors.d.ts +23 -0
  316. package/dist/theme/chartColors.d.ts.map +1 -0
  317. package/dist/theme/chartColors.js +27 -0
  318. package/dist/theme/chartColors.js.map +1 -0
  319. package/dist/theme/checkTheme.d.ts +39 -0
  320. package/dist/theme/checkTheme.d.ts.map +1 -0
  321. package/dist/theme/checkTheme.js +132 -0
  322. package/dist/theme/checkTheme.js.map +1 -0
  323. package/dist/theme/cli.d.ts +14 -0
  324. package/dist/theme/cli.d.ts.map +1 -0
  325. package/dist/theme/cli.js +61 -0
  326. package/dist/theme/cli.js.map +1 -0
  327. package/dist/theme/color.d.ts +30 -0
  328. package/dist/theme/color.d.ts.map +1 -0
  329. package/dist/theme/color.js +94 -0
  330. package/dist/theme/color.js.map +1 -0
  331. package/dist/theme/colorVision.d.ts +23 -0
  332. package/dist/theme/colorVision.d.ts.map +1 -0
  333. package/dist/theme/colorVision.js +140 -0
  334. package/dist/theme/colorVision.js.map +1 -0
  335. package/dist/theme/componentTokens.d.ts +24 -0
  336. package/dist/theme/componentTokens.d.ts.map +1 -0
  337. package/dist/theme/componentTokens.js +20 -0
  338. package/dist/theme/componentTokens.js.map +1 -0
  339. package/dist/theme/components.d.ts +38 -0
  340. package/dist/theme/components.d.ts.map +1 -0
  341. package/dist/theme/components.js +65 -0
  342. package/dist/theme/components.js.map +1 -0
  343. package/dist/theme/defineTheme.d.ts +85 -0
  344. package/dist/theme/defineTheme.d.ts.map +1 -0
  345. package/dist/theme/defineTheme.js +130 -0
  346. package/dist/theme/defineTheme.js.map +1 -0
  347. package/dist/theme/fonts.d.ts +32 -0
  348. package/dist/theme/fonts.d.ts.map +1 -0
  349. package/dist/theme/fonts.js +36 -0
  350. package/dist/theme/fonts.js.map +1 -0
  351. package/dist/theme/index.d.ts +13 -0
  352. package/dist/theme/index.d.ts.map +1 -0
  353. package/dist/theme/index.js +10 -0
  354. package/dist/theme/semanticTokens.d.ts +9 -0
  355. package/dist/theme/semanticTokens.d.ts.map +1 -0
  356. package/dist/theme/semanticTokens.js +110 -0
  357. package/dist/theme/semanticTokens.js.map +1 -0
  358. package/dist/theme/theme.d.ts +61 -7
  359. package/dist/theme/theme.d.ts.map +1 -1
  360. package/dist/theme/theme.js +100 -10
  361. package/dist/theme/theme.js.map +1 -1
  362. package/dist/theme/toneClass.d.ts +8 -0
  363. package/dist/theme/toneClass.d.ts.map +1 -0
  364. package/dist/theme/toneClass.js +15 -0
  365. package/dist/theme/toneClass.js.map +1 -0
  366. package/dist/theme/tones.d.ts +89 -0
  367. package/dist/theme/tones.d.ts.map +1 -0
  368. package/dist/theme/tones.js +127 -0
  369. package/dist/theme/tones.js.map +1 -0
  370. package/dist/time-input/TimeInput.js +1 -1
  371. package/dist/time-input/TimeInput.js.map +1 -1
  372. package/dist/toast/Toast.css +22 -44
  373. package/dist/toast/Toast.d.ts +5 -3
  374. package/dist/toast/Toast.d.ts.map +1 -1
  375. package/dist/toast/Toast.js +4 -3
  376. package/dist/toast/Toast.js.map +1 -1
  377. package/dist/toast/Toast.module.js +10 -16
  378. package/dist/toast/Toast.module.js.map +1 -1
  379. package/dist/toast/tokens.d.ts +3 -0
  380. package/dist/toast/tokens.d.ts.map +1 -0
  381. package/dist/toast/tokens.js +21 -0
  382. package/dist/toast/tokens.js.map +1 -0
  383. package/dist/tooltip/Tooltip.css +12 -11
  384. package/dist/tooltip/Tooltip.js +1 -1
  385. package/dist/tooltip/Tooltip.js.map +1 -1
  386. package/dist/tooltip/Tooltip.module.js +2 -2
  387. package/dist/tooltip/Tooltip.module.js.map +1 -1
  388. package/dist/tooltip/tokens.d.ts +3 -0
  389. package/dist/tooltip/tokens.d.ts.map +1 -0
  390. package/dist/tooltip/tokens.js +21 -0
  391. package/dist/tooltip/tokens.js.map +1 -0
  392. package/dist/utils/cx.d.ts +1 -1
  393. package/dist/utils/cx.d.ts.map +1 -1
  394. package/dist/utils/cx.js +2 -2
  395. package/dist/utils/cx.js.map +1 -1
  396. package/package.json +20 -3
@@ -1,53 +1,41 @@
1
- .panneau-badge-ikDSa7 {
1
+ .panneau-badge {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  justify-content: center;
5
- gap: var(--panneau-space-1);
6
- min-width: 1.25rem;
7
- height: 1.25rem;
8
- padding: 0 var(--panneau-space-2);
9
- font-size: var(--panneau-font-size-xs);
10
- font-weight: var(--panneau-font-weight-medium);
11
- font-variant-numeric: tabular-nums;
5
+ gap: var(--panneau-badge-gap, var(--panneau-space-1));
6
+ min-width: var(--panneau-badge-height, 1.25rem);
7
+ height: var(--panneau-badge-height, 1.25rem);
8
+ padding: 0 var(--panneau-badge-padding-x, var(--panneau-space-2));
9
+ font-size: var(--panneau-badge-font-size, var(--panneau-font-size-xs));
10
+ font-weight: var(--panneau-badge-font-weight, var(--panneau-font-weight-medium));
11
+ font-variant-numeric: var(--panneau-font-numeric);
12
12
  line-height: 1;
13
13
  white-space: nowrap;
14
- color: var(--panneau-color-text);
15
- background-color: var(--panneau-color-surface-sunken);
16
- border: var(--panneau-border-width) solid var(--panneau-color-border);
17
- border-radius: var(--panneau-radius-full);
14
+ border: var(--panneau-badge-border-width, var(--panneau-border-width)) solid transparent;
15
+ border-radius: var(--panneau-badge-radius, var(--panneau-radius-full));
18
16
  }
19
17
 
20
- .panneau-success-2NDSCG {
21
- color: var(--panneau-color-success);
22
- background-color: var(--panneau-color-success-subtle);
23
- border-color: var(--panneau-color-success-border);
24
- }
25
-
26
- .panneau-danger-NLo-wP {
27
- color: var(--panneau-color-danger);
28
- background-color: var(--panneau-color-danger-subtle);
29
- border-color: var(--panneau-color-danger-border);
30
- }
18
+ /* Appearances: they read the --panneau-tone-* variables of the tone class (decision 0024). */
31
19
 
32
- .panneau-warning-3mFhiV {
33
- color: var(--panneau-color-warning);
34
- background-color: var(--panneau-color-warning-subtle);
35
- border-color: var(--panneau-color-warning-border);
20
+ .panneau-badge-subtle {
21
+ color: var(--panneau-tone-text);
22
+ background-color: var(--panneau-tone-subtle);
23
+ border-color: var(--panneau-tone-border);
36
24
  }
37
25
 
38
- .panneau-info-5vE5vu {
39
- color: var(--panneau-color-info);
40
- background-color: var(--panneau-color-info-subtle);
41
- border-color: var(--panneau-color-info-border);
26
+ .panneau-badge-solid {
27
+ color: var(--panneau-tone-solid-text);
28
+ background-color: var(--panneau-tone-solid);
29
+ border-color: var(--panneau-tone-solid);
42
30
  }
43
31
 
44
- .panneau-accent-cGs8f8 {
45
- color: var(--panneau-color-accent-text);
46
- background-color: var(--panneau-color-accent);
47
- border-color: var(--panneau-color-accent);
32
+ .panneau-badge-outline {
33
+ color: var(--panneau-tone-text);
34
+ background-color: transparent;
35
+ border-color: var(--panneau-tone-outline);
48
36
  }
49
37
 
50
- .panneau-visuallyHidden-YMPDBq {
38
+ .panneau-badge-visually-hidden {
51
39
  position: absolute;
52
40
  width: 1px;
53
41
  height: 1px;
@@ -1,7 +1,22 @@
1
1
  import type { ReactNode } from 'react';
2
- export type BadgeTone = 'neutral' | 'accent' | 'success' | 'danger' | 'warning' | 'info';
2
+ import type { Tone } from '../theme/tones';
3
+ /** @deprecated Use `Tone`. */
4
+ export type BadgeTone = Tone;
5
+ /** How a badge uses its tone. */
6
+ export type BadgeAppearance = 'subtle' | 'solid' | 'outline';
7
+ /**
8
+ * Named variants of `Badge`, registered by a theme (`components.badge.variants`). Declare them
9
+ * here so that `variant="tag"` type-checks.
10
+ */
11
+ export interface BadgeVariants {
12
+ }
3
13
  export interface BadgeProps {
4
- tone?: BadgeTone;
14
+ /** Defaults to `neutral`. */
15
+ tone?: Tone;
16
+ /** Defaults to `subtle`. */
17
+ appearance?: BadgeAppearance;
18
+ /** A named variant of the theme. */
19
+ variant?: keyof BadgeVariants & string;
5
20
  children?: ReactNode;
6
21
  /**
7
22
  * Accessible text, when the visible content isn't enough on its own (a count of errors: "2
@@ -11,5 +26,5 @@ export interface BadgeProps {
11
26
  className?: string;
12
27
  }
13
28
  /** A short status or a count. */
14
- export declare function Badge({ tone, children, label, className }: BadgeProps): import("react").JSX.Element;
29
+ export declare function Badge({ tone, appearance, variant, children, label, className, }: BadgeProps): import("react").JSX.Element;
15
30
  //# sourceMappingURL=Badge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,UAAU;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iCAAiC;AACjC,wBAAgB,KAAK,CAAC,EAAE,IAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,+BAajF"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAI3C,8BAA8B;AAC9B,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC;AAE7B,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7D;;;GAGG;AAEH,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,UAAU;IACvB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,4BAA4B;IAC5B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iCAAiC;AACjC,wBAAgB,KAAK,CAAC,EAClB,IAAgB,EAChB,UAAqB,EACrB,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,GACZ,EAAE,UAAU,+BAsBZ"}
@@ -1,11 +1,12 @@
1
1
  import { cx } from "../utils/cx.js";
2
+ import { toneClass } from "../theme/toneClass.js";
2
3
  import Badge_module_default from "./Badge.module.js";
3
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
5
  //#region src/badge/Badge.tsx
5
6
  /** A short status or a count. */
6
- function Badge({ tone = "neutral", children, label, className }) {
7
+ function Badge({ tone = "neutral", appearance = "subtle", variant, children, label, className }) {
7
8
  return /* @__PURE__ */ jsx("span", {
8
- className: cx(Badge_module_default.badge, Badge_module_default[tone], className),
9
+ className: cx("panneau-badge", Badge_module_default.badge, toneClass(tone), Badge_module_default[appearance], variant !== void 0 && `panneau-badge-variant-${variant}`, className),
9
10
  children: label !== void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
10
11
  "aria-hidden": "true",
11
12
  children
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","names":["styles","_Fragment"],"sources":["../../src/badge/Badge.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { cx } from '../utils/cx';\nimport styles from './Badge.module.css';\n\nexport type BadgeTone = 'neutral' | 'accent' | 'success' | 'danger' | 'warning' | 'info';\n\nexport interface BadgeProps {\n tone?: BadgeTone;\n children?: ReactNode;\n /**\n * Accessible text, when the visible content isn't enough on its own (a count of errors: \"2\n * errors\"). The visible content is then hidden from assistive technologies.\n */\n label?: string;\n className?: string;\n}\n\n/** A short status or a count. */\nexport function Badge({ tone = 'neutral', children, label, className }: BadgeProps) {\n return (\n <span className={cx(styles.badge, styles[tone], className)}>\n {label !== undefined ? (\n <>\n <span aria-hidden=\"true\">{children}</span>\n <span className={styles.visuallyHidden}>{label}</span>\n </>\n ) : (\n children\n )}\n </span>\n );\n}\n"],"mappings":";;;;;AAmBA,SAAgB,MAAM,EAAE,OAAO,WAAW,UAAU,OAAO,aAAyB;CAChF,OACI,oBAAC,QAAD;EAAM,WAAW,GAAGA,qBAAO,OAAOA,qBAAO,OAAO,SAAS;EACpD,UAAA,UAAU,KAAA,IACP,qBAAAC,UAAA,EAAA,UAAA,CACI,oBAAC,QAAD;GAAM,eAAY;GAAQ;EAAe,CAAA,GACzC,oBAAC,QAAD;GAAM,WAAWD,qBAAO;GAAiB,UAAA;EAAY,CAAA,CACzD,EAAA,CAAA,IAEA;CAEF,CAAA;AAEd"}
1
+ {"version":3,"file":"Badge.js","names":["styles","_Fragment"],"sources":["../../src/badge/Badge.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { toneClass } from '../theme/toneClass';\nimport type { Tone } from '../theme/tones';\nimport { cx } from '../utils/cx';\nimport styles from './Badge.module.css';\n\n/** @deprecated Use `Tone`. */\nexport type BadgeTone = Tone;\n\n/** How a badge uses its tone. */\nexport type BadgeAppearance = 'subtle' | 'solid' | 'outline';\n\n/**\n * Named variants of `Badge`, registered by a theme (`components.badge.variants`). Declare them\n * here so that `variant=\"tag\"` type-checks.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- extended by projects\nexport interface BadgeVariants {}\n\nexport interface BadgeProps {\n /** Defaults to `neutral`. */\n tone?: Tone;\n /** Defaults to `subtle`. */\n appearance?: BadgeAppearance;\n /** A named variant of the theme. */\n variant?: keyof BadgeVariants & string;\n children?: ReactNode;\n /**\n * Accessible text, when the visible content isn't enough on its own (a count of errors: \"2\n * errors\"). The visible content is then hidden from assistive technologies.\n */\n label?: string;\n className?: string;\n}\n\n/** A short status or a count. */\nexport function Badge({\n tone = 'neutral',\n appearance = 'subtle',\n variant,\n children,\n label,\n className,\n}: BadgeProps) {\n return (\n <span\n className={cx(\n 'panneau-badge',\n styles.badge,\n toneClass(tone),\n styles[appearance],\n variant !== undefined && `panneau-badge-variant-${variant}`,\n className,\n )}\n >\n {label !== undefined ? (\n <>\n <span aria-hidden=\"true\">{children}</span>\n <span className={styles.visuallyHidden}>{label}</span>\n </>\n ) : (\n children\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;AAqCA,SAAgB,MAAM,EAClB,OAAO,WACP,aAAa,UACb,SACA,UACA,OACA,aACW;CACX,OACI,oBAAC,QAAD;EACI,WAAW,GACP,iBACAA,qBAAO,OACP,UAAU,IAAI,GACdA,qBAAO,aACP,YAAY,KAAA,KAAa,yBAAyB,WAClD,SACJ;EAEC,UAAA,UAAU,KAAA,IACP,qBAAAC,UAAA,EAAA,UAAA,CACI,oBAAC,QAAD;GAAM,eAAY;GAAQ;EAAe,CAAA,GACzC,oBAAC,QAAD;GAAM,WAAWD,qBAAO;GAAiB,UAAA;EAAY,CAAA,CACzD,EAAA,CAAA,IAEA;CAEF,CAAA;AAEd"}
@@ -1,22 +1,18 @@
1
1
  import "./Badge.css";
2
2
  //#region src/badge/Badge.module.css
3
- var badge = "panneau-badge-ikDSa7";
4
- var success = "panneau-success-2NDSCG";
5
- var danger = "panneau-danger-NLo-wP";
6
- var warning = "panneau-warning-3mFhiV";
7
- var info = "panneau-info-5vE5vu";
8
- var accent = "panneau-accent-cGs8f8";
9
- var visuallyHidden = "panneau-visuallyHidden-YMPDBq";
3
+ var badge = "panneau-badge";
4
+ var subtle = "panneau-badge-subtle";
5
+ var solid = "panneau-badge-solid";
6
+ var outline = "panneau-badge-outline";
7
+ var visuallyHidden = "panneau-badge-visually-hidden";
10
8
  var Badge_module_default = {
11
9
  badge,
12
- success,
13
- danger,
14
- warning,
15
- info,
16
- accent,
10
+ subtle,
11
+ solid,
12
+ outline,
17
13
  visuallyHidden
18
14
  };
19
15
  //#endregion
20
- export { accent, badge, danger, Badge_module_default as default, info, success, visuallyHidden, warning };
16
+ export { badge, Badge_module_default as default, outline, solid, subtle, visuallyHidden };
21
17
 
22
18
  //# sourceMappingURL=Badge.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.module.js","names":[],"sources":["../../src/badge/Badge.module.css"],"sourcesContent":[".badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--panneau-space-1);\n min-width: 1.25rem;\n height: 1.25rem;\n padding: 0 var(--panneau-space-2);\n font-size: var(--panneau-font-size-xs);\n font-weight: var(--panneau-font-weight-medium);\n font-variant-numeric: tabular-nums;\n line-height: 1;\n white-space: nowrap;\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-surface-sunken);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-full);\n}\n\n.success {\n color: var(--panneau-color-success);\n background-color: var(--panneau-color-success-subtle);\n border-color: var(--panneau-color-success-border);\n}\n\n.danger {\n color: var(--panneau-color-danger);\n background-color: var(--panneau-color-danger-subtle);\n border-color: var(--panneau-color-danger-border);\n}\n\n.warning {\n color: var(--panneau-color-warning);\n background-color: var(--panneau-color-warning-subtle);\n border-color: var(--panneau-color-warning-border);\n}\n\n.info {\n color: var(--panneau-color-info);\n background-color: var(--panneau-color-info-subtle);\n border-color: var(--panneau-color-info-border);\n}\n\n.accent {\n color: var(--panneau-color-accent-text);\n background-color: var(--panneau-color-accent);\n border-color: var(--panneau-color-accent);\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Badge.module.js","names":[],"sources":["../../src/badge/Badge.module.css"],"sourcesContent":[".badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--panneau-badge-gap, var(--panneau-space-1));\n min-width: var(--panneau-badge-height, 1.25rem);\n height: var(--panneau-badge-height, 1.25rem);\n padding: 0 var(--panneau-badge-padding-x, var(--panneau-space-2));\n font-size: var(--panneau-badge-font-size, var(--panneau-font-size-xs));\n font-weight: var(--panneau-badge-font-weight, var(--panneau-font-weight-medium));\n font-variant-numeric: var(--panneau-font-numeric);\n line-height: 1;\n white-space: nowrap;\n border: var(--panneau-badge-border-width, var(--panneau-border-width)) solid transparent;\n border-radius: var(--panneau-badge-radius, var(--panneau-radius-full));\n}\n\n/* Appearances: they read the --panneau-tone-* variables of the tone class (decision 0024). */\n\n.subtle {\n color: var(--panneau-tone-text);\n background-color: var(--panneau-tone-subtle);\n border-color: var(--panneau-tone-border);\n}\n\n.solid {\n color: var(--panneau-tone-solid-text);\n background-color: var(--panneau-tone-solid);\n border-color: var(--panneau-tone-solid);\n}\n\n.outline {\n color: var(--panneau-tone-text);\n background-color: transparent;\n border-color: var(--panneau-tone-outline);\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of Badge. */
2
+ export declare const badgeTokens: import("..").ComponentTokens<"badge", "panneau-badge-height" | "panneau-badge-radius" | "panneau-badge-gap" | "panneau-badge-padding-x" | "panneau-badge-border-width" | "panneau-badge-font-size" | "panneau-badge-font-weight">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/badge/tokens.ts"],"names":[],"mappings":"AAEA,uBAAuB;AACvB,eAAO,MAAM,WAAW,mOAetB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/badge/tokens.ts
3
+ /** Tokens of Badge. */
4
+ var badgeTokens = defineComponentTokens("badge", {
5
+ /** Space between an icon and the text. */
6
+ gap: "var(--panneau-space-1)",
7
+ /** Height, and minimum width. */
8
+ height: "1.25rem",
9
+ /** Horizontal padding. */
10
+ "padding-x": "var(--panneau-space-2)",
11
+ /** Font size. */
12
+ "font-size": "var(--panneau-font-size-xs)",
13
+ /** Font weight. */
14
+ "font-weight": "var(--panneau-font-weight-medium)",
15
+ /** Width of the border. */
16
+ "border-width": "var(--panneau-border-width)",
17
+ /** Corner radius: a pill by default. */
18
+ radius: "var(--panneau-radius-full)"
19
+ });
20
+ //#endregion
21
+ export { badgeTokens };
22
+
23
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../../src/badge/tokens.ts"],"sourcesContent":["import { defineComponentTokens } from '../theme/componentTokens';\n\n/** Tokens of Badge. */\nexport const badgeTokens = defineComponentTokens('badge', {\n /** Space between an icon and the text. */\n gap: 'var(--panneau-space-1)',\n /** Height, and minimum width. */\n height: '1.25rem',\n /** Horizontal padding. */\n 'padding-x': 'var(--panneau-space-2)',\n /** Font size. */\n 'font-size': 'var(--panneau-font-size-xs)',\n /** Font weight. */\n 'font-weight': 'var(--panneau-font-weight-medium)',\n /** Width of the border. */\n 'border-width': 'var(--panneau-border-width)',\n /** Corner radius: a pill by default. */\n radius: 'var(--panneau-radius-full)',\n});\n"],"mappings":";;;AAGA,IAAa,cAAc,sBAAsB,SAAS;;CAEtD,KAAK;;CAEL,QAAQ;;CAER,aAAa;;CAEb,aAAa;;CAEb,eAAe;;CAEf,gBAAgB;;CAEhB,QAAQ;AACZ,CAAC"}
@@ -1,21 +1,25 @@
1
- .panneau-button-eiKKZV {
1
+ .panneau-button {
2
2
  position: relative;
3
3
  display: inline-flex;
4
4
  flex: 0 0 auto;
5
5
  align-items: center;
6
6
  justify-content: center;
7
- gap: var(--panneau-space-2);
7
+ gap: var(--panneau-button-gap, var(--panneau-space-2));
8
8
  min-height: var(--panneau-control-height);
9
- padding: 0 var(--panneau-space-4);
10
- font-size: var(--panneau-font-size-md);
11
- font-weight: var(--panneau-font-weight-medium);
9
+ padding: 0
10
+ var(
11
+ --panneau-button-padding-x,
12
+ calc(var(--panneau-control-padding-x) + var(--panneau-space-1))
13
+ );
14
+ font-size: var(--panneau-button-font-size, var(--panneau-font-size-md));
15
+ font-weight: var(--panneau-button-font-weight, var(--panneau-font-weight-medium));
12
16
  line-height: var(--panneau-line-height-tight);
13
17
  text-decoration: none;
14
18
  white-space: nowrap;
15
19
  cursor: pointer;
16
20
  user-select: none;
17
- border: var(--panneau-border-width) solid transparent;
18
- border-radius: var(--panneau-radius-md);
21
+ border: var(--panneau-button-border-width, var(--panneau-border-width)) solid transparent;
22
+ border-radius: var(--panneau-button-radius, var(--panneau-radius-md));
19
23
  transition:
20
24
  background-color var(--panneau-duration),
21
25
  border-color var(--panneau-duration),
@@ -23,86 +27,98 @@
23
27
  -webkit-tap-highlight-color: transparent;
24
28
  }
25
29
 
26
- .panneau-button-eiKKZV[data-focus-visible] {
30
+ .panneau-button[data-focus-visible] {
27
31
  outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
28
32
  outline-offset: 2px;
29
33
  }
30
34
 
31
- .panneau-button-eiKKZV[data-disabled] {
35
+ .panneau-button[data-disabled] {
32
36
  cursor: not-allowed;
33
37
  opacity: 0.55;
34
38
  }
35
39
 
36
- .panneau-sm-Y4qjxi {
40
+ .panneau-button-sm {
37
41
  min-height: var(--panneau-control-height-sm);
38
- padding: 0 var(--panneau-space-3);
39
- font-size: var(--panneau-font-size-sm);
42
+ padding: 0 var(--panneau-button-padding-x-sm, var(--panneau-control-padding-x));
43
+ font-size: var(--panneau-button-font-size-sm, var(--panneau-font-size-sm));
40
44
  }
41
45
 
42
- .panneau-fullWidth-TLKFBq {
46
+ .panneau-button-full-width {
43
47
  display: flex;
44
48
  width: 100%;
45
49
  }
46
50
 
47
- .panneau-primary-EU45ZN {
48
- color: var(--panneau-color-accent-text);
49
- background-color: var(--panneau-color-accent);
51
+ /*
52
+ * Appearances (decision 0024): each one reads the --panneau-tone-* variables of the tone class on
53
+ * the same element, so every tone, built-in or added by a theme, works with every appearance.
54
+ */
55
+
56
+ .panneau-button-solid {
57
+ color: var(--panneau-tone-solid-text);
58
+ background-color: var(--panneau-tone-solid);
50
59
  }
51
60
 
52
- .panneau-primary-EU45ZN[data-hovered],
53
- .panneau-primary-EU45ZN[data-pressed] {
54
- background-color: var(--panneau-color-accent-hover);
61
+ .panneau-button-solid[data-hovered],
62
+ .panneau-button-solid[data-pressed] {
63
+ background-color: var(--panneau-tone-solid-hover);
55
64
  }
56
65
 
57
- .panneau-secondary-5BZ2i9 {
58
- color: var(--panneau-color-text);
66
+ .panneau-button-outline {
67
+ color: var(--panneau-tone-text);
59
68
  background-color: var(--panneau-color-surface);
60
- border-color: var(--panneau-color-border-control);
69
+ border-color: var(--panneau-tone-outline);
61
70
  }
62
71
 
63
- .panneau-secondary-5BZ2i9[data-hovered] {
64
- background-color: var(--panneau-color-hover);
72
+ .panneau-button-outline[data-hovered] {
73
+ background-color: color-mix(in srgb, var(--panneau-tone-text) 6%, var(--panneau-color-surface));
65
74
  }
66
75
 
67
- .panneau-secondary-5BZ2i9[data-pressed] {
68
- background-color: var(--panneau-color-pressed);
76
+ .panneau-button-outline[data-pressed] {
77
+ background-color: color-mix(
78
+ in srgb,
79
+ var(--panneau-tone-text) 10%,
80
+ var(--panneau-color-surface)
81
+ );
69
82
  }
70
83
 
71
- .panneau-ghost-OX4KsD {
72
- color: var(--panneau-color-text);
73
- background-color: transparent;
84
+ .panneau-button-subtle {
85
+ color: var(--panneau-tone-text);
86
+ background-color: var(--panneau-tone-subtle);
74
87
  }
75
88
 
76
- .panneau-ghost-OX4KsD[data-hovered] {
77
- background-color: var(--panneau-color-hover);
89
+ .panneau-button-subtle[data-hovered] {
90
+ background-color: color-mix(in srgb, var(--panneau-tone-text) 8%, var(--panneau-tone-subtle));
78
91
  }
79
92
 
80
- .panneau-ghost-OX4KsD[data-pressed] {
81
- background-color: var(--panneau-color-pressed);
93
+ .panneau-button-subtle[data-pressed] {
94
+ background-color: color-mix(in srgb, var(--panneau-tone-text) 14%, var(--panneau-tone-subtle));
95
+ }
96
+
97
+ .panneau-button-ghost {
98
+ color: var(--panneau-tone-text);
99
+ background-color: transparent;
82
100
  }
83
101
 
84
- .panneau-danger-57n-Hg {
85
- color: var(--panneau-color-danger-solid-text);
86
- background-color: var(--panneau-color-danger-solid);
102
+ .panneau-button-ghost[data-hovered] {
103
+ background-color: color-mix(in srgb, var(--panneau-tone-text) 6%, transparent);
87
104
  }
88
105
 
89
- .panneau-danger-57n-Hg[data-hovered],
90
- .panneau-danger-57n-Hg[data-pressed] {
91
- background-color: var(--panneau-color-danger-solid-hover);
106
+ .panneau-button-ghost[data-pressed] {
107
+ background-color: color-mix(in srgb, var(--panneau-tone-text) 10%, transparent);
92
108
  }
93
109
 
94
- .panneau-content-SVjwiQ {
110
+ .panneau-button-content {
95
111
  display: inline-flex;
96
112
  align-items: center;
97
113
  gap: inherit;
98
114
  min-width: 0;
99
115
  }
100
116
 
101
- .panneau-pending-j5UroX .panneau-content-SVjwiQ {
117
+ .panneau-button-pending .panneau-button-content {
102
118
  visibility: hidden;
103
119
  }
104
120
 
105
- .panneau-spinner-QToZmM {
121
+ .panneau-button-spinner {
106
122
  position: absolute;
107
123
  inset: 0;
108
124
  display: flex;
@@ -1,11 +1,38 @@
1
1
  import type { CSSProperties, ReactNode } from 'react';
2
2
  import { type ButtonProps as AriaButtonProps } from 'react-aria-components';
3
3
  import { type IconComponent } from '../icon/Icon';
4
+ import type { Tone } from '../theme/tones';
4
5
  import styles from './Button.module.css';
6
+ /** How a button uses its tone, like Bootstrap's `.btn-*` and `.btn-outline-*`. */
7
+ export type ButtonAppearance = 'solid' | 'outline' | 'subtle' | 'ghost';
8
+ /**
9
+ * Named variants of `Button`, registered by a theme (`components.button.variants`). Declare them
10
+ * here so that `variant="pill"` type-checks:
11
+ *
12
+ * ```ts
13
+ * declare module '@panneau/ui' {
14
+ * interface ButtonVariants {
15
+ * pill: true;
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ export interface ButtonVariants {
21
+ }
22
+ /**
23
+ * The variants of the first alpha, kept as aliases of a tone and an appearance: `primary` is
24
+ * accent solid, `secondary` neutral outline, `ghost` neutral ghost, `danger` danger solid.
25
+ *
26
+ * @deprecated Use `tone` and `appearance`.
27
+ */
5
28
  export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
6
29
  export interface ButtonProps extends Omit<AriaButtonProps, 'className' | 'style' | 'children'> {
7
- /** Defaults to `secondary`. */
8
- variant?: ButtonVariant;
30
+ /** Defaults to `neutral`. */
31
+ tone?: Tone;
32
+ /** Defaults to `outline` for the neutral tone, and `solid` for the others. */
33
+ appearance?: ButtonAppearance;
34
+ /** A named variant of the theme, or one of the deprecated aliases (`primary`…). */
35
+ variant?: ButtonVariant | (keyof ButtonVariants & string);
9
36
  size?: 'sm' | 'md';
10
37
  /** Icon before the label. */
11
38
  icon?: IconComponent;
@@ -21,6 +48,6 @@ export interface ButtonProps extends Omit<AriaButtonProps, 'className' | 'style'
21
48
  * A button. With `isPending`, it shows a spinner, keeps its size and focus, and ignores presses
22
49
  * while assistive technologies announce the pending state.
23
50
  */
24
- export declare function Button({ variant, size, icon, iconEnd, fullWidth, isPending, children, className, ...props }: ButtonProps): import("react").JSX.Element;
51
+ export declare function Button({ tone, appearance, variant, size, icon, iconEnd, fullWidth, isPending, children, className, ...props }: ButtonProps): import("react").JSX.Element;
25
52
  export { styles as buttonStyles };
26
53
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAwB,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElG,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1F,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EACnB,OAAqB,EACrB,IAAW,EACX,IAAI,EACJ,OAAO,EACP,SAAiB,EACjB,SAAiB,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACX,EAAE,WAAW,+BA8Bb;AAED,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAwB,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElG,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;CAAG;AAElC;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAazE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1F,6BAA6B;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,8EAA8E;IAC9E,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,mFAAmF;IACnF,OAAO,CAAC,EAAE,aAAa,GAAG,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,IAAW,EACX,IAAI,EACJ,OAAO,EACP,SAAiB,EACjB,SAAiB,EACjB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACX,EAAE,WAAW,+BAqCb;AAED,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC"}
@@ -1,19 +1,44 @@
1
1
  import { cx } from "../utils/cx.js";
2
2
  import { Icon } from "../icon/Icon.js";
3
3
  import { Spinner } from "../spinner/Spinner.js";
4
+ import { toneClass } from "../theme/toneClass.js";
4
5
  import Button_module_default from "./Button.module.js";
5
6
  import { Button } from "react-aria-components";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  //#region src/button/Button.tsx
9
+ var ALIASES = {
10
+ primary: {
11
+ tone: "accent",
12
+ appearance: "solid"
13
+ },
14
+ secondary: {
15
+ tone: "neutral",
16
+ appearance: "outline"
17
+ },
18
+ ghost: {
19
+ tone: "neutral",
20
+ appearance: "ghost"
21
+ },
22
+ danger: {
23
+ tone: "danger",
24
+ appearance: "solid"
25
+ }
26
+ };
27
+ function isAlias(variant) {
28
+ return Object.hasOwn(ALIASES, variant);
29
+ }
8
30
  /**
9
31
  * A button. With `isPending`, it shows a spinner, keeps its size and focus, and ignores presses
10
32
  * while assistive technologies announce the pending state.
11
33
  */
12
- function Button$1({ variant = "secondary", size = "md", icon, iconEnd, fullWidth = false, isPending = false, children, className, ...props }) {
34
+ function Button$1({ tone, appearance, variant, size = "md", icon, iconEnd, fullWidth = false, isPending = false, children, className, ...props }) {
35
+ const alias = variant !== void 0 && isAlias(variant) ? ALIASES[variant] : void 0;
36
+ const resolvedTone = tone ?? alias?.tone ?? "neutral";
37
+ const resolvedAppearance = appearance ?? alias?.appearance ?? (resolvedTone === "neutral" ? "outline" : "solid");
13
38
  return /* @__PURE__ */ jsxs(Button, {
14
39
  ...props,
15
40
  isPending,
16
- className: cx(Button_module_default.button, Button_module_default[variant], size === "sm" && Button_module_default.sm, fullWidth && Button_module_default.fullWidth, isPending && Button_module_default.pending, className),
41
+ className: cx("panneau-button", Button_module_default.button, toneClass(resolvedTone), Button_module_default[resolvedAppearance], variant !== void 0 && alias === void 0 && `panneau-button-variant-${variant}`, size === "sm" && Button_module_default.sm, fullWidth && Button_module_default.fullWidth, isPending && Button_module_default.pending, className),
17
42
  children: [/* @__PURE__ */ jsxs("span", {
18
43
  className: Button_module_default.content,
19
44
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","names":["Button","AriaButton","styles"],"sources":["../../src/button/Button.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react';\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from 'react-aria-components';\n\nimport { Icon, type IconComponent } from '../icon/Icon';\nimport { Spinner } from '../spinner/Spinner';\nimport { cx } from '../utils/cx';\nimport styles from './Button.module.css';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';\n\nexport interface ButtonProps extends Omit<AriaButtonProps, 'className' | 'style' | 'children'> {\n /** Defaults to `secondary`. */\n variant?: ButtonVariant;\n size?: 'sm' | 'md';\n /** Icon before the label. */\n icon?: IconComponent;\n /** Icon after the label. */\n iconEnd?: IconComponent;\n /** Takes the full width of its container. */\n fullWidth?: boolean;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * A button. With `isPending`, it shows a spinner, keeps its size and focus, and ignores presses\n * while assistive technologies announce the pending state.\n */\nexport function Button({\n variant = 'secondary',\n size = 'md',\n icon,\n iconEnd,\n fullWidth = false,\n isPending = false,\n children,\n className,\n ...props\n}: ButtonProps) {\n return (\n <AriaButton\n {...props}\n isPending={isPending}\n className={cx(\n styles.button,\n styles[variant],\n size === 'sm' && styles.sm,\n fullWidth && styles.fullWidth,\n isPending && styles.pending,\n className,\n )}\n >\n <span className={styles.content}>\n {icon !== undefined ? (\n <Icon icon={icon} size={size === 'sm' ? 'sm' : 'md'} />\n ) : null}\n {children}\n {iconEnd !== undefined ? (\n <Icon icon={iconEnd} size={size === 'sm' ? 'sm' : 'md'} />\n ) : null}\n </span>\n {isPending ? (\n <span className={styles.spinner}>\n <Spinner size=\"sm\" />\n </span>\n ) : null}\n </AriaButton>\n );\n}\n\nexport { styles as buttonStyles };\n"],"mappings":";;;;;;;;;;;AA6BA,SAAgBA,SAAO,EACnB,UAAU,aACV,OAAO,MACP,MACA,SACA,YAAY,OACZ,YAAY,OACZ,UACA,WACA,GAAG,SACS;CACZ,OACI,qBAACC,QAAD;EACI,GAAI;EACO;EACX,WAAW,GACPC,sBAAO,QACPA,sBAAO,UACP,SAAS,QAAQA,sBAAO,IACxB,aAAaA,sBAAO,WACpB,aAAaA,sBAAO,SACpB,SACJ;EAVJ,UAAA,CAYI,qBAAC,QAAD;GAAM,WAAWA,sBAAO;GAAxB,UAAA;IACK,SAAS,KAAA,IACN,oBAAC,MAAD;KAAY;KAAM,MAAM,SAAS,OAAO,OAAO;IAAK,CAAA,IACpD;IACH;IACA,YAAY,KAAA,IACT,oBAAC,MAAD;KAAM,MAAM;KAAS,MAAM,SAAS,OAAO,OAAO;IAAK,CAAA,IACvD;GACF;EACL,CAAA,GAAA,YACG,oBAAC,QAAD;GAAM,WAAWA,sBAAO;GACpB,UAAA,oBAAC,SAAD,EAAS,MAAK,KAAI,CAAA;EAChB,CAAA,IACN,IACI;;AAEpB"}
1
+ {"version":3,"file":"Button.js","names":["Button","AriaButton","styles"],"sources":["../../src/button/Button.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react';\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from 'react-aria-components';\n\nimport { Icon, type IconComponent } from '../icon/Icon';\nimport { Spinner } from '../spinner/Spinner';\nimport { toneClass } from '../theme/toneClass';\nimport type { Tone } from '../theme/tones';\nimport { cx } from '../utils/cx';\nimport styles from './Button.module.css';\n\n/** How a button uses its tone, like Bootstrap's `.btn-*` and `.btn-outline-*`. */\nexport type ButtonAppearance = 'solid' | 'outline' | 'subtle' | 'ghost';\n\n/**\n * Named variants of `Button`, registered by a theme (`components.button.variants`). Declare them\n * here so that `variant=\"pill\"` type-checks:\n *\n * ```ts\n * declare module '@panneau/ui' {\n * interface ButtonVariants {\n * pill: true;\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- extended by projects\nexport interface ButtonVariants {}\n\n/**\n * The variants of the first alpha, kept as aliases of a tone and an appearance: `primary` is\n * accent solid, `secondary` neutral outline, `ghost` neutral ghost, `danger` danger solid.\n *\n * @deprecated Use `tone` and `appearance`.\n */\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';\n\nconst ALIASES: Record<ButtonVariant, { tone: Tone; appearance: ButtonAppearance }> = {\n primary: { tone: 'accent', appearance: 'solid' },\n secondary: { tone: 'neutral', appearance: 'outline' },\n ghost: { tone: 'neutral', appearance: 'ghost' },\n danger: { tone: 'danger', appearance: 'solid' },\n};\n\nfunction isAlias(variant: string): variant is ButtonVariant {\n return Object.hasOwn(ALIASES, variant);\n}\n\nexport interface ButtonProps extends Omit<AriaButtonProps, 'className' | 'style' | 'children'> {\n /** Defaults to `neutral`. */\n tone?: Tone;\n /** Defaults to `outline` for the neutral tone, and `solid` for the others. */\n appearance?: ButtonAppearance;\n /** A named variant of the theme, or one of the deprecated aliases (`primary`…). */\n variant?: ButtonVariant | (keyof ButtonVariants & string);\n size?: 'sm' | 'md';\n /** Icon before the label. */\n icon?: IconComponent;\n /** Icon after the label. */\n iconEnd?: IconComponent;\n /** Takes the full width of its container. */\n fullWidth?: boolean;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * A button. With `isPending`, it shows a spinner, keeps its size and focus, and ignores presses\n * while assistive technologies announce the pending state.\n */\nexport function Button({\n tone,\n appearance,\n variant,\n size = 'md',\n icon,\n iconEnd,\n fullWidth = false,\n isPending = false,\n children,\n className,\n ...props\n}: ButtonProps) {\n const alias = variant !== undefined && isAlias(variant) ? ALIASES[variant] : undefined;\n const resolvedTone = tone ?? alias?.tone ?? 'neutral';\n const resolvedAppearance =\n appearance ?? alias?.appearance ?? (resolvedTone === 'neutral' ? 'outline' : 'solid');\n return (\n <AriaButton\n {...props}\n isPending={isPending}\n className={cx(\n 'panneau-button',\n styles.button,\n toneClass(resolvedTone),\n styles[resolvedAppearance],\n variant !== undefined && alias === undefined && `panneau-button-variant-${variant}`,\n size === 'sm' && styles.sm,\n fullWidth && styles.fullWidth,\n isPending && styles.pending,\n className,\n )}\n >\n <span className={styles.content}>\n {icon !== undefined ? (\n <Icon icon={icon} size={size === 'sm' ? 'sm' : 'md'} />\n ) : null}\n {children}\n {iconEnd !== undefined ? (\n <Icon icon={iconEnd} size={size === 'sm' ? 'sm' : 'md'} />\n ) : null}\n </span>\n {isPending ? (\n <span className={styles.spinner}>\n <Spinner size=\"sm\" />\n </span>\n ) : null}\n </AriaButton>\n );\n}\n\nexport { styles as buttonStyles };\n"],"mappings":";;;;;;;;AAoCA,IAAM,UAA+E;CACjF,SAAS;EAAE,MAAM;EAAU,YAAY;CAAQ;CAC/C,WAAW;EAAE,MAAM;EAAW,YAAY;CAAU;CACpD,OAAO;EAAE,MAAM;EAAW,YAAY;CAAQ;CAC9C,QAAQ;EAAE,MAAM;EAAU,YAAY;CAAQ;AAClD;AAEA,SAAS,QAAQ,SAA2C;CACxD,OAAO,OAAO,OAAO,SAAS,OAAO;AACzC;;;;;AAyBA,SAAgBA,SAAO,EACnB,MACA,YACA,SACA,OAAO,MACP,MACA,SACA,YAAY,OACZ,YAAY,OACZ,UACA,WACA,GAAG,SACS;CACZ,MAAM,QAAQ,YAAY,KAAA,KAAa,QAAQ,OAAO,IAAI,QAAQ,WAAW,KAAA;CAC7E,MAAM,eAAe,QAAQ,OAAO,QAAQ;CAC5C,MAAM,qBACF,cAAc,OAAO,eAAe,iBAAiB,YAAY,YAAY;CACjF,OACI,qBAACC,QAAD;EACI,GAAI;EACO;EACX,WAAW,GACP,kBACAC,sBAAO,QACP,UAAU,YAAY,GACtBA,sBAAO,qBACP,YAAY,KAAA,KAAa,UAAU,KAAA,KAAa,0BAA0B,WAC1E,SAAS,QAAQA,sBAAO,IACxB,aAAaA,sBAAO,WACpB,aAAaA,sBAAO,SACpB,SACJ;EAbJ,UAAA,CAeI,qBAAC,QAAD;GAAM,WAAWA,sBAAO;GAAxB,UAAA;IACK,SAAS,KAAA,IACN,oBAAC,MAAD;KAAY;KAAM,MAAM,SAAS,OAAO,OAAO;IAAK,CAAA,IACpD;IACH;IACA,YAAY,KAAA,IACT,oBAAC,MAAD;KAAM,MAAM;KAAS,MAAM,SAAS,OAAO,OAAO;IAAK,CAAA,IACvD;GACF;EACL,CAAA,GAAA,YACG,oBAAC,QAAD;GAAM,WAAWA,sBAAO;GACpB,UAAA,oBAAC,SAAD,EAAS,MAAK,KAAI,CAAA;EAChB,CAAA,IACN,IACI;;AAEpB"}
@@ -1,28 +1,28 @@
1
1
  import "./Button.css";
2
2
  //#region src/button/Button.module.css
3
- var button = "panneau-button-eiKKZV";
4
- var sm = "panneau-sm-Y4qjxi";
5
- var fullWidth = "panneau-fullWidth-TLKFBq";
6
- var primary = "panneau-primary-EU45ZN";
7
- var secondary = "panneau-secondary-5BZ2i9";
8
- var ghost = "panneau-ghost-OX4KsD";
9
- var danger = "panneau-danger-57n-Hg";
10
- var content = "panneau-content-SVjwiQ";
11
- var pending = "panneau-pending-j5UroX";
12
- var spinner = "panneau-spinner-QToZmM";
3
+ var button = "panneau-button";
4
+ var sm = "panneau-button-sm";
5
+ var fullWidth = "panneau-button-full-width";
6
+ var solid = "panneau-button-solid";
7
+ var outline = "panneau-button-outline";
8
+ var subtle = "panneau-button-subtle";
9
+ var ghost = "panneau-button-ghost";
10
+ var content = "panneau-button-content";
11
+ var pending = "panneau-button-pending";
12
+ var spinner = "panneau-button-spinner";
13
13
  var Button_module_default = {
14
14
  button,
15
15
  sm,
16
16
  fullWidth,
17
- primary,
18
- secondary,
17
+ solid,
18
+ outline,
19
+ subtle,
19
20
  ghost,
20
- danger,
21
21
  content,
22
22
  pending,
23
23
  spinner
24
24
  };
25
25
  //#endregion
26
- export { button, content, danger, Button_module_default as default, fullWidth, ghost, pending, primary, secondary, sm, spinner };
26
+ export { button, content, Button_module_default as default, fullWidth, ghost, outline, pending, sm, solid, spinner, subtle };
27
27
 
28
28
  //# sourceMappingURL=Button.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.module.js","names":[],"sources":["../../src/button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height);\n padding: 0 var(--panneau-space-4);\n font-size: var(--panneau-font-size-md);\n font-weight: var(--panneau-font-weight-medium);\n line-height: var(--panneau-line-height-tight);\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n user-select: none;\n border: var(--panneau-border-width) solid transparent;\n border-radius: var(--panneau-radius-md);\n transition:\n background-color var(--panneau-duration),\n border-color var(--panneau-duration),\n color var(--panneau-duration);\n -webkit-tap-highlight-color: transparent;\n}\n\n.button[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n.button[data-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.sm {\n min-height: var(--panneau-control-height-sm);\n padding: 0 var(--panneau-space-3);\n font-size: var(--panneau-font-size-sm);\n}\n\n.fullWidth {\n display: flex;\n width: 100%;\n}\n\n.primary {\n color: var(--panneau-color-accent-text);\n background-color: var(--panneau-color-accent);\n}\n\n.primary[data-hovered],\n.primary[data-pressed] {\n background-color: var(--panneau-color-accent-hover);\n}\n\n.secondary {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-surface);\n border-color: var(--panneau-color-border-control);\n}\n\n.secondary[data-hovered] {\n background-color: var(--panneau-color-hover);\n}\n\n.secondary[data-pressed] {\n background-color: var(--panneau-color-pressed);\n}\n\n.ghost {\n color: var(--panneau-color-text);\n background-color: transparent;\n}\n\n.ghost[data-hovered] {\n background-color: var(--panneau-color-hover);\n}\n\n.ghost[data-pressed] {\n background-color: var(--panneau-color-pressed);\n}\n\n.danger {\n color: var(--panneau-color-danger-solid-text);\n background-color: var(--panneau-color-danger-solid);\n}\n\n.danger[data-hovered],\n.danger[data-pressed] {\n background-color: var(--panneau-color-danger-solid-hover);\n}\n\n.content {\n display: inline-flex;\n align-items: center;\n gap: inherit;\n min-width: 0;\n}\n\n.pending .content {\n visibility: hidden;\n}\n\n.spinner {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Button.module.js","names":[],"sources":["../../src/button/Button.module.css"],"sourcesContent":[".button {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n gap: var(--panneau-button-gap, var(--panneau-space-2));\n min-height: var(--panneau-control-height);\n padding: 0\n var(\n --panneau-button-padding-x,\n calc(var(--panneau-control-padding-x) + var(--panneau-space-1))\n );\n font-size: var(--panneau-button-font-size, var(--panneau-font-size-md));\n font-weight: var(--panneau-button-font-weight, var(--panneau-font-weight-medium));\n line-height: var(--panneau-line-height-tight);\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n user-select: none;\n border: var(--panneau-button-border-width, var(--panneau-border-width)) solid transparent;\n border-radius: var(--panneau-button-radius, var(--panneau-radius-md));\n transition:\n background-color var(--panneau-duration),\n border-color var(--panneau-duration),\n color var(--panneau-duration);\n -webkit-tap-highlight-color: transparent;\n}\n\n.button[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n.button[data-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.sm {\n min-height: var(--panneau-control-height-sm);\n padding: 0 var(--panneau-button-padding-x-sm, var(--panneau-control-padding-x));\n font-size: var(--panneau-button-font-size-sm, var(--panneau-font-size-sm));\n}\n\n.fullWidth {\n display: flex;\n width: 100%;\n}\n\n/*\n * Appearances (decision 0024): each one reads the --panneau-tone-* variables of the tone class on\n * the same element, so every tone, built-in or added by a theme, works with every appearance.\n */\n\n.solid {\n color: var(--panneau-tone-solid-text);\n background-color: var(--panneau-tone-solid);\n}\n\n.solid[data-hovered],\n.solid[data-pressed] {\n background-color: var(--panneau-tone-solid-hover);\n}\n\n.outline {\n color: var(--panneau-tone-text);\n background-color: var(--panneau-color-surface);\n border-color: var(--panneau-tone-outline);\n}\n\n.outline[data-hovered] {\n background-color: color-mix(in srgb, var(--panneau-tone-text) 6%, var(--panneau-color-surface));\n}\n\n.outline[data-pressed] {\n background-color: color-mix(\n in srgb,\n var(--panneau-tone-text) 10%,\n var(--panneau-color-surface)\n );\n}\n\n.subtle {\n color: var(--panneau-tone-text);\n background-color: var(--panneau-tone-subtle);\n}\n\n.subtle[data-hovered] {\n background-color: color-mix(in srgb, var(--panneau-tone-text) 8%, var(--panneau-tone-subtle));\n}\n\n.subtle[data-pressed] {\n background-color: color-mix(in srgb, var(--panneau-tone-text) 14%, var(--panneau-tone-subtle));\n}\n\n.ghost {\n color: var(--panneau-tone-text);\n background-color: transparent;\n}\n\n.ghost[data-hovered] {\n background-color: color-mix(in srgb, var(--panneau-tone-text) 6%, transparent);\n}\n\n.ghost[data-pressed] {\n background-color: color-mix(in srgb, var(--panneau-tone-text) 10%, transparent);\n}\n\n.content {\n display: inline-flex;\n align-items: center;\n gap: inherit;\n min-width: 0;\n}\n\n.pending .content {\n visibility: hidden;\n}\n\n.spinner {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of Button. */
2
+ export declare const buttonTokens: import("..").ComponentTokens<"button", "panneau-button-radius" | "panneau-button-gap" | "panneau-button-padding-x" | "panneau-button-border-width" | "panneau-button-font-size" | "panneau-button-font-weight" | "panneau-button-padding-x-sm" | "panneau-button-font-size-sm">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/button/tokens.ts"],"names":[],"mappings":"AAEA,wBAAwB;AACxB,eAAO,MAAM,YAAY,iRAiBvB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/button/tokens.ts
3
+ /** Tokens of Button. */
4
+ var buttonTokens = defineComponentTokens("button", {
5
+ /** Space between the icon and the label. */
6
+ gap: "var(--panneau-space-2)",
7
+ /** Horizontal padding. */
8
+ "padding-x": "calc(var(--panneau-control-padding-x) + var(--panneau-space-1))",
9
+ /** Font size of the label. */
10
+ "font-size": "var(--panneau-font-size-md)",
11
+ /** Font weight of the label. */
12
+ "font-weight": "var(--panneau-font-weight-medium)",
13
+ /** Width of the border. */
14
+ "border-width": "var(--panneau-border-width)",
15
+ /** Corner radius. */
16
+ radius: "var(--panneau-radius-md)",
17
+ /** Horizontal padding of the small size. */
18
+ "padding-x-sm": "var(--panneau-control-padding-x)",
19
+ /** Font size of the small size. */
20
+ "font-size-sm": "var(--panneau-font-size-sm)"
21
+ });
22
+ //#endregion
23
+ export { buttonTokens };
24
+
25
+ //# sourceMappingURL=tokens.js.map