@panneau/ui 5.0.0-alpha.0 → 5.0.0-alpha.2

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 (388) hide show
  1. package/README.md +280 -6
  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 +1 -0
  48. package/dist/checkbox/Checkbox.js.map +1 -1
  49. package/dist/checkbox/Checkbox.module.js +4 -4
  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/namedIcons.d.ts +16 -0
  156. package/dist/icon/namedIcons.d.ts.map +1 -0
  157. package/dist/icon/namedIcons.js +90 -0
  158. package/dist/icon/namedIcons.js.map +1 -0
  159. package/dist/icon-button/IconButton.css +2 -2
  160. package/dist/icon-button/IconButton.d.ts +1 -1
  161. package/dist/icon-button/IconButton.d.ts.map +1 -1
  162. package/dist/icon-button/IconButton.js +3 -3
  163. package/dist/icon-button/IconButton.js.map +1 -1
  164. package/dist/icon-button/IconButton.module.js +2 -2
  165. package/dist/index.d.ts +26 -5
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +21 -2
  168. package/dist/inline/Inline.css +142 -0
  169. package/dist/inline/Inline.d.ts +17 -0
  170. package/dist/inline/Inline.d.ts.map +1 -0
  171. package/dist/inline/Inline.js +21 -0
  172. package/dist/inline/Inline.js.map +1 -0
  173. package/dist/inline/Inline.module.js +12 -0
  174. package/dist/inline/Inline.module.js.map +1 -0
  175. package/dist/inline/tokens.d.ts +3 -0
  176. package/dist/inline/tokens.d.ts.map +1 -0
  177. package/dist/inline/tokens.js +10 -0
  178. package/dist/inline/tokens.js.map +1 -0
  179. package/dist/layout/responsive.d.ts +38 -0
  180. package/dist/layout/responsive.d.ts.map +1 -0
  181. package/dist/layout/responsive.js +49 -0
  182. package/dist/layout/responsive.js.map +1 -0
  183. package/dist/menu/Menu.js +2 -2
  184. package/dist/menu/Menu.js.map +1 -1
  185. package/dist/number-input/NumberInput.css +12 -12
  186. package/dist/number-input/NumberInput.js +1 -1
  187. package/dist/number-input/NumberInput.js.map +1 -1
  188. package/dist/number-input/NumberInput.module.js +4 -4
  189. package/dist/number-input/NumberInput.module.js.map +1 -1
  190. package/dist/number-input/tokens.d.ts +3 -0
  191. package/dist/number-input/tokens.d.ts.map +1 -0
  192. package/dist/number-input/tokens.js +10 -0
  193. package/dist/number-input/tokens.js.map +1 -0
  194. package/dist/popover/Popover.css +13 -12
  195. package/dist/popover/Popover.js +2 -2
  196. package/dist/popover/Popover.js.map +1 -1
  197. package/dist/popover/Popover.module.js +3 -3
  198. package/dist/popover/Popover.module.js.map +1 -1
  199. package/dist/popover/tokens.d.ts +3 -0
  200. package/dist/popover/tokens.d.ts.map +1 -0
  201. package/dist/popover/tokens.js +19 -0
  202. package/dist/popover/tokens.js.map +1 -0
  203. package/dist/prose/Prose.css +141 -0
  204. package/dist/prose/Prose.d.ts +11 -0
  205. package/dist/prose/Prose.d.ts.map +1 -0
  206. package/dist/prose/Prose.js +18 -0
  207. package/dist/prose/Prose.js.map +1 -0
  208. package/dist/prose/Prose.module.js +8 -0
  209. package/dist/prose/Prose.module.js.map +1 -0
  210. package/dist/prose/tokens.d.ts +3 -0
  211. package/dist/prose/tokens.d.ts.map +1 -0
  212. package/dist/prose/tokens.js +33 -0
  213. package/dist/prose/tokens.js.map +1 -0
  214. package/dist/radio-group/RadioGroup.css +21 -20
  215. package/dist/radio-group/RadioGroup.d.ts.map +1 -1
  216. package/dist/radio-group/RadioGroup.js +2 -2
  217. package/dist/radio-group/RadioGroup.js.map +1 -1
  218. package/dist/radio-group/RadioGroup.module.js +6 -6
  219. package/dist/radio-group/RadioGroup.module.js.map +1 -1
  220. package/dist/radio-group/tokens.d.ts +3 -0
  221. package/dist/radio-group/tokens.d.ts.map +1 -0
  222. package/dist/radio-group/tokens.js +19 -0
  223. package/dist/radio-group/tokens.js.map +1 -0
  224. package/dist/root/PanneauRoot.css +243 -20
  225. package/dist/root/PanneauRoot.d.ts +28 -4
  226. package/dist/root/PanneauRoot.d.ts.map +1 -1
  227. package/dist/root/PanneauRoot.js +104 -21
  228. package/dist/root/PanneauRoot.js.map +1 -1
  229. package/dist/root/PanneauRoot.module.js +11 -3
  230. package/dist/root/PanneauRoot.module.js.map +1 -1
  231. package/dist/root/ThemeScope.d.ts +24 -0
  232. package/dist/root/ThemeScope.d.ts.map +1 -0
  233. package/dist/root/ThemeScope.js +49 -0
  234. package/dist/root/ThemeScope.js.map +1 -0
  235. package/dist/select/ListBox.css +23 -22
  236. package/dist/select/ListBox.module.js +12 -12
  237. package/dist/select/ListBox.module.js.map +1 -1
  238. package/dist/select/Select.js +1 -1
  239. package/dist/select/Select.js.map +1 -1
  240. package/dist/select/listBoxTokens.d.ts +3 -0
  241. package/dist/select/listBoxTokens.d.ts.map +1 -0
  242. package/dist/select/listBoxTokens.js +19 -0
  243. package/dist/select/listBoxTokens.js.map +1 -0
  244. package/dist/spinner/Spinner.css +8 -8
  245. package/dist/spinner/Spinner.js +1 -1
  246. package/dist/spinner/Spinner.js.map +1 -1
  247. package/dist/spinner/Spinner.module.js +5 -5
  248. package/dist/spinner/Spinner.module.js.map +1 -1
  249. package/dist/spinner/tokens.d.ts +3 -0
  250. package/dist/spinner/tokens.d.ts.map +1 -0
  251. package/dist/spinner/tokens.js +10 -0
  252. package/dist/spinner/tokens.js.map +1 -0
  253. package/dist/stack/Stack.css +135 -0
  254. package/dist/stack/Stack.d.ts +15 -0
  255. package/dist/stack/Stack.d.ts.map +1 -0
  256. package/dist/stack/Stack.js +21 -0
  257. package/dist/stack/Stack.js.map +1 -0
  258. package/dist/stack/Stack.module.js +8 -0
  259. package/dist/stack/Stack.module.js.map +1 -0
  260. package/dist/stack/tokens.d.ts +3 -0
  261. package/dist/stack/tokens.d.ts.map +1 -0
  262. package/dist/stack/tokens.js +10 -0
  263. package/dist/stack/tokens.js.map +1 -0
  264. package/dist/switch/Switch.css +34 -25
  265. package/dist/switch/Switch.d.ts.map +1 -1
  266. package/dist/switch/Switch.js +1 -0
  267. package/dist/switch/Switch.js.map +1 -1
  268. package/dist/switch/Switch.module.js +4 -4
  269. package/dist/switch/Switch.module.js.map +1 -1
  270. package/dist/switch/tokens.d.ts +3 -0
  271. package/dist/switch/tokens.d.ts.map +1 -0
  272. package/dist/switch/tokens.js +25 -0
  273. package/dist/switch/tokens.js.map +1 -0
  274. package/dist/tabs/Tabs.css +24 -23
  275. package/dist/tabs/Tabs.js +4 -4
  276. package/dist/tabs/Tabs.js.map +1 -1
  277. package/dist/tabs/Tabs.module.js +4 -4
  278. package/dist/tabs/Tabs.module.js.map +1 -1
  279. package/dist/tabs/tokens.d.ts +3 -0
  280. package/dist/tabs/tokens.d.ts.map +1 -0
  281. package/dist/tabs/tokens.js +25 -0
  282. package/dist/tabs/tokens.js.map +1 -0
  283. package/dist/text/Text.css +74 -0
  284. package/dist/text/Text.d.ts +27 -0
  285. package/dist/text/Text.d.ts.map +1 -0
  286. package/dist/text/Text.js +16 -0
  287. package/dist/text/Text.js.map +1 -0
  288. package/dist/text/Text.module.js +30 -0
  289. package/dist/text/Text.module.js.map +1 -0
  290. package/dist/text/tokens.d.ts +3 -0
  291. package/dist/text/tokens.d.ts.map +1 -0
  292. package/dist/text/tokens.js +10 -0
  293. package/dist/text/tokens.js.map +1 -0
  294. package/dist/text-area/TextArea.css +1 -1
  295. package/dist/text-area/TextArea.js +1 -1
  296. package/dist/text-area/TextArea.js.map +1 -1
  297. package/dist/text-area/TextArea.module.js +1 -1
  298. package/dist/text-input/TextInput.js +1 -1
  299. package/dist/text-input/TextInput.js.map +1 -1
  300. package/dist/theme/Tone.css +70 -0
  301. package/dist/theme/Tone.module.js +20 -0
  302. package/dist/theme/Tone.module.js.map +1 -0
  303. package/dist/theme/bootstrap.d.ts +10 -0
  304. package/dist/theme/bootstrap.d.ts.map +1 -1
  305. package/dist/theme/bootstrap.js +48 -5
  306. package/dist/theme/bootstrap.js.map +1 -1
  307. package/dist/theme/chartColors.d.ts +23 -0
  308. package/dist/theme/chartColors.d.ts.map +1 -0
  309. package/dist/theme/chartColors.js +27 -0
  310. package/dist/theme/chartColors.js.map +1 -0
  311. package/dist/theme/checkTheme.d.ts +39 -0
  312. package/dist/theme/checkTheme.d.ts.map +1 -0
  313. package/dist/theme/checkTheme.js +132 -0
  314. package/dist/theme/checkTheme.js.map +1 -0
  315. package/dist/theme/cli.d.ts +14 -0
  316. package/dist/theme/cli.d.ts.map +1 -0
  317. package/dist/theme/cli.js +61 -0
  318. package/dist/theme/cli.js.map +1 -0
  319. package/dist/theme/color.d.ts +30 -0
  320. package/dist/theme/color.d.ts.map +1 -0
  321. package/dist/theme/color.js +94 -0
  322. package/dist/theme/color.js.map +1 -0
  323. package/dist/theme/colorVision.d.ts +23 -0
  324. package/dist/theme/colorVision.d.ts.map +1 -0
  325. package/dist/theme/colorVision.js +140 -0
  326. package/dist/theme/colorVision.js.map +1 -0
  327. package/dist/theme/componentTokens.d.ts +24 -0
  328. package/dist/theme/componentTokens.d.ts.map +1 -0
  329. package/dist/theme/componentTokens.js +20 -0
  330. package/dist/theme/componentTokens.js.map +1 -0
  331. package/dist/theme/components.d.ts +38 -0
  332. package/dist/theme/components.d.ts.map +1 -0
  333. package/dist/theme/components.js +65 -0
  334. package/dist/theme/components.js.map +1 -0
  335. package/dist/theme/defineTheme.d.ts +85 -0
  336. package/dist/theme/defineTheme.d.ts.map +1 -0
  337. package/dist/theme/defineTheme.js +130 -0
  338. package/dist/theme/defineTheme.js.map +1 -0
  339. package/dist/theme/fonts.d.ts +32 -0
  340. package/dist/theme/fonts.d.ts.map +1 -0
  341. package/dist/theme/fonts.js +36 -0
  342. package/dist/theme/fonts.js.map +1 -0
  343. package/dist/theme/index.d.ts +13 -0
  344. package/dist/theme/index.d.ts.map +1 -0
  345. package/dist/theme/index.js +10 -0
  346. package/dist/theme/semanticTokens.d.ts +9 -0
  347. package/dist/theme/semanticTokens.d.ts.map +1 -0
  348. package/dist/theme/semanticTokens.js +110 -0
  349. package/dist/theme/semanticTokens.js.map +1 -0
  350. package/dist/theme/theme.d.ts +61 -7
  351. package/dist/theme/theme.d.ts.map +1 -1
  352. package/dist/theme/theme.js +100 -10
  353. package/dist/theme/theme.js.map +1 -1
  354. package/dist/theme/toneClass.d.ts +8 -0
  355. package/dist/theme/toneClass.d.ts.map +1 -0
  356. package/dist/theme/toneClass.js +15 -0
  357. package/dist/theme/toneClass.js.map +1 -0
  358. package/dist/theme/tones.d.ts +89 -0
  359. package/dist/theme/tones.d.ts.map +1 -0
  360. package/dist/theme/tones.js +127 -0
  361. package/dist/theme/tones.js.map +1 -0
  362. package/dist/time-input/TimeInput.js +1 -1
  363. package/dist/time-input/TimeInput.js.map +1 -1
  364. package/dist/toast/Toast.css +22 -44
  365. package/dist/toast/Toast.d.ts +5 -3
  366. package/dist/toast/Toast.d.ts.map +1 -1
  367. package/dist/toast/Toast.js +4 -3
  368. package/dist/toast/Toast.js.map +1 -1
  369. package/dist/toast/Toast.module.js +10 -16
  370. package/dist/toast/Toast.module.js.map +1 -1
  371. package/dist/toast/tokens.d.ts +3 -0
  372. package/dist/toast/tokens.d.ts.map +1 -0
  373. package/dist/toast/tokens.js +21 -0
  374. package/dist/toast/tokens.js.map +1 -0
  375. package/dist/tooltip/Tooltip.css +12 -11
  376. package/dist/tooltip/Tooltip.js +1 -1
  377. package/dist/tooltip/Tooltip.js.map +1 -1
  378. package/dist/tooltip/Tooltip.module.js +2 -2
  379. package/dist/tooltip/Tooltip.module.js.map +1 -1
  380. package/dist/tooltip/tokens.d.ts +3 -0
  381. package/dist/tooltip/tokens.d.ts.map +1 -0
  382. package/dist/tooltip/tokens.js +21 -0
  383. package/dist/tooltip/tokens.js.map +1 -0
  384. package/dist/utils/cx.d.ts +1 -1
  385. package/dist/utils/cx.d.ts.map +1 -1
  386. package/dist/utils/cx.js +2 -2
  387. package/dist/utils/cx.js.map +1 -1
  388. package/package.json +15 -3
