@wordpress/components 25.12.0 → 25.14.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 (342) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/build/angle-picker-control/index.js +0 -1
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/border-control/border-control-dropdown/component.js +4 -2
  5. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  6. package/build/border-control/border-control-dropdown/hook.js +3 -2
  7. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  8. package/build/border-control/styles.js +17 -17
  9. package/build/border-control/styles.js.map +1 -1
  10. package/build/checkbox-control/index.js +1 -1
  11. package/build/checkbox-control/index.js.map +1 -1
  12. package/build/checkbox-control/types.js.map +1 -1
  13. package/build/custom-select-control-v2/index.js +87 -0
  14. package/build/custom-select-control-v2/index.js.map +1 -0
  15. package/build/custom-select-control-v2/styles.js +85 -0
  16. package/build/custom-select-control-v2/styles.js.map +1 -0
  17. package/build/custom-select-control-v2/types.js +6 -0
  18. package/build/custom-select-control-v2/types.js.map +1 -0
  19. package/build/date-time/time/timezone.js +11 -2
  20. package/build/date-time/time/timezone.js.map +1 -1
  21. package/build/dimension-control/index.js +2 -0
  22. package/build/dimension-control/index.js.map +1 -1
  23. package/build/dimension-control/types.js.map +1 -1
  24. package/build/dropdown-menu-v2-ariakit/index.js +49 -20
  25. package/build/dropdown-menu-v2-ariakit/index.js.map +1 -1
  26. package/build/dropdown-menu-v2-ariakit/styles.js +82 -59
  27. package/build/dropdown-menu-v2-ariakit/styles.js.map +1 -1
  28. package/build/dropdown-menu-v2-ariakit/types.js.map +1 -1
  29. package/build/focal-point-picker/controls.js +5 -1
  30. package/build/focal-point-picker/controls.js.map +1 -1
  31. package/build/focal-point-picker/index.js +2 -0
  32. package/build/focal-point-picker/index.js.map +1 -1
  33. package/build/focal-point-picker/styles/focal-point-picker-style.js +15 -15
  34. package/build/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  35. package/build/focal-point-picker/types.js.map +1 -1
  36. package/build/font-size-picker/font-size-picker-select.js +2 -0
  37. package/build/font-size-picker/font-size-picker-select.js.map +1 -1
  38. package/build/font-size-picker/font-size-picker-toggle-group.js +2 -0
  39. package/build/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
  40. package/build/font-size-picker/index.js +6 -1
  41. package/build/font-size-picker/index.js.map +1 -1
  42. package/build/font-size-picker/types.js.map +1 -1
  43. package/build/form-token-field/index.js +6 -2
  44. package/build/form-token-field/index.js.map +1 -1
  45. package/build/form-token-field/token-input.js.map +1 -1
  46. package/build/form-token-field/types.js.map +1 -1
  47. package/build/heading/hook.js +6 -3
  48. package/build/heading/hook.js.map +1 -1
  49. package/build/heading/types.js.map +1 -1
  50. package/build/index.native.js +0 -16
  51. package/build/index.native.js.map +1 -1
  52. package/build/mobile/global-styles-context/utils.native.js +13 -0
  53. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  54. package/build/mobile/utils/alignments.native.js +1 -1
  55. package/build/mobile/utils/alignments.native.js.map +1 -1
  56. package/build/palette-edit/index.js +21 -1
  57. package/build/palette-edit/index.js.map +1 -1
  58. package/build/private-apis.js +3 -2
  59. package/build/private-apis.js.map +1 -1
  60. package/build/query-controls/author-select.js +3 -1
  61. package/build/query-controls/author-select.js.map +1 -1
  62. package/build/query-controls/category-select.js +3 -1
  63. package/build/query-controls/category-select.js.map +1 -1
  64. package/build/query-controls/index.js +6 -1
  65. package/build/query-controls/index.js.map +1 -1
  66. package/build/query-controls/types.js.map +1 -1
  67. package/build/slot-fill/types.js.map +1 -1
  68. package/build/tabs/index.js +24 -5
  69. package/build/tabs/index.js.map +1 -1
  70. package/build/tabs/tab.js +4 -4
  71. package/build/tabs/tab.js.map +1 -1
  72. package/build/tabs/tabpanel.js +4 -3
  73. package/build/tabs/tabpanel.js.map +1 -1
  74. package/build/tabs/types.js.map +1 -1
  75. package/build/text/types.js.map +1 -1
  76. package/build/toggle-group-control/toggle-group-control/utils.js +17 -17
  77. package/build/toggle-group-control/toggle-group-control/utils.js.map +1 -1
  78. package/build/tools-panel/tools-panel-item/hook.js +16 -12
  79. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  80. package/build-module/angle-picker-control/index.js +0 -1
  81. package/build-module/angle-picker-control/index.js.map +1 -1
  82. package/build-module/border-control/border-control-dropdown/component.js +4 -2
  83. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  84. package/build-module/border-control/border-control-dropdown/hook.js +3 -2
  85. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  86. package/build-module/border-control/styles.js +17 -17
  87. package/build-module/border-control/styles.js.map +1 -1
  88. package/build-module/checkbox-control/index.js +1 -1
  89. package/build-module/checkbox-control/index.js.map +1 -1
  90. package/build-module/checkbox-control/types.js.map +1 -1
  91. package/build-module/custom-select-control-v2/index.js +74 -0
  92. package/build-module/custom-select-control-v2/index.js.map +1 -0
  93. package/build-module/custom-select-control-v2/styles.js +71 -0
  94. package/build-module/custom-select-control-v2/styles.js.map +1 -0
  95. package/build-module/custom-select-control-v2/types.js +2 -0
  96. package/build-module/custom-select-control-v2/types.js.map +1 -0
  97. package/build-module/date-time/time/timezone.js +11 -2
  98. package/build-module/date-time/time/timezone.js.map +1 -1
  99. package/build-module/dimension-control/index.js +2 -0
  100. package/build-module/dimension-control/index.js.map +1 -1
  101. package/build-module/dimension-control/types.js.map +1 -1
  102. package/build-module/dropdown-menu-v2-ariakit/index.js +46 -18
  103. package/build-module/dropdown-menu-v2-ariakit/index.js.map +1 -1
  104. package/build-module/dropdown-menu-v2-ariakit/styles.js +69 -40
  105. package/build-module/dropdown-menu-v2-ariakit/styles.js.map +1 -1
  106. package/build-module/dropdown-menu-v2-ariakit/types.js.map +1 -1
  107. package/build-module/focal-point-picker/controls.js +5 -1
  108. package/build-module/focal-point-picker/controls.js.map +1 -1
  109. package/build-module/focal-point-picker/index.js +2 -0
  110. package/build-module/focal-point-picker/index.js.map +1 -1
  111. package/build-module/focal-point-picker/styles/focal-point-picker-style.js +15 -15
  112. package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  113. package/build-module/focal-point-picker/types.js.map +1 -1
  114. package/build-module/font-size-picker/font-size-picker-select.js +2 -0
  115. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
  116. package/build-module/font-size-picker/font-size-picker-toggle-group.js +2 -0
  117. package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
  118. package/build-module/font-size-picker/index.js +6 -1
  119. package/build-module/font-size-picker/index.js.map +1 -1
  120. package/build-module/font-size-picker/types.js.map +1 -1
  121. package/build-module/form-token-field/index.js +6 -2
  122. package/build-module/form-token-field/index.js.map +1 -1
  123. package/build-module/form-token-field/token-input.js.map +1 -1
  124. package/build-module/form-token-field/types.js.map +1 -1
  125. package/build-module/heading/hook.js +6 -3
  126. package/build-module/heading/hook.js.map +1 -1
  127. package/build-module/heading/types.js.map +1 -1
  128. package/build-module/index.native.js +0 -2
  129. package/build-module/index.native.js.map +1 -1
  130. package/build-module/mobile/global-styles-context/utils.native.js +13 -0
  131. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  132. package/build-module/mobile/utils/alignments.native.js +1 -1
  133. package/build-module/mobile/utils/alignments.native.js.map +1 -1
  134. package/build-module/palette-edit/index.js +20 -3
  135. package/build-module/palette-edit/index.js.map +1 -1
  136. package/build-module/private-apis.js +4 -3
  137. package/build-module/private-apis.js.map +1 -1
  138. package/build-module/query-controls/author-select.js +3 -1
  139. package/build-module/query-controls/author-select.js.map +1 -1
  140. package/build-module/query-controls/category-select.js +3 -1
  141. package/build-module/query-controls/category-select.js.map +1 -1
  142. package/build-module/query-controls/index.js +6 -1
  143. package/build-module/query-controls/index.js.map +1 -1
  144. package/build-module/query-controls/types.js.map +1 -1
  145. package/build-module/slot-fill/types.js.map +1 -1
  146. package/build-module/tabs/index.js +25 -6
  147. package/build-module/tabs/index.js.map +1 -1
  148. package/build-module/tabs/tab.js +6 -6
  149. package/build-module/tabs/tab.js.map +1 -1
  150. package/build-module/tabs/tabpanel.js +6 -5
  151. package/build-module/tabs/tabpanel.js.map +1 -1
  152. package/build-module/tabs/types.js.map +1 -1
  153. package/build-module/text/types.js.map +1 -1
  154. package/build-module/toggle-group-control/toggle-group-control/utils.js +17 -17
  155. package/build-module/toggle-group-control/toggle-group-control/utils.js.map +1 -1
  156. package/build-module/tools-panel/tools-panel-item/hook.js +17 -13
  157. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  158. package/build-style/style-rtl.css +32 -6
  159. package/build-style/style.css +32 -6
  160. package/build-types/angle-picker-control/index.d.ts.map +1 -1
  161. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  162. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -0
  163. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  164. package/build-types/border-control/styles.d.ts +1 -1
  165. package/build-types/border-control/styles.d.ts.map +1 -1
  166. package/build-types/box-control/stories/index.story.d.ts +1944 -0
  167. package/build-types/box-control/stories/index.story.d.ts.map +1 -0
  168. package/build-types/checkbox-control/index.d.ts.map +1 -1
  169. package/build-types/checkbox-control/types.d.ts +3 -2
  170. package/build-types/checkbox-control/types.d.ts.map +1 -1
  171. package/build-types/color-palette/styles.d.ts +4 -1
  172. package/build-types/color-palette/styles.d.ts.map +1 -1
  173. package/build-types/custom-select-control-v2/index.d.ts +6 -0
  174. package/build-types/custom-select-control-v2/index.d.ts.map +1 -0
  175. package/build-types/custom-select-control-v2/stories/index.story.d.ts +19 -0
  176. package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -0
  177. package/build-types/custom-select-control-v2/styles.d.ts +47 -0
  178. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -0
  179. package/build-types/custom-select-control-v2/types.d.ts +57 -0
  180. package/build-types/custom-select-control-v2/types.d.ts.map +1 -0
  181. package/build-types/date-time/date/styles.d.ts +4 -1
  182. package/build-types/date-time/date/styles.d.ts.map +1 -1
  183. package/build-types/date-time/time/timezone.d.ts.map +1 -1
  184. package/build-types/dimension-control/index.d.ts.map +1 -1
  185. package/build-types/dimension-control/types.d.ts +6 -0
  186. package/build-types/dimension-control/types.d.ts.map +1 -1
  187. package/build-types/dropdown-menu-v2-ariakit/index.d.ts +11 -2
  188. package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +1 -1
  189. package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +1 -1
  190. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +26 -18
  191. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +1 -1
  192. package/build-types/dropdown-menu-v2-ariakit/types.d.ts +0 -6
  193. package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +1 -1
  194. package/build-types/focal-point-picker/controls.d.ts +1 -1
  195. package/build-types/focal-point-picker/controls.d.ts.map +1 -1
  196. package/build-types/focal-point-picker/index.d.ts +1 -1
  197. package/build-types/focal-point-picker/index.d.ts.map +1 -1
  198. package/build-types/focal-point-picker/stories/index.story.d.ts +8 -4
  199. package/build-types/focal-point-picker/stories/index.story.d.ts.map +1 -1
  200. package/build-types/focal-point-picker/types.d.ts +7 -0
  201. package/build-types/focal-point-picker/types.d.ts.map +1 -1
  202. package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -1
  203. package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -1
  204. package/build-types/font-size-picker/index.d.ts.map +1 -1
  205. package/build-types/font-size-picker/types.d.ts +8 -1
  206. package/build-types/font-size-picker/types.d.ts.map +1 -1
  207. package/build-types/form-token-field/index.d.ts.map +1 -1
  208. package/build-types/form-token-field/token-input.d.ts.map +1 -1
  209. package/build-types/form-token-field/types.d.ts +1 -1
  210. package/build-types/form-token-field/types.d.ts.map +1 -1
  211. package/build-types/heading/component.d.ts +4 -1
  212. package/build-types/heading/component.d.ts.map +1 -1
  213. package/build-types/heading/hook.d.ts.map +1 -1
  214. package/build-types/heading/types.d.ts +20 -1
  215. package/build-types/heading/types.d.ts.map +1 -1
  216. package/build-types/navigation/styles/navigation-styles.d.ts +4 -1
  217. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
  218. package/build-types/palette-edit/index.d.ts +6 -1
  219. package/build-types/palette-edit/index.d.ts.map +1 -1
  220. package/build-types/palette-edit/styles.d.ts +4 -1
  221. package/build-types/palette-edit/styles.d.ts.map +1 -1
  222. package/build-types/private-apis.d.ts.map +1 -1
  223. package/build-types/query-controls/author-select.d.ts +1 -1
  224. package/build-types/query-controls/author-select.d.ts.map +1 -1
  225. package/build-types/query-controls/category-select.d.ts +1 -1
  226. package/build-types/query-controls/category-select.d.ts.map +1 -1
  227. package/build-types/query-controls/index.d.ts +1 -1
  228. package/build-types/query-controls/index.d.ts.map +1 -1
  229. package/build-types/query-controls/types.d.ts +9 -0
  230. package/build-types/query-controls/types.d.ts.map +1 -1
  231. package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
  232. package/build-types/slot-fill/types.d.ts +16 -6
  233. package/build-types/slot-fill/types.d.ts.map +1 -1
  234. package/build-types/tabs/index.d.ts +3 -2
  235. package/build-types/tabs/index.d.ts.map +1 -1
  236. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  237. package/build-types/tabs/tab.d.ts +2 -1
  238. package/build-types/tabs/tab.d.ts.map +1 -1
  239. package/build-types/tabs/tabpanel.d.ts +2 -1
  240. package/build-types/tabs/tabpanel.d.ts.map +1 -1
  241. package/build-types/tabs/types.d.ts +8 -3
  242. package/build-types/tabs/types.d.ts.map +1 -1
  243. package/build-types/text/types.d.ts +15 -2
  244. package/build-types/text/types.d.ts.map +1 -1
  245. package/build-types/toggle-group-control/toggle-group-control/utils.d.ts.map +1 -1
  246. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  247. package/package.json +19 -19
  248. package/src/angle-picker-control/index.tsx +0 -1
  249. package/src/border-control/border-control-dropdown/component.tsx +3 -1
  250. package/src/border-control/border-control-dropdown/hook.ts +3 -2
  251. package/src/border-control/styles.ts +2 -9
  252. package/src/box-control/stories/index.story.tsx +82 -0
  253. package/src/button/style.scss +10 -2
  254. package/src/checkbox-control/README.md +2 -1
  255. package/src/checkbox-control/index.tsx +8 -6
  256. package/src/checkbox-control/test/__snapshots__/index.tsx.snap +3 -8
  257. package/src/checkbox-control/test/index.tsx +7 -0
  258. package/src/checkbox-control/types.ts +3 -2
  259. package/src/combobox-control/README.md +1 -3
  260. package/src/custom-select-control/test/index.js +367 -35
  261. package/src/custom-select-control-v2/README.md +73 -0
  262. package/src/custom-select-control-v2/index.tsx +99 -0
  263. package/src/custom-select-control-v2/stories/index.story.tsx +149 -0
  264. package/src/custom-select-control-v2/styles.ts +76 -0
  265. package/src/custom-select-control-v2/types.ts +63 -0
  266. package/src/date-time/time/timezone.tsx +15 -3
  267. package/src/dimension-control/index.tsx +2 -0
  268. package/src/dimension-control/test/__snapshots__/index.test.js.snap +2 -2
  269. package/src/dimension-control/types.ts +6 -0
  270. package/src/dropdown-menu-v2-ariakit/README.md +19 -5
  271. package/src/dropdown-menu-v2-ariakit/index.tsx +85 -36
  272. package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +204 -90
  273. package/src/dropdown-menu-v2-ariakit/styles.ts +165 -117
  274. package/src/dropdown-menu-v2-ariakit/test/index.tsx +5 -10
  275. package/src/dropdown-menu-v2-ariakit/types.ts +0 -7
  276. package/src/focal-point-picker/controls.tsx +4 -0
  277. package/src/focal-point-picker/index.tsx +2 -0
  278. package/src/focal-point-picker/styles/focal-point-picker-style.ts +1 -1
  279. package/src/focal-point-picker/types.ts +7 -0
  280. package/src/font-size-picker/font-size-picker-select.tsx +2 -0
  281. package/src/font-size-picker/font-size-picker-toggle-group.tsx +9 -1
  282. package/src/font-size-picker/index.tsx +11 -3
  283. package/src/font-size-picker/types.ts +8 -1
  284. package/src/form-toggle/style.scss +40 -8
  285. package/src/form-token-field/index.tsx +11 -3
  286. package/src/form-token-field/token-input.tsx +1 -3
  287. package/src/form-token-field/types.ts +1 -0
  288. package/src/heading/README.md +6 -1
  289. package/src/heading/hook.ts +6 -3
  290. package/src/heading/types.ts +23 -1
  291. package/src/index.native.js +0 -2
  292. package/src/mobile/global-styles-context/test/utils.native.js +22 -0
  293. package/src/mobile/global-styles-context/utils.native.js +14 -0
  294. package/src/mobile/link-settings/style.native.scss +0 -17
  295. package/src/mobile/utils/alignments.native.js +1 -0
  296. package/src/navigable-container/README.md +1 -1
  297. package/src/palette-edit/index.tsx +22 -8
  298. package/src/palette-edit/style.scss +2 -2
  299. package/src/palette-edit/test/index.tsx +75 -1
  300. package/src/private-apis.ts +4 -2
  301. package/src/query-controls/author-select.tsx +2 -0
  302. package/src/query-controls/category-select.tsx +2 -0
  303. package/src/query-controls/index.tsx +6 -1
  304. package/src/query-controls/types.ts +9 -0
  305. package/src/search-control/README.md +2 -0
  306. package/src/slot-fill/README.md +1 -1
  307. package/src/slot-fill/types.ts +18 -6
  308. package/src/spinner/README.md +2 -0
  309. package/src/tabs/README.md +4 -4
  310. package/src/tabs/index.tsx +34 -3
  311. package/src/tabs/stories/index.story.tsx +56 -48
  312. package/src/tabs/tab.tsx +7 -7
  313. package/src/tabs/tabpanel.tsx +10 -6
  314. package/src/tabs/test/index.tsx +180 -87
  315. package/src/tabs/types.ts +8 -3
  316. package/src/text/README.md +5 -1
  317. package/src/text/types.ts +15 -2
  318. package/src/toggle-control/README.md +2 -2
  319. package/src/toggle-group-control/test/index.tsx +54 -1
  320. package/src/toggle-group-control/toggle-group-control/utils.ts +15 -20
  321. package/src/tools-panel/tools-panel-item/hook.ts +21 -23
  322. package/tsconfig.tsbuildinfo +1 -1
  323. package/build/mobile/inserter-button/index.native.js +0 -98
  324. package/build/mobile/inserter-button/index.native.js.map +0 -1
  325. package/build/mobile/inserter-button/sparkles.js +0 -23
  326. package/build/mobile/inserter-button/sparkles.js.map +0 -1
  327. package/build/mobile/link-settings/image-link-destinations-screen.native.js +0 -119
  328. package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
  329. package/build-module/mobile/inserter-button/index.native.js +0 -89
  330. package/build-module/mobile/inserter-button/index.native.js.map +0 -1
  331. package/build-module/mobile/inserter-button/sparkles.js +0 -15
  332. package/build-module/mobile/inserter-button/sparkles.js.map +0 -1
  333. package/build-module/mobile/link-settings/image-link-destinations-screen.native.js +0 -110
  334. package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
  335. package/build-types/mobile/inserter-button/sparkles.d.ts +0 -3
  336. package/build-types/mobile/inserter-button/sparkles.d.ts.map +0 -1
  337. package/src/box-control/stories/index.story.js +0 -75
  338. package/src/mobile/inserter-button/README.md +0 -62
  339. package/src/mobile/inserter-button/index.native.js +0 -116
  340. package/src/mobile/inserter-button/sparkles.js +0 -15
  341. package/src/mobile/inserter-button/style.native.scss +0 -72
  342. package/src/mobile/link-settings/image-link-destinations-screen.native.js +0 -152
