@wordpress/ui 0.4.1-next.76cff8c98.0 → 0.5.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 (240) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/build/badge/badge.cjs.map +2 -2
  3. package/build/badge/types.cjs.map +1 -1
  4. package/build/button/button.cjs +401 -0
  5. package/build/button/button.cjs.map +7 -0
  6. package/build/button/icon.cjs +47 -0
  7. package/build/button/icon.cjs.map +7 -0
  8. package/build/button/index.cjs +39 -0
  9. package/build/button/index.cjs.map +7 -0
  10. package/build/button/types.cjs +19 -0
  11. package/build/button/types.cjs.map +7 -0
  12. package/build/form/primitives/field/root.cjs.map +2 -2
  13. package/build/form/primitives/fieldset/context.cjs +40 -0
  14. package/build/form/primitives/fieldset/context.cjs.map +7 -0
  15. package/build/form/primitives/fieldset/description.cjs +101 -0
  16. package/build/form/primitives/fieldset/description.cjs.map +7 -0
  17. package/build/form/primitives/fieldset/details.cjs +103 -0
  18. package/build/form/primitives/fieldset/details.cjs.map +7 -0
  19. package/build/form/primitives/fieldset/index.cjs +40 -0
  20. package/build/form/primitives/fieldset/index.cjs.map +7 -0
  21. package/build/form/primitives/fieldset/legend.cjs +94 -0
  22. package/build/form/primitives/fieldset/legend.cjs.map +7 -0
  23. package/build/form/primitives/fieldset/root.cjs +86 -0
  24. package/build/form/primitives/fieldset/root.cjs.map +7 -0
  25. package/build/form/primitives/fieldset/types.cjs +19 -0
  26. package/build/form/primitives/fieldset/types.cjs.map +7 -0
  27. package/build/form/primitives/index.cjs +11 -2
  28. package/build/form/primitives/index.cjs.map +2 -2
  29. package/build/form/primitives/input/index.cjs +31 -0
  30. package/build/form/primitives/input/index.cjs.map +7 -0
  31. package/build/form/primitives/input/input.cjs +148 -0
  32. package/build/form/primitives/input/input.cjs.map +7 -0
  33. package/build/form/primitives/input/types.cjs +19 -0
  34. package/build/form/primitives/input/types.cjs.map +7 -0
  35. package/build/form/primitives/input-layout/context.cjs +49 -0
  36. package/build/form/primitives/input-layout/context.cjs.map +7 -0
  37. package/build/form/primitives/input-layout/index.cjs +35 -0
  38. package/build/form/primitives/input-layout/index.cjs.map +7 -0
  39. package/build/form/primitives/input-layout/input-layout.cjs +196 -0
  40. package/build/form/primitives/input-layout/input-layout.cjs.map +7 -0
  41. package/build/form/primitives/input-layout/slot.cjs +165 -0
  42. package/build/form/primitives/input-layout/slot.cjs.map +7 -0
  43. package/build/form/primitives/input-layout/types.cjs +19 -0
  44. package/build/form/primitives/input-layout/types.cjs.map +7 -0
  45. package/build/icon/icon.cjs +46 -0
  46. package/build/icon/icon.cjs.map +7 -0
  47. package/build/icon/index.cjs +31 -0
  48. package/build/icon/index.cjs.map +7 -0
  49. package/build/icon/types.cjs +19 -0
  50. package/build/icon/types.cjs.map +7 -0
  51. package/build/index.cjs +4 -0
  52. package/build/index.cjs.map +2 -2
  53. package/build-module/badge/badge.mjs.map +2 -2
  54. package/build-module/button/button.mjs +366 -0
  55. package/build-module/button/button.mjs.map +7 -0
  56. package/build-module/button/icon.mjs +22 -0
  57. package/build-module/button/icon.mjs.map +7 -0
  58. package/build-module/button/index.mjs +14 -0
  59. package/build-module/button/index.mjs.map +7 -0
  60. package/build-module/button/types.mjs +1 -0
  61. package/build-module/button/types.mjs.map +7 -0
  62. package/build-module/form/primitives/field/root.mjs.map +2 -2
  63. package/build-module/form/primitives/fieldset/context.mjs +14 -0
  64. package/build-module/form/primitives/fieldset/context.mjs.map +7 -0
  65. package/build-module/form/primitives/fieldset/description.mjs +66 -0
  66. package/build-module/form/primitives/fieldset/description.mjs.map +7 -0
  67. package/build-module/form/primitives/fieldset/details.mjs +68 -0
  68. package/build-module/form/primitives/fieldset/details.mjs.map +7 -0
  69. package/build-module/form/primitives/fieldset/index.mjs +12 -0
  70. package/build-module/form/primitives/fieldset/index.mjs.map +7 -0
  71. package/build-module/form/primitives/fieldset/legend.mjs +59 -0
  72. package/build-module/form/primitives/fieldset/legend.mjs.map +7 -0
  73. package/build-module/form/primitives/fieldset/root.mjs +51 -0
  74. package/build-module/form/primitives/fieldset/root.mjs.map +7 -0
  75. package/build-module/form/primitives/fieldset/types.mjs +1 -0
  76. package/build-module/form/primitives/fieldset/types.mjs.map +7 -0
  77. package/build-module/form/primitives/index.mjs +7 -1
  78. package/build-module/form/primitives/index.mjs.map +2 -2
  79. package/build-module/form/primitives/input/index.mjs +6 -0
  80. package/build-module/form/primitives/input/index.mjs.map +7 -0
  81. package/build-module/form/primitives/input/input.mjs +113 -0
  82. package/build-module/form/primitives/input/input.mjs.map +7 -0
  83. package/build-module/form/primitives/input/types.mjs +1 -0
  84. package/build-module/form/primitives/input/types.mjs.map +7 -0
  85. package/build-module/form/primitives/input-layout/context.mjs +22 -0
  86. package/build-module/form/primitives/input-layout/context.mjs.map +7 -0
  87. package/build-module/form/primitives/input-layout/index.mjs +10 -0
  88. package/build-module/form/primitives/input-layout/index.mjs.map +7 -0
  89. package/build-module/form/primitives/input-layout/input-layout.mjs +161 -0
  90. package/build-module/form/primitives/input-layout/input-layout.mjs.map +7 -0
  91. package/build-module/form/primitives/input-layout/slot.mjs +130 -0
  92. package/build-module/form/primitives/input-layout/slot.mjs.map +7 -0
  93. package/build-module/form/primitives/input-layout/types.mjs +1 -0
  94. package/build-module/form/primitives/input-layout/types.mjs.map +7 -0
  95. package/build-module/icon/icon.mjs +21 -0
  96. package/build-module/icon/icon.mjs.map +7 -0
  97. package/build-module/icon/index.mjs +6 -0
  98. package/build-module/icon/index.mjs.map +7 -0
  99. package/build-module/icon/types.mjs +1 -0
  100. package/build-module/icon/types.mjs.map +7 -0
  101. package/build-module/index.mjs +2 -0
  102. package/build-module/index.mjs.map +2 -2
  103. package/build-types/badge/badge.d.ts.map +1 -1
  104. package/build-types/badge/stories/index.story.d.ts +1 -7
  105. package/build-types/badge/stories/index.story.d.ts.map +1 -1
  106. package/build-types/badge/types.d.ts +0 -3
  107. package/build-types/badge/types.d.ts.map +1 -1
  108. package/build-types/box/stories/index.story.d.ts +1 -1
  109. package/build-types/box/stories/index.story.d.ts.map +1 -1
  110. package/build-types/button/button.d.ts +3 -0
  111. package/build-types/button/button.d.ts.map +1 -0
  112. package/build-types/button/icon.d.ts +10 -0
  113. package/build-types/button/icon.d.ts.map +1 -0
  114. package/build-types/button/index.d.ts +10 -0
  115. package/build-types/button/index.d.ts.map +1 -0
  116. package/build-types/button/stories/index.story.d.ts +23 -0
  117. package/build-types/button/stories/index.story.d.ts.map +1 -0
  118. package/build-types/button/test/button.test.d.ts +2 -0
  119. package/build-types/button/test/button.test.d.ts.map +1 -0
  120. package/build-types/button/test/icon.test.d.ts +2 -0
  121. package/build-types/button/test/icon.test.d.ts.map +1 -0
  122. package/build-types/button/types.d.ts +63 -0
  123. package/build-types/button/types.d.ts.map +1 -0
  124. package/build-types/form/primitives/field/control.d.ts +1 -1
  125. package/build-types/form/primitives/field/description.d.ts +1 -1
  126. package/build-types/form/primitives/field/label.d.ts +1 -1
  127. package/build-types/form/primitives/field/root.d.ts +3 -1
  128. package/build-types/form/primitives/field/root.d.ts.map +1 -1
  129. package/build-types/form/primitives/field/stories/index.story.d.ts +1 -1
  130. package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
  131. package/build-types/form/primitives/fieldset/context.d.ts +8 -0
  132. package/build-types/form/primitives/fieldset/context.d.ts.map +1 -0
  133. package/build-types/form/primitives/fieldset/description.d.ts +9 -0
  134. package/build-types/form/primitives/fieldset/description.d.ts.map +1 -0
  135. package/build-types/form/primitives/fieldset/details.d.ts +21 -0
  136. package/build-types/form/primitives/fieldset/details.d.ts.map +1 -0
  137. package/build-types/form/primitives/fieldset/index.d.ts +6 -0
  138. package/build-types/form/primitives/fieldset/index.d.ts.map +1 -0
  139. package/build-types/form/primitives/fieldset/legend.d.ts +9 -0
  140. package/build-types/form/primitives/fieldset/legend.d.ts.map +1 -0
  141. package/build-types/form/primitives/fieldset/root.d.ts +15 -0
  142. package/build-types/form/primitives/fieldset/root.d.ts.map +1 -0
  143. package/build-types/form/primitives/fieldset/stories/index.story.d.ts +18 -0
  144. package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -0
  145. package/build-types/form/primitives/fieldset/test/index.test.d.ts +2 -0
  146. package/build-types/form/primitives/fieldset/test/index.test.d.ts.map +1 -0
  147. package/build-types/form/primitives/fieldset/types.d.ts +32 -0
  148. package/build-types/form/primitives/fieldset/types.d.ts.map +1 -0
  149. package/build-types/form/primitives/index.d.ts +3 -0
  150. package/build-types/form/primitives/index.d.ts.map +1 -1
  151. package/build-types/form/primitives/input/index.d.ts +2 -0
  152. package/build-types/form/primitives/input/index.d.ts.map +1 -0
  153. package/build-types/form/primitives/input/input.d.ts +10 -0
  154. package/build-types/form/primitives/input/input.d.ts.map +1 -0
  155. package/build-types/form/primitives/input/stories/index.story.d.ts +13 -0
  156. package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -0
  157. package/build-types/form/primitives/input/test/index.test.d.ts +2 -0
  158. package/build-types/form/primitives/input/test/index.test.d.ts.map +1 -0
  159. package/build-types/form/primitives/input/types.d.ts +27 -0
  160. package/build-types/form/primitives/input/types.d.ts.map +1 -0
  161. package/build-types/form/primitives/input-layout/context.d.ts +17 -0
  162. package/build-types/form/primitives/input-layout/context.d.ts.map +1 -0
  163. package/build-types/form/primitives/input-layout/index.d.ts +4 -0
  164. package/build-types/form/primitives/input-layout/index.d.ts.map +1 -0
  165. package/build-types/form/primitives/input-layout/input-layout.d.ts +7 -0
  166. package/build-types/form/primitives/input-layout/input-layout.d.ts.map +1 -0
  167. package/build-types/form/primitives/input-layout/slot.d.ts +6 -0
  168. package/build-types/form/primitives/input-layout/slot.d.ts.map +1 -0
  169. package/build-types/form/primitives/input-layout/stories/index.story.d.ts +24 -0
  170. package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -0
  171. package/build-types/form/primitives/input-layout/test/index.test.d.ts +2 -0
  172. package/build-types/form/primitives/input-layout/test/index.test.d.ts.map +1 -0
  173. package/build-types/form/primitives/input-layout/types.d.ts +41 -0
  174. package/build-types/form/primitives/input-layout/types.d.ts.map +1 -0
  175. package/build-types/icon/icon.d.ts +14 -0
  176. package/build-types/icon/icon.d.ts.map +1 -0
  177. package/build-types/icon/index.d.ts +2 -0
  178. package/build-types/icon/index.d.ts.map +1 -0
  179. package/build-types/icon/stories/index.story.d.ts +11 -0
  180. package/build-types/icon/stories/index.story.d.ts.map +1 -0
  181. package/build-types/icon/test/icon.test.d.ts +2 -0
  182. package/build-types/icon/test/icon.test.d.ts.map +1 -0
  183. package/build-types/icon/types.d.ts +15 -0
  184. package/build-types/icon/types.d.ts.map +1 -0
  185. package/build-types/index.d.ts +2 -0
  186. package/build-types/index.d.ts.map +1 -1
  187. package/build-types/stack/stories/index.story.d.ts +1 -1
  188. package/build-types/stack/stories/index.story.d.ts.map +1 -1
  189. package/build-types/visually-hidden/stories/index.story.d.ts +1 -1
  190. package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
  191. package/package.json +14 -5
  192. package/src/badge/badge.tsx +0 -7
  193. package/src/badge/stories/index.story.tsx +1 -14
  194. package/src/badge/types.ts +0 -3
  195. package/src/box/stories/index.story.tsx +1 -2
  196. package/src/button/button.tsx +57 -0
  197. package/src/button/icon.tsx +24 -0
  198. package/src/button/index.ts +16 -0
  199. package/src/button/stories/index.story.tsx +192 -0
  200. package/src/button/style.module.css +232 -0
  201. package/src/button/test/button.test.tsx +89 -0
  202. package/src/button/test/icon.test.tsx +13 -0
  203. package/src/button/types.ts +72 -0
  204. package/src/form/primitives/field/root.tsx +2 -0
  205. package/src/form/primitives/field/stories/index.story.tsx +1 -1
  206. package/src/form/primitives/fieldset/context.tsx +13 -0
  207. package/src/form/primitives/fieldset/description.tsx +36 -0
  208. package/src/form/primitives/fieldset/details.tsx +46 -0
  209. package/src/form/primitives/fieldset/index.ts +6 -0
  210. package/src/form/primitives/fieldset/legend.tsx +17 -0
  211. package/src/form/primitives/fieldset/root.tsx +42 -0
  212. package/src/form/primitives/fieldset/stories/index.story.tsx +67 -0
  213. package/src/form/primitives/fieldset/style.module.css +12 -0
  214. package/src/form/primitives/fieldset/test/index.test.tsx +135 -0
  215. package/src/form/primitives/fieldset/types.ts +35 -0
  216. package/src/form/primitives/index.ts +3 -0
  217. package/src/form/primitives/input/index.ts +1 -0
  218. package/src/form/primitives/input/input.tsx +28 -0
  219. package/src/form/primitives/input/stories/index.story.tsx +40 -0
  220. package/src/form/primitives/input/style.module.css +34 -0
  221. package/src/form/primitives/input/test/index.test.tsx +13 -0
  222. package/src/form/primitives/input/types.ts +31 -0
  223. package/src/form/primitives/input-layout/context.tsx +36 -0
  224. package/src/form/primitives/input-layout/index.ts +6 -0
  225. package/src/form/primitives/input-layout/input-layout.tsx +49 -0
  226. package/src/form/primitives/input-layout/slot.tsx +39 -0
  227. package/src/form/primitives/input-layout/stories/index.story.tsx +67 -0
  228. package/src/form/primitives/input-layout/style.module.css +82 -0
  229. package/src/form/primitives/input-layout/test/index.test.tsx +23 -0
  230. package/src/form/primitives/input-layout/types.ts +44 -0
  231. package/src/icon/icon.tsx +30 -0
  232. package/src/icon/index.ts +1 -0
  233. package/src/icon/stories/index.story.tsx +47 -0
  234. package/src/icon/test/icon.test.tsx +13 -0
  235. package/src/icon/types.ts +14 -0
  236. package/src/index.ts +2 -0
  237. package/src/stack/stories/index.story.tsx +1 -2
  238. package/src/stories/introduction.mdx +6 -0
  239. package/src/utils/css/focus.module.css +31 -0
  240. package/src/visually-hidden/stories/index.story.tsx +1 -1
