@wordpress/components 37.0.0 → 38.0.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 (483) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +46 -0
  3. package/build/autocomplete/index.cjs +3 -1
  4. package/build/autocomplete/index.cjs.map +2 -2
  5. package/build/color-picker/component.cjs +14 -5
  6. package/build/color-picker/component.cjs.map +2 -2
  7. package/build/color-picker/picker.cjs +95 -23
  8. package/build/color-picker/picker.cjs.map +2 -2
  9. package/build/confirm-dialog/component.cjs +86 -4
  10. package/build/confirm-dialog/component.cjs.map +3 -3
  11. package/build/content-editable-control/index.cjs +19 -9
  12. package/build/content-editable-control/index.cjs.map +3 -3
  13. package/build/custom-select-control/index.cjs +1 -2
  14. package/build/custom-select-control/index.cjs.map +2 -2
  15. package/build/disabled/index.cjs +87 -4
  16. package/build/disabled/index.cjs.map +4 -4
  17. package/build/form-token-field/index.cjs +87 -2
  18. package/build/form-token-field/index.cjs.map +3 -3
  19. package/build/gradient-picker/index.cjs +26 -20
  20. package/build/gradient-picker/index.cjs.map +2 -2
  21. package/build/input-control/index.cjs +0 -1
  22. package/build/input-control/index.cjs.map +2 -2
  23. package/build/input-control/styles/input-control-styles.cjs +23 -31
  24. package/build/input-control/styles/input-control-styles.cjs.map +2 -2
  25. package/build/private-apis.cjs +0 -2
  26. package/build/private-apis.cjs.map +3 -3
  27. package/build/range-control/index.cjs +0 -1
  28. package/build/range-control/index.cjs.map +2 -2
  29. package/build/sandbox/index.cjs +23 -4
  30. package/build/sandbox/index.cjs.map +3 -3
  31. package/build/search-control/index.cjs +93 -10
  32. package/build/search-control/index.cjs.map +4 -4
  33. package/build/select-control/index.cjs +0 -1
  34. package/build/select-control/index.cjs.map +2 -2
  35. package/build/select-control/styles/select-control-styles.cjs +9 -16
  36. package/build/select-control/styles/select-control-styles.cjs.map +2 -2
  37. package/build/slot-fill/fill.cjs.map +2 -2
  38. package/build/toggle-group-control/toggle-group-control/component.cjs +91 -8
  39. package/build/toggle-group-control/toggle-group-control/component.cjs.map +4 -4
  40. package/build/toggle-group-control/toggle-group-control-option-base/component.cjs +98 -17
  41. package/build/toggle-group-control/toggle-group-control-option-base/component.cjs.map +4 -4
  42. package/build/tools-panel/tools-panel/component.cjs +6 -0
  43. package/build/tools-panel/tools-panel/component.cjs.map +2 -2
  44. package/build/tools-panel/tools-panel/hook.cjs +87 -11
  45. package/build/tools-panel/tools-panel/hook.cjs.map +4 -4
  46. package/build/tools-panel/tools-panel-header/component.cjs +87 -2
  47. package/build/tools-panel/tools-panel-header/component.cjs.map +3 -3
  48. package/build/tools-panel/tools-panel-header/hook.cjs +90 -20
  49. package/build/tools-panel/tools-panel-header/hook.cjs.map +4 -4
  50. package/build/tools-panel/tools-panel-item/hook.cjs +88 -9
  51. package/build/tools-panel/tools-panel-item/hook.cjs.map +4 -4
  52. package/build/validated-form-controls/control-with-error.cjs +3 -0
  53. package/build/validated-form-controls/control-with-error.cjs.map +2 -2
  54. package/build-module/autocomplete/index.mjs +3 -1
  55. package/build-module/autocomplete/index.mjs.map +2 -2
  56. package/build-module/color-picker/component.mjs +14 -5
  57. package/build-module/color-picker/component.mjs.map +2 -2
  58. package/build-module/color-picker/picker.mjs +96 -24
  59. package/build-module/color-picker/picker.mjs.map +2 -2
  60. package/build-module/confirm-dialog/component.mjs +86 -4
  61. package/build-module/confirm-dialog/component.mjs.map +3 -3
  62. package/build-module/content-editable-control/index.mjs +21 -11
  63. package/build-module/content-editable-control/index.mjs.map +2 -2
  64. package/build-module/custom-select-control/index.mjs +1 -2
  65. package/build-module/custom-select-control/index.mjs.map +2 -2
  66. package/build-module/disabled/index.mjs +87 -4
  67. package/build-module/disabled/index.mjs.map +3 -3
  68. package/build-module/form-token-field/index.mjs +88 -3
  69. package/build-module/form-token-field/index.mjs.map +3 -3
  70. package/build-module/gradient-picker/index.mjs +26 -20
  71. package/build-module/gradient-picker/index.mjs.map +2 -2
  72. package/build-module/input-control/index.mjs +0 -1
  73. package/build-module/input-control/index.mjs.map +2 -2
  74. package/build-module/input-control/styles/input-control-styles.mjs +23 -31
  75. package/build-module/input-control/styles/input-control-styles.mjs.map +2 -2
  76. package/build-module/private-apis.mjs +0 -2
  77. package/build-module/private-apis.mjs.map +2 -2
  78. package/build-module/range-control/index.mjs +0 -1
  79. package/build-module/range-control/index.mjs.map +2 -2
  80. package/build-module/sandbox/index.mjs +13 -4
  81. package/build-module/sandbox/index.mjs.map +2 -2
  82. package/build-module/search-control/index.mjs +93 -10
  83. package/build-module/search-control/index.mjs.map +3 -3
  84. package/build-module/select-control/index.mjs +0 -1
  85. package/build-module/select-control/index.mjs.map +2 -2
  86. package/build-module/select-control/styles/select-control-styles.mjs +9 -16
  87. package/build-module/select-control/styles/select-control-styles.mjs.map +2 -2
  88. package/build-module/slot-fill/fill.mjs.map +2 -2
  89. package/build-module/toggle-group-control/toggle-group-control/component.mjs +92 -9
  90. package/build-module/toggle-group-control/toggle-group-control/component.mjs.map +3 -3
  91. package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs +99 -18
  92. package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs.map +3 -3
  93. package/build-module/tools-panel/tools-panel/component.mjs +6 -0
  94. package/build-module/tools-panel/tools-panel/component.mjs.map +2 -2
  95. package/build-module/tools-panel/tools-panel/hook.mjs +87 -11
  96. package/build-module/tools-panel/tools-panel/hook.mjs.map +3 -3
  97. package/build-module/tools-panel/tools-panel-header/component.mjs +87 -2
  98. package/build-module/tools-panel/tools-panel-header/component.mjs.map +3 -3
  99. package/build-module/tools-panel/tools-panel-header/hook.mjs +90 -20
  100. package/build-module/tools-panel/tools-panel-header/hook.mjs.map +3 -3
  101. package/build-module/tools-panel/tools-panel-item/hook.mjs +89 -10
  102. package/build-module/tools-panel/tools-panel-item/hook.mjs.map +3 -3
  103. package/build-module/validated-form-controls/control-with-error.mjs +3 -0
  104. package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
  105. package/build-style/style-rtl.css +20 -24
  106. package/build-style/style.css +20 -24
  107. package/build-types/autocomplete/index.d.ts +7 -3
  108. package/build-types/autocomplete/index.d.ts.map +1 -1
  109. package/build-types/border-box-control/border-box-control/component.d.ts +1 -3
  110. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  111. package/build-types/border-box-control/stories/index.story.d.ts +1 -3
  112. package/build-types/border-box-control/stories/index.story.d.ts.map +1 -1
  113. package/build-types/border-box-control/types.d.ts +1 -15
  114. package/build-types/border-box-control/types.d.ts.map +1 -1
  115. package/build-types/box-control/input-control.d.ts +3 -0
  116. package/build-types/box-control/input-control.d.ts.map +1 -0
  117. package/build-types/box-control/styles/box-control-styles.d.ts +4 -8
  118. package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
  119. package/build-types/box-control/types.d.ts +1 -8
  120. package/build-types/box-control/types.d.ts.map +1 -1
  121. package/build-types/card/context.d.ts +3 -0
  122. package/build-types/card/context.d.ts.map +1 -0
  123. package/build-types/color-picker/component.d.ts.map +1 -1
  124. package/build-types/color-picker/picker.d.ts +17 -1
  125. package/build-types/color-picker/picker.d.ts.map +1 -1
  126. package/build-types/color-picker/styles.d.ts +4 -8
  127. package/build-types/color-picker/styles.d.ts.map +1 -1
  128. package/build-types/color-picker/types.d.ts +2 -0
  129. package/build-types/color-picker/types.d.ts.map +1 -1
  130. package/build-types/confirm-dialog/component.d.ts.map +1 -1
  131. package/build-types/content-editable-control/index.d.ts.map +1 -1
  132. package/build-types/context/wordpress-component.d.ts +2 -1
  133. package/build-types/context/wordpress-component.d.ts.map +1 -1
  134. package/build-types/custom-select-control/index.d.ts.map +1 -1
  135. package/build-types/custom-select-control/types.d.ts +1 -8
  136. package/build-types/custom-select-control/types.d.ts.map +1 -1
  137. package/build-types/date-time/date/index.d.ts +23 -0
  138. package/build-types/date-time/date/index.d.ts.map +1 -0
  139. package/build-types/date-time/date/styles.d.ts +45 -0
  140. package/build-types/date-time/date/styles.d.ts.map +1 -0
  141. package/build-types/date-time/date/test/index.d.ts +2 -0
  142. package/build-types/date-time/date/test/index.d.ts.map +1 -0
  143. package/build-types/date-time/date/test/use-lilius.d.ts +2 -0
  144. package/build-types/date-time/date/test/use-lilius.d.ts.map +1 -0
  145. package/build-types/date-time/date/use-lilius/index.d.ts +169 -0
  146. package/build-types/date-time/date/use-lilius/index.d.ts.map +1 -0
  147. package/build-types/date-time/time/index.d.ts +27 -0
  148. package/build-types/date-time/time/index.d.ts.map +1 -0
  149. package/build-types/date-time/time/styles.d.ts +93 -0
  150. package/build-types/date-time/time/styles.d.ts.map +1 -0
  151. package/build-types/date-time/time/test/index.d.ts +2 -0
  152. package/build-types/date-time/time/test/index.d.ts.map +1 -0
  153. package/build-types/date-time/time/time-input/index.d.ts +4 -0
  154. package/build-types/date-time/time/time-input/index.d.ts.map +1 -0
  155. package/build-types/date-time/time/time-input/test/index.d.ts +2 -0
  156. package/build-types/date-time/time/time-input/test/index.d.ts.map +1 -0
  157. package/build-types/date-time/time/timezone.d.ts +7 -0
  158. package/build-types/date-time/time/timezone.d.ts.map +1 -0
  159. package/build-types/date-time/time-picker/styles.d.ts +8 -16
  160. package/build-types/date-time/time-picker/styles.d.ts.map +1 -1
  161. package/build-types/disabled/index.d.ts.map +1 -1
  162. package/build-types/divider/styles.d.ts +10 -0
  163. package/build-types/divider/styles.d.ts.map +1 -0
  164. package/build-types/flex/styles.d.ts +17 -0
  165. package/build-types/flex/styles.d.ts.map +1 -0
  166. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -4
  167. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  168. package/build-types/font-size-picker/index.d.ts +12 -2
  169. package/build-types/font-size-picker/index.d.ts.map +1 -1
  170. package/build-types/font-size-picker/stories/e2e/index.story.d.ts +12 -1
  171. package/build-types/font-size-picker/stories/e2e/index.story.d.ts.map +1 -1
  172. package/build-types/font-size-picker/types.d.ts +2 -15
  173. package/build-types/font-size-picker/types.d.ts.map +1 -1
  174. package/build-types/form-token-field/index.d.ts.map +1 -1
  175. package/build-types/gradient-picker/index.d.ts.map +1 -1
  176. package/build-types/gradient-picker/stories/index.story.d.ts +1 -0
  177. package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
  178. package/build-types/gradient-picker/test/index.d.ts +2 -0
  179. package/build-types/gradient-picker/test/index.d.ts.map +1 -0
  180. package/build-types/gradient-picker/types.d.ts +19 -4
  181. package/build-types/gradient-picker/types.d.ts.map +1 -1
  182. package/build-types/input-control/index.d.ts.map +1 -1
  183. package/build-types/input-control/styles/input-control-styles.d.ts +0 -6
  184. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  185. package/build-types/input-control/types.d.ts +1 -8
  186. package/build-types/input-control/types.d.ts.map +1 -1
  187. package/build-types/mobile/image/constants.d.ts +5 -0
  188. package/build-types/mobile/image/constants.d.ts.map +1 -0
  189. package/build-types/navigation/back-button/index.d.ts +7 -0
  190. package/build-types/navigation/back-button/index.d.ts.map +1 -0
  191. package/build-types/navigation/constants.d.ts +3 -0
  192. package/build-types/navigation/constants.d.ts.map +1 -0
  193. package/build-types/navigation/context.d.ts +4 -0
  194. package/build-types/navigation/context.d.ts.map +1 -0
  195. package/build-types/navigation/group/context.d.ts +7 -0
  196. package/build-types/navigation/group/context.d.ts.map +1 -0
  197. package/build-types/navigation/group/index.d.ts +7 -0
  198. package/build-types/navigation/group/index.d.ts.map +1 -0
  199. package/build-types/navigation/index.d.ts +46 -0
  200. package/build-types/navigation/index.d.ts.map +1 -0
  201. package/build-types/navigation/item/base-content.d.ts +3 -0
  202. package/build-types/navigation/item/base-content.d.ts.map +1 -0
  203. package/build-types/navigation/item/base.d.ts +3 -0
  204. package/build-types/navigation/item/base.d.ts.map +1 -0
  205. package/build-types/navigation/item/index.d.ts +7 -0
  206. package/build-types/navigation/item/index.d.ts.map +1 -0
  207. package/build-types/navigation/item/use-navigation-tree-item.d.ts +3 -0
  208. package/build-types/navigation/item/use-navigation-tree-item.d.ts.map +1 -0
  209. package/build-types/navigation/menu/context.d.ts +7 -0
  210. package/build-types/navigation/menu/context.d.ts.map +1 -0
  211. package/build-types/navigation/menu/index.d.ts +7 -0
  212. package/build-types/navigation/menu/index.d.ts.map +1 -0
  213. package/build-types/navigation/menu/menu-title-search.d.ts +3 -0
  214. package/build-types/navigation/menu/menu-title-search.d.ts.map +1 -0
  215. package/build-types/navigation/menu/menu-title.d.ts +3 -0
  216. package/build-types/navigation/menu/menu-title.d.ts.map +1 -0
  217. package/build-types/navigation/menu/search-no-results-found.d.ts +3 -0
  218. package/build-types/navigation/menu/search-no-results-found.d.ts.map +1 -0
  219. package/build-types/navigation/menu/use-navigation-tree-menu.d.ts +3 -0
  220. package/build-types/navigation/menu/use-navigation-tree-menu.d.ts.map +1 -0
  221. package/build-types/navigation/stories/index.story.d.ts +23 -0
  222. package/build-types/navigation/stories/index.story.d.ts.map +1 -0
  223. package/build-types/navigation/stories/utils/controlled-state.d.ts +7 -0
  224. package/build-types/navigation/stories/utils/controlled-state.d.ts.map +1 -0
  225. package/build-types/navigation/stories/utils/default.d.ts +10 -0
  226. package/build-types/navigation/stories/utils/default.d.ts.map +1 -0
  227. package/build-types/navigation/stories/utils/group.d.ts +10 -0
  228. package/build-types/navigation/stories/utils/group.d.ts.map +1 -0
  229. package/build-types/navigation/stories/utils/hide-if-empty.d.ts +10 -0
  230. package/build-types/navigation/stories/utils/hide-if-empty.d.ts.map +1 -0
  231. package/build-types/navigation/stories/utils/more-examples.d.ts +10 -0
  232. package/build-types/navigation/stories/utils/more-examples.d.ts.map +1 -0
  233. package/build-types/navigation/stories/utils/search.d.ts +10 -0
  234. package/build-types/navigation/stories/utils/search.d.ts.map +1 -0
  235. package/build-types/navigation/styles/navigation-styles.d.ts +55 -0
  236. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -0
  237. package/build-types/navigation/test/index.d.ts +2 -0
  238. package/build-types/navigation/test/index.d.ts.map +1 -0
  239. package/build-types/navigation/types.d.ts +266 -0
  240. package/build-types/navigation/types.d.ts.map +1 -0
  241. package/build-types/navigation/use-create-navigation-tree.d.ts +15 -0
  242. package/build-types/navigation/use-create-navigation-tree.d.ts.map +1 -0
  243. package/build-types/navigation/use-navigation-tree-nodes.d.ts +10 -0
  244. package/build-types/navigation/use-navigation-tree-nodes.d.ts.map +1 -0
  245. package/build-types/navigation/utils.d.ts +3 -0
  246. package/build-types/navigation/utils.d.ts.map +1 -0
  247. package/build-types/number-control/index.d.ts +2 -4
  248. package/build-types/number-control/index.d.ts.map +1 -1
  249. package/build-types/number-control/stories/index.story.d.ts +2 -4
  250. package/build-types/number-control/stories/index.story.d.ts.map +1 -1
  251. package/build-types/number-control/types.d.ts +1 -15
  252. package/build-types/number-control/types.d.ts.map +1 -1
  253. package/build-types/private-apis.d.ts.map +1 -1
  254. package/build-types/range-control/index.d.ts +2 -4
  255. package/build-types/range-control/index.d.ts.map +1 -1
  256. package/build-types/range-control/styles/range-control-styles.d.ts +2 -4
  257. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  258. package/build-types/range-control/types.d.ts +2 -16
  259. package/build-types/range-control/types.d.ts.map +1 -1
  260. package/build-types/sandbox/index.d.ts.map +1 -1
  261. package/build-types/sandbox/types.d.ts +11 -0
  262. package/build-types/sandbox/types.d.ts.map +1 -1
  263. package/build-types/search-control/index.d.ts.map +1 -1
  264. package/build-types/search-control/types.d.ts +1 -1
  265. package/build-types/search-control/types.d.ts.map +1 -1
  266. package/build-types/select-control/index.d.ts.map +1 -1
  267. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  268. package/build-types/select-control/types.d.ts +0 -7
  269. package/build-types/select-control/types.d.ts.map +1 -1
  270. package/build-types/slot-fill/fill.d.ts.map +1 -1
  271. package/build-types/slot-fill/stories/index.story.d.ts +1 -6
  272. package/build-types/slot-fill/stories/index.story.d.ts.map +1 -1
  273. package/build-types/surface/styles.d.ts +11 -0
  274. package/build-types/surface/styles.d.ts.map +1 -0
  275. package/build-types/theme/styles.d.ts +10 -0
  276. package/build-types/theme/styles.d.ts.map +1 -0
  277. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +0 -1
  278. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  279. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  280. package/build-types/toggle-group-control/types.d.ts +0 -7
  281. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  282. package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
  283. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  284. package/build-types/tools-panel/tools-panel-header/component.d.ts.map +1 -1
  285. package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
  286. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  287. package/build-types/tree-select/types.d.ts +1 -8
  288. package/build-types/tree-select/types.d.ts.map +1 -1
  289. package/build-types/truncate/styles.d.ts +2 -0
  290. package/build-types/truncate/styles.d.ts.map +1 -0
  291. package/build-types/unit-control/index.d.ts +2 -4
  292. package/build-types/unit-control/index.d.ts.map +1 -1
  293. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -4
  294. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  295. package/build-types/unit-control/types.d.ts +1 -15
  296. package/build-types/unit-control/types.d.ts.map +1 -1
  297. package/build-types/utils/deprecated-36px-size.d.ts +7 -0
  298. package/build-types/utils/deprecated-36px-size.d.ts.map +1 -0
  299. package/build-types/validated-form-controls/components/number-control.d.ts +2 -4
  300. package/build-types/validated-form-controls/components/number-control.d.ts.map +1 -1
  301. package/build-types/validated-form-controls/components/range-control.d.ts +2 -4
  302. package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
  303. package/build-types/validated-form-controls/components/stories/overview.story.d.ts +5 -0
  304. package/build-types/validated-form-controls/components/stories/overview.story.d.ts.map +1 -1
  305. package/build-types/validated-form-controls/components/toggle-group-control.d.ts +1 -2
  306. package/build-types/validated-form-controls/components/toggle-group-control.d.ts.map +1 -1
  307. package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
  308. package/build-types/visually-hidden/test/index.d.ts +2 -0
  309. package/build-types/visually-hidden/test/index.d.ts.map +1 -0
  310. package/package.json +27 -27
  311. package/src/autocomplete/index.tsx +16 -3
  312. package/src/base-control/README.md +2 -2
  313. package/src/border-box-control/types.ts +4 -15
  314. package/src/box-control/types.ts +4 -8
  315. package/src/card/test/__snapshots__/index.tsx.snap +1 -1
  316. package/src/checkbox-control/test/__snapshots__/index.tsx.snap +1 -1
  317. package/src/color-indicator/test/__snapshots__/index.tsx.snap +1 -1
  318. package/src/color-picker/component.tsx +23 -19
  319. package/src/color-picker/picker.tsx +144 -21
  320. package/src/color-picker/test/index.tsx +502 -0
  321. package/src/color-picker/types.ts +2 -0
  322. package/src/combobox-control/style.scss +2 -2
  323. package/src/confirm-dialog/component.tsx +2 -4
  324. package/src/confirm-dialog/style.module.scss +7 -0
  325. package/src/confirm-dialog/test/index.tsx +5 -0
  326. package/src/content-editable-control/index.tsx +24 -5
  327. package/src/content-editable-control/style.module.scss +1 -1
  328. package/src/content-editable-control/test/index.tsx +20 -8
  329. package/src/context/test/__snapshots__/context-system-provider.js.snap +1 -1
  330. package/src/context/wordpress-component.ts +7 -2
  331. package/src/custom-gradient-picker/test/index.tsx +111 -1
  332. package/src/custom-select-control/index.tsx +1 -2
  333. package/src/custom-select-control/test/__snapshots__/index.tsx.snap +6 -0
  334. package/src/custom-select-control/test/index.tsx +23 -0
  335. package/src/custom-select-control/types.ts +1 -8
  336. package/src/disabled/index.tsx +7 -5
  337. package/src/disabled/style.module.scss +15 -0
  338. package/src/disabled/test/index.tsx +6 -4
  339. package/src/elevation/test/__snapshots__/index.tsx.snap +1 -1
  340. package/src/external-link/style.scss +6 -12
  341. package/src/flex/test/__snapshots__/index.tsx.snap +1 -1
  342. package/src/font-size-picker/types.ts +6 -15
  343. package/src/form-toggle/test/__snapshots__/index.tsx.snap +1 -1
  344. package/src/form-token-field/index.tsx +5 -4
  345. package/src/form-token-field/style.module.scss +6 -0
  346. package/src/form-token-field/style.scss +2 -2
  347. package/src/gradient-picker/README.md +21 -3
  348. package/src/gradient-picker/index.tsx +43 -28
  349. package/src/gradient-picker/stories/index.story.tsx +41 -5
  350. package/src/gradient-picker/test/index.tsx +148 -0
  351. package/src/gradient-picker/types.ts +24 -4
  352. package/src/h-stack/test/__snapshots__/index.tsx.snap +1 -1
  353. package/src/heading/test/__snapshots__/index.tsx.snap +1 -1
  354. package/src/higher-order/with-filters/test/__snapshots__/index.tsx.snap +1 -1
  355. package/src/input-control/index.tsx +0 -1
  356. package/src/input-control/styles/input-control-styles.tsx +0 -8
  357. package/src/input-control/test/__snapshots__/index.js.snap +11 -0
  358. package/src/input-control/test/index.js +28 -0
  359. package/src/input-control/types.ts +1 -8
  360. package/src/item-group/test/__snapshots__/index.js.snap +1 -1
  361. package/src/menu/README.md +2 -2
  362. package/src/menu-item/test/__snapshots__/index.js.snap +1 -1
  363. package/src/modal/test/index.tsx +42 -0
  364. package/src/notice/test/__snapshots__/index.tsx.snap +1 -1
  365. package/src/number-control/types.ts +1 -22
  366. package/src/panel/test/__snapshots__/body.tsx.snap +1 -1
  367. package/src/panel/test/__snapshots__/header.tsx.snap +1 -1
  368. package/src/panel/test/__snapshots__/index.tsx.snap +1 -1
  369. package/src/panel/test/__snapshots__/row.tsx.snap +1 -1
  370. package/src/private-apis.ts +0 -2
  371. package/src/range-control/index.tsx +0 -1
  372. package/src/range-control/types.ts +2 -15
  373. package/src/sandbox/index.tsx +22 -2
  374. package/src/sandbox/test/index.tsx +21 -0
  375. package/src/sandbox/types.ts +11 -0
  376. package/src/scrollable/test/__snapshots__/index.tsx.snap +1 -1
  377. package/src/search-control/index.tsx +23 -20
  378. package/src/search-control/style.module.scss +16 -0
  379. package/src/search-control/test/index.tsx +8 -0
  380. package/src/search-control/types.ts +1 -1
  381. package/src/select-control/index.tsx +0 -1
  382. package/src/select-control/styles/select-control-styles.ts +0 -7
  383. package/src/select-control/test/__snapshots__/select-control.tsx.snap +11 -0
  384. package/src/select-control/test/select-control.tsx +37 -0
  385. package/src/select-control/types.ts +0 -7
  386. package/src/shortcut/test/__snapshots__/index.tsx.snap +1 -1
  387. package/src/slot-fill/fill.tsx +3 -9
  388. package/src/slot-fill/stories/index.story.tsx +52 -10
  389. package/src/slot-fill/test/__snapshots__/slot.js.snap +1 -1
  390. package/src/slot-fill/test/slot.js +53 -11
  391. package/src/spacer/test/__snapshots__/index.tsx.snap +1 -1
  392. package/src/text/test/__snapshots__/index.tsx.snap +1 -1
  393. package/src/text-control/style.scss +1 -1
  394. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +29 -707
  395. package/src/toggle-group-control/test/index.tsx +33 -3
  396. package/src/toggle-group-control/toggle-group-control/component.tsx +11 -16
  397. package/src/toggle-group-control/toggle-group-control/style.module.scss +63 -0
  398. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +22 -24
  399. package/src/toggle-group-control/toggle-group-control-option-base/style.module.scss +88 -0
  400. package/src/toggle-group-control/types.ts +0 -7
  401. package/src/tools-panel/style.module.scss +117 -0
  402. package/src/tools-panel/test/index.tsx +105 -39
  403. package/src/tools-panel/tools-panel/component.tsx +12 -1
  404. package/src/tools-panel/tools-panel/hook.ts +13 -15
  405. package/src/tools-panel/tools-panel-header/component.tsx +6 -2
  406. package/src/tools-panel/tools-panel-header/hook.ts +7 -25
  407. package/src/tools-panel/tools-panel-item/hook.ts +16 -34
  408. package/src/tooltip/test/index.tsx +1 -1
  409. package/src/tree-grid/test/__snapshots__/cell.tsx.snap +1 -1
  410. package/src/tree-grid/test/__snapshots__/index.tsx.snap +1 -1
  411. package/src/tree-grid/test/__snapshots__/roving-tab-index-item.tsx.snap +1 -1
  412. package/src/tree-grid/test/__snapshots__/roving-tab-index.tsx.snap +1 -1
  413. package/src/tree-grid/test/__snapshots__/row.tsx.snap +1 -1
  414. package/src/tree-select/README.md +1 -1
  415. package/src/tree-select/types.ts +1 -8
  416. package/src/unit-control/types.ts +1 -18
  417. package/src/utils/theme-variables.scss +1 -0
  418. package/src/v-stack/test/__snapshots__/index.tsx.snap +1 -1
  419. package/src/validated-form-controls/components/stories/overview.story.tsx +51 -0
  420. package/src/validated-form-controls/control-with-error.tsx +9 -0
  421. package/src/validated-form-controls/style.scss +3 -3
  422. package/src/validated-form-controls/test/control-with-error.tsx +42 -0
  423. package/src/view/test/__snapshots__/index.js.snap +1 -1
  424. package/build/confirm-dialog/styles.cjs +0 -42
  425. package/build/confirm-dialog/styles.cjs.map +0 -7
  426. package/build/disabled/styles/disabled-styles.cjs +0 -42
  427. package/build/disabled/styles/disabled-styles.cjs.map +0 -7
  428. package/build/form-token-field/styles.cjs +0 -49
  429. package/build/form-token-field/styles.cjs.map +0 -7
  430. package/build/search-control/styles.cjs +0 -74
  431. package/build/search-control/styles.cjs.map +0 -7
  432. package/build/theme/color-algorithms.cjs +0 -131
  433. package/build/theme/color-algorithms.cjs.map +0 -7
  434. package/build/theme/index.cjs +0 -160
  435. package/build/theme/index.cjs.map +0 -7
  436. package/build/theme/types.cjs +0 -19
  437. package/build/theme/types.cjs.map +0 -7
  438. package/build/toggle-group-control/toggle-group-control/styles.cjs +0 -53
  439. package/build/toggle-group-control/toggle-group-control/styles.cjs.map +0 -7
  440. package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs +0 -94
  441. package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs.map +0 -7
  442. package/build/tools-panel/styles.cjs +0 -129
  443. package/build/tools-panel/styles.cjs.map +0 -7
  444. package/build/utils/use-deprecated-props.cjs +0 -41
  445. package/build/utils/use-deprecated-props.cjs.map +0 -7
  446. package/build-module/confirm-dialog/styles.mjs +0 -17
  447. package/build-module/confirm-dialog/styles.mjs.map +0 -7
  448. package/build-module/disabled/styles/disabled-styles.mjs +0 -17
  449. package/build-module/disabled/styles/disabled-styles.mjs.map +0 -7
  450. package/build-module/form-token-field/styles.mjs +0 -14
  451. package/build-module/form-token-field/styles.mjs.map +0 -7
  452. package/build-module/search-control/styles.mjs +0 -38
  453. package/build-module/search-control/styles.mjs.map +0 -7
  454. package/build-module/theme/color-algorithms.mjs +0 -94
  455. package/build-module/theme/color-algorithms.mjs.map +0 -7
  456. package/build-module/theme/index.mjs +0 -129
  457. package/build-module/theme/index.mjs.map +0 -7
  458. package/build-module/theme/types.mjs +0 -1
  459. package/build-module/theme/types.mjs.map +0 -7
  460. package/build-module/toggle-group-control/toggle-group-control/styles.mjs +0 -27
  461. package/build-module/toggle-group-control/toggle-group-control/styles.mjs.map +0 -7
  462. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs +0 -56
  463. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs.map +0 -7
  464. package/build-module/tools-panel/styles.mjs +0 -84
  465. package/build-module/tools-panel/styles.mjs.map +0 -7
  466. package/build-module/utils/use-deprecated-props.mjs +0 -16
  467. package/build-module/utils/use-deprecated-props.mjs.map +0 -7
  468. package/src/confirm-dialog/styles.ts +0 -18
  469. package/src/disabled/styles/disabled-styles.tsx +0 -23
  470. package/src/form-token-field/styles.ts +0 -15
  471. package/src/search-control/styles.ts +0 -27
  472. package/src/theme/README.md +0 -47
  473. package/src/theme/color-algorithms.ts +0 -142
  474. package/src/theme/index.tsx +0 -80
  475. package/src/theme/stories/index.story.tsx +0 -127
  476. package/src/theme/style.module.scss +0 -4
  477. package/src/theme/test/color-algorithms.ts +0 -100
  478. package/src/theme/test/index.tsx +0 -151
  479. package/src/theme/types.ts +0 -61
  480. package/src/toggle-group-control/toggle-group-control/styles.ts +0 -84
  481. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +0 -109
  482. package/src/tools-panel/styles.ts +0 -176
  483. package/src/utils/use-deprecated-props.ts +0 -14