@@ -0,0 +1,49 @@
1
+ //#region src/layout/responsive.ts
2
+ /**
3
+ * Breakpoints of the layout primitives, like Bootstrap's `$grid-breakpoints`: the minimum width of
4
+ * the nearest container at which a responsive value applies. They are constants, since CSS
5
+ * variables can't be used in queries; the stylesheets of the primitives use the same values.
6
+ */
7
+ var BREAKPOINTS = Object.freeze({
8
+ sm: "40rem",
9
+ md: "48rem",
10
+ lg: "64rem",
11
+ xl: "80rem"
12
+ });
13
+ /** The CSS value of a step of the space scale. */
14
+ function space(step) {
15
+ return step === 0 ? "0" : `var(--panneau-space-${step})`;
16
+ }
17
+ var KEYS = ["base", ...Object.keys(BREAKPOINTS)];
18
+ function isByBreakpoint(value) {
19
+ return typeof value === "object" && value !== null;
20
+ }
21
+ /**
22
+ * The inline variables of a responsive prop, `--_panneau-<component>-<prop>-<breakpoint>`, which
23
+ * the static rules of the component read in each container query. Unset breakpoints fall back to
24
+ * smaller ones in CSS.
25
+ */
26
+ function responsiveVariables(component, prop, value, toCss) {
27
+ if (value === void 0) return {};
28
+ const values = isByBreakpoint(value) ? value : { base: value };
29
+ return Object.fromEntries(KEYS.flatMap((key) => {
30
+ const item = values[key];
31
+ return item !== void 0 ? [[`--_panneau-${component}-${prop}-${key}`, toCss(item)]] : [];
32
+ }));
33
+ }
34
+ /** Merges inline variables with the `style` prop, which wins. */
35
+ function withVariables(variables, style) {
36
+ const merged = Object.assign({}, ...variables);
37
+ return Object.keys(merged).length > 0 ? {
38
+ ...merged,
39
+ ...style
40
+ } : style;
41
+ }
42
+ /** The CSS value of a justification. */
43
+ function justification(value) {
44
+ return value === "between" ? "space-between" : value;
45
+ }
46
+ //#endregion
47
+ export { BREAKPOINTS, justification, responsiveVariables, space, withVariables };
48
+
49
+ //# sourceMappingURL=responsive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.js","names":[],"sources":["../../src/layout/responsive.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * Breakpoints of the layout primitives, like Bootstrap's `$grid-breakpoints`: the minimum width of\n * the nearest container at which a responsive value applies. They are constants, since CSS\n * variables can't be used in queries; the stylesheets of the primitives use the same values.\n */\nexport const BREAKPOINTS = Object.freeze({\n sm: '40rem',\n md: '48rem',\n lg: '64rem',\n xl: '80rem',\n});\n\n/** A breakpoint: `sm`, `md`, `lg` or `xl`. */\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\n/**\n * A value, or values by breakpoint: `{ base: 1, md: 2, lg: 3 }`. Each value applies from its\n * breakpoint up, until a larger one sets another. Breakpoints are widths of the nearest container\n * (`PanneauRoot`, `Container`, a form, a list), not of the viewport, so that a grid in a narrow\n * sidebar behaves as on a phone.\n */\nexport type Responsive<T> = T | Partial<Record<'base' | Breakpoint, T>>;\n\n/** A step of the space scale of the theme (`--panneau-space-<step>`), or 0. */\nexport type Space = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10;\n\n/** The CSS value of a step of the space scale. */\nexport function space(step: Space): string {\n return step === 0 ? '0' : `var(--panneau-space-${step})`;\n}\n\nconst KEYS = ['base', ...(Object.keys(BREAKPOINTS) as Breakpoint[])] as const;\n\nfunction isByBreakpoint<T>(value: Responsive<T>): value is Partial<Record<'base' | Breakpoint, T>> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * The inline variables of a responsive prop, `--_panneau-<component>-<prop>-<breakpoint>`, which\n * the static rules of the component read in each container query. Unset breakpoints fall back to\n * smaller ones in CSS.\n */\nexport function responsiveVariables<T>(\n component: string,\n prop: string,\n value: Responsive<T> | undefined,\n toCss: (value: T) => string,\n): Record<string, string> {\n if (value === undefined) {\n return {};\n }\n const values: Partial<Record<'base' | Breakpoint, T>> = isByBreakpoint(value)\n ? value\n : { base: value };\n return Object.fromEntries(\n KEYS.flatMap((key) => {\n const item = values[key];\n return item !== undefined\n ? [[`--_panneau-${component}-${prop}-${key}`, toCss(item)]]\n : [];\n }),\n );\n}\n\n/** Merges inline variables with the `style` prop, which wins. */\nexport function withVariables(\n variables: Record<string, string>[],\n style: CSSProperties | undefined,\n): CSSProperties | undefined {\n const merged = Object.assign({}, ...variables) as Record<string, string>;\n return Object.keys(merged).length > 0 ? { ...merged, ...style } : style;\n}\n\n/** How the primitives distribute items along their axis: `between` is `space-between`. */\nexport type Justification = 'start' | 'center' | 'end' | 'between';\n\n/** The CSS value of a justification. */\nexport function justification(value: Justification): string {\n return value === 'between' ? 'space-between' : value;\n}\n"],"mappings":";;;;;;AAOA,IAAa,cAAc,OAAO,OAAO;CACrC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACR,CAAC;;AAiBD,SAAgB,MAAM,MAAqB;CACvC,OAAO,SAAS,IAAI,MAAM,uBAAuB,KAAI;AACzD;AAEA,IAAM,OAAO,CAAC,QAAQ,GAAI,OAAO,KAAK,WAAW,CAAkB;AAEnE,SAAS,eAAkB,OAAwE;CAC/F,OAAO,OAAO,UAAU,YAAY,UAAU;AAClD;;;;;;AAOA,SAAgB,oBACZ,WACA,MACA,OACA,OACsB;CACtB,IAAI,UAAU,KAAA,GACV,OAAO,CAAC;CAEZ,MAAM,SAAkD,eAAe,KAAK,IACtE,QACA,EAAE,MAAM,MAAM;CACpB,OAAO,OAAO,YACV,KAAK,SAAS,QAAQ;EAClB,MAAM,OAAO,OAAO;EACpB,OAAO,SAAS,KAAA,IACV,CAAC,CAAC,cAAc,UAAS,GAAI,KAAI,GAAI,OAAO,MAAM,IAAI,CAAC,CAAC,IACxD,CAAA;CACV,CAAC,CACL;AACJ;;AAGA,SAAgB,cACZ,WACA,OACyB;CACzB,MAAM,SAAS,OAAO,OAAO,CAAC,GAAG,GAAG,SAAS;CAC7C,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,IAAI;EAAE,GAAG;EAAQ,GAAG;CAAM,IAAI;AACtE;;AAMA,SAAgB,cAAc,OAA8B;CACxD,OAAO,UAAU,YAAY,kBAAkB;AACnD"}
package/dist/menu/Menu.js CHANGED
@@ -16,7 +16,7 @@ function Menu$1({ className, popoverClassName, placement = "bottom start", ...pr
16
16
  className: popoverClassName,
17
17
  children: /* @__PURE__ */ jsx(Menu, {
18
18
  ...props,
19
- className: cx(ListBox_module_default.listBox, className)
19
+ className: cx("panneau-menu", ListBox_module_default.listBox, className)
20
20
  })
21
21
  });
