@pearpages/pulp-react 0.2.1 → 0.3.0

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 (292) hide show
  1. package/README.md +17 -0
  2. package/dist/accordion.css +2 -0
  3. package/dist/accordion.css.map +1 -1
  4. package/dist/accordion.js +2 -2
  5. package/dist/alert.css +24 -0
  6. package/dist/alert.css.map +1 -1
  7. package/dist/alert.js +7 -7
  8. package/dist/avatar.css +46 -0
  9. package/dist/avatar.css.map +1 -0
  10. package/dist/avatar.d.ts +41 -0
  11. package/dist/avatar.js +5 -0
  12. package/dist/avatar.js.map +1 -0
  13. package/dist/badge.css +39 -0
  14. package/dist/badge.css.map +1 -1
  15. package/dist/badge.d.ts +22 -5
  16. package/dist/badge.js +3 -2
  17. package/dist/button.css +22 -0
  18. package/dist/button.css.map +1 -1
  19. package/dist/button.d.ts +11 -2
  20. package/dist/button.js +5 -5
  21. package/dist/calendar.css +2 -0
  22. package/dist/calendar.css.map +1 -1
  23. package/dist/calendar.js +3 -3
  24. package/dist/card.css +1 -0
  25. package/dist/card.css.map +1 -1
  26. package/dist/card.js +2 -2
  27. package/dist/checkbox.css +2 -0
  28. package/dist/checkbox.css.map +1 -1
  29. package/dist/checkbox.js +4 -4
  30. package/dist/chip.css +95 -0
  31. package/dist/chip.css.map +1 -0
  32. package/dist/chip.d.ts +43 -0
  33. package/dist/chip.js +4 -0
  34. package/dist/chip.js.map +1 -0
  35. package/dist/{chunk-7DS4I7OJ.js → chunk-2E2ESMS2.js} +2 -2
  36. package/dist/chunk-2E2ESMS2.js.map +1 -0
  37. package/dist/{chunk-FH54XQ35.js → chunk-2IYYES7V.js} +2 -2
  38. package/dist/chunk-2IYYES7V.js.map +1 -0
  39. package/dist/{chunk-XDVS7HX7.js → chunk-2NVC3C7K.js} +3 -3
  40. package/dist/chunk-2NVC3C7K.js.map +1 -0
  41. package/dist/{chunk-IDNGNQNV.js → chunk-55QUKGK2.js} +2 -2
  42. package/dist/chunk-55QUKGK2.js.map +1 -0
  43. package/dist/{chunk-DVM37MEK.js → chunk-56RSH7GQ.js} +4 -4
  44. package/dist/chunk-56RSH7GQ.js.map +1 -0
  45. package/dist/chunk-5TYCIBLW.js +27 -0
  46. package/dist/chunk-5TYCIBLW.js.map +1 -0
  47. package/dist/chunk-7O6FTCZL.js +101 -0
  48. package/dist/chunk-7O6FTCZL.js.map +1 -0
  49. package/dist/{chunk-XXC34COT.js → chunk-A7TMFEQ2.js} +4 -4
  50. package/dist/chunk-A7TMFEQ2.js.map +1 -0
  51. package/dist/{chunk-GTTXRDXV.js → chunk-AZAI4OVR.js} +4 -4
  52. package/dist/chunk-AZAI4OVR.js.map +1 -0
  53. package/dist/{chunk-ASOQ2MVR.js → chunk-BR2EH4TK.js} +2 -2
  54. package/dist/chunk-BR2EH4TK.js.map +1 -0
  55. package/dist/{chunk-OUFAFINB.js → chunk-CLE2QGCU.js} +3 -3
  56. package/dist/chunk-CLE2QGCU.js.map +1 -0
  57. package/dist/{chunk-VSDEQHG4.js → chunk-DE67ECD7.js} +7 -5
  58. package/dist/chunk-DE67ECD7.js.map +1 -0
  59. package/dist/{chunk-YUHS5S5Y.js → chunk-DGIXNUNI.js} +2 -2
  60. package/dist/chunk-DGIXNUNI.js.map +1 -0
  61. package/dist/{chunk-T76YSNTZ.js → chunk-EDTA65L5.js} +3 -3
  62. package/dist/chunk-EDTA65L5.js.map +1 -0
  63. package/dist/{chunk-WDWTQKIJ.js → chunk-F2YI5N4L.js} +5 -5
  64. package/dist/chunk-F2YI5N4L.js.map +1 -0
  65. package/dist/{chunk-3GWESUGD.js → chunk-F3S5BHX2.js} +2 -2
  66. package/dist/chunk-F3S5BHX2.js.map +1 -0
  67. package/dist/{chunk-4DER5LHM.js → chunk-FFCEY76B.js} +10 -5
  68. package/dist/chunk-FFCEY76B.js.map +1 -0
  69. package/dist/{chunk-Y4TZA77G.js → chunk-GWTHITZO.js} +3 -3
  70. package/dist/chunk-GWTHITZO.js.map +1 -0
  71. package/dist/chunk-HDC2IQV2.js +34 -0
  72. package/dist/chunk-HDC2IQV2.js.map +1 -0
  73. package/dist/{chunk-2KG43BOT.js → chunk-HKNIEQ2V.js} +4 -4
  74. package/dist/chunk-HKNIEQ2V.js.map +1 -0
  75. package/dist/{chunk-MRQWUCBA.js → chunk-HPQ462R5.js} +3 -3
  76. package/dist/chunk-HPQ462R5.js.map +1 -0
  77. package/dist/{chunk-Z4PN6B2C.js → chunk-IB5UUE3S.js} +2 -2
  78. package/dist/chunk-IB5UUE3S.js.map +1 -0
  79. package/dist/{chunk-4HRNRTXI.js → chunk-IRNTXAA7.js} +3 -3
  80. package/dist/{chunk-4HRNRTXI.js.map → chunk-IRNTXAA7.js.map} +1 -1
  81. package/dist/{chunk-OXYP34CG.js → chunk-JOGIN4SS.js} +3 -3
  82. package/dist/chunk-JOGIN4SS.js.map +1 -0
  83. package/dist/chunk-KSLKNWWM.js +28 -0
  84. package/dist/chunk-KSLKNWWM.js.map +1 -0
  85. package/dist/{chunk-2ZP4ZBI5.js → chunk-LKWZZIRZ.js} +2 -2
  86. package/dist/chunk-LKWZZIRZ.js.map +1 -0
  87. package/dist/{chunk-ASNTNTJW.js → chunk-O5LII5XP.js} +2 -2
  88. package/dist/chunk-O5LII5XP.js.map +1 -0
  89. package/dist/chunk-OKA2PLDV.js +85 -0
  90. package/dist/chunk-OKA2PLDV.js.map +1 -0
  91. package/dist/{chunk-BBV4L5WO.js → chunk-Q6SYKNZ5.js} +3 -3
  92. package/dist/{chunk-BBV4L5WO.js.map → chunk-Q6SYKNZ5.js.map} +1 -1
  93. package/dist/chunk-QID6YYFF.js +33 -0
  94. package/dist/chunk-QID6YYFF.js.map +1 -0
  95. package/dist/{chunk-ZVDN3GRI.js → chunk-QJG5ILK5.js} +3 -3
  96. package/dist/{chunk-ZVDN3GRI.js.map → chunk-QJG5ILK5.js.map} +1 -1
  97. package/dist/chunk-QXHSA4QD.js +43 -0
  98. package/dist/chunk-QXHSA4QD.js.map +1 -0
  99. package/dist/chunk-S632WN4W.js +106 -0
  100. package/dist/chunk-S632WN4W.js.map +1 -0
  101. package/dist/{chunk-N7L66GMG.js → chunk-SDIK6VSC.js} +3 -3
  102. package/dist/chunk-SDIK6VSC.js.map +1 -0
  103. package/dist/{chunk-2PXTVZ7H.js → chunk-SXMORGSG.js} +3 -3
  104. package/dist/chunk-SXMORGSG.js.map +1 -0
  105. package/dist/{chunk-DWE374JX.js → chunk-UMK4D234.js} +3 -3
  106. package/dist/chunk-UMK4D234.js.map +1 -0
  107. package/dist/{chunk-AWQHULJC.js → chunk-VIGD7KHC.js} +2 -2
  108. package/dist/chunk-VIGD7KHC.js.map +1 -0
  109. package/dist/{chunk-TGMDOQCL.js → chunk-VS2HPJIX.js} +3 -3
  110. package/dist/chunk-VS2HPJIX.js.map +1 -0
  111. package/dist/{chunk-O6OBFL3Q.js → chunk-W2UUZ2DC.js} +3 -3
  112. package/dist/chunk-W2UUZ2DC.js.map +1 -0
  113. package/dist/{chunk-5SBKZS56.js → chunk-W6HEBHA7.js} +3 -3
  114. package/dist/{chunk-5SBKZS56.js.map → chunk-W6HEBHA7.js.map} +1 -1
  115. package/dist/{chunk-GUZMLYST.js → chunk-WDIFWMKE.js} +6 -6
  116. package/dist/chunk-WDIFWMKE.js.map +1 -0
  117. package/dist/{chunk-TVI5AXLE.js → chunk-WJDDKNE7.js} +3 -3
  118. package/dist/{chunk-TVI5AXLE.js.map → chunk-WJDDKNE7.js.map} +1 -1
  119. package/dist/{chunk-7RQQASKS.js → chunk-XGWFTFGR.js} +3 -3
  120. package/dist/chunk-XGWFTFGR.js.map +1 -0
  121. package/dist/{chunk-UX42PQLT.js → chunk-Y4YVAHD2.js} +5 -5
  122. package/dist/chunk-Y4YVAHD2.js.map +1 -0
  123. package/dist/chunk-Y7KC2FDU.js +88 -0
  124. package/dist/chunk-Y7KC2FDU.js.map +1 -0
  125. package/dist/{chunk-P5C2U5ZF.js → chunk-YBECKOVP.js} +3 -3
  126. package/dist/chunk-YBECKOVP.js.map +1 -0
  127. package/dist/{chunk-75GTNRBH.js → chunk-YK2OOM56.js} +3 -3
  128. package/dist/chunk-YK2OOM56.js.map +1 -0
  129. package/dist/{chunk-OGIQRHNF.js → chunk-ZEVQQQOA.js} +3 -3
  130. package/dist/chunk-ZEVQQQOA.js.map +1 -0
  131. package/dist/{chunk-I4KC4V6A.js → chunk-ZL5MMRLG.js} +3 -3
  132. package/dist/chunk-ZL5MMRLG.js.map +1 -0
  133. package/dist/combobox.css +9 -0
  134. package/dist/combobox.css.map +1 -1
  135. package/dist/combobox.js +7 -7
  136. package/dist/component-manifest.json +679 -8
  137. package/dist/date-picker.css +4 -0
  138. package/dist/date-picker.css.map +1 -1
  139. package/dist/date-picker.js +5 -5
  140. package/dist/dialog.css +1 -0
  141. package/dist/dialog.css.map +1 -1
  142. package/dist/dialog.js +1 -1
  143. package/dist/divider.css +37 -0
  144. package/dist/divider.css.map +1 -0
  145. package/dist/divider.d.ts +35 -0
  146. package/dist/divider.js +4 -0
  147. package/dist/divider.js.map +1 -0
  148. package/dist/empty-state.css +175 -0
  149. package/dist/empty-state.css.map +1 -0
  150. package/dist/empty-state.d.ts +40 -0
  151. package/dist/empty-state.js +7 -0
  152. package/dist/empty-state.js.map +1 -0
  153. package/dist/field.css +1 -0
  154. package/dist/field.css.map +1 -1
  155. package/dist/field.js +2 -2
  156. package/dist/heading.css +1 -0
  157. package/dist/heading.css.map +1 -1
  158. package/dist/heading.js +1 -1
  159. package/dist/icon-button.css +23 -0
  160. package/dist/icon-button.css.map +1 -1
  161. package/dist/icon-button.js +6 -6
  162. package/dist/icon.css +1 -0
  163. package/dist/icon.css.map +1 -1
  164. package/dist/icon.js +1 -1
  165. package/dist/index.css +527 -0
  166. package/dist/index.css.map +1 -1
  167. package/dist/index.d.ts +8 -2
  168. package/dist/index.js +49 -43
  169. package/dist/inline.css +1 -0
  170. package/dist/inline.css.map +1 -1
  171. package/dist/inline.js +1 -1
  172. package/dist/link.css +35 -0
  173. package/dist/link.css.map +1 -0
  174. package/dist/link.d.ts +37 -0
  175. package/dist/link.js +5 -0
  176. package/dist/link.js.map +1 -0
  177. package/dist/listbox.css +2 -0
  178. package/dist/listbox.css.map +1 -1
  179. package/dist/listbox.js +3 -3
  180. package/dist/menu.css +2 -0
  181. package/dist/menu.css.map +1 -1
  182. package/dist/menu.js +3 -3
  183. package/dist/pagination.css +24 -0
  184. package/dist/pagination.css.map +1 -1
  185. package/dist/pagination.js +7 -7
  186. package/dist/picker.css +7 -0
  187. package/dist/picker.css.map +1 -1
  188. package/dist/picker.js +5 -5
  189. package/dist/popover.css +1 -0
  190. package/dist/popover.css.map +1 -1
  191. package/dist/popover.js +2 -2
  192. package/dist/progress.css +2 -0
  193. package/dist/progress.css.map +1 -1
  194. package/dist/progress.js +2 -2
  195. package/dist/radio.css +2 -0
  196. package/dist/radio.css.map +1 -1
  197. package/dist/radio.js +3 -3
  198. package/dist/segmented-control.css +111 -0
  199. package/dist/segmented-control.css.map +1 -0
  200. package/dist/segmented-control.d.ts +90 -0
  201. package/dist/segmented-control.js +5 -0
  202. package/dist/segmented-control.js.map +1 -0
  203. package/dist/select.css +2 -0
  204. package/dist/select.css.map +1 -1
  205. package/dist/select.js +3 -3
  206. package/dist/sheet.css +30 -0
  207. package/dist/sheet.css.map +1 -1
  208. package/dist/sheet.d.ts +9 -2
  209. package/dist/sheet.js +2 -2
  210. package/dist/skeleton.css +1 -0
  211. package/dist/skeleton.css.map +1 -1
  212. package/dist/skeleton.js +1 -1
  213. package/dist/slider.css +2 -0
  214. package/dist/slider.css.map +1 -1
  215. package/dist/slider.js +2 -2
  216. package/dist/spinner.css +2 -0
  217. package/dist/spinner.css.map +1 -1
  218. package/dist/spinner.js +2 -2
  219. package/dist/stack.css +1 -0
  220. package/dist/stack.css.map +1 -1
  221. package/dist/stack.js +1 -1
  222. package/dist/switch.css +2 -0
  223. package/dist/switch.css.map +1 -1
  224. package/dist/switch.js +4 -4
  225. package/dist/table.css +2 -0
  226. package/dist/table.css.map +1 -1
  227. package/dist/table.js +2 -2
  228. package/dist/tabs.css +1 -0
  229. package/dist/tabs.css.map +1 -1
  230. package/dist/tabs.js +1 -1
  231. package/dist/text-field.css +65 -0
  232. package/dist/text-field.css.map +1 -1
  233. package/dist/text-field.d.ts +15 -2
  234. package/dist/text-field.js +3 -3
  235. package/dist/text.css +1 -0
  236. package/dist/text.css.map +1 -1
  237. package/dist/text.js +1 -1
  238. package/dist/textarea.css +2 -0
  239. package/dist/textarea.css.map +1 -1
  240. package/dist/textarea.js +3 -3
  241. package/dist/toast.css +25 -0
  242. package/dist/toast.css.map +1 -1
  243. package/dist/toast.d.ts +21 -3
  244. package/dist/toast.js +8 -8
  245. package/dist/tooltip.css +1 -0
  246. package/dist/tooltip.css.map +1 -1
  247. package/dist/tooltip.js +2 -2
  248. package/dist/visually-hidden.css +1 -0
  249. package/dist/visually-hidden.css.map +1 -1
  250. package/dist/visually-hidden.js +1 -1
  251. package/package.json +36 -6
  252. package/dist/chunk-2KG43BOT.js.map +0 -1
  253. package/dist/chunk-2PXTVZ7H.js.map +0 -1
  254. package/dist/chunk-2ZP4ZBI5.js.map +0 -1
  255. package/dist/chunk-3GWESUGD.js.map +0 -1
  256. package/dist/chunk-4DER5LHM.js.map +0 -1
  257. package/dist/chunk-6I26MMQF.js +0 -19
  258. package/dist/chunk-6I26MMQF.js.map +0 -1
  259. package/dist/chunk-75GTNRBH.js.map +0 -1
  260. package/dist/chunk-7DS4I7OJ.js.map +0 -1
  261. package/dist/chunk-7RQQASKS.js.map +0 -1
  262. package/dist/chunk-ASNTNTJW.js.map +0 -1
  263. package/dist/chunk-ASOQ2MVR.js.map +0 -1
  264. package/dist/chunk-AWQHULJC.js.map +0 -1
  265. package/dist/chunk-DVM37MEK.js.map +0 -1
  266. package/dist/chunk-DWE374JX.js.map +0 -1
  267. package/dist/chunk-FH54XQ35.js.map +0 -1
  268. package/dist/chunk-GTTXRDXV.js.map +0 -1
  269. package/dist/chunk-GUZMLYST.js.map +0 -1
  270. package/dist/chunk-I4KC4V6A.js.map +0 -1
  271. package/dist/chunk-IDNGNQNV.js.map +0 -1
  272. package/dist/chunk-MRQWUCBA.js.map +0 -1
  273. package/dist/chunk-MXWXJZFS.js +0 -48
  274. package/dist/chunk-MXWXJZFS.js.map +0 -1
  275. package/dist/chunk-N7L66GMG.js.map +0 -1
  276. package/dist/chunk-O6OBFL3Q.js.map +0 -1
  277. package/dist/chunk-OGIQRHNF.js.map +0 -1
  278. package/dist/chunk-OUFAFINB.js.map +0 -1
  279. package/dist/chunk-OXYP34CG.js.map +0 -1
  280. package/dist/chunk-P5C2U5ZF.js.map +0 -1
  281. package/dist/chunk-T76YSNTZ.js.map +0 -1
  282. package/dist/chunk-TGMDOQCL.js.map +0 -1
  283. package/dist/chunk-UX42PQLT.js.map +0 -1
  284. package/dist/chunk-VSDEQHG4.js.map +0 -1
  285. package/dist/chunk-WDWTQKIJ.js.map +0 -1
  286. package/dist/chunk-XDVS7HX7.js.map +0 -1
  287. package/dist/chunk-XUROYTJ7.js +0 -28
  288. package/dist/chunk-XUROYTJ7.js.map +0 -1
  289. package/dist/chunk-XXC34COT.js.map +0 -1
  290. package/dist/chunk-Y4TZA77G.js.map +0 -1
  291. package/dist/chunk-YUHS5S5Y.js.map +0 -1
  292. package/dist/chunk-Z4PN6B2C.js.map +0 -1