@@ -141,11 +141,29 @@ Only used when `asButtons` is not true.
141
141
 
142
142
  ### `onChange`
143
143
 
144
- - Type: `(currentGradient: string | undefined) => void`
144
+ - Type: `(currentGradient: string | undefined, index?: number | undefined, slug?: string | undefined) => void`
145
145
  - Required: Yes
146
146
 
147
- The function called when a new gradient has been defined. It is passed to
148
- the `currentGradient` as an argument.
147
+ The function called when a new gradient has been defined. It is passed
148
+ the `currentGradient` as an argument. When a predefined gradient is
149
+ selected, the second argument is its index (or, for multiple-origin
150
+ gradients, the origin index) and the third argument is its slug.
151
+
152
+ ### `selectedSlug`
153
+
154
+ - Type: `string`
155
+ - Required: No
156
+
157
+ The slug of the currently selected predefined gradient.
158
+
159
+ When set to a non-empty string, selection is determined by slug rather
160
+ than by gradient value, which correctly handles palettes where two
161
+ entries share the same gradient. Entries whose slug does not match will
162
+ not appear selected in this mode, even if their gradient value matches
163
+ `value`.
164
+
165
+ An empty string is treated the same as `undefined`: selection falls
166
+ back to matching by gradient value.
149
167
 