22
22
  }
@@ -25,7 +25,7 @@ function MenuItem$1({ children, icon, description, isDanger = false, className,
25
25
  return /* @__PURE__ */ jsxs(MenuItem, {
26
26
  ...props,
27
27
  textValue: textValue ?? (typeof children === "string" ? children : void 0),
28
- className: cx(ListBox_module_default.item, className),
28
+ className: cx("panneau-menu-item", ListBox_module_default.item, className),
29
29
  "data-danger": isDanger || void 0,
30
30
  children: [icon !== void 0 ? /* @__PURE__ */ jsx(Icon, { icon }) : null, /* @__PURE__ */ jsxs("span", {
31
31
  className: ListBox_module_default.itemText,
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","names":["Menu","AriaMenu","styles","MenuItem","AriaMenuItem","_c"],"sources":["../../src/menu/Menu.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n type MenuItemProps as AriaMenuItemProps,\n type MenuProps as AriaMenuProps,\n Separator,\n Text,\n} from 'react-aria-components';\n\nimport { Icon, type IconComponent } from '../icon/Icon';\nimport { PopoverSurface } from '../popover/Popover';\nimport styles from '../select/ListBox.module.css';\nimport { cx } from '../utils/cx';\n\nexport interface MenuProps<T extends object> extends Omit<AriaMenuProps<T>, 'className' | 'style'> {\n className?: string;\n popoverClassName?: string;\n placement?: 'bottom start' | 'bottom end' | 'top start' | 'top end';\n}\n\n/**\n * A menu of actions, inside a `MenuTrigger` with its button as the first child. Arrow keys move\n * between items, and typing a letter jumps to an item.\n */\nexport function Menu<T extends object>({\n className,\n popoverClassName,\n placement = 'bottom start',\n ...props\n}: MenuProps<T>) {\n return (\n <PopoverSurface placement={placement} className={popoverClassName}>\n <AriaMenu {...props} className={cx(styles.listBox, className)} />\n </PopoverSurface>\n );\n}\n\nexport interface MenuItemProps extends Omit<AriaMenuItemProps, 'className' | 'style' | 'children'> {\n children?: ReactNode;\n icon?: IconComponent;\n description?: string;\n /** Styles the item as destructive. */\n isDanger?: boolean;\n className?: string;\n}\n\n/** An item of a `Menu`. */\nexport function MenuItem({\n children,\n icon,\n description,\n isDanger = false,\n className,\n textValue,\n ...props\n}: MenuItemProps) {\n return (\n <AriaMenuItem\n {...props}\n textValue={textValue ?? (typeof children === 'string' ? children : undefined)}\n className={cx(styles.item, className)}\n data-danger={isDanger || undefined}\n >\n {icon !== undefined ? <Icon icon={icon} /> : null}\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {children}\n </Text>\n {description !== undefined ? (\n <Text slot=\"description\" className={styles.itemDescription}>\n {description}\n </Text>\n ) : null}\n </span>\n </AriaMenuItem>\n );\n}\n\n/** A line between groups of menu items. */\nexport function MenuSeparator() {\n return <Separator className={styles.separator} />;\n}\n\nexport { MenuTrigger } from 'react-aria-components';\n"],"mappings":";;;;;;;;;;;;AAyBA,SAAgBA,OAAuB,EACnC,WACA,kBACA,YAAY,gBACZ,GAAG,SACU;CACb,OACI,oBAAC,gBAAD;EAA2B;EAAW,WAAW;EAC7C,UAAA,oBAACC,MAAD;GAAU,GAAI;GAAO,WAAW,GAAGC,uBAAO,SAAS,SAAS;EAAE,CAAA;CAClD,CAAA;AAExB;;AAYA,SAAgBC,WAAS,EACrB,UACA,MACA,aACA,WAAW,OACX,WACA,WACA,GAAG,SACW;CACd,OACI,qBAACC,UAAD;EACI,GAAI;EACJ,WAAW,cAAc,OAAO,aAAa,WAAW,WAAW,KAAA;EACnE,WAAW,GAAGF,uBAAO,MAAM,SAAS;EACpC,eAAa,YAAY,KAAA;EAJ7B,UAAA,CAMK,SAAS,KAAA,IAAY,oBAAC,MAAD,EAAY,KAAK,CAAA,IAAM,MAC7C,qBAAC,QAAD;GAAM,WAAWA,uBAAO;GAAxB,UAAA,CACI,oBAAC,MAAD;IAAM,MAAK;IAAQ,WAAWA,uBAAO;IAChC;GACC,CAAA,GACL,gBAAgB,KAAA,IACb,oBAAC,MAAD;IAAM,MAAK;IAAc,WAAWA,uBAAO;IACtC,UAAA;GACC,CAAA,IACN,IACF;EACI,CAAA,CAAA;;AAEtB;;AAGA,SAAO,gBAAA;CAAA,MAAA,IAAAG,EAAA,CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EACI,KAAA,oBAAC,WAAD,EAAsB,WAAAH,uBAAM,UAAU,CAAA;EAAI,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAA1C;AAA0C"}
1
+ {"version":3,"file":"Menu.js","names":["Menu","AriaMenu","styles","MenuItem","AriaMenuItem","_c"],"sources":["../../src/menu/Menu.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n type MenuItemProps as AriaMenuItemProps,\n type MenuProps as AriaMenuProps,\n Separator,\n Text,\n} from 'react-aria-components';\n\nimport { Icon, type IconComponent } from '../icon/Icon';\nimport { PopoverSurface } from '../popover/Popover';\nimport styles from '../select/ListBox.module.css';\nimport { cx } from '../utils/cx';\n\nexport interface MenuProps<T extends object> extends Omit<AriaMenuProps<T>, 'className' | 'style'> {\n className?: string;\n popoverClassName?: string;\n placement?: 'bottom start' | 'bottom end' | 'top start' | 'top end';\n}\n\n/**\n * A menu of actions, inside a `MenuTrigger` with its button as the first child. Arrow keys move\n * between items, and typing a letter jumps to an item.\n */\nexport function Menu<T extends object>({\n className,\n popoverClassName,\n placement = 'bottom start',\n ...props\n}: MenuProps<T>) {\n return (\n <PopoverSurface placement={placement} className={popoverClassName}>\n <AriaMenu {...props} className={cx('panneau-menu', styles.listBox, className)} />\n </PopoverSurface>\n );\n}\n\nexport interface MenuItemProps extends Omit<AriaMenuItemProps, 'className' | 'style' | 'children'> {\n children?: ReactNode;\n icon?: IconComponent;\n description?: string;\n /** Styles the item as destructive. */\n isDanger?: boolean;\n className?: string;\n}\n\n/** An item of a `Menu`. */\nexport function MenuItem({\n children,\n icon,\n description,\n isDanger = false,\n className,\n textValue,\n ...props\n}: MenuItemProps) {\n return (\n <AriaMenuItem\n {...props}\n textValue={textValue ?? (typeof children === 'string' ? children : undefined)}\n className={cx('panneau-menu-item', styles.item, className)}\n data-danger={isDanger || undefined}\n >\n {icon !== undefined ? <Icon icon={icon} /> : null}\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {children}\n </Text>\n {description !== undefined ? (\n <Text slot=\"description\" className={styles.itemDescription}>\n {description}\n </Text>\n ) : null}\n </span>\n </AriaMenuItem>\n );\n}\n\n/** A line between groups of menu items. */\nexport function MenuSeparator() {\n return <Separator className={styles.separator} />;\n}\n\nexport { MenuTrigger } from 'react-aria-components';\n"],"mappings":";;;;;;;;;;;;AAyBA,SAAgBA,OAAuB,EACnC,WACA,kBACA,YAAY,gBACZ,GAAG,SACU;CACb,OACI,oBAAC,gBAAD;EAA2B;EAAW,WAAW;EAC7C,UAAA,oBAACC,MAAD;GAAU,GAAI;GAAO,WAAW,GAAG,gBAAgBC,uBAAO,SAAS,SAAS;EAAE,CAAA;CAClE,CAAA;AAExB;;AAYA,SAAgBC,WAAS,EACrB,UACA,MACA,aACA,WAAW,OACX,WACA,WACA,GAAG,SACW;CACd,OACI,qBAACC,UAAD;EACI,GAAI;EACJ,WAAW,cAAc,OAAO,aAAa,WAAW,WAAW,KAAA;EACnE,WAAW,GAAG,qBAAqBF,uBAAO,MAAM,SAAS;EACzD,eAAa,YAAY,KAAA;EAJ7B,UAAA,CAMK,SAAS,KAAA,IAAY,oBAAC,MAAD,EAAY,KAAK,CAAA,IAAM,MAC7C,qBAAC,QAAD;GAAM,WAAWA,uBAAO;GAAxB,UAAA,CACI,oBAAC,MAAD;IAAM,MAAK;IAAQ,WAAWA,uBAAO;IAChC;GACC,CAAA,GACL,gBAAgB,KAAA,IACb,oBAAC,MAAD;IAAM,MAAK;IAAc,WAAWA,uBAAO;IACtC,UAAA;GACC,CAAA,IACN,IACF;EACI,CAAA,CAAA;;AAEtB;;AAGA,SAAO,gBAAA;CAAA,MAAA,IAAAG,EAAA,CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EACI,KAAA,oBAAC,WAAD,EAAsB,WAAAH,uBAAM,UAAU,CAAA;EAAI,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAA1C;AAA0C"}
@@ -1,25 +1,25 @@
1
- .panneau-control-4aptNi.panneau-control-4aptNi {
1
+ .panneau-number-input-control.panneau-number-input-control {
2
2
  padding-inline-end: 0;
3
3
  overflow: hidden;
4
4
  }
5
5
 
6
- .panneau-input-qqs-MV {
7
- font-variant-numeric: tabular-nums;
6
+ .panneau-number-input-input {
7
+ font-variant-numeric: var(--panneau-font-numeric);
8
8
  }
9
9
 
10
- .panneau-steppers-JoTs6w {
10
+ .panneau-number-input-steppers {
11
11
  display: flex;
12
12
  flex-direction: column;
13
13
  align-self: stretch;
14
14
  border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border);
15
15
  }
16
16
 
17
- .panneau-stepper-sAGR2f {
17
+ .panneau-number-input-stepper {
18
18
  display: flex;
19
19
  flex: 1 1 0;
20
20
  align-items: center;
21
21
  justify-content: center;
22
- width: 1.75rem;
22
+ width: var(--panneau-number-input-stepper-width, 1.75rem);
23
23
  padding: 0;
24
24
  color: var(--panneau-color-text-muted);
25
25
  cursor: pointer;
@@ -27,31 +27,31 @@
27
27
  border: 0;
28
28
  }
29
29
 
30
- .panneau-stepper-sAGR2f + .panneau-stepper-sAGR2f {
30
+ .panneau-number-input-stepper + .panneau-number-input-stepper {
31
31
  border-top: var(--panneau-border-width) solid var(--panneau-color-border);
32
32
  }
33
33
 
34
- .panneau-stepper-sAGR2f[data-hovered] {
34
+ .panneau-number-input-stepper[data-hovered] {
35
35
  color: var(--panneau-color-text);
36
36
  background-color: var(--panneau-color-hover);
37
37
  }
38
38
 
39
- .panneau-stepper-sAGR2f[data-pressed] {
39
+ .panneau-number-input-stepper[data-pressed] {
40
40
  background-color: var(--panneau-color-pressed);
41
41
  }
42
42
 
43
- .panneau-stepper-sAGR2f[data-disabled] {
43
+ .panneau-number-input-stepper[data-disabled] {
44
44
  cursor: not-allowed;
45
45
  opacity: 0.5;
46
46
  }
47
47
 
48
48
  /* Touch screens have their own keyboard for numbers: the steppers would be too small. */
49
49
  @media (pointer: coarse) {
50
- .panneau-steppers-JoTs6w {
50
+ .panneau-number-input-steppers {
51
51
  display: none;
52
52
  }
53
53
 
54
- .panneau-control-4aptNi.panneau-control-4aptNi {
54
+ .panneau-number-input-control.panneau-number-input-control {
55
55
  padding-inline-end: var(--panneau-space-3);
56
56
  }
57
57
  }
@@ -25,7 +25,7 @@ function NumberInput({ label, description, errors = [], value, defaultValue, onC
25
25
  isReadOnly,
26
26
  isInvalid: invalid,
27
27
  validationBehavior: "aria",
28
- className: cx(Field_module_default.field, className),
28
+ className: cx("panneau-number-input", Field_module_default.field, className),
29
29
  children: [
30
30
  /* @__PURE__ */ jsx(FieldLabel, {
31
31
  isRequired,
@@ -1 +1 @@
1
- {"version":3,"file":"NumberInput.js","names":["fieldStyles","styles"],"sources":["../../src/number-input/NumberInput.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n type NumberFieldProps as AriaNumberFieldProps,\n Button,\n Group,\n Input,\n NumberField,\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 { cx } from '../utils/cx';\nimport styles from './NumberInput.module.css';\n\nexport interface NumberInputProps\n extends\n Omit<\n AriaNumberFieldProps,\n | 'className'\n | 'style'\n | 'children'\n | 'isInvalid'\n | 'validate'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n >,\n FieldChromeProps {\n /** The number, or `null` when empty. */\n value?: number | null;\n defaultValue?: number | null;\n /** Called with the number, or `null` when the input is cleared. */\n onChange?: (value: number | null) => void;\n placeholder?: string;\n /** Content after the number, inside the control: a unit. */\n suffix?: ReactNode;\n controlClassName?: string;\n inputClassName?: string;\n}\n\nfunction toAria(value: number | null | undefined): number | undefined {\n return value === null ? Number.NaN : value;\n}\n\n/**\n * A number input, formatted for the locale, with steppers and arrow keys. An empty input is\n * `null`, not `NaN`.\n */\nexport function NumberInput({\n label,\n description,\n errors = [],\n value,\n defaultValue,\n onChange,\n placeholder,\n suffix,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n inputClassName,\n isRequired,\n isReadOnly,\n ...props\n}: NumberInputProps) {\n const invalid = errors.length > 0;\n return (\n <NumberField\n {...props}\n value={toAria(value)}\n defaultValue={toAria(defaultValue)}\n onChange={(next) => onChange?.(Number.isNaN(next) ? null : next)}\n isRequired={isRequired}\n isReadOnly={isReadOnly}\n isInvalid={invalid}\n validationBehavior=\"aria\"\n className={cx(fieldStyles.field, className)}\n >\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Group\n className={cx(fieldStyles.control, styles.control, controlClassName)}\n data-invalid={invalid || undefined}\n data-readonly={isReadOnly || undefined}\n >\n <Input\n placeholder={placeholder}\n className={cx(fieldStyles.bare, styles.input, inputClassName)}\n />\n {suffix !== undefined ? (\n <span className={fieldStyles.adornment}>{suffix}</span>\n ) : null}\n {isReadOnly !== true ? (\n <span className={styles.steppers}>\n <Button slot=\"increment\" className={styles.stepper}>\n <Icon icon={ChevronUp} size=\"xs\" />\n </Button>\n <Button slot=\"decrement\" className={styles.stepper}>\n <Icon icon={ChevronDown} size=\"xs\" />\n </Button>\n </span>\n ) : null}\n </Group>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n </NumberField>\n );\n}\n"],"mappings":";;;;;;;;;AA+CA,SAAS,OAAO,OAAsD;CAClE,OAAO,UAAU,OAAO,MAAa;AACzC;;;;;AAMA,SAAgB,YAAY,EACxB,OACA,aACA,SAAS,CAAA,GACT,OACA,cACA,UACA,aACA,QACA,WACA,gBACA,sBACA,iBACA,kBACA,gBACA,YACA,YACA,GAAG,SACc;CACjB,MAAM,UAAU,OAAO,SAAS;CAChC,OACI,qBAAC,aAAD;EACI,GAAI;EACJ,OAAO,OAAO,KAAK;EACnB,cAAc,OAAO,YAAY;EACjC,WAAW,SAAS,WAAW,OAAO,MAAM,IAAI,IAAI,OAAO,IAAI;EACnD;EACA;EACZ,WAAW;EACX,oBAAmB;EACnB,WAAW,GAAGA,qBAAY,OAAO,SAAS;EAT9C,UAAA;GAWI,oBAAC,YAAD;IAAwB;IAAY,WAAW;IAC1C,UAAA;GACO,CAAA;GACZ,qBAAC,OAAD;IACI,WAAW,GAAGA,qBAAY,SAASC,2BAAO,SAAS,gBAAgB;IACnE,gBAAc,WAAW,KAAA;IACzB,iBAAe,cAAc,KAAA;IAHjC,UAAA;KAKI,oBAAC,OAAD;MACiB;MACb,WAAW,GAAGD,qBAAY,MAAMC,2BAAO,OAAO,cAAc;KAAE,CAAA;KAEjE,WAAW,KAAA,IACR,oBAAC,QAAD;MAAM,WAAWD,qBAAY;MAAY,UAAA;KAAa,CAAA,IACtD;KACH,eAAe,OACZ,qBAAC,QAAD;MAAM,WAAWC,2BAAO;MAAxB,UAAA,CACI,oBAAC,QAAD;OAAQ,MAAK;OAAY,WAAWA,2BAAO;OACvC,UAAA,oBAAC,MAAD;QAAM,MAAM;QAAW,MAAK;OAAI,CAAA;MAC5B,CAAA,GACR,oBAAC,QAAD;OAAQ,MAAK;OAAY,WAAWA,2BAAO;OACvC,UAAA,oBAAC,MAAD;QAAM,MAAM;QAAa,MAAK;OAAI,CAAA;MAC9B,CAAA,CACN;KACN,CAAA,IAAA;IACD;;GACP,oBAAC,kBAAD;IAAkB,WAAW;IAAuB,UAAA;GAA8B,CAAA;GAClF,oBAAC,aAAD;IAAqB;IAAQ,WAAW;GAAgB,CAAA;EAC/C;;AAErB"}
1
+ {"version":3,"file":"NumberInput.js","names":["fieldStyles","styles"],"sources":["../../src/number-input/NumberInput.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport {\n type NumberFieldProps as AriaNumberFieldProps,\n Button,\n Group,\n Input,\n NumberField,\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 { cx } from '../utils/cx';\nimport styles from './NumberInput.module.css';\n\nexport interface NumberInputProps\n extends\n Omit<\n AriaNumberFieldProps,\n | 'className'\n | 'style'\n | 'children'\n | 'isInvalid'\n | 'validate'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n >,\n FieldChromeProps {\n /** The number, or `null` when empty. */\n value?: number | null;\n defaultValue?: number | null;\n /** Called with the number, or `null` when the input is cleared. */\n onChange?: (value: number | null) => void;\n placeholder?: string;\n /** Content after the number, inside the control: a unit. */\n suffix?: ReactNode;\n controlClassName?: string;\n inputClassName?: string;\n}\n\nfunction toAria(value: number | null | undefined): number | undefined {\n return value === null ? Number.NaN : value;\n}\n\n/**\n * A number input, formatted for the locale, with steppers and arrow keys. An empty input is\n * `null`, not `NaN`.\n */\nexport function NumberInput({\n label,\n description,\n errors = [],\n value,\n defaultValue,\n onChange,\n placeholder,\n suffix,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n inputClassName,\n isRequired,\n isReadOnly,\n ...props\n}: NumberInputProps) {\n const invalid = errors.length > 0;\n return (\n <NumberField\n {...props}\n value={toAria(value)}\n defaultValue={toAria(defaultValue)}\n onChange={(next) => onChange?.(Number.isNaN(next) ? null : next)}\n isRequired={isRequired}\n isReadOnly={isReadOnly}\n isInvalid={invalid}\n validationBehavior=\"aria\"\n className={cx('panneau-number-input', fieldStyles.field, className)}\n >\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Group\n className={cx(fieldStyles.control, styles.control, controlClassName)}\n data-invalid={invalid || undefined}\n data-readonly={isReadOnly || undefined}\n >\n <Input\n placeholder={placeholder}\n className={cx(fieldStyles.bare, styles.input, inputClassName)}\n />\n {suffix !== undefined ? (\n <span className={fieldStyles.adornment}>{suffix}</span>\n ) : null}\n {isReadOnly !== true ? (\n <span className={styles.steppers}>\n <Button slot=\"increment\" className={styles.stepper}>\n <Icon icon={ChevronUp} size=\"xs\" />\n </Button>\n <Button slot=\"decrement\" className={styles.stepper}>\n <Icon icon={ChevronDown} size=\"xs\" />\n </Button>\n </span>\n ) : null}\n </Group>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n </NumberField>\n );\n}\n"],"mappings":";;;;;;;;;AA+CA,SAAS,OAAO,OAAsD;CAClE,OAAO,UAAU,OAAO,MAAa;AACzC;;;;;AAMA,SAAgB,YAAY,EACxB,OACA,aACA,SAAS,CAAA,GACT,OACA,cACA,UACA,aACA,QACA,WACA,gBACA,sBACA,iBACA,kBACA,gBACA,YACA,YACA,GAAG,SACc;CACjB,MAAM,UAAU,OAAO,SAAS;CAChC,OACI,qBAAC,aAAD;EACI,GAAI;EACJ,OAAO,OAAO,KAAK;EACnB,cAAc,OAAO,YAAY;EACjC,WAAW,SAAS,WAAW,OAAO,MAAM,IAAI,IAAI,OAAO,IAAI;EACnD;EACA;EACZ,WAAW;EACX,oBAAmB;EACnB,WAAW,GAAG,wBAAwBA,qBAAY,OAAO,SAAS;EATtE,UAAA;GAWI,oBAAC,YAAD;IAAwB;IAAY,WAAW;IAC1C,UAAA;GACO,CAAA;GACZ,qBAAC,OAAD;IACI,WAAW,GAAGA,qBAAY,SAASC,2BAAO,SAAS,gBAAgB;IACnE,gBAAc,WAAW,KAAA;IACzB,iBAAe,cAAc,KAAA;IAHjC,UAAA;KAKI,oBAAC,OAAD;MACiB;MACb,WAAW,GAAGD,qBAAY,MAAMC,2BAAO,OAAO,cAAc;KAAE,CAAA;KAEjE,WAAW,KAAA,IACR,oBAAC,QAAD;MAAM,WAAWD,qBAAY;MAAY,UAAA;KAAa,CAAA,IACtD;KACH,eAAe,OACZ,qBAAC,QAAD;MAAM,WAAWC,2BAAO;MAAxB,UAAA,CACI,oBAAC,QAAD;OAAQ,MAAK;OAAY,WAAWA,2BAAO;OACvC,UAAA,oBAAC,MAAD;QAAM,MAAM;QAAW,MAAK;OAAI,CAAA;MAC5B,CAAA,GACR,oBAAC,QAAD;OAAQ,MAAK;OAAY,WAAWA,2BAAO;OACvC,UAAA,oBAAC,MAAD;QAAM,MAAM;QAAa,MAAK;OAAI,CAAA;MAC9B,CAAA,CACN;KACN,CAAA,IAAA;IACD;;GACP,oBAAC,kBAAD;IAAkB,WAAW;IAAuB,UAAA;GAA8B,CAAA;GAClF,oBAAC,aAAD;IAAqB;IAAQ,WAAW;GAAgB,CAAA;EAC/C;;AAErB"}
@@ -1,9 +1,9 @@
1
1
  import "./NumberInput.css";
2
2
  //#region src/number-input/NumberInput.module.css
3
- var control = "panneau-control-4aptNi";
4
- var input = "panneau-input-qqs-MV";
5
- var steppers = "panneau-steppers-JoTs6w";
6
- var stepper = "panneau-stepper-sAGR2f";
3
+ var control = "panneau-number-input-control";
4
+ var input = "panneau-number-input-input";
5
+ var steppers = "panneau-number-input-steppers";
6
+ var stepper = "panneau-number-input-stepper";
7
7
  var NumberInput_module_default = {
8
8
  control,
9
9
  input,
@@ -1 +1 @@
1
- {"version":3,"file":"NumberInput.module.js","names":[],"sources":["../../src/number-input/NumberInput.module.css"],"sourcesContent":[".control.control {\n padding-inline-end: 0;\n overflow: hidden;\n}\n\n.input {\n font-variant-numeric: tabular-nums;\n}\n\n.steppers {\n display: flex;\n flex-direction: column;\n align-self: stretch;\n border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.stepper {\n display: flex;\n flex: 1 1 0;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n padding: 0;\n color: var(--panneau-color-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n}\n\n.stepper + .stepper {\n border-top: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.stepper[data-hovered] {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-hover);\n}\n\n.stepper[data-pressed] {\n background-color: var(--panneau-color-pressed);\n}\n\n.stepper[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Touch screens have their own keyboard for numbers: the steppers would be too small. */\n@media (pointer: coarse) {\n .steppers {\n display: none;\n }\n\n .control.control {\n padding-inline-end: var(--panneau-space-3);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"NumberInput.module.js","names":[],"sources":["../../src/number-input/NumberInput.module.css"],"sourcesContent":[".control.control {\n padding-inline-end: 0;\n overflow: hidden;\n}\n\n.input {\n font-variant-numeric: var(--panneau-font-numeric);\n}\n\n.steppers {\n display: flex;\n flex-direction: column;\n align-self: stretch;\n border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.stepper {\n display: flex;\n flex: 1 1 0;\n align-items: center;\n justify-content: center;\n width: var(--panneau-number-input-stepper-width, 1.75rem);\n padding: 0;\n color: var(--panneau-color-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n}\n\n.stepper + .stepper {\n border-top: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.stepper[data-hovered] {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-hover);\n}\n\n.stepper[data-pressed] {\n background-color: var(--panneau-color-pressed);\n}\n\n.stepper[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Touch screens have their own keyboard for numbers: the steppers would be too small. */\n@media (pointer: coarse) {\n .steppers {\n display: none;\n }\n\n .control.control {\n padding-inline-end: var(--panneau-space-3);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of NumberInput. */
2
+ export declare const numberInputTokens: import("..").ComponentTokens<"number-input", "panneau-number-input-stepper-width">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/number-input/tokens.ts"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,oFAG5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/number-input/tokens.ts
3
+ /** Tokens of NumberInput. */
4
+ var numberInputTokens = defineComponentTokens("number-input", {
5
+ /** Width of the increment and decrement buttons. */
6
+ "stepper-width": "1.75rem" });
7
+ //#endregion
8
+ export { numberInputTokens };
9
+
10
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../../src/number-input/tokens.ts"],"sourcesContent":["import { defineComponentTokens } from '../theme/componentTokens';\n\n/** Tokens of NumberInput. */\nexport const numberInputTokens = defineComponentTokens('number-input', {\n /** Width of the increment and decrement buttons. */\n 'stepper-width': '1.75rem',\n});\n"],"mappings":";;;AAGA,IAAa,oBAAoB,sBAAsB,gBAAgB;;AAEnE,iBAAiB,UACrB,CAAC"}
@@ -1,30 +1,31 @@
1
- .panneau-popover-KacUIM {
1
+ .panneau-popover {
2
2
  min-width: var(--trigger-width, 10rem);
3
3
  max-width: calc(100vw - 2 * var(--panneau-space-4));
4
4
  color: var(--panneau-color-text);
5
- background-color: var(--panneau-color-surface-raised);
6
- border: var(--panneau-border-width) solid var(--panneau-color-border);
7
- border-radius: var(--panneau-radius-lg);
8
- box-shadow: var(--panneau-shadow-lg);
5
+ background-color: var(--panneau-popover-bg, var(--panneau-color-surface-raised));
6
+ border: var(--panneau-border-width) solid
7
+ var(--panneau-popover-border-color, var(--panneau-color-border));
8
+ border-radius: var(--panneau-popover-radius, var(--panneau-radius-lg));
9
+ box-shadow: var(--panneau-popover-shadow, var(--panneau-shadow-lg));
9
10
  outline: none;
10
11
  overflow: auto;
11
12
  z-index: var(--panneau-z-overlay);
12
13
  }
13
14
 
14
- .panneau-popover-KacUIM[data-entering] {
15
- animation: panneau-pop-fB47s- var(--panneau-duration) ease-out;
15
+ .panneau-popover[data-entering] {
16
+ animation: panneau-popover-pop var(--panneau-duration) ease-out;
16
17
  }
17
18
 
18
- .panneau-popover-KacUIM[data-exiting] {
19
- animation: panneau-pop-fB47s- var(--panneau-duration) ease-in reverse;
19
+ .panneau-popover[data-exiting] {
20
+ animation: panneau-popover-pop var(--panneau-duration) ease-in reverse;
20
21
  }
21
22
 
22
- .panneau-dialog-2cVt0D {
23
- padding: var(--panneau-space-3);
23
+ .panneau-popover-dialog {
24
+ padding: var(--panneau-popover-padding, var(--panneau-space-3));
24
25
  outline: none;
25
26
  }
26
27
 
27
- @keyframes panneau-pop-fB47s- {
28
+ @keyframes panneau-popover-pop {
28
29
  from {
29
30
  opacity: 0;
30
31
  transform: scale(0.97);
@@ -14,7 +14,7 @@ function Popover$1({ children, "aria-label": ariaLabel, className, dialogClassNa
14
14
  return /* @__PURE__ */ jsx(Popover, {
15
15
  ...props,
16
16
  offset,
17
- className: cx(Popover_module_default.popover, className),
17
+ className: cx("panneau-popover", Popover_module_default.popover, className),
18
18
  UNSTABLE_portalContainer: container,
19
19
  children: /* @__PURE__ */ jsx(Dialog, {
20
20
  "aria-label": ariaLabel,
@@ -30,7 +30,7 @@ function PopoverSurface({ children, className, offset = 6, ...props }) {
30
30
  return /* @__PURE__ */ jsx(Popover, {
31
31
  ...props,
32
32
  offset,
33
- className: cx(Popover_module_default.popover, className),
33
+ className: cx("panneau-popover", Popover_module_default.popover, className),
34
34
  UNSTABLE_portalContainer: container,
35
35
  children
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","names":["Popover","AriaPopover","styles"],"sources":["../../src/popover/Popover.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport {\n Popover as AriaPopover,\n type PopoverProps as AriaPopoverProps,\n Dialog,\n} from 'react-aria-components';\n\nimport { usePortalContainer } from '../root/PanneauRoot';\nimport { cx } from '../utils/cx';\nimport styles from './Popover.module.css';\n\nexport interface PopoverProps extends Omit<\n AriaPopoverProps,\n 'className' | 'style' | 'children' | 'UNSTABLE_portalContainer'\n> {\n children?: ReactNode;\n /** Accessible label of the popover's dialog, when it has no heading. */\n 'aria-label'?: string;\n className?: string;\n dialogClassName?: string;\n}\n\n/**\n * A popover with free content, inside a `PopoverTrigger` with its button as the first child. Its\n * content is a non-modal dialog: focus moves into it and comes back to the button when it closes.\n */\nexport function Popover({\n children,\n 'aria-label': ariaLabel,\n className,\n dialogClassName,\n offset = 6,\n ...props\n}: PopoverProps) {\n const container = usePortalContainer();\n if (container === null) {\n return null;\n }\n return (\n <AriaPopover\n {...props}\n offset={offset}\n className={cx(styles.popover, className)}\n UNSTABLE_portalContainer={container}\n >\n <Dialog aria-label={ariaLabel} className={cx(styles.dialog, dialogClassName)}>\n {children}\n </Dialog>\n </AriaPopover>\n );\n}\n\n/** The popover surface without a dialog, for listboxes and menus. */\nexport function PopoverSurface({\n children,\n className,\n offset = 6,\n ...props\n}: Omit<PopoverProps, 'aria-label' | 'dialogClassName'>) {\n const container = usePortalContainer();\n if (container === null) {\n return null;\n }\n return (\n <AriaPopover\n {...props}\n offset={offset}\n className={cx(styles.popover, className)}\n UNSTABLE_portalContainer={container}\n >\n {children}\n </AriaPopover>\n );\n}\n\nexport { DialogTrigger as PopoverTrigger } from 'react-aria-components';\n"],"mappings":";;;;;;;;;;AA0BA,SAAgBA,UAAQ,EACpB,UACA,cAAc,WACd,WACA,iBACA,SAAS,GACT,GAAG,SACU;CACb,MAAM,YAAY,mBAAmB;CACrC,IAAI,cAAc,MACd,OAAO;CAEX,OACI,oBAACC,SAAD;EACI,GAAI;EACI;EACR,WAAW,GAAGC,uBAAO,SAAS,SAAS;EACvC,0BAA0B;EAE1B,UAAA,oBAAC,QAAD;GAAQ,cAAY;GAAW,WAAW,GAAGA,uBAAO,QAAQ,eAAe;GACtE;EACG,CAAA;CACC,CAAA;AAErB;;AAGA,SAAgB,eAAe,EAC3B,UACA,WACA,SAAS,GACT,GAAG,SACkD;CACrD,MAAM,YAAY,mBAAmB;CACrC,IAAI,cAAc,MACd,OAAO;CAEX,OACI,oBAACD,SAAD;EACI,GAAI;EACI;EACR,WAAW,GAAGC,uBAAO,SAAS,SAAS;EACvC,0BAA0B;EAEzB;CACQ,CAAA;AAErB"}
1
+ {"version":3,"file":"Popover.js","names":["Popover","AriaPopover","styles"],"sources":["../../src/popover/Popover.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport {\n Popover as AriaPopover,\n type PopoverProps as AriaPopoverProps,\n Dialog,\n} from 'react-aria-components';\n\nimport { usePortalContainer } from '../root/PanneauRoot';\nimport { cx } from '../utils/cx';\nimport styles from './Popover.module.css';\n\nexport interface PopoverProps extends Omit<\n AriaPopoverProps,\n 'className' | 'style' | 'children' | 'UNSTABLE_portalContainer'\n> {\n children?: ReactNode;\n /** Accessible label of the popover's dialog, when it has no heading. */\n 'aria-label'?: string;\n className?: string;\n dialogClassName?: string;\n}\n\n/**\n * A popover with free content, inside a `PopoverTrigger` with its button as the first child. Its\n * content is a non-modal dialog: focus moves into it and comes back to the button when it closes.\n */\nexport function Popover({\n children,\n 'aria-label': ariaLabel,\n className,\n dialogClassName,\n offset = 6,\n ...props\n}: PopoverProps) {\n const container = usePortalContainer();\n if (container === null) {\n return null;\n }\n return (\n <AriaPopover\n {...props}\n offset={offset}\n className={cx('panneau-popover', styles.popover, className)}\n UNSTABLE_portalContainer={container}\n >\n <Dialog aria-label={ariaLabel} className={cx(styles.dialog, dialogClassName)}>\n {children}\n </Dialog>\n </AriaPopover>\n );\n}\n\n/** The popover surface without a dialog, for listboxes and menus. */\nexport function PopoverSurface({\n children,\n className,\n offset = 6,\n ...props\n}: Omit<PopoverProps, 'aria-label' | 'dialogClassName'>) {\n const container = usePortalContainer();\n if (container === null) {\n return null;\n }\n return (\n <AriaPopover\n {...props}\n offset={offset}\n className={cx('panneau-popover', styles.popover, className)}\n UNSTABLE_portalContainer={container}\n >\n {children}\n </AriaPopover>\n );\n}\n\nexport { DialogTrigger as PopoverTrigger } from 'react-aria-components';\n"],"mappings":";;;;;;;;;;AA0BA,SAAgBA,UAAQ,EACpB,UACA,cAAc,WACd,WACA,iBACA,SAAS,GACT,GAAG,SACU;CACb,MAAM,YAAY,mBAAmB;CACrC,IAAI,cAAc,MACd,OAAO;CAEX,OACI,oBAACC,SAAD;EACI,GAAI;EACI;EACR,WAAW,GAAG,mBAAmBC,uBAAO,SAAS,SAAS;EAC1D,0BAA0B;EAE1B,UAAA,oBAAC,QAAD;GAAQ,cAAY;GAAW,WAAW,GAAGA,uBAAO,QAAQ,eAAe;GACtE;EACG,CAAA;CACC,CAAA;AAErB;;AAGA,SAAgB,eAAe,EAC3B,UACA,WACA,SAAS,GACT,GAAG,SACkD;CACrD,MAAM,YAAY,mBAAmB;CACrC,IAAI,cAAc,MACd,OAAO;CAEX,OACI,oBAACD,SAAD;EACI,GAAI;EACI;EACR,WAAW,GAAG,mBAAmBC,uBAAO,SAAS,SAAS;EAC1D,0BAA0B;EAEzB;CACQ,CAAA;AAErB"}
@@ -1,8 +1,8 @@
1
1
  import "./Popover.css";
2
2
  //#region src/popover/Popover.module.css
3
- var popover = "panneau-popover-KacUIM";
4
- var pop = "panneau-pop-fB47s-";
5
- var dialog = "panneau-dialog-2cVt0D";
3
+ var popover = "panneau-popover";
4
+ var pop = "panneau-popover-pop";
5
+ var dialog = "panneau-popover-dialog";
6
6
  var Popover_module_default = {
7
7
  popover,
8
8
  pop,
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.module.js","names":[],"sources":["../../src/popover/Popover.module.css"],"sourcesContent":[".popover {\n min-width: var(--trigger-width, 10rem);\n max-width: calc(100vw - 2 * var(--panneau-space-4));\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-surface-raised);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n box-shadow: var(--panneau-shadow-lg);\n outline: none;\n overflow: auto;\n z-index: var(--panneau-z-overlay);\n}\n\n.popover[data-entering] {\n animation: pop var(--panneau-duration) ease-out;\n}\n\n.popover[data-exiting] {\n animation: pop var(--panneau-duration) ease-in reverse;\n}\n\n.dialog {\n padding: var(--panneau-space-3);\n outline: none;\n}\n\n@keyframes pop {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Popover.module.js","names":[],"sources":["../../src/popover/Popover.module.css"],"sourcesContent":[".popover {\n min-width: var(--trigger-width, 10rem);\n max-width: calc(100vw - 2 * var(--panneau-space-4));\n color: var(--panneau-color-text);\n background-color: var(--panneau-popover-bg, var(--panneau-color-surface-raised));\n border: var(--panneau-border-width) solid\n var(--panneau-popover-border-color, var(--panneau-color-border));\n border-radius: var(--panneau-popover-radius, var(--panneau-radius-lg));\n box-shadow: var(--panneau-popover-shadow, var(--panneau-shadow-lg));\n outline: none;\n overflow: auto;\n z-index: var(--panneau-z-overlay);\n}\n\n.popover[data-entering] {\n animation: pop var(--panneau-duration) ease-out;\n}\n\n.popover[data-exiting] {\n animation: pop var(--panneau-duration) ease-in reverse;\n}\n\n.dialog {\n padding: var(--panneau-popover-padding, var(--panneau-space-3));\n outline: none;\n}\n\n@keyframes pop {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of Popover. */
2
+ export declare const popoverTokens: import("..").ComponentTokens<"popover", "panneau-popover-radius" | "panneau-popover-padding" | "panneau-popover-bg" | "panneau-popover-border-color" | "panneau-popover-shadow">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/popover/tokens.ts"],"names":[],"mappings":"AAEA,yBAAyB;AACzB,eAAO,MAAM,aAAa,kLAWxB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { defineComponentTokens } from "../theme/componentTokens.js";
2
+ //#region src/popover/tokens.ts
3
+ /** Tokens of Popover. */
4
+ var popoverTokens = defineComponentTokens("popover", {
5
+ /** Background. */
6
+ bg: "var(--panneau-color-surface-raised)",
7
+ /** Border color. */
8
+ "border-color": "var(--panneau-color-border)",
9
+ /** Corner radius. */
10
+ radius: "var(--panneau-radius-lg)",
11
+ /** Shadow. */
12
+ shadow: "var(--panneau-shadow-lg)",
13
+ /** Padding of the content. */
14
+ padding: "var(--panneau-space-3)"
15
+ });
16
+ //#endregion
17
+ export { popoverTokens };
18
+
19
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../../src/popover/tokens.ts"],"sourcesContent":["import { defineComponentTokens } from '../theme/componentTokens';\n\n/** Tokens of Popover. */\nexport const popoverTokens = defineComponentTokens('popover', {\n /** Background. */\n bg: 'var(--panneau-color-surface-raised)',\n /** Border color. */\n 'border-color': 'var(--panneau-color-border)',\n /** Corner radius. */\n radius: 'var(--panneau-radius-lg)',\n /** Shadow. */\n shadow: 'var(--panneau-shadow-lg)',\n /** Padding of the content. */\n padding: 'var(--panneau-space-3)',\n});\n"],"mappings":";;;AAGA,IAAa,gBAAgB,sBAAsB,WAAW;;CAE1D,IAAI;;CAEJ,gBAAgB;;CAEhB,QAAQ;;CAER,QAAQ;;CAER,SAAS;AACb,CAAC"}
@@ -0,0 +1,141 @@
1
+ /*
2
+ * Rich content: Panneau styles no element outside of this container, since it is often embedded in
3
+ * someone else's page. Rules use :where() on the elements, so a class on any of them wins.
4
+ */
5
+
6
+ .panneau-prose {
7
+ line-height: var(--panneau-prose-line-height, 1.6);
8
+ overflow-wrap: break-word;
9
+ }
10
+
11
+ .panneau-prose > * + * {
12
+ margin-top: var(--panneau-prose-gap, var(--panneau-space-4));
13
+ }
14
+
15
+ .panneau-prose > :where(h1, h2, h3, h4, h5, h6):not(:first-child) {
16
+ margin-top: var(--panneau-prose-heading-gap, var(--panneau-space-6));
17
+ }
18
+
19
+ .panneau-prose :where(h1, h2, h3, h4, h5, h6) {
20
+ font-family: var(--panneau-heading-font-family, var(--panneau-font-family-heading));
21
+ color: var(--panneau-heading-color, inherit);
22
+ }
23
+
24
+ .panneau-prose :where(h1) {
25
+ font-size: var(--panneau-heading-1-font-size, 1.75rem);
26
+ font-weight: var(--panneau-heading-1-font-weight, var(--panneau-font-weight-bold));
27
+ line-height: var(--panneau-heading-1-line-height, var(--panneau-line-height-tight));
28
+ letter-spacing: var(--panneau-heading-1-letter-spacing, -0.015em);
29
+ }
30
+
31
+ .panneau-prose :where(h2) {
32
+ font-size: var(--panneau-heading-2-font-size, 1.375rem);
33
+ font-weight: var(--panneau-heading-2-font-weight, var(--panneau-font-weight-bold));
34
+ line-height: var(--panneau-heading-2-line-height, var(--panneau-line-height-tight));
35
+ letter-spacing: var(--panneau-heading-2-letter-spacing, -0.01em);
36
+ }
37
+
38
+ .panneau-prose :where(h3) {
39
+ font-size: var(--panneau-heading-3-font-size, 1.125rem);
40
+ font-weight: var(--panneau-heading-3-font-weight, var(--panneau-font-weight-bold));
41
+ line-height: var(--panneau-heading-3-line-height, var(--panneau-line-height-tight));
42
+ letter-spacing: var(--panneau-heading-3-letter-spacing, normal);
43
+ }
44
+
45
+ .panneau-prose :where(h4, h5, h6) {
46
+ font-size: var(--panneau-heading-4-font-size, var(--panneau-font-size-lg));
47
+ font-weight: var(--panneau-heading-4-font-weight, var(--panneau-font-weight-bold));
48
+ line-height: var(--panneau-heading-4-line-height, var(--panneau-line-height-tight));
49
+ letter-spacing: var(--panneau-heading-4-letter-spacing, normal);
50
+ }
51
+
52
+ .panneau-prose :where(ul, ol) {
53
+ padding-inline-start: var(--panneau-prose-list-indent, 1.5em);
54
+ }
55
+
56
+ .panneau-prose :where(ul) {
57
+ list-style: disc;
58
+ }
59
+
60
+ .panneau-prose :where(ol) {
61
+ list-style: decimal;
62
+ }
63
+
64
+ .panneau-prose :where(li + li, li > ul, li > ol) {
65
+ margin-top: var(--panneau-space-1);
66
+ }
67
+
68
+ .panneau-prose :where(a) {
69
+ color: var(--panneau-prose-link-color, var(--panneau-color-link));
70
+ text-decoration: underline;
71
+ }
72
+
73
+ .panneau-prose :where(strong, b) {
74
+ font-weight: var(--panneau-font-weight-bold);
75
+ }
76
+
77
+ .panneau-prose :where(code, kbd, samp, pre) {
78
+ color: var(--panneau-prose-code-color, inherit);
79
+ font-family: var(--panneau-font-family-mono);
80
+ font-size: var(--panneau-prose-code-font-size, 0.875em);
81
+ }
82
+
83
+ .panneau-prose :where(:not(pre) > code) {
84
+ padding: 0.1em 0.3em;
85
+ border-radius: var(--panneau-prose-code-radius, var(--panneau-radius-sm));
86
+ background-color: var(--panneau-prose-code-bg, var(--panneau-color-surface-sunken));
87
+ }
88
+
89
+ .panneau-prose :where(pre) {
90
+ overflow-x: auto;
91
+ padding: var(--panneau-space-3) var(--panneau-space-4);
92
+ border-radius: var(--panneau-prose-code-radius, var(--panneau-radius-sm));
93
+ background-color: var(--panneau-prose-code-bg, var(--panneau-color-surface-sunken));
94
+ line-height: var(--panneau-line-height);
95
+ }
96
+
97
+ .panneau-prose :where(pre code) {
98
+ font-size: inherit;
99
+ }
100
+
101
+ .panneau-prose :where(blockquote) {
102
+ margin-inline: 0;
103
+ padding-inline-start: var(--panneau-space-4);
104
+ border-inline-start: 3px solid
105
+ var(--panneau-prose-quote-border-color, var(--panneau-color-border));
106
+ color: var(--panneau-prose-quote-color, var(--panneau-color-text-muted));
107
+ }
108
+
109
+ .panneau-prose :where(figcaption) {
110
+ margin-top: var(--panneau-space-2);
111
+ color: var(--panneau-prose-quote-color, var(--panneau-color-text-muted));
112
+ font-size: var(--panneau-font-size-sm);
113
+ }
114
+
115
+ .panneau-prose :where(hr) {
116
+ border: 0;
117
+ border-top: var(--panneau-border-width) solid
118
+ var(--panneau-prose-border-color, var(--panneau-color-border));
119
+ }
120
+
121
+ .panneau-prose :where(table) {
122
+ width: 100%;
123
+ border-collapse: collapse;
124
+ font-variant-numeric: var(--panneau-font-numeric);
125
+ }
126
+
127
+ .panneau-prose :where(th, td) {
128
+ padding: var(--panneau-space-2) var(--panneau-space-3);
129
+ border-bottom: var(--panneau-border-width) solid
130
+ var(--panneau-prose-border-color, var(--panneau-color-border));
131
+ text-align: start;
132
+ vertical-align: top;
133
+ }
134
+
135
+ .panneau-prose :where(th) {
136
+ font-weight: var(--panneau-font-weight-bold);
137
+ }
138
+
139
+ .panneau-prose :where(img, video) {
140
+ height: auto;
141
+ }
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export interface ProseProps extends HTMLAttributes<HTMLElement> {
3
+ /** Element to render. Defaults to `div`. */
4
+ as?: 'div' | 'article' | 'section';
5
+ }
6
+ /**
7
+ * Styles the elements of rich content (headings, paragraphs, lists, links, quotes, code, tables):
8
+ * the output of an editor, Markdown, or a help page. Outside of it, Panneau styles no element.
9
+ */
10
+ export declare function Prose({ as: Element, className, ...props }: ProseProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=Prose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.d.ts","sourceRoot":"","sources":["../../src/prose/Prose.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC3D,4CAA4C;IAC5C,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,OAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAE7E"}
@@ -0,0 +1,18 @@
1
+ import { cx } from "../utils/cx.js";
2
+ import Prose_module_default from "./Prose.module.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/prose/Prose.tsx
5
+ /**
6
+ * Styles the elements of rich content (headings, paragraphs, lists, links, quotes, code, tables):
7
+ * the output of an editor, Markdown, or a help page. Outside of it, Panneau styles no element.
8
+ */
9
+ function Prose({ as: Element = "div", className, ...props }) {
10
+ return /* @__PURE__ */ jsx(Element, {
11
+ ...props,
12
+ className: cx("panneau-prose", Prose_module_default.prose, className)
13
+ });
14
+ }
15
+ //#endregion
16
+ export { Prose };
17
+
18
+ //# sourceMappingURL=Prose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.js","names":["styles"],"sources":["../../src/prose/Prose.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport { cx } from '../utils/cx';\nimport styles from './Prose.module.css';\n\nexport interface ProseProps extends HTMLAttributes<HTMLElement> {\n /** Element to render. Defaults to `div`. */\n as?: 'div' | 'article' | 'section';\n}\n\n/**\n * Styles the elements of rich content (headings, paragraphs, lists, links, quotes, code, tables):\n * the output of an editor, Markdown, or a help page. Outside of it, Panneau styles no element.\n */\nexport function Prose({ as: Element = 'div', className, ...props }: ProseProps) {\n return <Element {...props} className={cx('panneau-prose', styles.prose, className)} />;\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,MAAM,EAAE,IAAI,UAAU,OAAO,WAAW,GAAG,SAAqB;CAC5E,OAAO,oBAAC,SAAD;EAAS,GAAI;EAAO,WAAW,GAAG,iBAAiBA,qBAAO,OAAO,SAAS;CAAE,CAAA;AACvF"}
@@ -0,0 +1,8 @@
1
+ import "./Prose.css";
2
+ //#region src/prose/Prose.module.css
3
+ var prose = "panneau-prose";
4
+ var Prose_module_default = { prose };
5
+ //#endregion
6
+ export { Prose_module_default as default, prose };
7
+
8
+ //# sourceMappingURL=Prose.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prose.module.js","names":[],"sources":["../../src/prose/Prose.module.css"],"sourcesContent":["/*\n * Rich content: Panneau styles no element outside of this container, since it is often embedded in\n * someone else's page. Rules use :where() on the elements, so a class on any of them wins.\n */\n\n.prose {\n line-height: var(--panneau-prose-line-height, 1.6);\n overflow-wrap: break-word;\n}\n\n.prose > * + * {\n margin-top: var(--panneau-prose-gap, var(--panneau-space-4));\n}\n\n.prose > :where(h1, h2, h3, h4, h5, h6):not(:first-child) {\n margin-top: var(--panneau-prose-heading-gap, var(--panneau-space-6));\n}\n\n.prose :where(h1, h2, h3, h4, h5, h6) {\n font-family: var(--panneau-heading-font-family, var(--panneau-font-family-heading));\n color: var(--panneau-heading-color, inherit);\n}\n\n.prose :where(h1) {\n font-size: var(--panneau-heading-1-font-size, 1.75rem);\n font-weight: var(--panneau-heading-1-font-weight, var(--panneau-font-weight-bold));\n line-height: var(--panneau-heading-1-line-height, var(--panneau-line-height-tight));\n letter-spacing: var(--panneau-heading-1-letter-spacing, -0.015em);\n}\n\n.prose :where(h2) {\n font-size: var(--panneau-heading-2-font-size, 1.375rem);\n font-weight: var(--panneau-heading-2-font-weight, var(--panneau-font-weight-bold));\n line-height: var(--panneau-heading-2-line-height, var(--panneau-line-height-tight));\n letter-spacing: var(--panneau-heading-2-letter-spacing, -0.01em);\n}\n\n.prose :where(h3) {\n font-size: var(--panneau-heading-3-font-size, 1.125rem);\n font-weight: var(--panneau-heading-3-font-weight, var(--panneau-font-weight-bold));\n line-height: var(--panneau-heading-3-line-height, var(--panneau-line-height-tight));\n letter-spacing: var(--panneau-heading-3-letter-spacing, normal);\n}\n\n.prose :where(h4, h5, h6) {\n font-size: var(--panneau-heading-4-font-size, var(--panneau-font-size-lg));\n font-weight: var(--panneau-heading-4-font-weight, var(--panneau-font-weight-bold));\n line-height: var(--panneau-heading-4-line-height, var(--panneau-line-height-tight));\n letter-spacing: var(--panneau-heading-4-letter-spacing, normal);\n}\n\n.prose :where(ul, ol) {\n padding-inline-start: var(--panneau-prose-list-indent, 1.5em);\n}\n\n.prose :where(ul) {\n list-style: disc;\n}\n\n.prose :where(ol) {\n list-style: decimal;\n}\n\n.prose :where(li + li, li > ul, li > ol) {\n margin-top: var(--panneau-space-1);\n}\n\n.prose :where(a) {\n color: var(--panneau-prose-link-color, var(--panneau-color-link));\n text-decoration: underline;\n}\n\n.prose :where(strong, b) {\n font-weight: var(--panneau-font-weight-bold);\n}\n\n.prose :where(code, kbd, samp, pre) {\n color: var(--panneau-prose-code-color, inherit);\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-prose-code-font-size, 0.875em);\n}\n\n.prose :where(:not(pre) > code) {\n padding: 0.1em 0.3em;\n border-radius: var(--panneau-prose-code-radius, var(--panneau-radius-sm));\n background-color: var(--panneau-prose-code-bg, var(--panneau-color-surface-sunken));\n}\n\n.prose :where(pre) {\n overflow-x: auto;\n padding: var(--panneau-space-3) var(--panneau-space-4);\n border-radius: var(--panneau-prose-code-radius, var(--panneau-radius-sm));\n background-color: var(--panneau-prose-code-bg, var(--panneau-color-surface-sunken));\n line-height: var(--panneau-line-height);\n}\n\n.prose :where(pre code) {\n font-size: inherit;\n}\n\n.prose :where(blockquote) {\n margin-inline: 0;\n padding-inline-start: var(--panneau-space-4);\n border-inline-start: 3px solid\n var(--panneau-prose-quote-border-color, var(--panneau-color-border));\n color: var(--panneau-prose-quote-color, var(--panneau-color-text-muted));\n}\n\n.prose :where(figcaption) {\n margin-top: var(--panneau-space-2);\n color: var(--panneau-prose-quote-color, var(--panneau-color-text-muted));\n font-size: var(--panneau-font-size-sm);\n}\n\n.prose :where(hr) {\n border: 0;\n border-top: var(--panneau-border-width) solid\n var(--panneau-prose-border-color, var(--panneau-color-border));\n}\n\n.prose :where(table) {\n width: 100%;\n border-collapse: collapse;\n font-variant-numeric: var(--panneau-font-numeric);\n}\n\n.prose :where(th, td) {\n padding: var(--panneau-space-2) var(--panneau-space-3);\n border-bottom: var(--panneau-border-width) solid\n var(--panneau-prose-border-color, var(--panneau-color-border));\n text-align: start;\n vertical-align: top;\n}\n\n.prose :where(th) {\n font-weight: var(--panneau-font-weight-bold);\n}\n\n.prose :where(img, video) {\n height: auto;\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /** Tokens of Prose. Its headings use the tokens of Heading. */
2
+ export declare const proseTokens: import("..").ComponentTokens<"prose", "panneau-prose-gap" | "panneau-prose-border-color" | "panneau-prose-line-height" | "panneau-prose-heading-gap" | "panneau-prose-list-indent" | "panneau-prose-link-color" | "panneau-prose-code-font-size" | "panneau-prose-code-color" | "panneau-prose-code-bg" | "panneau-prose-code-radius" | "panneau-prose-quote-border-color" | "panneau-prose-quote-color">;
3
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/prose/tokens.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,eAAO,MAAM,WAAW,2YAyBtB,CAAC"}