package/README.md CHANGED
@@ -83,9 +83,26 @@ The vendor's stylesheet is the one you import yourself. Put it in the `vendor` l
83
83
  @import "@pearpages/pulp-react/styles.css";
84
84
  ```
85
85
 
86
+ Every pulp stylesheet restates the layer order, so the result does not depend on which file your
87
+ bundler loads first; importing `@pearpages/pulp-css` first stays the recommended setup.
88
+
86
89
  Then mount `DialogSystem` once near the root. Without the stylesheet a dialog opens unstyled; if
87
90
  you never render a `Dialog`, skip it.
88
91
 
92
+ ## React Server Components
93
+
94
+ Every entry that needs the browser ships with `'use client'` as its first statement, so on the
95
+ Next.js App Router (or any RSC setup) you import pulp from a server file and it works: the client
96
+ entries become client boundaries on their own. The leaf, hook-free entries carry no directive and
97
+ render on the server as they are: Text, Heading, Stack, Inline, Card, Divider, Badge, Skeleton,
98
+ Spinner, Progress, Icon, VisuallyHidden, Link, Button, IconButton, Alert, Pagination, EmptyState
99
+ (the `client` field of the component manifest is the list). Two things to know:
100
+
101
+ - The barrel (`@pearpages/pulp-react`) is a client module, because it re-exports everything. Import
102
+ from the per-component entries (`@pearpages/pulp-react/text`) to keep server-safe ones on the server.
103
+ - A function cannot cross from a server file into any component, pulp's or not. `<Button asChild>`
104
+ around a link is fine in a Server Component; `<Button onClick={…}>` belongs in a client file.
105
+
89
106
  ## For tooling and coding agents
90
107
 
91
108
  `@pearpages/pulp-react/component-manifest.json` lists every component with its status, category,
@@ -1,4 +1,5 @@
1
1
  /* src/icon/Icon.module.css */
2
+ @layer reset, tokens, vendor, base, components, utilities;
2
3
  @layer components {
3
4
  .Icon_icon {
4
5
  display: inline-flex;
@@ -24,6 +25,7 @@
24
25
  }
25
26
 
26
27
  /* src/accordion/Accordion.module.css */
28
+ @layer reset, tokens, vendor, base, components, utilities;
27
29
  @layer components {
28
30
  .Accordion_accordion {
29
31
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icon/Icon.module.css","../src/accordion/Accordion.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* Every value is a token (--accordion-*). Open state is a data attribute; the chevron rotates on it. */\n\n@layer components {\n .accordion {\n display: flex;\n flex-direction: column;\n border: var(--size-hairline) solid var(--accordion-border);\n border-radius: var(--accordion-radius);\n font-family: var(--font-family-body);\n }\n\n .item {\n border-block-end: var(--size-hairline) solid var(--accordion-border);\n\n &:last-child {\n border-block-end: none;\n }\n }\n\n .heading {\n margin: 0;\n font-size: inherit;\n font-weight: inherit;\n }\n\n .trigger {\n display: flex;\n gap: var(--accordion-trigger-gap);\n align-items: center;\n inline-size: 100%;\n padding-block: var(--accordion-trigger-padding-block);\n padding-inline: var(--accordion-trigger-padding-inline);\n border: none;\n background-color: transparent;\n color: var(--accordion-trigger-fg);\n font-size: var(--accordion-trigger-font-size);\n font-weight: var(--accordion-trigger-font-weight);\n text-align: start;\n cursor: pointer;\n transition: background-color var(--accordion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--accordion-focus-ring-width) solid var(--accordion-focus-ring);\n outline-offset: calc(-1 * var(--accordion-focus-ring-offset));\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &:hover:not(:disabled) {\n background-color: var(--accordion-trigger-bg-hover);\n }\n }\n\n .label {\n flex: 1;\n }\n\n .chevron {\n color: var(--accordion-trigger-chevron);\n transition: rotate var(--accordion-duration) var(--motion-easing-standard);\n }\n\n .trigger[data-state=\"open\"] .chevron {\n rotate: 180deg;\n }\n\n .panel {\n padding-block: var(--accordion-panel-padding-block);\n padding-inline: var(--accordion-panel-padding-inline);\n color: var(--accordion-panel-fg);\n font-size: var(--accordion-panel-font-size);\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,gBAAY;AACZ,eAAW,IAAI;AACf,oBAAgB;AAEhB,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAuB,iBAAW;AAAS;AAE7C,MAAE,EAAE;AACF,mBAAa;AACb,kBAAY;AACd;AACF;AACF;;;AClBA;AACE,GAACC;AACC,aAAS;AACT,oBAAgB;AAChB,YAAQ,IAAI,iBAAiB,MAAM,IAAI;AACvC,mBAAe,IAAI;AACnB,iBAAa,IAAI;AACnB;AAEA,GAACC;AACC,sBAAkB,IAAI,iBAAiB,MAAM,IAAI;AAEjD,KAAC;AACC,wBAAkB;AACpB;AACF;AAEA,GAACC;AACC,YAAQ;AACR,eAAW;AACX,iBAAa;AACf;AAEA,GAACC;AACC,aAAS;AACT,SAAK,IAAI;AACT,iBAAa;AACb,iBAAa;AACb,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,YAAQ;AACR,sBAAkB;AAClB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,gBAAY;AACZ,YAAQ;AACR,gBAAY,iBAAiB,IAAI,sBAAsB,IAAI;AAE3D,KAAC;AACC,eAAS,IAAI,8BAA8B,MAAM,IAAI;AACrD,sBAAgB,KAAK,GAAG,EAAE,IAAI;AAChC;AAEA,KAAC;AACC,cAAQ;AACR,eAAS;AACX;AAEA,KAAC,MAAM,KAAK;AACV,wBAAkB,IAAI;AACxB;AACF;AAEA,GAACC;AACC,UAAM;AACR;AAEA,GAACC;AACC,WAAO,IAAI;AACX,gBAAY,OAAO,IAAI,sBAAsB,IAAI;AACnD;AAEA,GAxCCF,iBAwCO,CAAC,iBAAmB,CAL3BE;AAMC,YAAQ;AACV;AAEA,GAACC;AACC,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,WAAO,IAAI;AACX,eAAW,IAAI;AACjB;AACF;","names":["icon","accordion","item","heading","trigger","label","chevron","panel"]}
1
+ {"version":3,"sources":["../src/icon/Icon.module.css","../src/accordion/Accordion.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* Every value is a token (--accordion-*). Open state is a data attribute; the chevron rotates on it. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .accordion {\n display: flex;\n flex-direction: column;\n border: var(--size-hairline) solid var(--accordion-border);\n border-radius: var(--accordion-radius);\n font-family: var(--font-family-body);\n }\n\n .item {\n border-block-end: var(--size-hairline) solid var(--accordion-border);\n\n &:last-child {\n border-block-end: none;\n }\n }\n\n .heading {\n margin: 0;\n font-size: inherit;\n font-weight: inherit;\n }\n\n .trigger {\n display: flex;\n gap: var(--accordion-trigger-gap);\n align-items: center;\n inline-size: 100%;\n padding-block: var(--accordion-trigger-padding-block);\n padding-inline: var(--accordion-trigger-padding-inline);\n border: none;\n background-color: transparent;\n color: var(--accordion-trigger-fg);\n font-size: var(--accordion-trigger-font-size);\n font-weight: var(--accordion-trigger-font-weight);\n text-align: start;\n cursor: pointer;\n transition: background-color var(--accordion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--accordion-focus-ring-width) solid var(--accordion-focus-ring);\n outline-offset: calc(-1 * var(--accordion-focus-ring-offset));\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &:hover:not(:disabled) {\n background-color: var(--accordion-trigger-bg-hover);\n }\n }\n\n .label {\n flex: 1;\n }\n\n .chevron {\n color: var(--accordion-trigger-chevron);\n transition: rotate var(--accordion-duration) var(--motion-easing-standard);\n }\n\n .trigger[data-state=\"open\"] .chevron {\n rotate: 180deg;\n }\n\n .panel {\n padding-block: var(--accordion-panel-padding-block);\n padding-inline: var(--accordion-panel-padding-inline);\n color: var(--accordion-panel-fg);\n font-size: var(--accordion-panel-font-size);\n }\n}\n"],"mappings":";AAEA;AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,gBAAY;AACZ,eAAW,IAAI;AACf,oBAAgB;AAEhB,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAuB,iBAAW;AAAS;AAE7C,MAAE,EAAE;AACF,mBAAa;AACb,kBAAY;AACd;AACF;AACF;;;ACpBA;AAEA;AACE,GAACC;AACC,aAAS;AACT,oBAAgB;AAChB,YAAQ,IAAI,iBAAiB,MAAM,IAAI;AACvC,mBAAe,IAAI;AACnB,iBAAa,IAAI;AACnB;AAEA,GAACC;AACC,sBAAkB,IAAI,iBAAiB,MAAM,IAAI;AAEjD,KAAC;AACC,wBAAkB;AACpB;AACF;AAEA,GAACC;AACC,YAAQ;AACR,eAAW;AACX,iBAAa;AACf;AAEA,GAACC;AACC,aAAS;AACT,SAAK,IAAI;AACT,iBAAa;AACb,iBAAa;AACb,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,YAAQ;AACR,sBAAkB;AAClB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,gBAAY;AACZ,YAAQ;AACR,gBAAY,iBAAiB,IAAI,sBAAsB,IAAI;AAE3D,KAAC;AACC,eAAS,IAAI,8BAA8B,MAAM,IAAI;AACrD,sBAAgB,KAAK,GAAG,EAAE,IAAI;AAChC;AAEA,KAAC;AACC,cAAQ;AACR,eAAS;AACX;AAEA,KAAC,MAAM,KAAK;AACV,wBAAkB,IAAI;AACxB;AACF;AAEA,GAACC;AACC,UAAM;AACR;AAEA,GAACC;AACC,WAAO,IAAI;AACX,gBAAY,OAAO,IAAI,sBAAsB,IAAI;AACnD;AAEA,GAxCCF,iBAwCO,CAAC,iBAAmB,CAL3BE;AAMC,YAAQ;AACV;AAEA,GAACC;AACC,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,WAAO,IAAI;AACX,eAAW,IAAI;AACjB;AACF;","names":["icon","accordion","item","heading","trigger","label","chevron","panel"]}
package/dist/accordion.js CHANGED
@@ -1,6 +1,6 @@
1
- export { Accordion } from './chunk-O6OBFL3Q.js';
1
+ "use client";export { Accordion } from './chunk-W2UUZ2DC.js';
2
2
  import './chunk-I5OZ63W7.js';
3
- import './chunk-ASNTNTJW.js';
3
+ import './chunk-O5LII5XP.js';
4
4
  import './chunk-MI4QUKQS.js';
5
5
  //# sourceMappingURL=accordion.js.map
6
6
  //# sourceMappingURL=accordion.js.map
package/dist/alert.css CHANGED
@@ -1,4 +1,5 @@
1
1
  /* src/icon/Icon.module.css */
2
+ @layer reset, tokens, vendor, base, components, utilities;
2
3
  @layer components {
3
4
  .Icon_icon {
4
5
  display: inline-flex;
@@ -24,6 +25,7 @@
24
25
  }
25
26
 
26
27
  /* src/visually-hidden/VisuallyHidden.module.css */
28
+ @layer reset, tokens, vendor, base, components, utilities;
27
29
  @layer components {
28
30
  .VisuallyHidden_root {
29
31
  position: absolute;
@@ -39,6 +41,7 @@
39
41
  }
40
42
 
41
43
  /* src/spinner/Spinner.module.css */
44
+ @layer reset, tokens, vendor, base, components, utilities;
42
45
  @layer components {
43
46
  .Spinner_spinner {
44
47
  --_size: var(--spinner-size-md);
@@ -84,6 +87,7 @@
84
87
  }
85
88
 
86
89
  /* src/button/Button.module.css */
90
+ @layer reset, tokens, vendor, base, components, utilities;
87
91
  @layer components {
88
92
  .Button_button {
89
93
  display: inline-flex;
@@ -156,12 +160,31 @@
156
160
  }
157
161
  }
158
162
  }
163
+ .Button_button[data-tone=danger] {
164
+ &[data-variant=primary] {
165
+ background-color: var(--button-danger-bg);
166
+ color: var(--button-danger-fg);
167
+ &:hover:not(:disabled, [aria-disabled=true]) {
168
+ background-color: var(--button-danger-bg-hover);
169
+ }
170
+ &:active:not(:disabled, [aria-disabled=true]) {
171
+ background-color: var(--button-danger-bg-active);
172
+ }
173
+ }
174
+ &:is([data-variant=secondary], [data-variant=ghost]) {
175
+ color: var(--button-danger-text);
176
+ &:hover:not(:disabled, [aria-disabled=true]) {
177
+ background-color: var(--button-danger-quiet-bg-hover);
178
+ }
179
+ }
180
+ }
159
181
  .Button_label {
160
182
  display: inline-block;
161
183
  }
162
184
  }
163
185
 
164
186
  /* src/icon-button/IconButton.module.css */
187
+ @layer reset, tokens, vendor, base, components, utilities;
165
188
  @layer components {
166
189
  .IconButton_iconButton[data-icon-only] {
167
190
  gap: 0;
@@ -177,6 +200,7 @@
177
200
  }
178
201
 
179
202
  /* src/alert/Alert.module.css */
203
+ @layer reset, tokens, vendor, base, components, utilities;
180
204
  @layer components {
181
205
  .Alert_alert {
182
206
  --_bg: var(--alert-info-bg);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/spinner/Spinner.module.css","../src/button/Button.module.css","../src/icon-button/IconButton.module.css","../src/alert/Alert.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--spinner-*). The ring is a border with one coloured side. */\n\n@layer components {\n .spinner {\n --_size: var(--spinner-size-md);\n --_track: var(--spinner-track);\n --_indicator: var(--spinner-indicator);\n\n display: inline-flex;\n flex: none;\n inline-size: var(--_size);\n block-size: var(--_size);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { --_size: var(--spinner-size-sm); }\n &[data-size=\"lg\"] { --_size: var(--spinner-size-lg); }\n &[data-size=\"inherit\"] { --_size: 1em; }\n\n &[data-tone=\"inherit\"] {\n --_track: transparent;\n --_indicator: currentcolor;\n }\n }\n\n .ring {\n inline-size: 100%;\n block-size: 100%;\n border: var(--spinner-width) solid var(--_track);\n border-block-start-color: var(--_indicator);\n border-radius: var(--radius-full);\n animation: spin var(--spinner-duration) linear infinite;\n }\n\n @keyframes spin {\n to {\n rotate: 1turn;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ring {\n animation: none;\n }\n }\n}\n","/*\n * Every value is a token. State is expressed through data attributes so the\n * styling hooks survive a change of styling tool, and so tests and agents can\n * read state off the DOM.\n */\n\n@layer components {\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--button-gap);\n min-block-size: var(--button-height-md);\n padding-block: 0;\n padding-inline: var(--button-padding-inline-md);\n border: 1px solid transparent;\n border-radius: var(--button-radius);\n font-family: var(--button-font-family);\n font-size: var(--button-font-size-md);\n font-weight: var(--button-font-weight);\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n transition:\n background-color var(--button-motion-duration) var(--motion-easing-standard),\n border-color var(--button-motion-duration) var(--motion-easing-standard),\n color var(--button-motion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--button-focus-ring-width) solid var(--button-focus-ring);\n outline-offset: var(--button-focus-ring-offset);\n }\n\n &:disabled,\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-loading] {\n cursor: progress;\n }\n\n &[data-size=\"sm\"] {\n min-block-size: var(--button-height-sm);\n padding-inline: var(--button-padding-inline-sm);\n font-size: var(--button-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n min-block-size: var(--button-height-lg);\n padding-inline: var(--button-padding-inline-lg);\n font-size: var(--button-font-size-lg);\n }\n\n &[data-variant=\"primary\"] {\n background-color: var(--button-primary-bg);\n color: var(--button-primary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-active);\n }\n }\n\n &[data-variant=\"secondary\"] {\n background-color: var(--button-secondary-bg);\n border-color: var(--button-secondary-border);\n color: var(--button-secondary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-secondary-bg-hover);\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--button-ghost-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-ghost-bg-hover);\n }\n }\n }\n\n .label {\n display: inline-block;\n }\n}\n","/* Squares a Button. Selectors carry the data attribute so they outrank Button's own size rules. */\n\n@layer components {\n .iconButton[data-icon-only] {\n gap: 0;\n inline-size: var(--icon-button-size-md);\n padding-inline: 0;\n\n &[data-size=\"sm\"] { inline-size: var(--icon-button-size-sm); }\n &[data-size=\"lg\"] { inline-size: var(--icon-button-size-lg); }\n }\n}\n","/* Every value is a token (--alert-*). Tone resolves into private custom properties. */\n\n@layer components {\n .alert {\n --_bg: var(--alert-info-bg);\n --_accent: var(--alert-info-accent);\n --_title: var(--alert-info-title);\n\n display: flex;\n align-items: flex-start;\n gap: var(--alert-gap);\n padding: var(--alert-padding);\n border: var(--alert-border-width) solid var(--_accent);\n border-inline-start-width: var(--alert-accent-width);\n border-radius: var(--alert-radius);\n background-color: var(--_bg);\n color: var(--alert-fg);\n font-size: var(--alert-font-size);\n\n &[data-tone=\"info\"] {\n --_bg: var(--alert-info-bg);\n --_accent: var(--alert-info-accent);\n --_title: var(--alert-info-title);\n }\n\n &[data-tone=\"success\"] {\n --_bg: var(--alert-success-bg);\n --_accent: var(--alert-success-accent);\n --_title: var(--alert-success-title);\n }\n\n &[data-tone=\"warning\"] {\n --_bg: var(--alert-warning-bg);\n --_accent: var(--alert-warning-accent);\n --_title: var(--alert-warning-title);\n }\n\n &[data-tone=\"error\"] {\n --_bg: var(--alert-error-bg);\n --_accent: var(--alert-error-accent);\n --_title: var(--alert-error-title);\n }\n }\n\n .icon {\n flex: none;\n color: var(--_accent);\n }\n\n .body {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--space-1);\n min-inline-size: 0;\n }\n\n .title {\n margin: 0;\n color: var(--_title);\n font-weight: var(--alert-title-font-weight);\n }\n\n .content {\n overflow-wrap: anywhere;\n }\n\n .action {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n margin-block-start: var(--space-1);\n }\n\n .dismiss {\n flex: none;\n margin-block: calc(-1 * var(--space-1));\n margin-inline-end: calc(-1 * var(--space-2));\n }\n}\n"],"mappings":"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","names":["icon","root","spinner","ring","spin","button","label","iconButton","alert","icon","body","title","content","action","dismiss"]}
1
+ {"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/spinner/Spinner.module.css","../src/button/Button.module.css","../src/icon-button/IconButton.module.css","../src/alert/Alert.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--spinner-*). The ring is a border with one coloured side. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .spinner {\n --_size: var(--spinner-size-md);\n --_track: var(--spinner-track);\n --_indicator: var(--spinner-indicator);\n\n display: inline-flex;\n flex: none;\n inline-size: var(--_size);\n block-size: var(--_size);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { --_size: var(--spinner-size-sm); }\n &[data-size=\"lg\"] { --_size: var(--spinner-size-lg); }\n &[data-size=\"inherit\"] { --_size: 1em; }\n\n &[data-tone=\"inherit\"] {\n --_track: transparent;\n --_indicator: currentcolor;\n }\n }\n\n .ring {\n inline-size: 100%;\n block-size: 100%;\n border: var(--spinner-width) solid var(--_track);\n border-block-start-color: var(--_indicator);\n border-radius: var(--radius-full);\n animation: spin var(--spinner-duration) linear infinite;\n }\n\n @keyframes spin {\n to {\n rotate: 1turn;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ring {\n animation: none;\n }\n }\n}\n","/*\n * Every value is a token. State is expressed through data attributes so the\n * styling hooks survive a change of styling tool, and so tests and agents can\n * read state off the DOM.\n */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--button-gap);\n min-block-size: var(--button-height-md);\n padding-block: 0;\n padding-inline: var(--button-padding-inline-md);\n border: 1px solid transparent;\n border-radius: var(--button-radius);\n font-family: var(--button-font-family);\n font-size: var(--button-font-size-md);\n font-weight: var(--button-font-weight);\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n transition:\n background-color var(--button-motion-duration) var(--motion-easing-standard),\n border-color var(--button-motion-duration) var(--motion-easing-standard),\n color var(--button-motion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--button-focus-ring-width) solid var(--button-focus-ring);\n outline-offset: var(--button-focus-ring-offset);\n }\n\n &:disabled,\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-loading] {\n cursor: progress;\n }\n\n &[data-size=\"sm\"] {\n min-block-size: var(--button-height-sm);\n padding-inline: var(--button-padding-inline-sm);\n font-size: var(--button-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n min-block-size: var(--button-height-lg);\n padding-inline: var(--button-padding-inline-lg);\n font-size: var(--button-font-size-lg);\n }\n\n &[data-variant=\"primary\"] {\n background-color: var(--button-primary-bg);\n color: var(--button-primary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-active);\n }\n }\n\n &[data-variant=\"secondary\"] {\n background-color: var(--button-secondary-bg);\n border-color: var(--button-secondary-border);\n color: var(--button-secondary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-secondary-bg-hover);\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--button-ghost-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-ghost-bg-hover);\n }\n }\n }\n\n /* tone=\"danger\", after the variants so it wins at equal specificity plus one attribute. */\n .button[data-tone=\"danger\"] {\n &[data-variant=\"primary\"] {\n background-color: var(--button-danger-bg);\n color: var(--button-danger-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-bg-active);\n }\n }\n\n &:is([data-variant=\"secondary\"], [data-variant=\"ghost\"]) {\n color: var(--button-danger-text);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-quiet-bg-hover);\n }\n }\n }\n\n .label {\n display: inline-block;\n }\n}\n","/* Squares a Button. Selectors carry the data attribute so they outrank Button's own size rules. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .iconButton[data-icon-only] {\n gap: 0;\n inline-size: var(--icon-button-size-md);\n padding-inline: 0;\n\n &[data-size=\"sm\"] { inline-size: var(--icon-button-size-sm); }\n &[data-size=\"lg\"] { inline-size: var(--icon-button-size-lg); }\n }\n}\n","/* Every value is a token (--alert-*). Tone resolves into private custom properties. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .alert {\n --_bg: var(--alert-info-bg);\n --_accent: var(--alert-info-accent);\n --_title: var(--alert-info-title);\n\n display: flex;\n align-items: flex-start;\n gap: var(--alert-gap);\n padding: var(--alert-padding);\n border: var(--alert-border-width) solid var(--_accent);\n border-inline-start-width: var(--alert-accent-width);\n border-radius: var(--alert-radius);\n background-color: var(--_bg);\n color: var(--alert-fg);\n font-size: var(--alert-font-size);\n\n &[data-tone=\"info\"] {\n --_bg: var(--alert-info-bg);\n --_accent: var(--alert-info-accent);\n --_title: var(--alert-info-title);\n }\n\n &[data-tone=\"success\"] {\n --_bg: var(--alert-success-bg);\n --_accent: var(--alert-success-accent);\n --_title: var(--alert-success-title);\n }\n\n &[data-tone=\"warning\"] {\n --_bg: var(--alert-warning-bg);\n --_accent: var(--alert-warning-accent);\n --_title: var(--alert-warning-title);\n }\n\n &[data-tone=\"error\"] {\n --_bg: var(--alert-error-bg);\n --_accent: var(--alert-error-accent);\n --_title: var(--alert-error-title);\n }\n }\n\n .icon {\n flex: none;\n color: var(--_accent);\n }\n\n .body {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--space-1);\n min-inline-size: 0;\n }\n\n .title {\n margin: 0;\n color: var(--_title);\n font-weight: var(--alert-title-font-weight);\n }\n\n .content {\n overflow-wrap: anywhere;\n }\n\n .action {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n margin-block-start: var(--space-1);\n }\n\n .dismiss {\n flex: none;\n margin-block: calc(-1 * var(--space-1));\n margin-inline-end: calc(-1 * var(--space-2));\n }\n}\n"],"mappings":"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","names":["icon","root","spinner","ring","spin","button","label","iconButton","alert","icon","body","title","content","action","dismiss"]}
package/dist/alert.js CHANGED
@@ -1,10 +1,10 @@
1
- export { Alert } from './chunk-XXC34COT.js';
2
- import './chunk-DVM37MEK.js';
3
- import './chunk-VSDEQHG4.js';
4
- import './chunk-I4KC4V6A.js';
5
- import './chunk-ZVDN3GRI.js';
6
- import './chunk-Z4PN6B2C.js';
7
- import './chunk-ASNTNTJW.js';
1
+ export { Alert } from './chunk-A7TMFEQ2.js';
2
+ import './chunk-56RSH7GQ.js';
3
+ import './chunk-DE67ECD7.js';
4
+ import './chunk-ZL5MMRLG.js';
5
+ import './chunk-IB5UUE3S.js';
6
+ import './chunk-O5LII5XP.js';
7
+ import './chunk-QJG5ILK5.js';
8
8
  import './chunk-MI4QUKQS.js';
9
9
  //# sourceMappingURL=alert.js.map
10
10
  //# sourceMappingURL=alert.js.map
@@ -0,0 +1,46 @@
1
+ /* src/avatar/Avatar.module.css */
2
+ @layer reset, tokens, vendor, base, components, utilities;
3
+ @layer components {
4
+ .Avatar_root {
5
+ display: inline-flex;
6
+ flex: none;
7
+ align-items: center;
8
+ justify-content: center;
9
+ inline-size: var(--avatar-size-md);
10
+ block-size: var(--avatar-size-md);
11
+ overflow: hidden;
12
+ box-sizing: border-box;
13
+ border-radius: var(--avatar-radius);
14
+ background: var(--avatar-bg);
15
+ color: var(--avatar-fg);
16
+ font-family: var(--font-family-body);
17
+ font-size: var(--avatar-font-size-md);
18
+ font-weight: var(--avatar-weight);
19
+ line-height: 1;
20
+ vertical-align: middle;
21
+ &[data-fallback] {
22
+ border: var(--avatar-border-width) solid var(--avatar-border);
23
+ }
24
+ &[data-size=sm] {
25
+ inline-size: var(--avatar-size-sm);
26
+ block-size: var(--avatar-size-sm);
27
+ font-size: var(--avatar-font-size-sm);
28
+ }
29
+ &[data-size=lg] {
30
+ inline-size: var(--avatar-size-lg);
31
+ block-size: var(--avatar-size-lg);
32
+ font-size: var(--avatar-font-size-lg);
33
+ }
34
+ &[data-size=xl] {
35
+ inline-size: var(--avatar-size-xl);
36
+ block-size: var(--avatar-size-xl);
37
+ font-size: var(--avatar-font-size-xl);
38
+ }
39
+ }
40
+ .Avatar_image {
41
+ inline-size: 100%;
42
+ block-size: 100%;
43
+ object-fit: cover;
44
+ }
45
+ }
46
+ /*# sourceMappingURL=avatar.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/avatar/Avatar.module.css"],"sourcesContent":["/* Every value is a token: --avatar-* in packages/tokens/tokens/component/avatar.json */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .root {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n inline-size: var(--avatar-size-md);\n block-size: var(--avatar-size-md);\n overflow: hidden;\n box-sizing: border-box;\n border-radius: var(--avatar-radius);\n background: var(--avatar-bg);\n color: var(--avatar-fg);\n font-family: var(--font-family-body);\n font-size: var(--avatar-font-size-md);\n font-weight: var(--avatar-weight);\n line-height: 1;\n vertical-align: middle;\n\n /* Initials only: a picture has its own edge. */\n &[data-fallback] {\n border: var(--avatar-border-width) solid var(--avatar-border);\n }\n\n &[data-size='sm'] {\n inline-size: var(--avatar-size-sm);\n block-size: var(--avatar-size-sm);\n font-size: var(--avatar-font-size-sm);\n }\n\n &[data-size='lg'] {\n inline-size: var(--avatar-size-lg);\n block-size: var(--avatar-size-lg);\n font-size: var(--avatar-font-size-lg);\n }\n\n &[data-size='xl'] {\n inline-size: var(--avatar-size-xl);\n block-size: var(--avatar-size-xl);\n font-size: var(--avatar-font-size-xl);\n }\n }\n\n .image {\n inline-size: 100%;\n block-size: 100%;\n object-fit: cover;\n }\n}\n"],"mappings":";AAEA;AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,qBAAiB;AACjB,iBAAa,IAAI;AACjB,gBAAY,IAAI;AAChB,cAAU;AACV,gBAAY;AACZ,mBAAe,IAAI;AACnB,gBAAY,IAAI;AAChB,WAAO,IAAI;AACX,iBAAa,IAAI;AACjB,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,iBAAa;AACb,oBAAgB;AAGhB,KAAC,CAAC;AACA,cAAQ,IAAI,uBAAuB,MAAM,IAAI;AAC/C;AAEA,KAAC,CAAC;AACA,mBAAa,IAAI;AACjB,kBAAY,IAAI;AAChB,iBAAW,IAAI;AACjB;AAEA,KAAC,CAAC;AACA,mBAAa,IAAI;AACjB,kBAAY,IAAI;AAChB,iBAAW,IAAI;AACjB;AAEA,KAAC,CAAC;AACA,mBAAa,IAAI;AACjB,kBAAY,IAAI;AAChB,iBAAW,IAAI;AACjB;AACF;AAEA,GAACC;AACC,iBAAa;AACb,gBAAY;AACZ,gBAAY;AACd;AACF;","names":["root","image"]}
@@ -0,0 +1,41 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactElement, Ref } from 'react';
3
+
4
+ type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';
5
+ interface AvatarProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
6
+ /** The person's name. Its initials show when there is no image or the image fails, and it names the avatar unless `alt` does. */
7
+ name?: string;
8
+ /** Image URL. Ignored when an image element is passed as the child. */
9
+ src?: string;
10
+ /** Accessible name. Defaults to `name`. Pass `""` next to the visible name, so it is not read twice. */
11
+ alt?: string;
12
+ /** `sm` and `md` match the control heights, so an avatar lines up with a button. @default 'md' */
13
+ size?: AvatarSize;
14
+ /**
15
+ * An image element to use instead of `img`: a framework's image component
16
+ * (`<Avatar name="Ana"><Image src={url} alt="" width={40} height={40} /></Avatar>`).
17
+ * It receives the styles and the error handling; its own `alt` is replaced by the avatar's.
18
+ */
19
+ children?: ReactElement;
20
+ ref?: Ref<HTMLSpanElement>;
21
+ }
22
+ /**
23
+ * A person, as a picture or as initials. The initials take over when no image
24
+ * is given and when the image fails to load, so a broken URL never shows a
25
+ * broken-image glyph. Every value comes from `--avatar-*` tokens; the
26
+ * background is one token for everyone, not a colour computed from the name.
27
+ *
28
+ * @status experimental
29
+ * @category Utilities
30
+ * @accessibility With an image, the `img` carries the name as its `alt`. With initials, the root is `role="img"` named by `alt` or `name`, and the letters are hidden from assistive technology ("AR" read aloud means nothing). `alt=""` makes the avatar decorative (`aria-hidden`): use it when the name is written next to it. Not focusable and not interactive; wrap it in a Link or a Button to make it one.
31
+ * @do Pass `name` always, even with an image: it is the fallback when the image fails.
32
+ * @do Pass `alt=""` when the person's name is visible beside the avatar.
33
+ * @dont Colour avatars per person from a hash of the name; the colours will not be tokens and will not pass contrast in both schemes.
34
+ * @dont Use it for a logo or an illustration; it crops to a circle and falls back to initials.
35
+ */
36
+ declare function Avatar({ name, src, alt, size, className, ref, children, ...rest }: AvatarProps): react.JSX.Element;
37
+ declare namespace Avatar {
38
+ var displayName: string;
39
+ }
40
+
41
+ export { Avatar, type AvatarProps };
package/dist/avatar.js ADDED
@@ -0,0 +1,5 @@
1
+ "use client";export { Avatar } from './chunk-QXHSA4QD.js';
2
+ import './chunk-QJG5ILK5.js';
3
+ import './chunk-MI4QUKQS.js';
4
+ //# sourceMappingURL=avatar.js.map
5
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"avatar.js"}
package/dist/badge.css CHANGED
@@ -1,4 +1,5 @@
1
1
  /* src/icon/Icon.module.css */
2
+ @layer reset, tokens, vendor, base, components, utilities;
2
3
  @layer components {
3
4
  .Icon_icon {
4
5
  display: inline-flex;
@@ -23,7 +24,24 @@
23
24
  }
24
25
  }
25
26
 
27
+ /* src/visually-hidden/VisuallyHidden.module.css */
28
+ @layer reset, tokens, vendor, base, components, utilities;
29
+ @layer components {
30
+ .VisuallyHidden_root {
31
+ position: absolute;
32
+ inline-size: var(--visually-hidden-size);
33
+ block-size: var(--visually-hidden-size);
34
+ padding: 0;
35
+ margin: 0;
36
+ overflow: hidden;
37
+ clip-path: inset(50%);
38
+ white-space: nowrap;
39
+ border: 0;
40
+ }
41
+ }
42
+
26
43
  /* src/badge/Badge.module.css */
44
+ @layer reset, tokens, vendor, base, components, utilities;
27
45
  @layer components {
28
46
  .Badge_badge {
29
47
  --_bg: var(--badge-neutral-subtle-bg);
@@ -85,5 +103,26 @@
85
103
  --_fg: var(--badge-error-subtle-fg);
86
104
  }
87
105
  }
106
+ .Badge_badge[data-variant=dot] {
107
+ inline-size: var(--badge-dot-size);
108
+ block-size: var(--badge-dot-size);
109
+ padding: 0;
110
+ vertical-align: middle;
111
+ }
112
+ .Badge_badge[data-tone=neutral][data-variant=dot] {
113
+ --_bg: var(--badge-neutral-solid-bg);
114
+ }
115
+ .Badge_badge[data-tone=info][data-variant=dot] {
116
+ --_bg: var(--badge-info-solid-bg);
117
+ }
118
+ .Badge_badge[data-tone=success][data-variant=dot] {
119
+ --_bg: var(--badge-success-solid-bg);
120
+ }
121
+ .Badge_badge[data-tone=warning][data-variant=dot] {
122
+ --_bg: var(--badge-warning-solid-bg);
123
+ }
124
+ .Badge_badge[data-tone=error][data-variant=dot] {
125
+ --_bg: var(--badge-error-solid-bg);
126
+ }
88
127
  }
89
128
  /*# sourceMappingURL=badge.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icon/Icon.module.css","../src/badge/Badge.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* Every value is a token (--badge-*). Tone × variant resolve into private custom properties. */\n\n@layer components {\n .badge {\n --_bg: var(--badge-neutral-subtle-bg);\n --_fg: var(--badge-neutral-subtle-fg);\n\n display: inline-flex;\n align-items: center;\n gap: var(--badge-gap);\n padding-block: var(--badge-padding-block);\n padding-inline: var(--badge-padding-inline-md);\n border-radius: var(--badge-radius);\n background-color: var(--_bg);\n color: var(--_fg);\n font-size: var(--badge-font-size-md);\n font-weight: var(--badge-font-weight);\n line-height: var(--badge-line-height);\n white-space: nowrap;\n\n &[data-size=\"sm\"] {\n padding-inline: var(--badge-padding-inline-sm);\n font-size: var(--badge-font-size-sm);\n }\n\n &[data-tone=\"neutral\"][data-variant=\"solid\"] {\n --_bg: var(--badge-neutral-solid-bg);\n --_fg: var(--badge-neutral-solid-fg);\n }\n\n &[data-tone=\"neutral\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-neutral-subtle-bg);\n --_fg: var(--badge-neutral-subtle-fg);\n }\n\n &[data-tone=\"info\"][data-variant=\"solid\"] {\n --_bg: var(--badge-info-solid-bg);\n --_fg: var(--badge-info-solid-fg);\n }\n\n &[data-tone=\"info\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-info-subtle-bg);\n --_fg: var(--badge-info-subtle-fg);\n }\n\n &[data-tone=\"success\"][data-variant=\"solid\"] {\n --_bg: var(--badge-success-solid-bg);\n --_fg: var(--badge-success-solid-fg);\n }\n\n &[data-tone=\"success\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-success-subtle-bg);\n --_fg: var(--badge-success-subtle-fg);\n }\n\n &[data-tone=\"warning\"][data-variant=\"solid\"] {\n --_bg: var(--badge-warning-solid-bg);\n --_fg: var(--badge-warning-solid-fg);\n }\n\n &[data-tone=\"warning\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-warning-subtle-bg);\n --_fg: var(--badge-warning-subtle-fg);\n }\n\n &[data-tone=\"error\"][data-variant=\"solid\"] {\n --_bg: var(--badge-error-solid-bg);\n --_fg: var(--badge-error-solid-fg);\n }\n\n &[data-tone=\"error\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-error-subtle-bg);\n --_fg: var(--badge-error-subtle-fg);\n }\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,gBAAY;AACZ,eAAW,IAAI;AACf,oBAAgB;AAEhB,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAuB,iBAAW;AAAS;AAE7C,MAAE,EAAE;AACF,mBAAa;AACb,kBAAY;AACd;AACF;AACF;;;AClBA;AACE,GAACC;AACC,WAAO,IAAI;AACX,WAAO,IAAI;AAEX,aAAS;AACT,iBAAa;AACb,SAAK,IAAI;AACT,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,iBAAa,IAAI;AACjB,iBAAa;AAEb,KAAC,CAAC;AACA,sBAAgB,IAAI;AACpB,iBAAW,IAAI;AACjB;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,eAAiB,CAAC;AAClB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,eAAiB,CAAC;AAClB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,gBAAkB,CAAC;AACnB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,gBAAkB,CAAC;AACnB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AACF;AACF;","names":["icon","badge"]}
1
+ {"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/badge/Badge.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--badge-*). Tone × variant resolve into private custom properties. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .badge {\n --_bg: var(--badge-neutral-subtle-bg);\n --_fg: var(--badge-neutral-subtle-fg);\n\n display: inline-flex;\n align-items: center;\n gap: var(--badge-gap);\n padding-block: var(--badge-padding-block);\n padding-inline: var(--badge-padding-inline-md);\n border-radius: var(--badge-radius);\n background-color: var(--_bg);\n color: var(--_fg);\n font-size: var(--badge-font-size-md);\n font-weight: var(--badge-font-weight);\n line-height: var(--badge-line-height);\n white-space: nowrap;\n\n &[data-size=\"sm\"] {\n padding-inline: var(--badge-padding-inline-sm);\n font-size: var(--badge-font-size-sm);\n }\n\n &[data-tone=\"neutral\"][data-variant=\"solid\"] {\n --_bg: var(--badge-neutral-solid-bg);\n --_fg: var(--badge-neutral-solid-fg);\n }\n\n &[data-tone=\"neutral\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-neutral-subtle-bg);\n --_fg: var(--badge-neutral-subtle-fg);\n }\n\n &[data-tone=\"info\"][data-variant=\"solid\"] {\n --_bg: var(--badge-info-solid-bg);\n --_fg: var(--badge-info-solid-fg);\n }\n\n &[data-tone=\"info\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-info-subtle-bg);\n --_fg: var(--badge-info-subtle-fg);\n }\n\n &[data-tone=\"success\"][data-variant=\"solid\"] {\n --_bg: var(--badge-success-solid-bg);\n --_fg: var(--badge-success-solid-fg);\n }\n\n &[data-tone=\"success\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-success-subtle-bg);\n --_fg: var(--badge-success-subtle-fg);\n }\n\n &[data-tone=\"warning\"][data-variant=\"solid\"] {\n --_bg: var(--badge-warning-solid-bg);\n --_fg: var(--badge-warning-solid-fg);\n }\n\n &[data-tone=\"warning\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-warning-subtle-bg);\n --_fg: var(--badge-warning-subtle-fg);\n }\n\n &[data-tone=\"error\"][data-variant=\"solid\"] {\n --_bg: var(--badge-error-solid-bg);\n --_fg: var(--badge-error-solid-fg);\n }\n\n &[data-tone=\"error\"][data-variant=\"subtle\"] {\n --_bg: var(--badge-error-subtle-bg);\n --_fg: var(--badge-error-subtle-fg);\n }\n }\n\n /* A presence mark: the tone's solid fill, no text, no padding. After the tone rules so --_bg is set. */\n .badge[data-variant=\"dot\"] {\n inline-size: var(--badge-dot-size);\n block-size: var(--badge-dot-size);\n padding: 0;\n vertical-align: middle;\n }\n\n .badge[data-tone=\"neutral\"][data-variant=\"dot\"] {\n --_bg: var(--badge-neutral-solid-bg);\n }\n\n .badge[data-tone=\"info\"][data-variant=\"dot\"] {\n --_bg: var(--badge-info-solid-bg);\n }\n\n .badge[data-tone=\"success\"][data-variant=\"dot\"] {\n --_bg: var(--badge-success-solid-bg);\n }\n\n .badge[data-tone=\"warning\"][data-variant=\"dot\"] {\n --_bg: var(--badge-warning-solid-bg);\n }\n\n .badge[data-tone=\"error\"][data-variant=\"dot\"] {\n --_bg: var(--badge-error-solid-bg);\n }\n}\n"],"mappings":";AAEA;AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,gBAAY;AACZ,eAAW,IAAI;AACf,oBAAgB;AAEhB,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAuB,iBAAW;AAAS;AAE7C,MAAE,EAAE;AACF,mBAAa;AACb,kBAAY;AACd;AACF;AACF;;;ACpBA;AAEA;AACE,GAACC;AACC,cAAU;AACV,iBAAa,IAAI;AACjB,gBAAY,IAAI;AAChB,aAAS;AACT,YAAQ;AACR,cAAU;AACV,eAAW,MAAM;AACjB,iBAAa;AACb,YAAQ;AACV;AACF;;;ACdA;AAEA;AACE,GAACC;AACC,WAAO,IAAI;AACX,WAAO,IAAI;AAEX,aAAS;AACT,iBAAa;AACb,SAAK,IAAI;AACT,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,iBAAa,IAAI;AACjB,iBAAa;AAEb,KAAC,CAAC;AACA,sBAAgB,IAAI;AACpB,iBAAW,IAAI;AACjB;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,eAAiB,CAAC;AAClB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,eAAiB,CAAC;AAClB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,kBAAoB,CAAC;AACrB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,gBAAkB,CAAC;AACnB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AAEA,KAAC,CAAC,gBAAkB,CAAC;AACnB,aAAO,IAAI;AACX,aAAO,IAAI;AACb;AACF;AAGA,GA1ECA,WA0EK,CAAC;AACL,iBAAa,IAAI;AACjB,gBAAY,IAAI;AAChB,aAAS;AACT,oBAAgB;AAClB;AAEA,GAjFCA,WAiFK,CAAC,kBAAoB,CAAC;AAC1B,WAAO,IAAI;AACb;AAEA,GArFCA,WAqFK,CAAC,eAAiB,CAAC;AACvB,WAAO,IAAI;AACb;AAEA,GAzFCA,WAyFK,CAAC,kBAAoB,CAAC;AAC1B,WAAO,IAAI;AACb;AAEA,GA7FCA,WA6FK,CAAC,kBAAoB,CAAC;AAC1B,WAAO,IAAI;AACb;AAEA,GAjGCA,WAiGK,CAAC,gBAAkB,CAAC;AACxB,WAAO,IAAI;AACb;AACF;","names":["icon","root","badge"]}
package/dist/badge.d.ts CHANGED
@@ -2,19 +2,35 @@ import * as react from 'react';
2
2
  import { HTMLAttributes, ReactNode, Ref } from 'react';
3
3
 
4
4
  type BadgeTone = 'neutral' | 'info' | 'success' | 'warning' | 'error';
5
- type BadgeVariant = 'solid' | 'subtle';
5
+ type BadgeVariant = 'solid' | 'subtle' | 'dot';
6
6
  type BadgeSize = 'sm' | 'md';
7
7
  interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
8
8
  /** Meaning, not colour: `neutral` for counts and tags. @default 'neutral' */
9
9
  tone?: BadgeTone;
10
- /** `solid` fills with the tone; `subtle` tints and uses the tone as text. @default 'subtle' */
10
+ /**
11
+ * `solid` fills with the tone; `subtle` tints and uses the tone as text; `dot` is a
12
+ * small filled circle with no visible text, which needs a `label`. @default 'subtle'
13
+ */
11
14
  variant?: BadgeVariant;
12
15
  /** @default 'md' */
13
16
  size?: BadgeSize;
14
17
  /** Leading glyph, decorative. */
15
18
  icon?: ReactNode;
19
+ /**
20
+ * A number to show instead of children, clamped to `max` ("99+"). Zero or less
21
+ * renders nothing: an empty inbox has no badge.
22
+ */
23
+ count?: number;
24
+ /** The highest count shown as is. @default 99 */
25
+ max?: number;
26
+ /**
27
+ * What the badge means, for assistive technology. Required for `variant="dot"`
28
+ * ("Unread messages"), where it is the only content. With a `count` it is read
29
+ * after the number: `count={3} label="unread"` is announced as "3 unread".
30
+ */
31
+ label?: string;
16
32
  ref?: Ref<HTMLSpanElement>;
17
- children: ReactNode;
33
+ children?: ReactNode;
18
34
  }
19
35
  /**
20
36
  * A small label for status, counts and tags. Tone and variant resolve
@@ -24,13 +40,14 @@ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
24
40
  *
25
41
  * @status stable
26
42
  * @category Feedback
27
- * @accessibility Plain text: no role, no interaction. Every tone × variant pair meets WCAG AA, proven by the token tests. Tone is reinforced by the text, not only by colour.
43
+ * @accessibility Plain text: no role, no interaction, and deliberately no live region: a badge that is there when the page renders must not be announced as news (put `role="status"` on a wrapper yourself if a count changes while the user is on the page). A `dot` has no visible text, so its `label` is rendered visually hidden; a `count` above `max` reads as "99+", followed by the `label` if there is one. Every tone × variant pair meets WCAG AA, proven by the token tests. Tone is reinforced by the text, not only by colour.
28
44
  * @do Keep the text to one or two words.
45
+ * @do Give a `dot` a `label` that says what it marks, and a `count` a `label` that says what is counted.
29
46
  * Pair a leading icon with text, never alone.
30
47
  * @dont Make it clickable; compose a Button for a removable chip.
31
48
  * Use tone alone to convey meaning; say it in the text.
32
49
  */
33
- declare function Badge({ tone, variant, size, icon, className, ref, children, ...rest }: BadgeProps): react.JSX.Element;
50
+ declare function Badge({ tone, variant, size, icon, count, max, label, className, ref, children, ...rest }: BadgeProps): react.JSX.Element | null;
34
51
  declare namespace Badge {
35
52
  var displayName: string;
36
53
  }
package/dist/badge.js CHANGED
@@ -1,5 +1,6 @@
1
- export { Badge } from './chunk-6I26MMQF.js';
2
- import './chunk-ASNTNTJW.js';
1
+ export { Badge } from './chunk-KSLKNWWM.js';
2
+ import './chunk-IB5UUE3S.js';
3
+ import './chunk-O5LII5XP.js';
3
4
  import './chunk-MI4QUKQS.js';
4
5
  //# sourceMappingURL=badge.js.map
5
6
  //# sourceMappingURL=badge.js.map
package/dist/button.css CHANGED
@@ -1,4 +1,5 @@
1
1
  /* src/icon/Icon.module.css */
2
+ @layer reset, tokens, vendor, base, components, utilities;
2
3
  @layer components {
3
4
  .Icon_icon {
4
5
  display: inline-flex;
@@ -24,6 +25,7 @@
24
25
  }
25
26
 
26
27
  /* src/visually-hidden/VisuallyHidden.module.css */
28
+ @layer reset, tokens, vendor, base, components, utilities;
27
29
  @layer components {
28
30
  .VisuallyHidden_root {
29
31
  position: absolute;
@@ -39,6 +41,7 @@
39
41
  }
40
42
 
41
43
  /* src/spinner/Spinner.module.css */
44
+ @layer reset, tokens, vendor, base, components, utilities;
42
45
  @layer components {
43
46
  .Spinner_spinner {
44
47
  --_size: var(--spinner-size-md);
@@ -84,6 +87,7 @@
84
87
  }
85
88
 
86
89
  /* src/button/Button.module.css */
90
+ @layer reset, tokens, vendor, base, components, utilities;
87
91
  @layer components {
88
92
  .Button_button {
89
93
  display: inline-flex;
@@ -156,6 +160,24 @@
156
160
  }
157
161
  }
158
162
  }
163
+ .Button_button[data-tone=danger] {
164
+ &[data-variant=primary] {
165
+ background-color: var(--button-danger-bg);
166
+ color: var(--button-danger-fg);
167
+ &:hover:not(:disabled, [aria-disabled=true]) {
168
+ background-color: var(--button-danger-bg-hover);
169
+ }
170
+ &:active:not(:disabled, [aria-disabled=true]) {
171
+ background-color: var(--button-danger-bg-active);
172
+ }
173
+ }
174
+ &:is([data-variant=secondary], [data-variant=ghost]) {
175
+ color: var(--button-danger-text);
176
+ &:hover:not(:disabled, [aria-disabled=true]) {
177
+ background-color: var(--button-danger-quiet-bg-hover);
178
+ }
179
+ }
180
+ }
159
181
  .Button_label {
160
182
  display: inline-block;
161
183
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/spinner/Spinner.module.css","../src/button/Button.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--spinner-*). The ring is a border with one coloured side. */\n\n@layer components {\n .spinner {\n --_size: var(--spinner-size-md);\n --_track: var(--spinner-track);\n --_indicator: var(--spinner-indicator);\n\n display: inline-flex;\n flex: none;\n inline-size: var(--_size);\n block-size: var(--_size);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { --_size: var(--spinner-size-sm); }\n &[data-size=\"lg\"] { --_size: var(--spinner-size-lg); }\n &[data-size=\"inherit\"] { --_size: 1em; }\n\n &[data-tone=\"inherit\"] {\n --_track: transparent;\n --_indicator: currentcolor;\n }\n }\n\n .ring {\n inline-size: 100%;\n block-size: 100%;\n border: var(--spinner-width) solid var(--_track);\n border-block-start-color: var(--_indicator);\n border-radius: var(--radius-full);\n animation: spin var(--spinner-duration) linear infinite;\n }\n\n @keyframes spin {\n to {\n rotate: 1turn;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ring {\n animation: none;\n }\n }\n}\n","/*\n * Every value is a token. State is expressed through data attributes so the\n * styling hooks survive a change of styling tool, and so tests and agents can\n * read state off the DOM.\n */\n\n@layer components {\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--button-gap);\n min-block-size: var(--button-height-md);\n padding-block: 0;\n padding-inline: var(--button-padding-inline-md);\n border: 1px solid transparent;\n border-radius: var(--button-radius);\n font-family: var(--button-font-family);\n font-size: var(--button-font-size-md);\n font-weight: var(--button-font-weight);\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n transition:\n background-color var(--button-motion-duration) var(--motion-easing-standard),\n border-color var(--button-motion-duration) var(--motion-easing-standard),\n color var(--button-motion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--button-focus-ring-width) solid var(--button-focus-ring);\n outline-offset: var(--button-focus-ring-offset);\n }\n\n &:disabled,\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-loading] {\n cursor: progress;\n }\n\n &[data-size=\"sm\"] {\n min-block-size: var(--button-height-sm);\n padding-inline: var(--button-padding-inline-sm);\n font-size: var(--button-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n min-block-size: var(--button-height-lg);\n padding-inline: var(--button-padding-inline-lg);\n font-size: var(--button-font-size-lg);\n }\n\n &[data-variant=\"primary\"] {\n background-color: var(--button-primary-bg);\n color: var(--button-primary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-active);\n }\n }\n\n &[data-variant=\"secondary\"] {\n background-color: var(--button-secondary-bg);\n border-color: var(--button-secondary-border);\n color: var(--button-secondary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-secondary-bg-hover);\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--button-ghost-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-ghost-bg-hover);\n }\n }\n }\n\n .label {\n display: inline-block;\n }\n}\n"],"mappings":"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","names":["icon","root","spinner","ring","spin","button","label"]}
1
+ {"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/spinner/Spinner.module.css","../src/button/Button.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--spinner-*). The ring is a border with one coloured side. */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .spinner {\n --_size: var(--spinner-size-md);\n --_track: var(--spinner-track);\n --_indicator: var(--spinner-indicator);\n\n display: inline-flex;\n flex: none;\n inline-size: var(--_size);\n block-size: var(--_size);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { --_size: var(--spinner-size-sm); }\n &[data-size=\"lg\"] { --_size: var(--spinner-size-lg); }\n &[data-size=\"inherit\"] { --_size: 1em; }\n\n &[data-tone=\"inherit\"] {\n --_track: transparent;\n --_indicator: currentcolor;\n }\n }\n\n .ring {\n inline-size: 100%;\n block-size: 100%;\n border: var(--spinner-width) solid var(--_track);\n border-block-start-color: var(--_indicator);\n border-radius: var(--radius-full);\n animation: spin var(--spinner-duration) linear infinite;\n }\n\n @keyframes spin {\n to {\n rotate: 1turn;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ring {\n animation: none;\n }\n }\n}\n","/*\n * Every value is a token. State is expressed through data attributes so the\n * styling hooks survive a change of styling tool, and so tests and agents can\n * read state off the DOM.\n */\n\n@layer reset, tokens, vendor, base, components, utilities;\n\n@layer components {\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--button-gap);\n min-block-size: var(--button-height-md);\n padding-block: 0;\n padding-inline: var(--button-padding-inline-md);\n border: 1px solid transparent;\n border-radius: var(--button-radius);\n font-family: var(--button-font-family);\n font-size: var(--button-font-size-md);\n font-weight: var(--button-font-weight);\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n transition:\n background-color var(--button-motion-duration) var(--motion-easing-standard),\n border-color var(--button-motion-duration) var(--motion-easing-standard),\n color var(--button-motion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--button-focus-ring-width) solid var(--button-focus-ring);\n outline-offset: var(--button-focus-ring-offset);\n }\n\n &:disabled,\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-loading] {\n cursor: progress;\n }\n\n &[data-size=\"sm\"] {\n min-block-size: var(--button-height-sm);\n padding-inline: var(--button-padding-inline-sm);\n font-size: var(--button-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n min-block-size: var(--button-height-lg);\n padding-inline: var(--button-padding-inline-lg);\n font-size: var(--button-font-size-lg);\n }\n\n &[data-variant=\"primary\"] {\n background-color: var(--button-primary-bg);\n color: var(--button-primary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-active);\n }\n }\n\n &[data-variant=\"secondary\"] {\n background-color: var(--button-secondary-bg);\n border-color: var(--button-secondary-border);\n color: var(--button-secondary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-secondary-bg-hover);\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--button-ghost-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-ghost-bg-hover);\n }\n }\n }\n\n /* tone=\"danger\", after the variants so it wins at equal specificity plus one attribute. */\n .button[data-tone=\"danger\"] {\n &[data-variant=\"primary\"] {\n background-color: var(--button-danger-bg);\n color: var(--button-danger-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-bg-active);\n }\n }\n\n &:is([data-variant=\"secondary\"], [data-variant=\"ghost\"]) {\n color: var(--button-danger-text);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-danger-quiet-bg-hover);\n }\n }\n }\n\n .label {\n display: inline-block;\n }\n}\n"],"mappings":"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","names":["icon","root","spinner","ring","spin","button","label"]}
package/dist/button.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ButtonHTMLAttributes, ReactNode, Ref } from 'react';
3
3
 
4
+ type ButtonTone = 'default' | 'danger';
4
5
  type ButtonVariant = 'primary' | 'secondary' | 'ghost';
5
6
  type ButtonSize = 'sm' | 'md' | 'lg';
6
7
  interface ButtonProps<E extends HTMLElement = HTMLButtonElement> extends ButtonHTMLAttributes<HTMLButtonElement> {
@@ -10,6 +11,13 @@ interface ButtonProps<E extends HTMLElement = HTMLButtonElement> extends ButtonH
10
11
  * @default 'primary'
11
12
  */
12
13
  variant?: ButtonVariant;
14
+ /**
15
+ * `danger` for an action that destroys something (delete, remove, leave). It
16
+ * recolours whichever `variant` is in use, so emphasis and danger stay two
17
+ * separate decisions: `variant="ghost" tone="danger"` is a quiet delete.
18
+ * @default 'default'
19
+ */
20
+ tone?: ButtonTone;
13
21
  /** @default 'md' */
14
22
  size?: ButtonSize;
15
23
  /**
@@ -50,12 +58,13 @@ interface ButtonProps<E extends HTMLElement = HTMLButtonElement> extends ButtonH
50
58
  * @accessibility A native `button` (or the child element with `asChild`). `loading` sets `aria-disabled` and `aria-busy` and keeps focus; only `disabled` removes it from the tab order. Icon-only use warns in development: use IconButton, which requires a name.
51
59
  * @do One `primary` per view.
52
60
  * Use `asChild` for links that look like buttons, keeping the `a` semantics.
61
+ * @do Use `tone="danger"` for the action that destroys, and say what it destroys in the label ("Delete place"), since colour alone must not carry it.
53
62
  * @dont Use `loading` on a button that is not the one that started the work.
54
63
  * Rely on colour to tell variants apart; the label carries the meaning.
55
64
  */
56
- declare function Button<E extends HTMLElement = HTMLButtonElement>({ variant, size, loading, iconStart, iconEnd, asChild, className, disabled, type, onClick, ref, children, ...rest }: ButtonProps<E>): react.JSX.Element;
65
+ declare function Button<E extends HTMLElement = HTMLButtonElement>({ variant, tone, size, loading, iconStart, iconEnd, asChild, className, disabled, type, onClick, ref, children, ...rest }: ButtonProps<E>): react.JSX.Element;
57
66
  declare namespace Button {
58
67
  var displayName: string;
59
68
  }
60
69
 
61
- export { Button, type ButtonProps, type ButtonSize, type ButtonVariant };
70
+ export { Button, type ButtonProps, type ButtonSize, type ButtonTone, type ButtonVariant };
package/dist/button.js CHANGED
@@ -1,8 +1,8 @@
1
- export { Button } from './chunk-VSDEQHG4.js';
2
- import './chunk-I4KC4V6A.js';
3
- import './chunk-ZVDN3GRI.js';
4
- import './chunk-Z4PN6B2C.js';
5
- import './chunk-ASNTNTJW.js';
1
+ export { Button } from './chunk-DE67ECD7.js';
2
+ import './chunk-ZL5MMRLG.js';
3
+ import './chunk-IB5UUE3S.js';
4
+ import './chunk-O5LII5XP.js';
5
+ import './chunk-QJG5ILK5.js';
6
6
  import './chunk-MI4QUKQS.js';
7
7
  //# sourceMappingURL=button.js.map
8
8
  //# sourceMappingURL=button.js.map