@@ -0,0 +1,366 @@
1
+ // packages/ui/src/button/button.tsx
2
+ import { Button as _Button } from "@base-ui/react/button";
3
+ import clsx from "clsx";
4
+ import { speak } from "@wordpress/a11y";
5
+ import { forwardRef, useEffect } from "@wordpress/element";
6
+ import { __ } from "@wordpress/i18n";
7
+
8
+ // packages/ui/src/button/style.module.css
9
+ var css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;
10
+
11
+ @layer wp-ui-components {
12
+ .style-module__button__l7D8M,
13
+ .style-module__is-unstyled__q7snL {
14
+ appearance: none;
15
+ padding: 0;
16
+ }
17
+
18
+ .style-module__button__l7D8M {
19
+ /* Internal variables */
20
+ --wp-ui-button-font-weight: 499;
21
+
22
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-strong);
23
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-strong-active);
24
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-strong-disabled);
25
+ --wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-brand-strong);
26
+ --wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-brand-strong-active);
27
+ --wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-strong-disabled);
28
+ --wp-ui-button-padding-inline: calc(3 * var(--wpds-dimension-base)); /* TODO: Create new interactive padding tokens */
29
+ --wp-ui-button-height: 40px;
30
+ --wp-ui-button-aspect-ratio: auto; /* Useful for overrides such as icon buttons */
31
+ --wp-ui-button-font-size: var(--wpds-font-size-md);
32
+
33
+ /* by default, borders have the same color as the background */
34
+ --wp-ui-button-border-color: var(--wp-ui-button-background-color);
35
+ --wp-ui-button-border-color-active: var(--wp-ui-button-background-color-active);
36
+ --wp-ui-button-border-color-disabled: var(--wp-ui-button-background-color-disabled);
37
+
38
+ /* Styles */
39
+ position: relative;
40
+ display: inline-flex;
41
+ justify-content: center;
42
+ align-items: center;
43
+ gap: calc(2 * var(--wpds-dimension-base)); /* TODO: Consider new interactive/control gap tokens */
44
+ aspect-ratio: var(--wp-ui-button-aspect-ratio);
45
+ height: var(--wp-ui-button-height);
46
+ padding-inline: var(--wp-ui-button-padding-inline);
47
+ border-style: solid;
48
+ border-width: 1px;
49
+ border-color: var(--wp-ui-button-border-color);
50
+ border-radius: var(--wpds-border-radius-surface-sm);
51
+ background-color: var(--wp-ui-button-background-color);
52
+ background-clip: padding-box;
53
+ font-family: var(--wpds-font-family-body);
54
+ font-size: var(--wp-ui-button-font-size);
55
+ font-weight: var(--wp-ui-button-font-weight);
56
+ line-height: var(--wpds-font-line-height-sm);
57
+ text-decoration: none;
58
+ color: var(--wp-ui-button-foreground-color);
59
+
60
+ @media not ( prefers-reduced-motion ) {
61
+ transition: color 0.1s ease-out;
62
+
63
+ * {
64
+ transition: opacity 0.1s ease-out;
65
+ }
66
+ }
67
+
68
+ /* Use pointer cursor for buttons that are links */
69
+ &[href] {
70
+ cursor: pointer;
71
+ }
72
+
73
+ /* Make sure that links rendered as children of \`Button\` use button styles */
74
+ *[href] {
75
+ color: inherit;
76
+ text-decoration: inherit;
77
+ }
78
+
79
+ /* States */
80
+ &:not([aria-disabled="true"]):is(:hover, :active, :focus) {
81
+ /* hover/active/focus states apply when the button is not disabled. A non
82
+ disabled, loading button will have hover/active/focus styles */
83
+ --wp-ui-button-background-color: var(--wp-ui-button-background-color-active);
84
+ --wp-ui-button-foreground-color: var(--wp-ui-button-foreground-color-active);
85
+ --wp-ui-button-border-color: var(--wp-ui-button-border-color-active);
86
+ }
87
+
88
+ &[aria-disabled="true"]:not(.style-module__is-loading__kUtC8) {
89
+ /* A loading button, even when disabled, won't "look" disabled */
90
+ --wp-ui-button-background-color: var(--wp-ui-button-background-color-disabled);
91
+ --wp-ui-button-foreground-color: var(--wp-ui-button-foreground-color-disabled);
92
+ --wp-ui-button-border-color: var(--wp-ui-button-border-color-disabled);
93
+
94
+ @media ( forced-colors: active ) {
95
+ border-color: GrayText;
96
+ color: GrayText;
97
+ }
98
+ }
99
+
100
+ /* Loading spinner \u2014 not animated and hidden unless in loading state */
101
+ &::before {
102
+ content: "";
103
+ position: absolute;
104
+ top: 50%;
105
+ inset-inline-start: 50%;
106
+ transform: translate(-50%, -50%);
107
+
108
+ display: block;
109
+ box-sizing: border-box;
110
+ height: var(--wp-ui-button-font-size);
111
+ aspect-ratio: 1;
112
+
113
+ border: var(--wpds-border-width-interactive-focus) solid;
114
+ border-block-start-color: var(--wp-ui-button-foreground-color);
115
+ border-inline-end-color: var(--wp-ui-button-foreground-color);
116
+ border-block-end-color: transparent;
117
+ border-inline-start-color: transparent;
118
+ border-radius: 50%;
119
+
120
+ pointer-events: none;
121
+ opacity: 0;
122
+
123
+ @media not ( prefers-reduced-motion ) {
124
+ transition: opacity 0.1s ease-out;
125
+ }
126
+ }
127
+ }
128
+
129
+ .style-module__is-small__kIIFR {
130
+ --wp-ui-button-padding-inline: calc(2 * var(--wpds-dimension-base)); /* TODO: Create new interactive padding tokens */
131
+ --wp-ui-button-height: 24px;
132
+ }
133
+
134
+ /* Variants (\`tone\` + \`variant\`) overrides compared to default styles */
135
+
136
+ /* All outline buttons have a border */
137
+ .style-module__is-brand__3UYMl {
138
+ /* no need to redefine variables for .is-brand.is-solid as it's the default variant */
139
+
140
+ /* Outline and minimal buttons use the same foreground color */
141
+ &.style-module__is-outline__YtWne,
142
+ &.style-module__is-minimal__rQYZo {
143
+ --wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-brand);
144
+ --wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-brand-active);
145
+ --wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-disabled);
146
+ }
147
+
148
+ &.style-module__is-outline__YtWne {
149
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-weak);
150
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-weak-active);
151
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);
152
+ --wp-ui-button-border-color: var(--wpds-color-stroke-interactive-brand);
153
+ --wp-ui-button-border-color-active: var(--wpds-color-stroke-interactive-brand-active);
154
+ --wp-ui-button-border-color-disabled: var(--wpds-color-stroke-interactive-neutral-disabled);
155
+ }
156
+
157
+ &.style-module__is-minimal__rQYZo {
158
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-weak);
159
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-weak-active);
160
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);
161
+ }
162
+ }
163
+
164
+ .style-module__is-neutral__5yKo- {
165
+ &.style-module__is-solid__tQszW {
166
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-strong);
167
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-strong-active);
168
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-strong-disabled);
169
+ --wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral-strong);
170
+ --wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-strong-active);
171
+ --wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-strong-disabled);
172
+ }
173
+
174
+ /* Outline and minimal buttons use the same foreground color */
175
+ &.style-module__is-outline__YtWne,
176
+ &.style-module__is-minimal__rQYZo {
177
+ --wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral);
178
+ --wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-active);
179
+ --wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-disabled);
180
+ }
181
+
182
+ &.style-module__is-outline__YtWne {
183
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-weak);
184
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-weak-active);
185
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);
186
+ --wp-ui-button-border-color: var(--wpds-color-stroke-interactive-neutral);
187
+ --wp-ui-button-border-color-active: var(--wpds-color-stroke-interactive-neutral-active);
188
+ --wp-ui-button-border-color-disabled: var(--wpds-color-stroke-interactive-neutral-disabled);
189
+ }
190
+
191
+ &.style-module__is-minimal__rQYZo {
192
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-weak);
193
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-weak-active);
194
+ --wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);
195
+ }
196
+ }
197
+
198
+ .style-module__is-unstyled__q7snL {
199
+ border: none;
200
+ background: none;
201
+ }
202
+
203
+ .style-module__is-compact__z1nPG {
204
+ --wp-ui-button-height: 32px;
205
+ }
206
+
207
+ .style-module__is-loading__kUtC8 {
208
+ color: transparent;
209
+
210
+ * {
211
+ opacity: 0;
212
+ }
213
+
214
+ &::before {
215
+ transition-delay: 0.05s;
216
+ opacity: 1;
217
+
218
+ @media not ( prefers-reduced-motion ) {
219
+ animation: style-module__loading-animation__Wh1T2 1s linear infinite;
220
+ }
221
+ }
222
+ }
223
+
224
+ [aria-pressed="true"].style-module__is-minimal__rQYZo.style-module__is-neutral__5yKo- {
225
+ --wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-strong);
226
+ --wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-strong);
227
+ --wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral-strong);
228
+ --wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-strong);
229
+ }
230
+ }
231
+
232
+ @keyframes style-module__loading-animation__Wh1T2 {
233
+ 0% {
234
+ transform: translate(-50%, -50%) rotate(0deg);
235
+ }
236
+
237
+ 100% {
238
+ transform: translate(-50%, -50%) rotate(360deg);
239
+ }
240
+ }
241
+ `;
242
+ document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
243
+ var style_default = {
244
+ "button": "style-module__button__l7D8M",
245
+ "is-unstyled": "style-module__is-unstyled__q7snL",
246
+ "is-loading": "style-module__is-loading__kUtC8",
247
+ "is-small": "style-module__is-small__kIIFR",
248
+ "is-brand": "style-module__is-brand__3UYMl",
249
+ "is-outline": "style-module__is-outline__YtWne",
250
+ "is-minimal": "style-module__is-minimal__rQYZo",
251
+ "is-neutral": "style-module__is-neutral__5yKo-",
252
+ "is-solid": "style-module__is-solid__tQszW",
253
+ "is-compact": "style-module__is-compact__z1nPG",
254
+ "loading-animation": "style-module__loading-animation__Wh1T2"
255
+ };
256
+
257
+ // packages/ui/src/utils/css/resets.module.css
258
+ var css2 = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;
259
+
260
+ @layer wp-ui-utilities {
261
+ .resets-module__box-sizing__M2zT5 {
262
+ box-sizing: border-box;
263
+
264
+ *,
265
+ *::before,
266
+ *::after {
267
+ box-sizing: inherit;
268
+ }
269
+ }
270
+ }
271
+ `;
272
+ document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css2));
273
+ var resets_default = {
274
+ "box-sizing": "resets-module__box-sizing__M2zT5"
275
+ };
276
+
277
+ // packages/ui/src/utils/css/focus.module.css
278
+ var css3 = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;
279
+
280
+ @layer wp-ui-utilities {
281
+ .focus-module__outset-ring--focus__COii5,
282
+ .focus-module__outset-ring--focus-except-active__4lsr3,
283
+ .focus-module__outset-ring--focus-visible__0FQby,
284
+ .focus-module__outset-ring--focus-within__zYPfw,
285
+ .focus-module__outset-ring--focus-within-except-active__lw0E3,
286
+ .focus-module__outset-ring--focus-within-visible__xcs-5 {
287
+ @media not ( prefers-reduced-motion ) {
288
+ transition: outline 0.1s ease-out;
289
+ }
290
+
291
+ /* Outline width must be kept at 0 even with a transparent color,
292
+ or else the outline will be visible in forced-colors mode. */
293
+ outline-width: 0;
294
+ outline-style: solid;
295
+ outline-color: transparent;
296
+ outline-offset: 1px;
297
+ }
298
+
299
+ .focus-module__outset-ring--focus__COii5:focus,
300
+ .focus-module__outset-ring--focus-except-active__4lsr3:focus:not(:active),
301
+ .focus-module__outset-ring--focus-visible__0FQby:focus-visible,
302
+ .focus-module__outset-ring--focus-within__zYPfw:focus-within,
303
+ .focus-module__outset-ring--focus-within-except-active__lw0E3:focus-within:not(:has(:active)),
304
+ .focus-module__outset-ring--focus-within-visible__xcs-5:focus-within:has(:focus-visible) {
305
+ outline-width: var(--wpds-border-width-interactive-focus);
306
+ outline-color: var(--wpds-color-stroke-focus-brand);
307
+ }
308
+ }
309
+ `;
310
+ document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css3));
311
+ var focus_default = {
312
+ "outset-ring--focus": "focus-module__outset-ring--focus__COii5",
313
+ "outset-ring--focus-except-active": "focus-module__outset-ring--focus-except-active__4lsr3",
314
+ "outset-ring--focus-visible": "focus-module__outset-ring--focus-visible__0FQby",
315
+ "outset-ring--focus-within": "focus-module__outset-ring--focus-within__zYPfw",
316
+ "outset-ring--focus-within-except-active": "focus-module__outset-ring--focus-within-except-active__lw0E3",
317
+ "outset-ring--focus-within-visible": "focus-module__outset-ring--focus-within-visible__xcs-5"
318
+ };
319
+
320
+ // packages/ui/src/button/button.tsx
321
+ import { jsx } from "react/jsx-runtime";
322
+ var Button = forwardRef(
323
+ function Button2({
324
+ tone = "brand",
325
+ variant = "solid",
326
+ size = "default",
327
+ className,
328
+ focusableWhenDisabled = true,
329
+ disabled,
330
+ loading,
331
+ loadingAnnouncement = __("Loading"),
332
+ children,
333
+ ...props
334
+ }, ref) {
335
+ const mergedClassName = clsx(
336
+ resets_default["box-sizing"],
337
+ focus_default["outset-ring--focus-except-active"],
338
+ variant !== "unstyled" && style_default.button,
339
+ style_default[`is-${tone}`],
340
+ style_default[`is-${variant}`],
341
+ style_default[`is-${size}`],
342
+ loading && style_default["is-loading"],
343
+ className
344
+ );
345
+ useEffect(() => {
346
+ if (loading && loadingAnnouncement) {
347
+ speak(loadingAnnouncement);
348
+ }
349
+ }, [loading, loadingAnnouncement]);
350
+ return /* @__PURE__ */ jsx(
351
+ _Button,
352
+ {
353
+ ref,
354
+ className: mergedClassName,
355
+ focusableWhenDisabled,
356
+ disabled: disabled ?? loading,
357
+ ...props,
358
+ children
359
+ }
360
+ );
361
+ }
362
+ );
363
+ export {
364
+ Button
365
+ };
366
+ //# sourceMappingURL=button.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/button/button.tsx", "../../src/button/style.module.css", "../../src/utils/css/resets.module.css", "../../src/utils/css/focus.module.css"],
4
+ "sourcesContent": ["import { Button as _Button } from '@base-ui/react/button';\nimport clsx from 'clsx';\nimport { speak } from '@wordpress/a11y';\nimport { forwardRef, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { type ButtonProps } from './types';\nimport styles from './style.module.css';\nimport resetStyles from '../utils/css/resets.module.css';\nimport focusStyles from '../utils/css/focus.module.css';\n\nexport const Button = forwardRef< HTMLButtonElement, ButtonProps >(\n\tfunction Button(\n\t\t{\n\t\t\ttone = 'brand',\n\t\t\tvariant = 'solid',\n\t\t\tsize = 'default',\n\t\t\tclassName,\n\t\t\tfocusableWhenDisabled = true,\n\t\t\tdisabled,\n\t\t\tloading,\n\t\t\tloadingAnnouncement = __( 'Loading' ),\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) {\n\t\tconst mergedClassName = clsx(\n\t\t\tresetStyles[ 'box-sizing' ],\n\t\t\tfocusStyles[ 'outset-ring--focus-except-active' ],\n\t\t\tvariant !== 'unstyled' && styles.button,\n\t\t\tstyles[ `is-${ tone }` ],\n\t\t\tstyles[ `is-${ variant }` ],\n\t\t\tstyles[ `is-${ size }` ],\n\t\t\tloading && styles[ 'is-loading' ],\n\t\t\tclassName\n\t\t);\n\n\t\t// Announce loading state to assistive technology\n\t\tuseEffect( () => {\n\t\t\tif ( loading && loadingAnnouncement ) {\n\t\t\t\tspeak( loadingAnnouncement );\n\t\t\t}\n\t\t}, [ loading, loadingAnnouncement ] );\n\n\t\treturn (\n\t\t\t<_Button\n\t\t\t\tref={ ref }\n\t\t\t\tclassName={ mergedClassName }\n\t\t\t\tfocusableWhenDisabled={ focusableWhenDisabled }\n\t\t\t\tdisabled={ disabled ?? loading }\n\t\t\t\t{ ...props }\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</_Button>\n\t\t);\n\t}\n);\n", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-components {\n\t.style-module__button__l7D8M,\n\t.style-module__is-unstyled__q7snL {\n\t\tappearance: none;\n\t\tpadding: 0;\n\t}\n\n\t.style-module__button__l7D8M {\n\t\t/* Internal variables */\n\t\t--wp-ui-button-font-weight: 499;\n\n\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-strong);\n\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-strong-active);\n\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-strong-disabled);\n\t\t--wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-brand-strong);\n\t\t--wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-brand-strong-active);\n\t\t--wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-strong-disabled);\n\t\t--wp-ui-button-padding-inline: calc(3 * var(--wpds-dimension-base)); /* TODO: Create new interactive padding tokens */\n\t\t--wp-ui-button-height: 40px;\n\t\t--wp-ui-button-aspect-ratio: auto; /* Useful for overrides such as icon buttons */\n\t\t--wp-ui-button-font-size: var(--wpds-font-size-md);\n\n\t\t/* by default, borders have the same color as the background */\n\t\t--wp-ui-button-border-color: var(--wp-ui-button-background-color);\n\t\t--wp-ui-button-border-color-active: var(--wp-ui-button-background-color-active);\n\t\t--wp-ui-button-border-color-disabled: var(--wp-ui-button-background-color-disabled);\n\n\t\t/* Styles */\n\t\tposition: relative;\n\t\tdisplay: inline-flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: calc(2 * var(--wpds-dimension-base)); /* TODO: Consider new interactive/control gap tokens */\n\t\taspect-ratio: var(--wp-ui-button-aspect-ratio);\n\t\theight: var(--wp-ui-button-height);\n\t\tpadding-inline: var(--wp-ui-button-padding-inline);\n\t\tborder-style: solid;\n\t\tborder-width: 1px;\n\t\tborder-color: var(--wp-ui-button-border-color);\n\t\tborder-radius: var(--wpds-border-radius-surface-sm);\n\t\tbackground-color: var(--wp-ui-button-background-color);\n\t\tbackground-clip: padding-box;\n\t\tfont-family: var(--wpds-font-family-body);\n\t\tfont-size: var(--wp-ui-button-font-size);\n\t\tfont-weight: var(--wp-ui-button-font-weight);\n\t\tline-height: var(--wpds-font-line-height-sm);\n\t\ttext-decoration: none;\n\t\tcolor: var(--wp-ui-button-foreground-color);\n\n\t\t@media not ( prefers-reduced-motion ) {\n\t\t\ttransition: color 0.1s ease-out;\n\n\t\t\t* {\n\t\t\t\ttransition: opacity 0.1s ease-out;\n\t\t\t}\n\t\t}\n\n\t\t/* Use pointer cursor for buttons that are links */\n\t\t&[href] {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t/* Make sure that links rendered as children of \\`Button\\` use button styles */\n\t\t*[href] {\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: inherit;\n\t\t}\n\n\t\t/* States */\n\t\t&:not([aria-disabled=\"true\"]):is(:hover, :active, :focus) {\n\t\t\t/* hover/active/focus states apply when the button is not disabled. A non\n\t\t\tdisabled, loading button will have hover/active/focus styles */\n\t\t\t--wp-ui-button-background-color: var(--wp-ui-button-background-color-active);\n\t\t\t--wp-ui-button-foreground-color: var(--wp-ui-button-foreground-color-active);\n\t\t\t--wp-ui-button-border-color: var(--wp-ui-button-border-color-active);\n\t\t}\n\n\t\t&[aria-disabled=\"true\"]:not(.style-module__is-loading__kUtC8) {\n\t\t\t/* A loading button, even when disabled, won't \"look\" disabled */\n\t\t\t--wp-ui-button-background-color: var(--wp-ui-button-background-color-disabled);\n\t\t\t--wp-ui-button-foreground-color: var(--wp-ui-button-foreground-color-disabled);\n\t\t\t--wp-ui-button-border-color: var(--wp-ui-button-border-color-disabled);\n\n\t\t\t@media ( forced-colors: active ) {\n\t\t\t\tborder-color: GrayText;\n\t\t\t\tcolor: GrayText;\n\t\t\t}\n\t\t}\n\n\t\t/* Loading spinner \u2014 not animated and hidden unless in loading state */\n\t\t&::before {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\tinset-inline-start: 50%;\n\t\t\ttransform: translate(-50%, -50%);\n\n\t\t\tdisplay: block;\n\t\t\tbox-sizing: border-box;\n\t\t\theight: var(--wp-ui-button-font-size);\n\t\t\taspect-ratio: 1;\n\n\t\t\tborder: var(--wpds-border-width-interactive-focus) solid;\n\t\t\tborder-block-start-color: var(--wp-ui-button-foreground-color);\n\t\t\tborder-inline-end-color: var(--wp-ui-button-foreground-color);\n\t\t\tborder-block-end-color: transparent;\n\t\t\tborder-inline-start-color: transparent;\n\t\t\tborder-radius: 50%;\n\n\t\t\tpointer-events: none;\n\t\t\topacity: 0;\n\n\t\t\t@media not ( prefers-reduced-motion ) {\n\t\t\t\ttransition: opacity 0.1s ease-out;\n\t\t\t}\n\t\t}\n\t}\n\n\t.style-module__is-small__kIIFR {\n\t\t--wp-ui-button-padding-inline: calc(2 * var(--wpds-dimension-base)); /* TODO: Create new interactive padding tokens */\n\t\t--wp-ui-button-height: 24px;\n\t}\n\n\t/* Variants (\\`tone\\` + \\`variant\\`) overrides compared to default styles */\n\n\t/* All outline buttons have a border */\n\t.style-module__is-brand__3UYMl {\n\t\t/* no need to redefine variables for .is-brand.is-solid as it's the default variant */\n\n\t\t/* Outline and minimal buttons use the same foreground color */\n\t\t&.style-module__is-outline__YtWne,\n\t\t&.style-module__is-minimal__rQYZo {\n\t\t\t--wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-brand);\n\t\t\t--wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-brand-active);\n\t\t\t--wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-disabled);\n\t\t}\n\n\t\t&.style-module__is-outline__YtWne {\n\t\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-weak);\n\t\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-weak-active);\n\t\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);\n\t\t\t--wp-ui-button-border-color: var(--wpds-color-stroke-interactive-brand);\n\t\t\t--wp-ui-button-border-color-active: var(--wpds-color-stroke-interactive-brand-active);\n\t\t\t--wp-ui-button-border-color-disabled: var(--wpds-color-stroke-interactive-neutral-disabled);\n\t\t}\n\n\t\t&.style-module__is-minimal__rQYZo {\n\t\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-brand-weak);\n\t\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-brand-weak-active);\n\t\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);\n\t\t}\n\t}\n\n\t.style-module__is-neutral__5yKo- {\n\t\t&.style-module__is-solid__tQszW {\n\t\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-strong);\n\t\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-strong-active);\n\t\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-strong-disabled);\n\t\t\t--wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral-strong);\n\t\t\t--wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-strong-active);\n\t\t\t--wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-strong-disabled);\n\t\t}\n\n\t\t/* Outline and minimal buttons use the same foreground color */\n\t\t&.style-module__is-outline__YtWne,\n\t\t&.style-module__is-minimal__rQYZo {\n\t\t\t--wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral);\n\t\t\t--wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-active);\n\t\t\t--wp-ui-button-foreground-color-disabled: var(--wpds-color-fg-interactive-neutral-disabled);\n\t\t}\n\n\t\t&.style-module__is-outline__YtWne {\n\t\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-weak);\n\t\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-weak-active);\n\t\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);\n\t\t\t--wp-ui-button-border-color: var(--wpds-color-stroke-interactive-neutral);\n\t\t\t--wp-ui-button-border-color-active: var(--wpds-color-stroke-interactive-neutral-active);\n\t\t\t--wp-ui-button-border-color-disabled: var(--wpds-color-stroke-interactive-neutral-disabled);\n\t\t}\n\n\t\t&.style-module__is-minimal__rQYZo {\n\t\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-weak);\n\t\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-weak-active);\n\t\t\t--wp-ui-button-background-color-disabled: var(--wpds-color-bg-interactive-neutral-weak-disabled);\n\t\t}\n\t}\n\n\t.style-module__is-unstyled__q7snL {\n\t\tborder: none;\n\t\tbackground: none;\n\t}\n\n\t.style-module__is-compact__z1nPG {\n\t\t--wp-ui-button-height: 32px;\n\t}\n\n\t.style-module__is-loading__kUtC8 {\n\t\tcolor: transparent;\n\n\t\t* {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t&::before {\n\t\t\ttransition-delay: 0.05s;\n\t\t\topacity: 1;\n\n\t\t\t@media not ( prefers-reduced-motion ) {\n\t\t\t\tanimation: style-module__loading-animation__Wh1T2 1s linear infinite;\n\t\t\t}\n\t\t}\n\t}\n\n\t[aria-pressed=\"true\"].style-module__is-minimal__rQYZo.style-module__is-neutral__5yKo- {\n\t\t--wp-ui-button-background-color: var(--wpds-color-bg-interactive-neutral-strong);\n\t\t--wp-ui-button-background-color-active: var(--wpds-color-bg-interactive-neutral-strong);\n\t\t--wp-ui-button-foreground-color: var(--wpds-color-fg-interactive-neutral-strong);\n\t\t--wp-ui-button-foreground-color-active: var(--wpds-color-fg-interactive-neutral-strong);\n\t}\n}\n\n@keyframes style-module__loading-animation__Wh1T2 {\n\t0% {\n\t\ttransform: translate(-50%, -50%) rotate(0deg);\n\t}\n\n\t100% {\n\t\ttransform: translate(-50%, -50%) rotate(360deg);\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"button\": \"style-module__button__l7D8M\",\n \"is-unstyled\": \"style-module__is-unstyled__q7snL\",\n \"is-loading\": \"style-module__is-loading__kUtC8\",\n \"is-small\": \"style-module__is-small__kIIFR\",\n \"is-brand\": \"style-module__is-brand__3UYMl\",\n \"is-outline\": \"style-module__is-outline__YtWne\",\n \"is-minimal\": \"style-module__is-minimal__rQYZo\",\n \"is-neutral\": \"style-module__is-neutral__5yKo-\",\n \"is-solid\": \"style-module__is-solid__tQszW\",\n \"is-compact\": \"style-module__is-compact__z1nPG\",\n \"loading-animation\": \"style-module__loading-animation__Wh1T2\"\n};", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-utilities {\n\t.resets-module__box-sizing__M2zT5 {\n\t\tbox-sizing: border-box;\n\n\t\t*,\n\t\t*::before,\n\t\t*::after {\n\t\t\tbox-sizing: inherit;\n\t\t}\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"box-sizing\": \"resets-module__box-sizing__M2zT5\"\n};", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-utilities {\n\t.focus-module__outset-ring--focus__COii5,\n\t.focus-module__outset-ring--focus-except-active__4lsr3,\n\t.focus-module__outset-ring--focus-visible__0FQby,\n\t.focus-module__outset-ring--focus-within__zYPfw,\n\t.focus-module__outset-ring--focus-within-except-active__lw0E3,\n\t.focus-module__outset-ring--focus-within-visible__xcs-5 {\n\t\t@media not ( prefers-reduced-motion ) {\n\t\t\ttransition: outline 0.1s ease-out;\n\t\t}\n\n\t\t/* Outline width must be kept at 0 even with a transparent color,\n\t\tor else the outline will be visible in forced-colors mode. */\n\t\toutline-width: 0;\n\t\toutline-style: solid;\n\t\toutline-color: transparent;\n\t\toutline-offset: 1px;\n\t}\n\n\t.focus-module__outset-ring--focus__COii5:focus,\n\t.focus-module__outset-ring--focus-except-active__4lsr3:focus:not(:active),\n\t.focus-module__outset-ring--focus-visible__0FQby:focus-visible,\n\t.focus-module__outset-ring--focus-within__zYPfw:focus-within,\n\t.focus-module__outset-ring--focus-within-except-active__lw0E3:focus-within:not(:has(:active)),\n\t.focus-module__outset-ring--focus-within-visible__xcs-5:focus-within:has(:focus-visible) {\n\t\toutline-width: var(--wpds-border-width-interactive-focus);\n\t\toutline-color: var(--wpds-color-stroke-focus-brand);\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"outset-ring--focus\": \"focus-module__outset-ring--focus__COii5\",\n \"outset-ring--focus-except-active\": \"focus-module__outset-ring--focus-except-active__4lsr3\",\n \"outset-ring--focus-visible\": \"focus-module__outset-ring--focus-visible__0FQby\",\n \"outset-ring--focus-within\": \"focus-module__outset-ring--focus-within__zYPfw\",\n \"outset-ring--focus-within-except-active\": \"focus-module__outset-ring--focus-within-except-active__lw0E3\",\n \"outset-ring--focus-within-visible\": \"focus-module__outset-ring--focus-within-visible__xcs-5\"\n};"],
5
+ "mappings": "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",
6
+ "names": ["css", "css", "Button"]
7
+ }
@@ -0,0 +1,22 @@
1
+ // packages/ui/src/button/icon.tsx
2
+ import { forwardRef } from "@wordpress/element";
3
+ import { Icon } from "../icon/index.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ var ButtonIcon = forwardRef(
6
+ function ButtonIcon2({ icon, ...props }, ref) {
7
+ return /* @__PURE__ */ jsx(
8
+ Icon,
9
+ {
10
+ ref,
11
+ icon,
12
+ viewBox: "4 4 16 16",
13
+ size: 16,
14
+ ...props
15
+ }
16
+ );
17
+ }
18
+ );
19
+ export {
20
+ ButtonIcon
21
+ };
22
+ //# sourceMappingURL=icon.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/button/icon.tsx"],
4
+ "sourcesContent": ["import { forwardRef } from '@wordpress/element';\nimport { type IconProps } from '../icon/types';\nimport { Icon } from '../icon';\n\ninterface ButtonIconProps extends IconProps {\n\t/**\n\t * The icon to display, from the `@wordpress/icons` package.\n\t */\n\ticon: IconProps[ 'icon' ];\n}\n\nexport const ButtonIcon = forwardRef< SVGSVGElement, ButtonIconProps >(\n\tfunction ButtonIcon( { icon, ...props }, ref ) {\n\t\treturn (\n\t\t\t<Icon\n\t\t\t\tref={ ref }\n\t\t\t\ticon={ icon }\n\t\t\t\tviewBox=\"4 4 16 16\"\n\t\t\t\tsize={ 16 }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t);\n\t}\n);\n"],
5
+ "mappings": ";AAAA,SAAS,kBAAkB;AAE3B,SAAS,YAAY;AAYlB;AAHI,IAAM,aAAa;AAAA,EACzB,SAASA,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,KAAM;AAC9C,WACC;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAQ;AAAA,QACR,MAAO;AAAA,QACL,GAAG;AAAA;AAAA,IACN;AAAA,EAEF;AACD;",
6
+ "names": ["ButtonIcon"]
7
+ }
@@ -0,0 +1,14 @@
1
+ // packages/ui/src/button/index.ts
2
+ import { Button as ButtonButton } from "./button.mjs";
3
+ import { ButtonIcon } from "./icon.mjs";
4
+ var Button = Object.assign(ButtonButton, {
5
+ /**
6
+ * An icon component specifically designed to work well when rendered inside
7
+ * a `Button` component.
8
+ */
9
+ Icon: ButtonIcon
10
+ });
11
+ export {
12
+ Button
13
+ };
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/button/index.ts"],
4
+ "sourcesContent": ["import { Button as ButtonButton } from './button';\nimport { ButtonIcon } from './icon';\n\n/**\n * A versatile button component with multiple variants, tones, and sizes.\n * Built on design tokens for consistent theming and accessibility.\n */\nexport const Button = Object.assign( ButtonButton, {\n\t/**\n\t * An icon component specifically designed to work well when rendered inside\n\t * a `Button` component.\n\t */\n\tIcon: ButtonIcon,\n} ) as typeof ButtonButton & {\n\tIcon: typeof ButtonIcon;\n};\n"],
5
+ "mappings": ";AAAA,SAAS,UAAU,oBAAoB;AACvC,SAAS,kBAAkB;AAMpB,IAAM,SAAS,OAAO,OAAQ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlD,MAAM;AACP,CAAE;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/form/primitives/field/root.tsx", "../../../../src/utils/css/resets.module.css"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { Field as _Field } from '@base-ui/react/field';\nimport { forwardRef } from '@wordpress/element';\nimport resetStyles from '../../../utils/css/resets.module.css';\nimport type { FieldRootProps } from './types';\nimport { Stack } from '../../../stack';\n\nconst DEFAULT_RENDER = ( props: React.ComponentProps< typeof Stack > ) => (\n\t<Stack { ...props } direction=\"column\" gap=\"xs\" />\n);\n\n/**\n * A low-level component that associates an accessible label and description\n * with a single form control element.\n *\n * Simply wrapping a control with this component does not guarantee\n * accessible labeling. See examples for how to associate the label in different cases.\n */\nexport const Root = forwardRef< HTMLDivElement, FieldRootProps >( function Root(\n\t{ className, render = DEFAULT_RENDER, ...restProps },\n\tref\n) {\n\treturn (\n\t\t<_Field.Root\n\t\t\tref={ ref }\n\t\t\tclassName={ clsx( resetStyles[ 'box-sizing' ], className ) }\n\t\t\trender={ render }\n\t\t\t{ ...restProps }\n\t\t/>\n\t);\n} );\n", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-utilities {\n\t.resets-module__box-sizing__M2zT5 {\n\t\tbox-sizing: border-box;\n\n\t\t*,\n\t\t*::before,\n\t\t*::after {\n\t\t\tbox-sizing: inherit;\n\t\t}\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"box-sizing\": \"resets-module__box-sizing__M2zT5\"\n};"],
5
- "mappings": ";AAAA,OAAO,UAAU;AACjB,SAAS,SAAS,cAAc;AAChC,SAAS,kBAAkB;;;ACF3B,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcZ,SAAS,KACJ,YAAY,SAAS,cAAc,OAAO,CAAC,EAC3C,YAAY,SAAS,eAAe,GAAG,CAAC;AAE7C,IAAO,iBAAQ;AAAA,EACb,cAAc;AAChB;;;ADfA,SAAS,aAAa;AAGrB;AADD,IAAM,iBAAiB,CAAE,UACxB,oBAAC,SAAQ,GAAG,OAAQ,WAAU,UAAS,KAAI,MAAK;AAU1C,IAAM,OAAO,WAA8C,SAASA,MAC1E,EAAE,WAAW,SAAS,gBAAgB,GAAG,UAAU,GACnD,KACC;AACD,SACC;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA;AAAA,MACA,WAAY,KAAM,eAAa,YAAa,GAAG,SAAU;AAAA,MACzD;AAAA,MACE,GAAG;AAAA;AAAA,EACN;AAEF,CAAE;",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { Field as _Field } from '@base-ui/react/field';\nimport { forwardRef } from '@wordpress/element';\nimport resetStyles from '../../../utils/css/resets.module.css';\nimport type { FieldRootProps } from './types';\nimport { Stack } from '../../../stack';\n\nconst DEFAULT_RENDER = ( props: React.ComponentProps< typeof Stack > ) => (\n\t<Stack { ...props } direction=\"column\" gap=\"xs\" />\n);\n\n/**\n * A low-level component that associates an accessible label and description\n * with a single form control element.\n *\n * To label a group of multiple form control elements, use the `Fieldset` component instead.\n *\n * Simply wrapping a control with this component does not guarantee\n * accessible labeling. See examples for how to associate the label in different cases.\n */\nexport const Root = forwardRef< HTMLDivElement, FieldRootProps >( function Root(\n\t{ className, render = DEFAULT_RENDER, ...restProps },\n\tref\n) {\n\treturn (\n\t\t<_Field.Root\n\t\t\tref={ ref }\n\t\t\tclassName={ clsx( resetStyles[ 'box-sizing' ], className ) }\n\t\t\trender={ render }\n\t\t\t{ ...restProps }\n\t\t/>\n\t);\n} );\n", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-utilities {\n\t.resets-module__box-sizing__M2zT5 {\n\t\tbox-sizing: border-box;\n\n\t\t*,\n\t\t*::before,\n\t\t*::after {\n\t\t\tbox-sizing: inherit;\n\t\t}\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"box-sizing\": \"resets-module__box-sizing__M2zT5\"\n};"],
5
+ "mappings": ";AAAA,OAAO,UAAU;AACjB,SAAS,SAAS,cAAc;AAChC,SAAS,kBAAkB;;;ACF3B,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcZ,SAAS,KACJ,YAAY,SAAS,cAAc,OAAO,CAAC,EAC3C,YAAY,SAAS,eAAe,GAAG,CAAC;AAE7C,IAAO,iBAAQ;AAAA,EACb,cAAc;AAChB;;;ADfA,SAAS,aAAa;AAGrB;AADD,IAAM,iBAAiB,CAAE,UACxB,oBAAC,SAAQ,GAAG,OAAQ,WAAU,UAAS,KAAI,MAAK;AAY1C,IAAM,OAAO,WAA8C,SAASA,MAC1E,EAAE,WAAW,SAAS,gBAAgB,GAAG,UAAU,GACnD,KACC;AACD,SACC;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA;AAAA,MACA,WAAY,KAAM,eAAa,YAAa,GAAG,SAAU;AAAA,MACzD;AAAA,MACE,GAAG;AAAA;AAAA,EACN;AAEF,CAAE;",
6
6
  "names": ["Root"]
7
7
  }
@@ -0,0 +1,14 @@
1
+ // packages/ui/src/form/primitives/fieldset/context.tsx
2
+ import { createContext, useContext } from "@wordpress/element";
3
+ var FieldsetContext = createContext({
4
+ registerDescriptionId: () => {
5
+ },
6
+ unregisterDescriptionId: () => {
7
+ }
8
+ });
9
+ var useFieldsetContext = () => useContext(FieldsetContext);
10
+ export {
11
+ FieldsetContext,
12
+ useFieldsetContext
13
+ };
14
+ //# sourceMappingURL=context.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/form/primitives/fieldset/context.tsx"],
4
+ "sourcesContent": ["import { createContext, useContext } from '@wordpress/element';\n\ntype FieldsetContextType = {\n\tregisterDescriptionId: ( id: string ) => void;\n\tunregisterDescriptionId: () => void;\n};\n\nexport const FieldsetContext = createContext< FieldsetContextType >( {\n\tregisterDescriptionId: () => {},\n\tunregisterDescriptionId: () => {},\n} );\n\nexport const useFieldsetContext = () => useContext( FieldsetContext );\n"],
5
+ "mappings": ";AAAA,SAAS,eAAe,kBAAkB;AAOnC,IAAM,kBAAkB,cAAsC;AAAA,EACpE,uBAAuB,MAAM;AAAA,EAAC;AAAA,EAC9B,yBAAyB,MAAM;AAAA,EAAC;AACjC,CAAE;AAEK,IAAM,qBAAqB,MAAM,WAAY,eAAgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
1
+ // packages/ui/src/form/primitives/fieldset/description.tsx
2
+ import clsx from "clsx";
3
+ import { mergeProps, useRender } from "@base-ui/react";
4
+ import { forwardRef, useEffect, useId } from "@wordpress/element";
5
+
6
+ // packages/ui/src/utils/css/field.module.css
7
+ var css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;
8
+
9
+ @layer wp-ui-utilities {
10
+ .field-module__label__LVrYU {
11
+ --wp-ui-field-label-line-height: var(--wpds-font-line-height-xs);
12
+
13
+ font-family: var(--wpds-font-family-body);
14
+ font-size: var(--wpds-font-size-xs);
15
+ line-height: var(--wp-ui-field-label-line-height);
16
+ font-weight: var(--wpds-font-weight-medium);
17
+ text-transform: uppercase;
18
+ color: var(--wpds-color-fg-content-neutral);
19
+
20
+ &.field-module__is-plain__F8QhR {
21
+ font-size: var(--wpds-font-size-md);
22
+ text-transform: none;
23
+ }
24
+ }
25
+
26
+ .field-module__description__CKN1B {
27
+ margin: 0;
28
+ font-family: var(--wpds-font-family-body);
29
+ font-size: var(--wpds-font-size-sm);
30
+ line-height: var(--wpds-font-line-height-xs);
31
+ color: var(--wpds-color-fg-content-neutral-weak);
32
+ }
33
+ }
34
+ `;
35
+ document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
36
+ var field_default = {
37
+ "label": "field-module__label__LVrYU",
38
+ "is-plain": "field-module__is-plain__F8QhR",
39
+ "description": "field-module__description__CKN1B"
40
+ };
41
+
42
+ // packages/ui/src/form/primitives/fieldset/description.tsx
43
+ import { useFieldsetContext } from "./context.mjs";
44
+ var FieldsetDescription = forwardRef(function FieldsetDescription2({ className, id: idProp, render, ...restProps }, ref) {
45
+ const generatedId = useId();
46
+ const id = idProp ?? generatedId;
47
+ const { registerDescriptionId, unregisterDescriptionId } = useFieldsetContext();
48
+ useEffect(() => {
49
+ registerDescriptionId(id);
50
+ return unregisterDescriptionId;
51
+ }, [registerDescriptionId, unregisterDescriptionId, id]);
52
+ const element = useRender({
53
+ defaultTagName: "p",
54
+ render,
55
+ ref,
56
+ props: mergeProps(
57
+ { className: clsx(field_default.description, className), id },
58
+ restProps
59
+ )
60
+ });
61
+ return element;
62
+ });
63
+ export {
64
+ FieldsetDescription
65
+ };
66
+ //# sourceMappingURL=description.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/form/primitives/fieldset/description.tsx", "../../../../src/utils/css/field.module.css"],
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { mergeProps, useRender } from '@base-ui/react';\nimport { forwardRef, useEffect, useId } from '@wordpress/element';\nimport fieldStyles from '../../../utils/css/field.module.css';\nimport { useFieldsetContext } from './context';\nimport type { FieldsetDescriptionProps } from './types';\n\nexport const FieldsetDescription = forwardRef<\n\tHTMLParagraphElement,\n\tFieldsetDescriptionProps\n>( function FieldsetDescription(\n\t{ className, id: idProp, render, ...restProps },\n\tref\n) {\n\tconst generatedId = useId();\n\tconst id = idProp ?? generatedId;\n\tconst { registerDescriptionId, unregisterDescriptionId } =\n\t\tuseFieldsetContext();\n\n\tuseEffect( () => {\n\t\tregisterDescriptionId( id );\n\t\treturn unregisterDescriptionId;\n\t}, [ registerDescriptionId, unregisterDescriptionId, id ] );\n\n\tconst element = useRender( {\n\t\tdefaultTagName: 'p',\n\t\trender,\n\t\tref,\n\t\tprops: mergeProps< 'p' >(\n\t\t\t{ className: clsx( fieldStyles.description, className ), id },\n\t\t\trestProps\n\t\t),\n\t} );\n\n\treturn element;\n} );\n", "const css = `@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;\n\n@layer wp-ui-utilities {\n\t.field-module__label__LVrYU {\n\t\t--wp-ui-field-label-line-height: var(--wpds-font-line-height-xs);\n\n\t\tfont-family: var(--wpds-font-family-body);\n\t\tfont-size: var(--wpds-font-size-xs);\n\t\tline-height: var(--wp-ui-field-label-line-height);\n\t\tfont-weight: var(--wpds-font-weight-medium);\n\t\ttext-transform: uppercase;\n\t\tcolor: var(--wpds-color-fg-content-neutral);\n\n\t\t&.field-module__is-plain__F8QhR {\n\t\t\tfont-size: var(--wpds-font-size-md);\n\t\t\ttext-transform: none;\n\t\t}\n\t}\n\n\t.field-module__description__CKN1B {\n\t\tmargin: 0;\n\t\tfont-family: var(--wpds-font-family-body);\n\t\tfont-size: var(--wpds-font-size-sm);\n\t\tline-height: var(--wpds-font-line-height-xs);\n\t\tcolor: var(--wpds-color-fg-content-neutral-weak);\n\t}\n}\n`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\nexport default {\n \"label\": \"field-module__label__LVrYU\",\n \"is-plain\": \"field-module__is-plain__F8QhR\",\n \"description\": \"field-module__description__CKN1B\"\n};"],
5
+ "mappings": ";AAAA,OAAO,UAAU;AACjB,SAAS,YAAY,iBAAiB;AACtC,SAAS,YAAY,WAAW,aAAa;;;ACF7C,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BZ,SAAS,KACJ,YAAY,SAAS,cAAc,OAAO,CAAC,EAC3C,YAAY,SAAS,eAAe,GAAG,CAAC;AAE7C,IAAO,gBAAQ;AAAA,EACb,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AACjB;;;ADhCA,SAAS,0BAA0B;AAG5B,IAAM,sBAAsB,WAGhC,SAASA,qBACX,EAAE,WAAW,IAAI,QAAQ,QAAQ,GAAG,UAAU,GAC9C,KACC;AACD,QAAM,cAAc,MAAM;AAC1B,QAAM,KAAK,UAAU;AACrB,QAAM,EAAE,uBAAuB,wBAAwB,IACtD,mBAAmB;AAEpB,YAAW,MAAM;AAChB,0BAAuB,EAAG;AAC1B,WAAO;AAAA,EACR,GAAG,CAAE,uBAAuB,yBAAyB,EAAG,CAAE;AAE1D,QAAM,UAAU,UAAW;AAAA,IAC1B,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACN,EAAE,WAAW,KAAM,cAAY,aAAa,SAAU,GAAG,GAAG;AAAA,MAC5D;AAAA,IACD;AAAA,EACD,CAAE;AAEF,SAAO;AACR,CAAE;",
6
+ "names": ["FieldsetDescription"]
7
+ }