150
168
  ### `value`
151
169
 
@@ -41,35 +41,48 @@ function SingleOrigin( {
41
41
  gradients,
42
42
  onChange,
43
43
  value,
44
+ selectedSlug,
44
45
  ...additionalProps
45
46
  }: PickerProps< GradientObject > ) {
46
47
  const gradientOptions = useMemo( () => {
47
- return gradients.map( ( { gradient, name, slug }, index ) => (
48
- <CircularOptionPicker.Option
49
- key={ slug }
50
- value={ gradient }
51
- isSelected={ value === gradient }
52
- tooltipText={
53
- name ||
54
- // translators: %s: gradient code e.g: "linear-gradient(90deg, rgba(98,16,153,1) 0%, rgba(172,110,22,1) 100%);".
55
- sprintf( __( 'Gradient code: %s' ), gradient )
56
- }
57
- style={ { color: 'rgba( 0,0,0,0 )', background: gradient } }
58
- onClick={
59
- value === gradient
60
- ? clearGradient
61
- : () => onChange( gradient, index )
62
- }
63
- aria-label={
64
- name
65
- ? // translators: %s: The name of the gradient e.g: "Angular red to blue".
66
- sprintf( __( 'Gradient: %s' ), name )
67
- : // translators: %s: gradient code e.g: "linear-gradient(90deg, rgba(98,16,153,1) 0%, rgba(172,110,22,1) 100%);".
68
- sprintf( __( 'Gradient code: %s' ), gradient )
69
- }
70
- />
71
- ) );
72
- }, [ gradients, value, onChange, clearGradient ] );
48
+ return gradients.map( ( { gradient, name, slug }, index ) => {
49
+ // When a non-empty selectedSlug is provided, selection is decided
50
+ // strictly by slug, which keeps two entries with the same gradient
51
+ // value apart. Otherwise selection falls back to matching the
52
+ // gradient value.
53
+ const isSelected = selectedSlug
54
+ ? slug === selectedSlug
55
+ : value === gradient;
56
+ return (
57
+ <CircularOptionPicker.Option
58
+ key={ slug }
59
+ value={ gradient }
60
+ isSelected={ isSelected }
61
+ tooltipText={
62
+ name ||
63
+ // translators: %s: gradient code e.g: "linear-gradient(90deg, rgba(98,16,153,1) 0%, rgba(172,110,22,1) 100%);".
64
+ sprintf( __( 'Gradient code: %s' ), gradient )
65
+ }
66
+ style={ {
67
+ color: 'rgba( 0,0,0,0 )',
68
+ background: gradient,
69
+ } }
70
+ onClick={
71
+ isSelected
72
+ ? clearGradient
73
+ : () => onChange( gradient, index, slug )
74
+ }
75
+ aria-label={
76
+ name
77
+ ? // translators: %s: The name of the gradient e.g: "Angular red to blue".
78
+ sprintf( __( 'Gradient: %s' ), name )
79
+ : // translators: %s: gradient code e.g: "linear-gradient(90deg, rgba(98,16,153,1) 0%, rgba(172,110,22,1) 100%);".
80
+ sprintf( __( 'Gradient code: %s' ), gradient )
81
+ }
82
+ />
83
+ );
84
+ } );
85
+ }, [ gradients, value, onChange, clearGradient, selectedSlug ] );
73
86
  return (
74
87
  <CircularOptionPicker.OptionGroup
75
88
  className={ className }
@@ -85,6 +98,7 @@ function MultipleOrigin( {
85
98
  gradients,
86
99
  onChange,
87
100
  value,
101
+ selectedSlug,
88
102
  headingLevel,
89
103
  }: PickerProps< OriginObject > ) {
90
104
  const instanceId = useInstanceId( MultipleOrigin );
@@ -101,10 +115,11 @@ function MultipleOrigin( {
101
115
  <SingleOrigin
102
116
  clearGradient={ clearGradient }
103
117
  gradients={ gradientSet }
104
- onChange={ ( gradient ) =>
105
- onChange( gradient, index )
118
+ onChange={ ( gradient, _index, slug ) =>
119
+ onChange( gradient, index, slug )
106
120
  }
107
121
  value={ value }
122
+ selectedSlug={ selectedSlug }
108
123
  aria-labelledby={ id }
109
124
  />
110
125
  </VStack>
@@ -31,6 +31,7 @@ const meta: Meta< typeof GradientPicker > = {
31
31
  onChange: fn(),
32
32
  },
33
33
  argTypes: {
34
+ selectedSlug: { control: false },
34
35
  value: { control: false },
35
36
  },
36
37
  };
@@ -91,17 +92,23 @@ const GRADIENTS = [
91
92
 
92
93
  const Template = ( {
93
94
  onChange,
95
+ value,
96
+ selectedSlug,
94
97
  ...props
95
98
  }: React.ComponentProps< typeof GradientPicker > ) => {
96
- const [ gradient, setGradient ] =
97
- useState< ( typeof props )[ 'value' ] >( null );
99
+ const [ gradient, setGradient ] = useState<
100
+ React.ComponentProps< typeof GradientPicker >[ 'value' ]
101
+ >( value ?? null );
102
+ const [ slug, setSlug ] = useState< string | undefined >( selectedSlug );
98
103
  return (
99
104
  <GradientPicker
100
105
  { ...props }
101
106
  value={ gradient }
102
- onChange={ ( ...changeArgs ) => {
103
- setGradient( ...changeArgs );
104
- onChange?.( ...changeArgs );
107
+ selectedSlug={ slug }
108
+ onChange={ ( currentGradient, index, newSlug ) => {
109
+ setGradient( currentGradient );
110
+ setSlug( newSlug );
111
+ onChange?.( currentGradient, index, newSlug );
105
112
  } }
106
113
  />
107
114
  );
@@ -121,6 +128,35 @@ export const WithNoExistingGradients: GradientPickerStory = {
121
128
  },
122
129
  };
123
130
 
131
+ export const DuplicateGradients: GradientPickerStory = {
132
+ render: Template,
133
+ args: {
134
+ gradients: [
135
+ {
136
+ name: 'Dark Background',
137
+ slug: 'dark-background',
138
+ gradient:
139
+ 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
140
+ },
141
+ {
142
+ name: 'Dark Text',
143
+ slug: 'dark-text',
144
+ gradient:
145
+ 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
146
+ },
147
+ {
148
+ name: 'Brand',
149
+ slug: 'brand',
150
+ gradient:
151
+ 'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)',
152
+ },
153
+ ],
154
+ value: 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
155
+ selectedSlug: 'dark-text',
156
+ disableCustomGradients: true,
157
+ },
158
+ };
159
+
124
160
  export const MultipleOrigins: GradientPickerStory = {
125
161
  render: Template,
126
162
  args: {
@@ -0,0 +1,148 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import GradientPicker from '..';
11
+
12
+ const GRADIENT_A =
13
+ 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)';
14
+ const GRADIENT_B =
15
+ 'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)';
16
+
17
+ const DUPLICATE_GRADIENTS = [
18
+ { name: 'Dark Background', slug: 'dark-background', gradient: GRADIENT_A },
19
+ { name: 'Dark Text', slug: 'dark-text', gradient: GRADIENT_A },
20
+ ];
21
+
22
+ describe( 'GradientPicker', () => {
23
+ describe( 'duplicate gradients in palette', () => {
24
+ it( 'should render all swatches even when two entries share the same gradient value', () => {
25
+ render(
26
+ <GradientPicker
27
+ aria-label="Gradient"
28
+ gradients={ DUPLICATE_GRADIENTS }
29
+ value={ undefined }
30
+ onChange={ jest.fn() }
31
+ disableCustomGradients
32
+ />
33
+ );
34
+
35
+ expect( screen.getAllByRole( 'option' ) ).toHaveLength( 2 );
36
+ } );
37
+
38
+ it( 'should select by slug when selectedSlug is provided, marking only the matching entry', () => {
39
+ render(
40
+ <GradientPicker
41
+ aria-label="Gradient"
42
+ gradients={ DUPLICATE_GRADIENTS }
43
+ value={ GRADIENT_A }
44
+ selectedSlug="dark-text"
45
+ onChange={ jest.fn() }
46
+ disableCustomGradients
47
+ />
48
+ );
49
+
50
+ const options = screen.getAllByRole( 'option' );
51
+ // "dark-background" is index 0, "dark-text" is index 1.
52
+ expect( options[ 0 ] ).toHaveAttribute( 'aria-selected', 'false' );
53
+ expect( options[ 1 ] ).toHaveAttribute( 'aria-selected', 'true' );
54
+ } );
55
+
56
+ it( 'should fall back to value selection and mark all matching duplicates when no selectedSlug is provided', () => {
57
+ render(
58
+ <GradientPicker
59
+ aria-label="Gradient"
60
+ gradients={ DUPLICATE_GRADIENTS }
61
+ value={ GRADIENT_A }
62
+ onChange={ jest.fn() }
63
+ disableCustomGradients
64
+ />
65
+ );
66
+
67
+ const options = screen.getAllByRole( 'option' );
68
+ expect( options[ 0 ] ).toHaveAttribute( 'aria-selected', 'true' );
69
+ expect( options[ 1 ] ).toHaveAttribute( 'aria-selected', 'true' );
70
+ } );
71
+
72
+ it( 'should treat an empty-string selectedSlug as no slug and fall back to value selection', () => {
73
+ render(
74
+ <GradientPicker
75
+ aria-label="Gradient"
76
+ gradients={ DUPLICATE_GRADIENTS }
77
+ value={ GRADIENT_A }
78
+ selectedSlug=""
79
+ onChange={ jest.fn() }
80
+ disableCustomGradients
81
+ />
82
+ );
83
+
84
+ const options = screen.getAllByRole( 'option' );
85
+ expect( options[ 0 ] ).toHaveAttribute( 'aria-selected', 'true' );
86
+ expect( options[ 1 ] ).toHaveAttribute( 'aria-selected', 'true' );
87
+ } );
88
+
89
+ it( 'should pass slug as third argument to onChange when a swatch is clicked', async () => {
90
+ const user = userEvent.setup();
91
+ const onChange = jest.fn();
92
+
93
+ render(
94
+ <GradientPicker
95
+ aria-label="Gradient"
96
+ gradients={ DUPLICATE_GRADIENTS }
97
+ value={ undefined }
98
+ onChange={ onChange }
99
+ disableCustomGradients
100
+ />
101
+ );
102
+
103
+ await user.click(
104
+ screen.getByRole( 'option', { name: 'Gradient: Dark Text' } )
105
+ );
106
+
107
+ expect( onChange ).toHaveBeenCalledWith(
108
+ GRADIENT_A,
109
+ 1,
110
+ 'dark-text'
111
+ );
112
+ } );
113
+
114
+ it( 'should pass slug as third argument to onChange for multiple-origin gradients', async () => {
115
+ const user = userEvent.setup();
116
+ const onChange = jest.fn();
117
+
118
+ render(
119
+ <GradientPicker
120
+ aria-label="Gradient"
121
+ gradients={ [
122
+ {
123
+ name: 'Theme',
124
+ gradients: [
125
+ {
126
+ name: 'Blush',
127
+ slug: 'blush',
128
+ gradient: GRADIENT_B,
129
+ },
130
+ ],
131
+ },
132
+ ] }
133
+ value={ undefined }
134
+ onChange={ onChange }
135
+ disableCustomGradients
136
+ />
137
+ );
138
+
139
+ await user.click(
140
+ screen.getByRole( 'option', { name: 'Gradient: Blush' } )
141
+ );
142
+
143
+ // The second argument is the origin index, mirroring the existing
144
+ // multiple-origin behavior.
145
+ expect( onChange ).toHaveBeenCalledWith( GRADIENT_B, 0, 'blush' );
146
+ } );
147
+ } );
148
+ } );
@@ -17,10 +17,16 @@ type GradientPickerBaseProps = {
17
17
  */
18
18
  className?: string;
19
19
  /**
20
- * The function called when a new gradient has been defined. It is passed to
21
- * the `currentGradient` as an argument.
20
+ * The function called when a new gradient has been defined. It is passed
21
+ * the `currentGradient` as an argument. When a predefined gradient is
22
+ * selected, the second argument is its index (or, for multiple-origin
23
+ * gradients, the origin index) and the third argument is its slug.
22
24
  */
23
- onChange: ( currentGradient: string | undefined ) => void;
25
+ onChange: (
26
+ currentGradient: string | undefined,
27
+ index?: number,
28
+ slug?: string
29
+ ) => void;
24
30
  /**
25
31
  * The current value of the gradient. Pass a css gradient string (See default value for example).
26
32
  * Optionally pass in a `null` value to specify no gradient is currently selected.
@@ -28,6 +34,19 @@ type GradientPickerBaseProps = {
28
34
  * @default 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)'
29
35
  */
30
36
  value?: GradientObject[ 'gradient' ] | null;
37
+ /**
38
+ * The slug of the currently selected predefined gradient.
39
+ *
40
+ * When set to a non-empty string, selection is determined by slug rather
41
+ * than by gradient value, which correctly handles palettes where two
42
+ * entries share the same gradient. Entries whose slug does not match will
43
+ * not appear selected in this mode, even if their gradient value matches
44
+ * `value`.
45
+ *
46
+ * An empty string is treated the same as `undefined`: selection falls
47
+ * back to matching by gradient value.
48
+ */
49
+ selectedSlug?: string;
31
50
  /**
32
51
  * Whether the palette should have a clearing button or not.
33
52
  *
@@ -121,7 +140,8 @@ export type PickerProps< TOriginType extends GradientObject | OriginObject > =
121
140
  clearGradient: () => void;
122
141
  onChange: (
123
142
  currentGradient: string | undefined,
124
- index: number
143
+ index: number,
144
+ slug?: string
125
145
  ) => void;
126
146
  actions?: React.ReactNode;
127
147
  gradients: TOriginType[];
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`props should render alignment 1`] = `
4
4
  <div>
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`props should render correctly 1`] = `
4
4
  .emotion-0 {
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`withFilters should display a component overridden by the filter 1`] = `
4
4
  <div>
@@ -37,7 +37,6 @@ export function UnforwardedInputControl(
37
37
  // Prevent passing legacy props to internal components.
38
38
  __next40pxDefaultSize: _next40pxDefaultSize,
39
39
  __next36pxDefaultSize: _next36pxDefaultSize,
40
- __shouldNotWarnDeprecated36pxSize: _shouldNotWarnDeprecated36pxSize,
41
40
  __unstableStateReducer: stateReducer = ( state ) => state,
42
41
  __unstableInputWidth,
43
42
  className,
@@ -157,7 +157,6 @@ export const fontSizeStyles = ( { inputSize: size }: InputProps ) => {
157
157
  default: '13px',
158
158
  small: '11px',
159
159
  compact: '13px',
160
- '__unstable-large': '13px',
161
160
  };
162
161
 
163
162
  const fontSize = sizes[ size as Size ] || sizes.default;
@@ -200,13 +199,6 @@ export const getSizeConfig = ( { inputSize: size }: InputProps ) => {
200
199
  paddingLeft: CONFIG.controlPaddingXSmall,
201
200
  paddingRight: CONFIG.controlPaddingXSmall,
202
201
  },
203
- '__unstable-large': {
204
- height: 40,
205
- lineHeight: 1,
206
- minHeight: 40,
207
- paddingLeft: CONFIG.controlPaddingX,
208
- paddingRight: CONFIG.controlPaddingX,
209
- },
210
202
  };
211
203
 
212
204
  return sizes[ size as Size ] || sizes.default;
@@ -0,0 +1,11 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`InputControl Legacy size support treats __unstable-large the same as default 1`] = `
4
+ Snapshot Diff:
5
+ Compared values have no visual difference.
6
+ `;
7
+
8
+ exports[`InputControl Legacy size support treats __unstable-large the same as default 2`] = `
9
+ Snapshot Diff:
10
+ Compared values have no visual difference.
11
+ `;
@@ -13,6 +13,7 @@ import { useState } from '@wordpress/element';
13
13
  * Internal dependencies
14
14
  */
15
15
  import BaseInputControl from '../';
16
+ import InputControlPrefixWrapper from '../input-prefix-wrapper';
16
17
 
17
18
  const getInput = () => screen.getByTestId( 'input' );
18
19
 
@@ -207,4 +208,31 @@ describe( 'InputControl', () => {
207
208
  expect( spyChange ).toHaveBeenLastCalledWith( 'this is meow' );
208
209
  } );
209
210
  } );
211
+
212
+ describe( 'Legacy size support', () => {
213
+ it( 'treats __unstable-large the same as default', () => {
214
+ const prefix = (
215
+ <InputControlPrefixWrapper>$</InputControlPrefixWrapper>
216
+ );
217
+
218
+ render( <InputControl label="Test" prefix={ prefix } /> );
219
+ render(
220
+ <InputControl
221
+ label="Test"
222
+ prefix={ prefix }
223
+ { ...{ size: '__unstable-large' } }
224
+ />
225
+ );
226
+
227
+ const [ defaultPrefixWrapper, legacyPrefixWrapper ] =
228
+ screen.getAllByText( '$' );
229
+ const [ defaultInput, legacyInput ] =
230
+ screen.getAllByTestId( 'input' );
231
+
232
+ expect( legacyPrefixWrapper ).toMatchStyleDiffSnapshot(
233
+ defaultPrefixWrapper
234
+ );
235
+ expect( legacyInput ).toMatchStyleDiffSnapshot( defaultInput );
236
+ } );
237
+ } );
210
238
  } );
@@ -23,7 +23,7 @@ export type DragDirection = 'n' | 's' | 'e' | 'w';
23
23
 
24
24
  export type DragProps = Parameters< Parameters< typeof useDrag >[ 0 ] >[ 0 ];
25
25
 
26
- export type Size = 'default' | 'small' | 'compact' | '__unstable-large';
26
+ export type Size = 'default' | 'small' | 'compact';
27
27
 
28
28
  interface BaseProps {
29
29
  __unstableInputWidth?: CSSProperties[ 'width' ];
@@ -199,13 +199,6 @@ export interface InputControlProps
199
199
  * @ignore
200
200
  */
201
201
  __next40pxDefaultSize?: boolean;
202
- /**
203
- * Do not throw a warning for the deprecated 36px default size.
204
- * For internal components of other components that already throw the warning.
205
- *
206
- * @ignore
207
- */
208
- __shouldNotWarnDeprecated36pxSize?: boolean;
209
202
  __unstableStateReducer?: InputFieldProps[ 'stateReducer' ];
210
203
  }
211
204
 
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`ItemGroup Item should read the value of the size prop from context when the prop is not defined 1`] = `
4
4
  Snapshot Diff:
@@ -19,8 +19,8 @@ component, and the `Menu.Popover` component.
19
19
 
20
20
  ### `as`
21
21
 
22
- - Type: `"symbol" | "object" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | ... 517 more ...`
23
- - Required: No
22
+ - Type: `ElementType<any, keyof IntrinsicElements>`
23
+ - Required: Yes
24
24
 
25
25
  The HTML element or React component to render the component as.
26
26
 
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`MenuItem should match snapshot when all props provided 1`] = `
4
4
  <button
@@ -8,6 +8,10 @@ import userEvent from '@testing-library/user-event';
8
8
  * WordPress dependencies
9
9
  */
10
10
  import { useEffect, useState } from '@wordpress/element';
11
+ import {
12
+ getWpCompatOverlaySlot,
13
+ useEnableWpCompatOverlaySlot,
14
+ } from '@wordpress/ui';
11
15
 
12
16
  /**
13
17
  * Internal dependencies
@@ -254,6 +258,44 @@ describe( 'Modal', () => {
254
258
  expect( container ).not.toHaveAttribute( 'aria-hidden' );
255
259
  } );
256
260
 
261
+ it( 'keeps the @wordpress/ui compat overlay slot exposed while open', async () => {
262
+ const user = userEvent.setup();
263
+
264
+ const CompatOverlayDemo = () => {
265
+ useEnableWpCompatOverlaySlot();
266
+ useEffect( () => {
267
+ const slot = getWpCompatOverlaySlot();
268
+ return () => slot?.remove();
269
+ }, [] );
270
+
271
+ const [ isShown, setIsShown ] = useState( false );
272
+ return (
273
+ <>
274
+ <button onClick={ () => setIsShown( true ) }>
275
+ Open Modal
276
+ </button>
277
+ { isShown && (
278
+ <Modal onRequestClose={ () => setIsShown( false ) }>
279
+ <p>Modal content</p>
280
+ </Modal>
281
+ ) }
282
+ </>
283
+ );
284
+ };
285
+
286
+ const { container } = render( <CompatOverlayDemo /> );
287
+ // Disable reason: The infrastructure slot has no semantic role.
288
+ // eslint-disable-next-line testing-library/no-node-access
289
+ const slot = document.querySelector( '[data-wp-compat-overlay-slot]' );
290
+
291
+ await user.click(
292
+ screen.getByRole( 'button', { name: 'Open Modal' } )
293
+ );
294
+
295
+ expect( container ).toHaveAttribute( 'aria-hidden', 'true' );
296
+ expect( slot ).toHaveAttribute( 'aria-hidden', 'false' );
297
+ } );
298
+
257
299
  it( 'should render `headerActions` React nodes', async () => {
258
300
  render(
259
301
  <Modal
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`Notice should match snapshot 1`] = `
4
4
  <div>
@@ -5,14 +5,7 @@ import type { InputControlProps } from '../input-control/types';
5
5
 
6
6
  export type NumberControlProps = Omit<
7
7
  InputControlProps,
8
- | 'isDragEnabled'
9
- | 'min'
10
- | 'max'
11
- | 'required'
12
- | 'step'
13
- | 'type'
14
- | 'value'
15
- | '__next40pxDefaultSize'
8
+ 'isDragEnabled' | 'min' | 'max' | 'required' | 'step' | 'type' | 'value'
16
9
  > & {
17
10
  /**
18
11
  * If true, the default `input` HTML arrows will be hidden.
@@ -98,18 +91,4 @@ export type NumberControlProps = Omit<
98
91
  * The value of the input.
99
92
  */
100
93
  value?: number | string;
101
- /**
102
- * Do not throw a warning for the deprecated 36px default size.
103
- * For internal components of other components that already throw the warning.
104
- *
105
- * @ignore
106
- */
107
- __shouldNotWarnDeprecated36pxSize?: boolean;
108
- /**
109
- * Start opting into the larger default height that will become the default size in a future version.
110
- *
111
- * @deprecated Default behavior since WordPress 7.1. Prop can be safely removed.
112
- * @ignore
113
- */
114
- __next40pxDefaultSize?: boolean;
115
94
  };
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`PanelBody basic rendering should render an empty div with the matching className 1`] = `
4
4
  <div>
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`PanelHeader basic rendering should render PanelHeader with empty div inside 1`] = `
4
4
  <div>