package/src/tabs/types.ts CHANGED
@@ -78,8 +78,10 @@ export type TabListProps = {
78
78
  export type TabProps = {
79
79
  /**
80
80
  * The id of the tab, which is prepended with the `Tabs` instanceId.
81
+ * The value of this prop should match with the value of the `tabId` prop on
82
+ * the corresponding `Tabs.TabPanel` component.
81
83
  */
82
- id: string;
84
+ tabId: string;
83
85
  /**
84
86
  * The children elements, generally the text to display on the tab.
85
87
  */
@@ -103,9 +105,12 @@ export type TabPanelProps = {
103
105
  */
104
106
  children?: React.ReactNode;
105
107
  /**
106
- * A unique identifier for the tabpanel, which is used to generate a unique `id` for the underlying element.
108
+ * A unique identifier for the tabpanel, which is used to generate an
109
+ * instanced id for the underlying element.
110
+ * The value of this prop should match with the value of the `tabId` prop on
111
+ * the corresponding `Tabs.Tab` component.
107
112
  */
108
- id: string;
113
+ tabId: string;
109
114
  /**
110
115
  * Determines whether or not the tabpanel element should be focusable.
111
116
  * If `false`, pressing the tab key will skip over the tabpanel, and instead
@@ -132,6 +132,8 @@ function Example() {
132
132
 
133
133
  Sets `Text` to have `display: block`.
134
134
 
135
+ Note: text truncation only works when `isBlock` is `false`.
136
+
135
137
  ### isDestructive
136
138
 
137
139
  **Type**: `boolean`
@@ -196,7 +198,9 @@ function Example() {
196
198
 
197
199
  **Type**: `boolean`
198
200
 
199
- Enables text truncation. When `truncate` is set,we are able to truncate the long text in a variety of ways.
201
+ Enables text truncation. When `truncate` is set, we are able to truncate the long text in a variety of ways.
202
+
203
+ Note: text truncation won't work if the `isBlock` property is set to `true`
200
204
 
201
205
  ```jsx
202
206
  import { __experimentalText as Text } from '@wordpress/components';
package/src/text/types.ts CHANGED
@@ -46,10 +46,14 @@ export interface Props extends TruncateProps {
46
46
  isDestructive?: boolean;
47
47
  /**
48
48
  * Escape characters in `highlightWords` which are meaningful in regular expressions.
49
+ *
50
+ * @default false
49
51
  */
50
52
  highlightEscape?: boolean;
51
53
  /**
52
54
  * Determines if `highlightWords` should be case sensitive.
55
+ *
56
+ * @default false
53
57
  */
54
58
  highlightCaseSensitive?: boolean;
55
59
  /**
@@ -57,7 +61,10 @@ export interface Props extends TruncateProps {
57
61
  */
58
62
  highlightSanitize?: FindAllArgs[ 'sanitize' ];
59
63
  /**
60
- * Sets `Text` to have `display: block`.
64
+ * Sets `Text` to have `display: block`. Note: text truncation only works
65
+ * when `isBlock` is `false`.
66
+ *
67
+ * @default false
61
68
  */
62
69
  isBlock?: boolean;
63
70
  /**
@@ -73,11 +80,15 @@ export interface Props extends TruncateProps {
73
80
  */
74
81
  size?: CSSProperties[ 'fontSize' ] | TextSize;
75
82
  /**
76
- * Enables text truncation. When `truncate` is set,we are able to truncate the long text in a variety of ways.
83
+ * Enables text truncation. When `truncate` is set, we are able to truncate the long text in a variety of ways. Note: text truncation won't work if the `isBlock` property is set to `true`
84
+ *
85
+ * @default false
77
86
  */
78
87
  truncate?: boolean;
79
88
  /**
80
89
  * Uppercases the text content.
90
+ *
91
+ * @default false
81
92
  */
82
93
  upperCase?: boolean;
83
94
  /**
@@ -86,6 +97,8 @@ export interface Props extends TruncateProps {
86
97
  variant?: TextVariant;
87
98
  /**
88
99
  * Adjusts font-weight of the text.
100
+ *
101
+ * @default 'normal'
89
102
  */
90
103
  weight?: CSSProperties[ 'fontWeight' ] | TextWeight;
91
104
  /**
@@ -22,8 +22,8 @@ const MyToggleControl = () => {
22
22
  : 'No fixed background.'
23
23
  }
24
24
  checked={ hasFixedBackground }
25
- onChange={ () => {
26
- setHasFixedBackground( ( state ) => ! state );
25
+ onChange={ (newValue) => {
26
+ setHasFixedBackground( newValue );
27
27
  } }
28
28
  />
29
29
  );
@@ -25,8 +25,11 @@ import cleanupTooltip from '../../tooltip/test/utils';
25
25
  const ControlledToggleGroupControl = ( {
26
26
  value: valueProp,
27
27
  onChange,
28
+ extraButtonOptions,
28
29
  ...props
29
- }: ToggleGroupControlProps ) => {
30
+ }: ToggleGroupControlProps & {
31
+ extraButtonOptions?: { name: string; value: string }[];
32
+ } ) => {
30
33
  const [ value, setValue ] = useState( valueProp );
31
34
 
32
35
  return (
@@ -40,6 +43,14 @@ const ControlledToggleGroupControl = ( {
40
43
  value={ value }
41
44
  />
42
45
  <Button onClick={ () => setValue( undefined ) }>Reset</Button>
46
+ { extraButtonOptions?.map( ( obj ) => (
47
+ <Button
48
+ key={ obj.value }
49
+ onClick={ () => setValue( obj.value ) }
50
+ >
51
+ { obj.name }
52
+ </Button>
53
+ ) ) }
43
54
  </>
44
55
  );
45
56
  };
@@ -192,6 +203,48 @@ describe.each( [
192
203
  expect( rigasOption ).not.toBeChecked();
193
204
  expect( jackOption ).not.toBeChecked();
194
205
  } );
206
+
207
+ it( 'should update correctly when triggered by external updates', async () => {
208
+ const user = userEvent.setup();
209
+
210
+ render(
211
+ <Component
212
+ value="rigas"
213
+ label="Test Toggle Group Control"
214
+ extraButtonOptions={ [
215
+ { name: 'Rigas', value: 'rigas' },
216
+ { name: 'Jack', value: 'jack' },
217
+ ] }
218
+ >
219
+ { options }
220
+ </Component>
221
+ );
222
+
223
+ expect( screen.getByRole( 'radio', { name: 'R' } ) ).toBeChecked();
224
+ expect(
225
+ screen.getByRole( 'radio', { name: 'J' } )
226
+ ).not.toBeChecked();
227
+
228
+ await user.click( screen.getByRole( 'button', { name: 'Jack' } ) );
229
+ expect( screen.getByRole( 'radio', { name: 'J' } ) ).toBeChecked();
230
+ expect(
231
+ screen.getByRole( 'radio', { name: 'R' } )
232
+ ).not.toBeChecked();
233
+
234
+ await user.click( screen.getByRole( 'button', { name: 'Rigas' } ) );
235
+ expect( screen.getByRole( 'radio', { name: 'R' } ) ).toBeChecked();
236
+ expect(
237
+ screen.getByRole( 'radio', { name: 'J' } )
238
+ ).not.toBeChecked();
239
+
240
+ await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
241
+ expect(
242
+ screen.getByRole( 'radio', { name: 'R' } )
243
+ ).not.toBeChecked();
244
+ expect(
245
+ screen.getByRole( 'radio', { name: 'J' } )
246
+ ).not.toBeChecked();
247
+ } );
195
248
  }
196
249
 
197
250
  describe( 'isDeselectable', () => {
@@ -21,30 +21,25 @@ type ValueProp = ToggleGroupControlProps[ 'value' ];
21
21
  export function useComputeControlledOrUncontrolledValue(
22
22
  valueProp: ValueProp
23
23
  ): { value: ValueProp; defaultValue: ValueProp } {
24
- const hasEverBeenUsedInControlledMode = useRef( false );
25
- const previousValueProp = usePrevious( valueProp );
24
+ const prevValueProp = usePrevious( valueProp );
25
+ const prevIsControlled = useRef( false );
26
26
 
27
+ // Assume the component is being used in controlled mode on the first re-render
28
+ // that has a different `valueProp` from the previous render.
29
+ const isControlled =
30
+ prevIsControlled.current ||
31
+ ( prevValueProp !== undefined &&
32
+ valueProp !== undefined &&
33
+ prevValueProp !== valueProp );
27
34
  useEffect( () => {
28
- if ( ! hasEverBeenUsedInControlledMode.current ) {
29
- // Assume the component is being used in controlled mode if:
30
- // - the `value` prop is not `undefined`
31
- // - the `value` prop was not previously `undefined` and was given a new value
32
- hasEverBeenUsedInControlledMode.current =
33
- valueProp !== undefined &&
34
- previousValueProp !== undefined &&
35
- valueProp !== previousValueProp;
36
- }
37
- }, [ valueProp, previousValueProp ] );
35
+ prevIsControlled.current = isControlled;
36
+ }, [ isControlled ] );
38
37
 
39
- let value, defaultValue;
40
-
41
- if ( hasEverBeenUsedInControlledMode.current ) {
38
+ if ( isControlled ) {
42
39
  // When in controlled mode, use `''` instead of `undefined`
43
- value = valueProp ?? '';
44
- } else {
45
- // When in uncontrolled mode, the `value` should be intended as the initial value
46
- defaultValue = valueProp;
40
+ return { value: valueProp ?? '', defaultValue: undefined };
47
41
  }
48
42
 
49
- return { value, defaultValue };
43
+ // When in uncontrolled mode, the `value` should be intended as the initial value
44
+ return { value: undefined, defaultValue: valueProp };
50
45
  }
@@ -2,7 +2,12 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { usePrevious } from '@wordpress/compose';
5
- import { useCallback, useEffect, useMemo } from '@wordpress/element';
5
+ import {
6
+ useCallback,
7
+ useEffect,
8
+ useLayoutEffect,
9
+ useMemo,
10
+ } from '@wordpress/element';
6
11
 
7
12
  /**
8
13
  * Internal dependencies
@@ -47,11 +52,14 @@ export function useToolsPanelItem(
47
52
  __experimentalLastVisibleItemClass,
48
53
  } = useToolsPanelContext();
49
54
 
50
- const hasValueCallback = useCallback( hasValue, [ panelId, hasValue ] );
51
- const resetAllFilterCallback = useCallback( resetAllFilter, [
52
- panelId,
53
- resetAllFilter,
54
- ] );
55
+ // hasValue is a new function on every render, so do not add it as a
56
+ // dependency to the useCallback hook! If needed, we should use a ref.
57
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
+ const hasValueCallback = useCallback( hasValue, [ panelId ] );
59
+ // resetAllFilter is a new function on every render, so do not add it as a
60
+ // dependency to the useCallback hook! If needed, we should use a ref.
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
62
+ const resetAllFilterCallback = useCallback( resetAllFilter, [ panelId ] );
55
63
  const previousPanelId = usePrevious( currentPanelId );
56
64
 
57
65
  const hasMatchingPanel =
@@ -59,7 +67,11 @@ export function useToolsPanelItem(
59
67
 
60
68
  // Registering the panel item allows the panel to include it in its
61
69
  // automatically generated menu and determine its initial checked status.
62
- useEffect( () => {
70
+ //
71
+ // This is performed in a layout effect to ensure that the panel item
72
+ // is registered before it is rendered preventing a rendering glitch.
73
+ // See: https://github.com/WordPress/gutenberg/issues/56470
74
+ useLayoutEffect( () => {
63
75
  if ( hasMatchingPanel && previousPanelId !== null ) {
64
76
  registerPanelItem( {
65
77
  hasValue: hasValueCallback,
@@ -117,27 +129,13 @@ export function useToolsPanelItem(
117
129
  const newValueSet = isValueSet && ! wasValueSet;
118
130
 
119
131
  // Notify the panel when an item's value has been set.
120
- //
121
- // 1. For default controls, this is so "reset" appears beside its menu item.
122
- // 2. For optional controls, when the panel ID is `null`, it allows the
123
- // panel to ensure the item is toggled on for display in the menu, given the
124
- // value has been set external to the control.
125
132
  useEffect( () => {
126
133
  if ( ! newValueSet ) {
127
134
  return;
128
135
  }
129
136
 
130
- if ( isShownByDefault || currentPanelId === null ) {
131
- flagItemCustomization( label, menuGroup );
132
- }
133
- }, [
134
- currentPanelId,
135
- newValueSet,
136
- isShownByDefault,
137
- menuGroup,
138
- label,
139
- flagItemCustomization,
140
- ] );
137
+ flagItemCustomization( label, menuGroup );
138
+ }, [ newValueSet, menuGroup, label, flagItemCustomization ] );
141
139
 
142
140
  // Determine if the panel item's corresponding menu is being toggled and
143
141
  // trigger appropriate callback if it is.