@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 +1 @@
1
- {"version":3,"file":"PanneauRoot.module.js","names":[],"sources":["../../src/root/PanneauRoot.module.css"],"sourcesContent":["/*\n * Design tokens of the default theme, and the base stylesheet of Panneau. Everything is scoped to\n * the root element: nothing here applies outside of it (decision 0005).\n *\n * Defaults are wrapped in :where() so that they have no specificity: a theme, or a project's own\n * class on the root, overrides any token without fighting the cascade.\n */\n\n:where(.root) {\n /* Surfaces */\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n\n /* Text */\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n\n /* Borders: separators, and the outline of controls (3:1 against the surface) */\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n\n /* Accent: primary buttons, checked controls, selection */\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n\n /* Tones: text on surfaces, subtle backgrounds, borders */\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n\n /* Typography */\n --panneau-font-family:\n system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --panneau-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n --panneau-font-size-xs: 0.75rem;\n --panneau-font-size-sm: 0.8125rem;\n --panneau-font-size-md: 0.875rem;\n --panneau-font-size-lg: 1rem;\n --panneau-font-size-xl: 1.25rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-line-height: 1.5;\n --panneau-line-height-tight: 1.25;\n --panneau-font-weight-normal: 400;\n --panneau-font-weight-medium: 500;\n --panneau-font-weight-bold: 600;\n\n /* Spacing, on a 4px scale */\n --panneau-space-1: 0.25rem;\n --panneau-space-2: 0.5rem;\n --panneau-space-3: 0.75rem;\n --panneau-space-4: 1rem;\n --panneau-space-5: 1.25rem;\n --panneau-space-6: 1.5rem;\n --panneau-space-8: 2rem;\n --panneau-space-10: 2.5rem;\n\n /* Shapes */\n --panneau-radius-sm: 0.25rem;\n --panneau-radius-md: 0.375rem;\n --panneau-radius-lg: 0.5rem;\n --panneau-radius-full: 9999px;\n --panneau-border-width: 1px;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n /* Controls */\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-focus-width: 2px;\n\n /* Motion and layers */\n --panneau-duration: 150ms;\n --panneau-z-overlay: 1000;\n --panneau-z-toast: 1100;\n\n color-scheme: light;\n}\n\n:where(.root[data-color-scheme='dark']) {\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n}\n\n@media (prefers-color-scheme: dark) {\n :where(.root[data-color-scheme='auto']) {\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n }\n}\n\n/* Touch screens: larger targets, and 16px text in inputs so that iOS doesn't zoom on focus. */\n@media (pointer: coarse) {\n :where(.root) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.root) {\n --panneau-duration: 0ms;\n }\n}\n\n/* Base stylesheet, scoped to the root, without specificity: components and projects override it. */\n\n.root {\n /* The class is mostly a hook for the rules below, which use :where(). */\n display: block;\n}\n\n:where(.root) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-bg);\n -webkit-font-smoothing: antialiased;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\n\n:where(.root) :where(*, *::before, *::after) {\n box-sizing: border-box;\n}\n\n:where(.root) :where(h1, h2, h3, h4, h5, h6, p, ul, ol, dl, figure, fieldset, legend) {\n margin: 0;\n padding: 0;\n}\n\n:where(.root) :where(fieldset) {\n border: 0;\n min-width: 0;\n}\n\n:where(.root) :where(button, input, select, textarea) {\n font: inherit;\n color: inherit;\n}\n\n:where(.root) :where(a) {\n color: var(--panneau-color-link);\n}\n\n:where(.root) :where(img, svg, video) {\n max-width: 100%;\n}\n\n:where(.root) :where(:focus-visible) {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n/* Overlays (dialogs, popovers, menus, tooltips) render here, so that they get the tokens. */\n.portal {\n display: contents;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"PanneauRoot.module.js","names":[],"sources":["../../src/root/PanneauRoot.module.css"],"sourcesContent":["/*\n * Design tokens of the default theme, and the base stylesheet of Panneau. Everything is scoped to\n * the root element: nothing here applies outside of it (decision 0005).\n *\n * Defaults are wrapped in :where() so that they have no specificity: a theme, or a project's own\n * class on the root, overrides any token without fighting the cascade.\n */\n\n:where(.root) {\n /* Surfaces */\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n\n /* Text */\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n\n /* Borders: separators, and the outline of controls (3:1 against the surface) */\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n\n /* Accent: primary buttons, checked controls, selection */\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n\n /* Tones: text on surfaces, subtle backgrounds, borders */\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-success-solid: #15803d;\n --panneau-color-success-solid-hover: #166534;\n --panneau-color-success-solid-text: #ffffff;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-warning-solid: #a16207;\n --panneau-color-warning-solid-hover: #854d0e;\n --panneau-color-warning-solid-text: #ffffff;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n --panneau-color-info-solid: #1d4ed8;\n --panneau-color-info-solid-hover: #1e40af;\n --panneau-color-info-solid-text: #ffffff;\n\n /*\n * Data visualization: 8 categorical colors in a fixed order, a sequential ramp from low to high,\n * and a diverging pair around a neutral midpoint. Each categorical color reaches 3:1 against\n * the surface, and stays distinct under the common color vision deficiencies (chartColors.test).\n */\n --panneau-chart-categorical-1: #1c6cbb;\n --panneau-chart-categorical-2: #c47713;\n --panneau-chart-categorical-3: #d12f74;\n --panneau-chart-categorical-4: #515922;\n --panneau-chart-categorical-5: #2b9c52;\n --panneau-chart-categorical-6: #a977b3;\n --panneau-chart-categorical-7: #8f2786;\n --panneau-chart-categorical-8: #9176e8;\n --panneau-chart-sequential-1: #dbe8f6;\n --panneau-chart-sequential-2: #a3c6e9;\n --panneau-chart-sequential-3: #5f9bd6;\n --panneau-chart-sequential-4: #2c6cb0;\n --panneau-chart-sequential-5: #1a4475;\n --panneau-chart-diverging-negative: #b4501a;\n --panneau-chart-diverging-neutral: #e4e4e7;\n --panneau-chart-diverging-positive: #1c6cbb;\n\n /* Typography: font roles. Headings and display text follow the body unless a theme sets them. */\n --panneau-font-family-body:\n system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --panneau-font-family-heading: var(--panneau-font-family-body);\n --panneau-font-family-display: var(--panneau-font-family-heading);\n --panneau-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n /* Deprecated alias of the body family: set --panneau-font-family-body instead. */\n --panneau-font-family: var(--panneau-font-family-body);\n /* Numbers that line up: stats, dates, ids (font-variant-numeric). */\n --panneau-font-numeric: tabular-nums;\n --panneau-font-size-xs: 0.75rem;\n --panneau-font-size-sm: 0.8125rem;\n --panneau-font-size-md: 0.875rem;\n --panneau-font-size-lg: 1rem;\n --panneau-font-size-xl: 1.25rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-line-height: 1.5;\n --panneau-line-height-tight: 1.25;\n --panneau-font-weight-normal: 400;\n --panneau-font-weight-medium: 500;\n --panneau-font-weight-bold: 600;\n\n /* Spacing, on a 4px scale */\n --panneau-space-1: 0.25rem;\n --panneau-space-2: 0.5rem;\n --panneau-space-3: 0.75rem;\n --panneau-space-4: 1rem;\n --panneau-space-5: 1.25rem;\n --panneau-space-6: 1.5rem;\n --panneau-space-8: 2rem;\n --panneau-space-10: 2.5rem;\n\n /* Shapes */\n --panneau-radius-sm: 0.25rem;\n --panneau-radius-md: 0.375rem;\n --panneau-radius-lg: 0.5rem;\n --panneau-radius-full: 9999px;\n --panneau-border-width: 1px;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n /* Controls and rows: the comfortable density. Other densities redefine these tokens. */\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.5rem;\n --panneau-focus-width: 2px;\n\n /* Motion and layers */\n --panneau-duration: 150ms;\n --panneau-z-overlay: 1000;\n --panneau-z-toast: 1100;\n\n color-scheme: light;\n}\n\n/*\n * A ThemeScope with its own color scheme (.scheme) takes the light colors back, since the root\n * around it may be dark. Scopes without one inherit the colors of their parent.\n */\n:where(.scheme[data-color-scheme='light'], .scheme[data-color-scheme='auto']) {\n --panneau-chart-categorical-1: #1c6cbb;\n --panneau-chart-categorical-2: #c47713;\n --panneau-chart-categorical-3: #d12f74;\n --panneau-chart-categorical-4: #515922;\n --panneau-chart-categorical-5: #2b9c52;\n --panneau-chart-categorical-6: #a977b3;\n --panneau-chart-categorical-7: #8f2786;\n --panneau-chart-categorical-8: #9176e8;\n --panneau-chart-sequential-1: #dbe8f6;\n --panneau-chart-sequential-2: #a3c6e9;\n --panneau-chart-sequential-3: #5f9bd6;\n --panneau-chart-sequential-4: #2c6cb0;\n --panneau-chart-sequential-5: #1a4475;\n --panneau-chart-diverging-negative: #b4501a;\n --panneau-chart-diverging-neutral: #e4e4e7;\n --panneau-chart-diverging-positive: #1c6cbb;\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n color-scheme: light;\n}\n\n:where(.root[data-color-scheme='dark'], .scheme[data-color-scheme='dark']) {\n --panneau-chart-categorical-1: #61a9e3;\n --panneau-chart-categorical-2: #e5c040;\n --panneau-chart-categorical-3: #d9456a;\n --panneau-chart-categorical-4: #a1da9e;\n --panneau-chart-categorical-5: #bb6528;\n --panneau-chart-categorical-6: #a06a9b;\n --panneau-chart-categorical-7: #8c71e2;\n --panneau-chart-categorical-8: #56dfe1;\n --panneau-chart-sequential-1: #1d3550;\n --panneau-chart-sequential-2: #285684;\n --panneau-chart-sequential-3: #3d7fc2;\n --panneau-chart-sequential-4: #74abe0;\n --panneau-chart-sequential-5: #b8d6f2;\n --panneau-chart-diverging-negative: #f0884a;\n --panneau-chart-diverging-neutral: #3f3f46;\n --panneau-chart-diverging-positive: #61a9e3;\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n}\n\n@media (prefers-color-scheme: dark) {\n :where(.root[data-color-scheme='auto'], .scheme[data-color-scheme='auto']) {\n --panneau-chart-categorical-1: #61a9e3;\n --panneau-chart-categorical-2: #e5c040;\n --panneau-chart-categorical-3: #d9456a;\n --panneau-chart-categorical-4: #a1da9e;\n --panneau-chart-categorical-5: #bb6528;\n --panneau-chart-categorical-6: #a06a9b;\n --panneau-chart-categorical-7: #8c71e2;\n --panneau-chart-categorical-8: #56dfe1;\n --panneau-chart-sequential-1: #1d3550;\n --panneau-chart-sequential-2: #285684;\n --panneau-chart-sequential-3: #3d7fc2;\n --panneau-chart-sequential-4: #74abe0;\n --panneau-chart-sequential-5: #b8d6f2;\n --panneau-chart-diverging-negative: #f0884a;\n --panneau-chart-diverging-neutral: #3f3f46;\n --panneau-chart-diverging-positive: #61a9e3;\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n }\n}\n\n/*\n * Densities: compact, comfortable (the tokens above) and touch, with larger targets and 16px text in\n * inputs so that iOS doesn't zoom on focus. `auto`, the default, is touch on coarse pointers (touch\n * screens) and comfortable otherwise.\n */\n/* A ThemeScope with its own density (.density) takes the comfortable values back. */\n:where(.density[data-density='comfortable'], .density[data-density='auto']) {\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.5rem;\n}\n\n:where(.root[data-density='compact'], .density[data-density='compact']) {\n --panneau-control-height: 2rem;\n --panneau-control-height-sm: 1.625rem;\n --panneau-font-size-control: 0.8125rem;\n --panneau-control-padding-x: 0.5rem;\n --panneau-row-padding-y: 0.25rem;\n}\n\n:where(.root[data-density='touch'], .density[data-density='touch']) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.75rem;\n}\n\n@media (pointer: coarse) {\n :where(.root[data-density='auto'], .density[data-density='auto']) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.75rem;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.root) {\n --panneau-duration: 0ms;\n }\n}\n\n/* Base stylesheet, scoped to the root, with less weight than any class: components and projects override it. */\n\n.root {\n /* The class is mostly a hook for the rules below, which use :where(). */\n display: block;\n}\n\n/*\n * The root is a size container, so that the responsive props of layout primitives follow its width\n * rather than the viewport's. Like any size container, its width can't come from its content: in a\n * flex row or a float, give it a width. Toast regions share the tokens of .root, not this.\n */\n.container {\n container: panneau-root / inline-size;\n}\n\n:where(.root) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-bg);\n -webkit-font-smoothing: antialiased;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\n\n:where(.root) :where(*, *::before, *::after) {\n box-sizing: border-box;\n}\n\n/*\n * Element resets weigh two element selectors, (0,0,2), by repeating :is(): more than the global\n * element rules of a site, such as Bootstrap's Reboot (`h5 { margin-bottom: 0.5rem }` weighs\n * (0,0,1)), less than any class, so that components and projects still override them.\n */\n:where(.root)\n :is(\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p,\n ul,\n ol,\n dl,\n dd,\n figure,\n blockquote,\n pre,\n hr,\n fieldset,\n legend\n ):is(h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote, pre, hr, fieldset, legend) {\n margin: 0;\n padding: 0;\n}\n\n/* Reboot floats legends and scales their text. */\n:where(.root) :is(legend):is(legend) {\n float: none;\n width: auto;\n font-size: inherit;\n line-height: inherit;\n}\n\n/* Reboot fades rules to 25% opacity. */\n:where(.root) :is(hr):is(hr) {\n opacity: 1;\n}\n\n:where(.root) :where(fieldset) {\n border: 0;\n min-width: 0;\n}\n\n:where(.root) :where(button, input, select, textarea) {\n font: inherit;\n color: inherit;\n}\n\n:where(.root) :is(a):is(a) {\n color: var(--panneau-color-link);\n}\n\n:where(.root) :where(img, svg, video) {\n max-width: 100%;\n}\n\n:where(.root) :where(:focus-visible) {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n/*\n * A ThemeScope applies the text styles of its tokens again, since inherited values were computed\n * on the root. One with its own color scheme or theme paints its background too.\n */\n:where(.scope) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n}\n\n:where(.scope.scheme, .scope[data-panneau-theme]) {\n background-color: var(--panneau-color-bg);\n}\n\n/* Overlays (dialogs, popovers, menus, tooltips) render here, so that they get the tokens. */\n.portal {\n display: contents;\n}\n"],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import type { ColorScheme, Density, Theme } from '../theme/theme';
3
+ export interface ThemeScopeProps extends HTMLAttributes<HTMLElement> {
4
+ /** Element to render. Defaults to `div`. */
5
+ as?: 'div' | 'section' | 'aside' | 'nav' | 'header' | 'footer' | 'main' | 'article';
6
+ /** A theme for the subtree, over the theme of the root. */
7
+ theme?: Theme | null;
8
+ /** A color scheme for the subtree. Inherited by default. */
9
+ colorScheme?: ColorScheme;
10
+ /** A density for the subtree. Inherited by default. */
11
+ density?: Density;
12
+ children?: ReactNode;
13
+ }
14
+ /**
15
+ * Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:
16
+ * a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays
17
+ * opened inside it render in its own container, so that they keep its tokens. It must be inside a
18
+ * `PanneauRoot`.
19
+ *
20
+ * What it doesn't set comes from its parent: a scope with only a density keeps the colors of the
21
+ * theme around it.
22
+ */
23
+ export declare function ThemeScope({ as: Element, theme, colorScheme, density, className, children, ...props }: ThemeScopeProps): import("react").JSX.Element;
24
+ //# sourceMappingURL=ThemeScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.d.ts","sourceRoot":"","sources":["../../src/root/ThemeScope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKlE,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,WAAW,CAAC;IAChE,4CAA4C;IAC5C,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,2DAA2D;IAC3D,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACvB,EAAE,EAAE,OAAe,EACnB,KAAY,EACZ,WAAW,EACX,OAAO,EACP,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,eAAe,+BA+BjB"}
@@ -0,0 +1,49 @@
1
+ import { cx } from "../utils/cx.js";
2
+ import PanneauRoot_module_default from "./PanneauRoot.module.js";
3
+ import { PortalProvider, ScopeContext, useThemeStyles } from "./PanneauRoot.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { use, useState } from "react";
6
+ //#region src/root/ThemeScope.tsx
7
+ /**
8
+ * Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:
9
+ * a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays
10
+ * opened inside it render in its own container, so that they keep its tokens. It must be inside a
11
+ * `PanneauRoot`.
12
+ *
13
+ * What it doesn't set comes from its parent: a scope with only a density keeps the colors of the
14
+ * theme around it.
15
+ */
16
+ function ThemeScope({ as: Element = "div", theme = null, colorScheme, density, className, children, ...props }) {
17
+ const parent = use(ScopeContext);
18
+ const [container, setContainer] = useState(null);
19
+ const { scope, styles: themeStyles } = useThemeStyles(theme);
20
+ const effective = {
21
+ colorScheme: colorScheme ?? parent.colorScheme,
22
+ density: density ?? parent.density
23
+ };
24
+ return /* @__PURE__ */ jsxs(Element, {
25
+ ...props,
26
+ className: cx("panneau-theme-scope", PanneauRoot_module_default.scope, colorScheme !== void 0 && PanneauRoot_module_default.scheme, density !== void 0 && PanneauRoot_module_default.density, className),
27
+ "data-color-scheme": effective.colorScheme,
28
+ "data-density": effective.density,
29
+ "data-panneau-theme": scope,
30
+ children: [
31
+ themeStyles,
32
+ /* @__PURE__ */ jsx(ScopeContext, {
33
+ value: effective,
34
+ children: /* @__PURE__ */ jsx(PortalProvider, {
35
+ value: container,
36
+ children
37
+ })
38
+ }),
39
+ /* @__PURE__ */ jsx("div", {
40
+ ref: setContainer,
41
+ className: PanneauRoot_module_default.portal
42
+ })
43
+ ]
44
+ });
45
+ }
46
+ //#endregion
47
+ export { ThemeScope };
48
+
49
+ //# sourceMappingURL=ThemeScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.js","names":["styles"],"sources":["../../src/root/ThemeScope.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, use, useState } from 'react';\n\nimport type { ColorScheme, Density, Theme } from '../theme/theme';\nimport { cx } from '../utils/cx';\nimport { PortalProvider, ScopeContext, useThemeStyles } from './PanneauRoot';\nimport styles from './PanneauRoot.module.css';\n\nexport interface ThemeScopeProps extends HTMLAttributes<HTMLElement> {\n /** Element to render. Defaults to `div`. */\n as?: 'div' | 'section' | 'aside' | 'nav' | 'header' | 'footer' | 'main' | 'article';\n /** A theme for the subtree, over the theme of the root. */\n theme?: Theme | null;\n /** A color scheme for the subtree. Inherited by default. */\n colorScheme?: ColorScheme;\n /** A density for the subtree. Inherited by default. */\n density?: Density;\n children?: ReactNode;\n}\n\n/**\n * Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:\n * a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays\n * opened inside it render in its own container, so that they keep its tokens. It must be inside a\n * `PanneauRoot`.\n *\n * What it doesn't set comes from its parent: a scope with only a density keeps the colors of the\n * theme around it.\n */\nexport function ThemeScope({\n as: Element = 'div',\n theme = null,\n colorScheme,\n density,\n className,\n children,\n ...props\n}: ThemeScopeProps) {\n const parent = use(ScopeContext);\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const { scope, styles: themeStyles } = useThemeStyles(theme);\n // The effective values are always written, so that the dark and density rules of a theme apply.\n // Only those set here take the default tokens back (`.scheme`, `.density`).\n const effective = {\n colorScheme: colorScheme ?? parent.colorScheme,\n density: density ?? parent.density,\n };\n return (\n <Element\n {...props}\n className={cx(\n 'panneau-theme-scope',\n styles.scope,\n colorScheme !== undefined && styles.scheme,\n density !== undefined && styles.density,\n className,\n )}\n data-color-scheme={effective.colorScheme}\n data-density={effective.density}\n data-panneau-theme={scope}\n >\n {themeStyles}\n <ScopeContext value={effective}>\n <PortalProvider value={container}>{children}</PortalProvider>\n </ScopeContext>\n <div ref={setContainer} className={styles.portal} />\n </Element>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AA4BA,SAAgB,WAAW,EACvB,IAAI,UAAU,OACd,QAAQ,MACR,aACA,SACA,WACA,UACA,GAAG,SACa;CAChB,MAAM,SAAS,IAAI,YAAY;CAC/B,MAAM,CAAC,WAAW,gBAAgB,SAAgC,IAAI;CACtE,MAAM,EAAE,OAAO,QAAQ,gBAAgB,eAAe,KAAK;CAG3D,MAAM,YAAY;EACd,aAAa,eAAe,OAAO;EACnC,SAAS,WAAW,OAAO;CAC/B;CACA,OACI,qBAAC,SAAD;EACI,GAAI;EACJ,WAAW,GACP,uBACAA,2BAAO,OACP,gBAAgB,KAAA,KAAaA,2BAAO,QACpC,YAAY,KAAA,KAAaA,2BAAO,SAChC,SACJ;EACA,qBAAmB,UAAU;EAC7B,gBAAc,UAAU;EACxB,sBAAoB;EAXxB,UAAA;GAaK;GACD,oBAAC,cAAD;IAAc,OAAO;IACjB,UAAA,oBAAC,gBAAD;KAAgB,OAAO;KAAY;IAAyB,CAAA;GAClD,CAAA;GACd,oBAAC,OAAD;IAAK,KAAK;IAAc,WAAWA,2BAAO;GAAO,CAAA;EAC5C;;AAEjB"}
@@ -1,93 +1,94 @@
1
1
  /* Options of selects, combo boxes and menus. */
2
2
 
3
- .panneau-listBox-8esRuh {
3
+ .panneau-list-box {
4
4
  display: flex;
5
5
  flex-direction: column;
6
6
  max-height: inherit;
7
- padding: var(--panneau-space-1);
7
+ padding: var(--panneau-list-box-padding, var(--panneau-space-1));
8
8
  overflow: auto;
9
9
  outline: none;
10
10
  }
11
11
 
12
- .panneau-item-Zfuva9 {
12
+ .panneau-list-box-item {
13
13
  display: flex;
14
14
  align-items: center;
15
15
  gap: var(--panneau-space-2);
16
16
  min-height: var(--panneau-control-height-sm);
17
- padding: var(--panneau-space-1) var(--panneau-space-2);
17
+ padding: var(--panneau-list-box-item-padding-y, calc(var(--panneau-row-padding-y) / 2))
18
+ var(--panneau-list-box-item-padding-x, var(--panneau-space-2));
18
19
  font-size: var(--panneau-font-size-control);
19
20
  line-height: var(--panneau-line-height-tight);
20
21
  color: var(--panneau-color-text);
21
22
  cursor: default;
22
- border-radius: var(--panneau-radius-sm);
23
+ border-radius: var(--panneau-list-box-item-radius, var(--panneau-radius-sm));
23
24
  outline: none;
24
25
  }
25
26
 
26
- .panneau-item-Zfuva9[data-focused],
27
- .panneau-item-Zfuva9[data-hovered] {
28
- background-color: var(--panneau-color-hover);
27
+ .panneau-list-box-item[data-focused],
28
+ .panneau-list-box-item[data-hovered] {
29
+ background-color: var(--panneau-list-box-item-bg-hover, var(--panneau-color-hover));
29
30
  }
30
31
 
31
- .panneau-item-Zfuva9[data-focus-visible] {
32
+ .panneau-list-box-item[data-focus-visible] {
32
33
  outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
33
34
  outline-offset: -2px;
34
35
  }
35
36
 
36
- .panneau-item-Zfuva9[data-disabled] {
37
+ .panneau-list-box-item[data-disabled] {
37
38
  cursor: not-allowed;
38
39
  opacity: 0.5;
39
40
  }
40
41
 
41
- .panneau-item-Zfuva9[data-danger] {
42
+ .panneau-list-box-item[data-danger] {
42
43
  color: var(--panneau-color-danger);
43
44
  }
44
45
 
45
- .panneau-itemText-P7FtjI {
46
+ .panneau-list-box-item-text {
46
47
  display: flex;
47
48
  flex: 1 1 auto;
48
49
  flex-direction: column;
49
50
  min-width: 0;
50
51
  }
51
52
 
52
- .panneau-itemLabel-nLMoU0 {
53
+ .panneau-list-box-item-label {
53
54
  overflow-wrap: anywhere;
54
55
  }
55
56
 
56
- .panneau-itemDescription--u64pt {
57
+ .panneau-list-box-item-description {
57
58
  font-size: var(--panneau-font-size-sm);
58
59
  color: var(--panneau-color-text-muted);
59
60
  }
60
61
 
61
- .panneau-check-o1OMYv {
62
+ .panneau-list-box-check {
62
63
  flex: 0 0 auto;
63
64
  width: 1rem;
64
65
  color: var(--panneau-color-text);
65
66
  }
66
67
 
67
- .panneau-placeholder-Ln7J3j {
68
+ .panneau-list-box-placeholder {
68
69
  color: var(--panneau-color-text-muted);
69
70
  }
70
71
 
71
- .panneau-empty-4GCKMh {
72
+ .panneau-list-box-empty {
72
73
  padding: var(--panneau-space-2);
73
74
  font-size: var(--panneau-font-size-sm);
74
75
  color: var(--panneau-color-text-muted);
75
76
  }
76
77
 
77
- .panneau-separator-FjQdQ6 {
78
+ .panneau-list-box-separator {
78
79
  height: 1px;
79
80
  margin: var(--panneau-space-1) 0;
80
81
  background-color: var(--panneau-color-border);
81
82
  }
82
83
 
83
- .panneau-trigger-3OeZeM {
84
+ .panneau-list-box-trigger {
84
85
  justify-content: space-between;
85
86
  gap: var(--panneau-space-2);
86
87
  text-align: start;
87
88
  cursor: pointer;
88
89
  }
89
90
 
90
- .panneau-value-J-b74F {
91
+ .panneau-list-box-value {
91
92
  flex: 1 1 auto;
92
93
  min-width: 0;
93
94
  overflow: hidden;
@@ -95,10 +96,10 @@
95
96
  white-space: nowrap;
96
97
  }
97
98
 
98
- .panneau-value-J-b74F[data-placeholder] {
99
+ .panneau-list-box-value[data-placeholder] {
99
100
  color: var(--panneau-color-text-muted);
100
101
  }
101
102
 
102
- .panneau-chevron-w-papm {
103
+ .panneau-list-box-chevron {
103
104
  color: var(--panneau-color-text-muted);
104
105
  }
@@ -1,17 +1,17 @@
1
1
  import "./ListBox.css";
2
2
  //#region src/select/ListBox.module.css
3
- var listBox = "panneau-listBox-8esRuh";
4
- var item = "panneau-item-Zfuva9";
5
- var itemText = "panneau-itemText-P7FtjI";
6
- var itemLabel = "panneau-itemLabel-nLMoU0";
7
- var itemDescription = "panneau-itemDescription--u64pt";
8
- var check = "panneau-check-o1OMYv";
9
- var placeholder = "panneau-placeholder-Ln7J3j";
10
- var empty = "panneau-empty-4GCKMh";
11
- var separator = "panneau-separator-FjQdQ6";
12
- var trigger = "panneau-trigger-3OeZeM";
13
- var value = "panneau-value-J-b74F";
14
- var chevron = "panneau-chevron-w-papm";
3
+ var listBox = "panneau-list-box";
4
+ var item = "panneau-list-box-item";
5
+ var itemText = "panneau-list-box-item-text";
6
+ var itemLabel = "panneau-list-box-item-label";
7
+ var itemDescription = "panneau-list-box-item-description";
8
+ var check = "panneau-list-box-check";
9
+ var placeholder = "panneau-list-box-placeholder";
10
+ var empty = "panneau-list-box-empty";
11
+ var separator = "panneau-list-box-separator";
12
+ var trigger = "panneau-list-box-trigger";
13
+ var value = "panneau-list-box-value";
14
+ var chevron = "panneau-list-box-chevron";
15
15
  var ListBox_module_default = {
16
16
  listBox,
17
17
  item,
@@ -1 +1 @@
1
- {"version":3,"file":"ListBox.module.js","names":[],"sources":["../../src/select/ListBox.module.css"],"sourcesContent":["/* Options of selects, combo boxes and menus. */\n\n.listBox {\n display: flex;\n flex-direction: column;\n max-height: inherit;\n padding: var(--panneau-space-1);\n overflow: auto;\n outline: none;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height-sm);\n padding: var(--panneau-space-1) var(--panneau-space-2);\n font-size: var(--panneau-font-size-control);\n line-height: var(--panneau-line-height-tight);\n color: var(--panneau-color-text);\n cursor: default;\n border-radius: var(--panneau-radius-sm);\n outline: none;\n}\n\n.item[data-focused],\n.item[data-hovered] {\n background-color: var(--panneau-color-hover);\n}\n\n.item[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: -2px;\n}\n\n.item[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.item[data-danger] {\n color: var(--panneau-color-danger);\n}\n\n.itemText {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n}\n\n.itemLabel {\n overflow-wrap: anywhere;\n}\n\n.itemDescription {\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.check {\n flex: 0 0 auto;\n width: 1rem;\n color: var(--panneau-color-text);\n}\n\n.placeholder {\n color: var(--panneau-color-text-muted);\n}\n\n.empty {\n padding: var(--panneau-space-2);\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.separator {\n height: 1px;\n margin: var(--panneau-space-1) 0;\n background-color: var(--panneau-color-border);\n}\n\n.trigger {\n justify-content: space-between;\n gap: var(--panneau-space-2);\n text-align: start;\n cursor: pointer;\n}\n\n.value {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.value[data-placeholder] {\n color: var(--panneau-color-text-muted);\n}\n\n.chevron {\n color: var(--panneau-color-text-muted);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"ListBox.module.js","names":[],"sources":["../../src/select/ListBox.module.css"],"sourcesContent":["/* Options of selects, combo boxes and menus. */\n\n.listBox {\n display: flex;\n flex-direction: column;\n max-height: inherit;\n padding: var(--panneau-list-box-padding, var(--panneau-space-1));\n overflow: auto;\n outline: none;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height-sm);\n padding: var(--panneau-list-box-item-padding-y, calc(var(--panneau-row-padding-y) / 2))\n var(--panneau-list-box-item-padding-x, var(--panneau-space-2));\n font-size: var(--panneau-font-size-control);\n line-height: var(--panneau-line-height-tight);\n color: var(--panneau-color-text);\n cursor: default;\n border-radius: var(--panneau-list-box-item-radius, var(--panneau-radius-sm));\n outline: none;\n}\n\n.item[data-focused],\n.item[data-hovered] {\n background-color: var(--panneau-list-box-item-bg-hover, var(--panneau-color-hover));\n}\n\n.item[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: -2px;\n}\n\n.item[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.item[data-danger] {\n color: var(--panneau-color-danger);\n}\n\n.itemText {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n}\n\n.itemLabel {\n overflow-wrap: anywhere;\n}\n\n.itemDescription {\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.check {\n flex: 0 0 auto;\n width: 1rem;\n color: var(--panneau-color-text);\n}\n\n.placeholder {\n color: var(--panneau-color-text-muted);\n}\n\n.empty {\n padding: var(--panneau-space-2);\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.separator {\n height: 1px;\n margin: var(--panneau-space-1) 0;\n background-color: var(--panneau-color-border);\n}\n\n.trigger {\n justify-content: space-between;\n gap: var(--panneau-space-2);\n text-align: start;\n cursor: pointer;\n}\n\n.value {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.value[data-placeholder] {\n color: var(--panneau-color-text-muted);\n}\n\n.chevron {\n color: var(--panneau-color-text-muted);\n}\n"],"mappings":""}
@@ -44,7 +44,7 @@ function Select$1(props) {
44
44
  validationBehavior: "aria",
45
45
  onBlur: onBlur !== void 0 ? () => onBlur() : void 0,
46
46
  disabledKeys: items.filter((item) => item.disabled === true).map((item_0) => item_0.key),
47
- className: cx(Field_module_default.field, className)
47
+ className: cx("panneau-select", Field_module_default.field, className)
48
48
  };
49
49
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
50
50
  /* @__PURE__ */ jsx(FieldLabel, {
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","names":["item","key","value","onChange","Select","fieldStyles","_Fragment","styles","AriaSelect"],"sources":["../../src/select/Select.tsx"],"sourcesContent":["import { Check, ChevronDown } from 'lucide-react';\nimport type { Key } from 'react-aria-components';\nimport {\n Select as AriaSelect,\n Button,\n ListBox,\n ListBoxItem,\n SelectValue,\n Text,\n} from 'react-aria-components';\n\nimport {\n type FieldChromeProps,\n FieldDescription,\n FieldErrors,\n FieldLabel,\n fieldStyles,\n} from '../field/FieldParts';\nimport { Icon } from '../icon/Icon';\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { PopoverSurface } from '../popover/Popover';\nimport { cx } from '../utils/cx';\nimport styles from './ListBox.module.css';\n\n/** The value of an option. */\nexport type OptionValue = string | number | boolean;\n\n/** A choice of a select, a radio group or a combo box. Same shape as the protocol's `Option`. */\nexport interface SelectOption {\n value: OptionValue;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\n/** Props of both single and multiple selects. */\nexport interface SelectBaseProps extends FieldChromeProps {\n options: readonly SelectOption[];\n /** Text shown without a value. Defaults to \"Select…\". */\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n name?: string;\n autoFocus?: boolean;\n onBlur?: () => void;\n 'aria-label'?: string;\n id?: string;\n /** Class name of the button that opens the options. */\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n /** The selected value, or `null`. */\n value?: OptionValue | null;\n onChange?: (value: OptionValue | null) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n /** Several values can be selected. */\n multiple: true;\n value?: readonly OptionValue[];\n onChange?: (value: OptionValue[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nconst EMPTY_KEY = '__panneau_empty__';\n\nfunction keyOf(options: readonly SelectOption[], value: OptionValue): Key | null {\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? null : String(index);\n}\n\nfunction valueOf(options: readonly SelectOption[], key: Key | null): OptionValue | null {\n if (key === null || key === EMPTY_KEY) {\n return null;\n }\n return options[Number(key)]?.value ?? null;\n}\n\n/**\n * A dropdown to pick one option, or several with `multiple`. Option values can be strings,\n * numbers or booleans. Unless `isRequired`, a single select has an empty choice first.\n */\nexport function Select(props: SelectProps) {\n const intl = usePanneauIntl();\n const {\n options,\n label,\n description,\n errors = [],\n placeholder = intl.formatMessage(messages.selectPlaceholder),\n isRequired = false,\n isDisabled,\n name,\n autoFocus,\n onBlur,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n triggerClassName,\n popoverClassName,\n } = props;\n const invalid = errors.length > 0;\n const items = options.map((option, index) => ({ ...option, key: String(index) }));\n const withEmpty = props.multiple !== true && !isRequired;\n\n const shared = {\n id,\n name,\n autoFocus,\n isDisabled,\n isRequired,\n isInvalid: invalid,\n placeholder,\n 'aria-label': props['aria-label'],\n validationBehavior: 'aria' as const,\n onBlur: onBlur !== undefined ? () => onBlur() : undefined,\n disabledKeys: items.filter((item) => item.disabled === true).map((item) => item.key),\n className: cx(fieldStyles.field, className),\n };\n\n const content = (\n <>\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Button className={cx(fieldStyles.control, styles.trigger, triggerClassName)}>\n <SelectValue className={styles.value} />\n <Icon icon={ChevronDown} className={styles.chevron} />\n </Button>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n <PopoverSurface className={popoverClassName}>\n <ListBox className={styles.listBox}>\n {withEmpty ? (\n <ListBoxItem id={EMPTY_KEY} textValue={placeholder} className={styles.item}>\n <span className={styles.check} />\n <span className={styles.placeholder}>{placeholder}</span>\n </ListBoxItem>\n ) : null}\n {items.map((item) => (\n <ListBoxItem\n key={item.key}\n id={item.key}\n textValue={item.label}\n className={styles.item}\n >\n {({ isSelected }) => (\n <>\n <span className={styles.check}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {item.label}\n </Text>\n {item.description !== undefined ? (\n <Text\n slot=\"description\"\n className={styles.itemDescription}\n >\n {item.description}\n </Text>\n ) : null}\n </span>\n </>\n )}\n </ListBoxItem>\n ))}\n </ListBox>\n </PopoverSurface>\n </>\n );\n\n if (props.multiple === true) {\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"multiple\"\n value={\n value !== undefined\n ? value.flatMap((item) => {\n const key = keyOf(options, item);\n return key !== null ? [key] : [];\n })\n : undefined\n }\n onChange={(keys) =>\n onChange?.(\n keys.flatMap((key) => {\n const item = valueOf(options, key);\n return item !== null ? [item] : [];\n }),\n )\n }\n >\n {content}\n </AriaSelect>\n );\n }\n\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"single\"\n value={\n value !== undefined ? (value !== null ? keyOf(options, value) : null) : undefined\n }\n onChange={(key) => onChange?.(valueOf(options, key))}\n >\n {content}\n </AriaSelect>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","names":["item","key","value","onChange","Select","fieldStyles","_Fragment","styles","AriaSelect"],"sources":["../../src/select/Select.tsx"],"sourcesContent":["import { Check, ChevronDown } from 'lucide-react';\nimport type { Key } from 'react-aria-components';\nimport {\n Select as AriaSelect,\n Button,\n ListBox,\n ListBoxItem,\n SelectValue,\n Text,\n} from 'react-aria-components';\n\nimport {\n type FieldChromeProps,\n FieldDescription,\n FieldErrors,\n FieldLabel,\n fieldStyles,\n} from '../field/FieldParts';\nimport { Icon } from '../icon/Icon';\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { PopoverSurface } from '../popover/Popover';\nimport { cx } from '../utils/cx';\nimport styles from './ListBox.module.css';\n\n/** The value of an option. */\nexport type OptionValue = string | number | boolean;\n\n/** A choice of a select, a radio group or a combo box. Same shape as the protocol's `Option`. */\nexport interface SelectOption {\n value: OptionValue;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\n/** Props of both single and multiple selects. */\nexport interface SelectBaseProps extends FieldChromeProps {\n options: readonly SelectOption[];\n /** Text shown without a value. Defaults to \"Select…\". */\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n name?: string;\n autoFocus?: boolean;\n onBlur?: () => void;\n 'aria-label'?: string;\n id?: string;\n /** Class name of the button that opens the options. */\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n /** The selected value, or `null`. */\n value?: OptionValue | null;\n onChange?: (value: OptionValue | null) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n /** Several values can be selected. */\n multiple: true;\n value?: readonly OptionValue[];\n onChange?: (value: OptionValue[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nconst EMPTY_KEY = '__panneau_empty__';\n\nfunction keyOf(options: readonly SelectOption[], value: OptionValue): Key | null {\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? null : String(index);\n}\n\nfunction valueOf(options: readonly SelectOption[], key: Key | null): OptionValue | null {\n if (key === null || key === EMPTY_KEY) {\n return null;\n }\n return options[Number(key)]?.value ?? null;\n}\n\n/**\n * A dropdown to pick one option, or several with `multiple`. Option values can be strings,\n * numbers or booleans. Unless `isRequired`, a single select has an empty choice first.\n */\nexport function Select(props: SelectProps) {\n const intl = usePanneauIntl();\n const {\n options,\n label,\n description,\n errors = [],\n placeholder = intl.formatMessage(messages.selectPlaceholder),\n isRequired = false,\n isDisabled,\n name,\n autoFocus,\n onBlur,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n triggerClassName,\n popoverClassName,\n } = props;\n const invalid = errors.length > 0;\n const items = options.map((option, index) => ({ ...option, key: String(index) }));\n const withEmpty = props.multiple !== true && !isRequired;\n\n const shared = {\n id,\n name,\n autoFocus,\n isDisabled,\n isRequired,\n isInvalid: invalid,\n placeholder,\n 'aria-label': props['aria-label'],\n validationBehavior: 'aria' as const,\n onBlur: onBlur !== undefined ? () => onBlur() : undefined,\n disabledKeys: items.filter((item) => item.disabled === true).map((item) => item.key),\n className: cx('panneau-select', fieldStyles.field, className),\n };\n\n const content = (\n <>\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Button className={cx(fieldStyles.control, styles.trigger, triggerClassName)}>\n <SelectValue className={styles.value} />\n <Icon icon={ChevronDown} className={styles.chevron} />\n </Button>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n <PopoverSurface className={popoverClassName}>\n <ListBox className={styles.listBox}>\n {withEmpty ? (\n <ListBoxItem id={EMPTY_KEY} textValue={placeholder} className={styles.item}>\n <span className={styles.check} />\n <span className={styles.placeholder}>{placeholder}</span>\n </ListBoxItem>\n ) : null}\n {items.map((item) => (\n <ListBoxItem\n key={item.key}\n id={item.key}\n textValue={item.label}\n className={styles.item}\n >\n {({ isSelected }) => (\n <>\n <span className={styles.check}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {item.label}\n </Text>\n {item.description !== undefined ? (\n <Text\n slot=\"description\"\n className={styles.itemDescription}\n >\n {item.description}\n </Text>\n ) : null}\n </span>\n </>\n )}\n </ListBoxItem>\n ))}\n </ListBox>\n </PopoverSurface>\n </>\n );\n\n if (props.multiple === true) {\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"multiple\"\n value={\n value !== undefined\n ? value.flatMap((item) => {\n const key = keyOf(options, item);\n return key !== null ? [key] : [];\n })\n : undefined\n }\n onChange={(keys) =>\n onChange?.(\n keys.flatMap((key) => {\n const item = valueOf(options, key);\n return item !== null ? [item] : [];\n }),\n )\n }\n >\n {content}\n </AriaSelect>\n );\n }\n\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"single\"\n value={\n value !== undefined ? (value !== null ? keyOf(options, value) : null) : undefined\n }\n onChange={(key) => onChange?.(valueOf(options, key))}\n >\n {content}\n </AriaSelect>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Tokens of the options of `Select`, `ComboBox` and `Menu`. */
2
+ export declare const listBoxTokens: import("..").ComponentTokens<"list-box", "panneau-list-box-padding" | "panneau-list-box-item-padding-y" | "panneau-list-box-item-padding-x" | "panneau-list-box-item-radius" | "panneau-list-box-item-bg-hover">;
3
+ //# sourceMappingURL=listBoxTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBoxTokens.d.ts","sourceRoot":"","sources":["../../src/select/listBoxTokens.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,eAAO,MAAM,aAAa,kNAWxB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/select/listBoxTokens.ts
3
+ /** Tokens of the options of `Select`, `ComboBox` and `Menu`. */
4
+ var listBoxTokens = defineComponentTokens("list-box", {
5
+ /** Padding around the options. */
6
+ padding: "var(--panneau-space-1)",
7
+ /** Vertical padding of an option. */
8
+ "item-padding-y": "calc(var(--panneau-row-padding-y) / 2)",
9
+ /** Horizontal padding of an option. */
10
+ "item-padding-x": "var(--panneau-space-2)",
11
+ /** Corner radius of an option. */
12
+ "item-radius": "var(--panneau-radius-sm)",
13
+ /** Background of a focused or hovered option. */
14
+ "item-bg-hover": "var(--panneau-color-hover)"
15
+ });
16
+ //#endregion
17
+ export { listBoxTokens };
18
+
19
+ //# sourceMappingURL=listBoxTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBoxTokens.js","names":[],"sources":["../../src/select/listBoxTokens.ts"],"sourcesContent":["import { defineComponentTokens } from '../theme/componentTokens';\n\n/** Tokens of the options of `Select`, `ComboBox` and `Menu`. */\nexport const listBoxTokens = defineComponentTokens('list-box', {\n /** Padding around the options. */\n padding: 'var(--panneau-space-1)',\n /** Vertical padding of an option. */\n 'item-padding-y': 'calc(var(--panneau-row-padding-y) / 2)',\n /** Horizontal padding of an option. */\n 'item-padding-x': 'var(--panneau-space-2)',\n /** Corner radius of an option. */\n 'item-radius': 'var(--panneau-radius-sm)',\n /** Background of a focused or hovered option. */\n 'item-bg-hover': 'var(--panneau-color-hover)',\n});\n"],"mappings":";;;AAGA,IAAa,gBAAgB,sBAAsB,YAAY;;CAE3D,SAAS;;CAET,kBAAkB;;CAElB,kBAAkB;;CAElB,eAAe;;CAEf,iBAAiB;AACrB,CAAC"}
@@ -1,40 +1,40 @@
1
- .panneau-spinner-iIx6pg {
1
+ .panneau-spinner {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--panneau-space-2);
5
5
  color: var(--panneau-color-text-muted);
6
6
  }
7
7
 
8
- .panneau-circle-A2p14W {
8
+ .panneau-spinner-circle {
9
9
  display: inline-block;
10
10
  flex: 0 0 auto;
11
11
  width: 1.25em;
12
12
  height: 1.25em;
13
- border: 2px solid currentColor;
13
+ border: var(--panneau-spinner-border-width, 2px) solid currentColor;
14
14
  border-right-color: transparent;
15
15
  border-radius: var(--panneau-radius-full);
16
- animation: panneau-spin-qVmYu0 0.7s linear infinite;
16
+ animation: panneau-spinner-spin 0.7s linear infinite;
17
17
  }
18
18
 
19
- .panneau-sm-JoTrRC .panneau-circle-A2p14W {
19
+ .panneau-spinner-sm .panneau-spinner-circle {
20
20
  width: 1em;
21
21
  height: 1em;
22
22
  }
23
23
 
24
- .panneau-lg-PkO03p .panneau-circle-A2p14W {
24
+ .panneau-spinner-lg .panneau-spinner-circle {
25
25
  width: 2em;
26
26
  height: 2em;
27
27
  border-width: 3px;
28
28
  }
29
29
 
30
- @keyframes panneau-spin-qVmYu0 {
30
+ @keyframes panneau-spinner-spin {
31
31
  to {
32
32
  transform: rotate(360deg);
33
33
  }
34
34
  }
35
35
 
36
36
  @media (prefers-reduced-motion: reduce) {
37
- .panneau-circle-A2p14W {
37
+ .panneau-spinner-circle {
38
38
  animation-duration: 2s;
39
39
  }
40
40
  }
@@ -12,7 +12,7 @@ function Spinner({ label, showLabel = false, size = "md", className }) {
12
12
  return /* @__PURE__ */ jsxs(ProgressBar, {
13
13
  isIndeterminate: true,
14
14
  "aria-label": text,
15
- className: cx(Spinner_module_default.spinner, Spinner_module_default[size], className),
15
+ className: cx("panneau-spinner", Spinner_module_default.spinner, Spinner_module_default[size], className),
16
16
  children: [/* @__PURE__ */ jsx("span", {
17
17
  className: Spinner_module_default.circle,
18
18
  "aria-hidden": "true"
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","names":["styles"],"sources":["../../src/spinner/Spinner.tsx"],"sourcesContent":["import { ProgressBar } from 'react-aria-components';\n\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { cx } from '../utils/cx';\nimport styles from './Spinner.module.css';\n\nexport interface SpinnerProps {\n /** Accessible label, and visible text with `showLabel`. Defaults to \"Loading…\". */\n label?: string;\n /** Shows the label next to the spinner. */\n showLabel?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/** An indeterminate progress indicator, announced as loading. */\nexport function Spinner({ label, showLabel = false, size = 'md', className }: SpinnerProps) {\n const intl = usePanneauIntl();\n const text = label ?? intl.formatMessage(messages.loading);\n return (\n <ProgressBar\n isIndeterminate\n aria-label={text}\n className={cx(styles.spinner, styles[size], className)}\n >\n <span className={styles.circle} aria-hidden=\"true\" />\n {showLabel ? <span>{text}</span> : null}\n </ProgressBar>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,QAAQ,EAAE,OAAO,YAAY,OAAO,OAAO,MAAM,aAA2B;CACxF,MAAM,OAAO,eAAe;CAC5B,MAAM,OAAO,SAAS,KAAK,cAAc,SAAS,OAAO;CACzD,OACI,qBAAC,aAAD;EACI,iBAAA;EACA,cAAY;EACZ,WAAW,GAAGA,uBAAO,SAASA,uBAAO,OAAO,SAAS;EAHzD,UAAA,CAKI,oBAAC,QAAD;GAAM,WAAWA,uBAAO;GAAQ,eAAY;EAAM,CAAA,GACjD,YAAY,oBAAC,QAAD,EAAA,UAAO,KAAW,CAAA,IAAI,IAC1B;;AAErB"}
1
+ {"version":3,"file":"Spinner.js","names":["styles"],"sources":["../../src/spinner/Spinner.tsx"],"sourcesContent":["import { ProgressBar } from 'react-aria-components';\n\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { cx } from '../utils/cx';\nimport styles from './Spinner.module.css';\n\nexport interface SpinnerProps {\n /** Accessible label, and visible text with `showLabel`. Defaults to \"Loading…\". */\n label?: string;\n /** Shows the label next to the spinner. */\n showLabel?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/** An indeterminate progress indicator, announced as loading. */\nexport function Spinner({ label, showLabel = false, size = 'md', className }: SpinnerProps) {\n const intl = usePanneauIntl();\n const text = label ?? intl.formatMessage(messages.loading);\n return (\n <ProgressBar\n isIndeterminate\n aria-label={text}\n className={cx('panneau-spinner', styles.spinner, styles[size], className)}\n >\n <span className={styles.circle} aria-hidden=\"true\" />\n {showLabel ? <span>{text}</span> : null}\n </ProgressBar>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,QAAQ,EAAE,OAAO,YAAY,OAAO,OAAO,MAAM,aAA2B;CACxF,MAAM,OAAO,eAAe;CAC5B,MAAM,OAAO,SAAS,KAAK,cAAc,SAAS,OAAO;CACzD,OACI,qBAAC,aAAD;EACI,iBAAA;EACA,cAAY;EACZ,WAAW,GAAG,mBAAmBA,uBAAO,SAASA,uBAAO,OAAO,SAAS;EAH5E,UAAA,CAKI,oBAAC,QAAD;GAAM,WAAWA,uBAAO;GAAQ,eAAY;EAAM,CAAA,GACjD,YAAY,oBAAC,QAAD,EAAA,UAAO,KAAW,CAAA,IAAI,IAC1B;;AAErB"}
@@ -1,10 +1,10 @@
1
1
  import "./Spinner.css";
2
2
  //#region src/spinner/Spinner.module.css
3
- var spinner = "panneau-spinner-iIx6pg";
4
- var circle = "panneau-circle-A2p14W";
5
- var spin = "panneau-spin-qVmYu0";
6
- var sm = "panneau-sm-JoTrRC";
7
- var lg = "panneau-lg-PkO03p";
3
+ var spinner = "panneau-spinner";
4
+ var circle = "panneau-spinner-circle";
5
+ var spin = "panneau-spinner-spin";
6
+ var sm = "panneau-spinner-sm";
7
+ var lg = "panneau-spinner-lg";
8
8
  var Spinner_module_default = {
9
9
  spinner,
10
10
  circle,
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.module.js","names":[],"sources":["../../src/spinner/Spinner.module.css"],"sourcesContent":[".spinner {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n color: var(--panneau-color-text-muted);\n}\n\n.circle {\n display: inline-block;\n flex: 0 0 auto;\n width: 1.25em;\n height: 1.25em;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: var(--panneau-radius-full);\n animation: spin 0.7s linear infinite;\n}\n\n.sm .circle {\n width: 1em;\n height: 1em;\n}\n\n.lg .circle {\n width: 2em;\n height: 2em;\n border-width: 3px;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .circle {\n animation-duration: 2s;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Spinner.module.js","names":[],"sources":["../../src/spinner/Spinner.module.css"],"sourcesContent":[".spinner {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n color: var(--panneau-color-text-muted);\n}\n\n.circle {\n display: inline-block;\n flex: 0 0 auto;\n width: 1.25em;\n height: 1.25em;\n border: var(--panneau-spinner-border-width, 2px) solid currentColor;\n border-right-color: transparent;\n border-radius: var(--panneau-radius-full);\n animation: spin 0.7s linear infinite;\n}\n\n.sm .circle {\n width: 1em;\n height: 1em;\n}\n\n.lg .circle {\n width: 2em;\n height: 2em;\n border-width: 3px;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .circle {\n animation-duration: 2s;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of Spinner. */
2
+ export declare const spinnerTokens: import("..").ComponentTokens<"spinner", "panneau-spinner-border-width">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/spinner/tokens.ts"],"names":[],"mappings":"AAEA,yBAAyB;AACzB,eAAO,MAAM,aAAa,yEAGxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/spinner/tokens.ts
3
+ /** Tokens of Spinner. */
4
+ var spinnerTokens = defineComponentTokens("spinner", {
5
+ /** Width of the ring. */
6
+ "border-width": "2px" });
7
+ //#endregion
8
+ export { spinnerTokens };
9
+
10
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../../src/spinner/tokens.ts"],"sourcesContent":["import { defineComponentTokens } from '../theme/componentTokens';\n\n/** Tokens of Spinner. */\nexport const spinnerTokens = defineComponentTokens('spinner', {\n /** Width of the ring. */\n 'border-width': '2px',\n});\n"],"mappings":";;;AAGA,IAAa,gBAAgB,sBAAsB,WAAW;;AAE1D,gBAAgB,MACpB,CAAC"}