@wordpress/dataviews 8.0.2-next.836ecdcae.0 → 9.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 (322) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/README.md +127 -13
  3. package/build/components/dataviews-filters/input-widget.js +48 -4
  4. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  5. package/build/components/dataviews-layout/index.js +3 -1
  6. package/build/components/dataviews-layout/index.js.map +1 -1
  7. package/build/dataform-controls/array.js +9 -7
  8. package/build/dataform-controls/array.js.map +1 -1
  9. package/build/dataform-controls/checkbox.js +40 -8
  10. package/build/dataform-controls/checkbox.js.map +1 -1
  11. package/build/dataform-controls/color.js +133 -0
  12. package/build/dataform-controls/color.js.map +1 -0
  13. package/build/dataform-controls/date.js +32 -24
  14. package/build/dataform-controls/date.js.map +1 -1
  15. package/build/dataform-controls/datetime.js +133 -19
  16. package/build/dataform-controls/datetime.js.map +1 -1
  17. package/build/dataform-controls/email.js +15 -3
  18. package/build/dataform-controls/email.js.map +1 -1
  19. package/build/dataform-controls/index.js +33 -2
  20. package/build/dataform-controls/index.js.map +1 -1
  21. package/build/dataform-controls/integer.js +47 -34
  22. package/build/dataform-controls/integer.js.map +1 -1
  23. package/build/dataform-controls/password.js +47 -0
  24. package/build/dataform-controls/password.js.map +1 -0
  25. package/build/dataform-controls/radio.js +42 -9
  26. package/build/dataform-controls/radio.js.map +1 -1
  27. package/build/dataform-controls/relative-date-control.js +6 -10
  28. package/build/dataform-controls/relative-date-control.js.map +1 -1
  29. package/build/dataform-controls/select.js +41 -10
  30. package/build/dataform-controls/select.js.map +1 -1
  31. package/build/dataform-controls/telephone.js +15 -3
  32. package/build/dataform-controls/telephone.js.map +1 -1
  33. package/build/dataform-controls/text.js +16 -4
  34. package/build/dataform-controls/text.js.map +1 -1
  35. package/build/dataform-controls/textarea.js +81 -0
  36. package/build/dataform-controls/textarea.js.map +1 -0
  37. package/build/dataform-controls/toggle-group.js +36 -6
  38. package/build/dataform-controls/toggle-group.js.map +1 -1
  39. package/build/dataform-controls/toggle.js +77 -0
  40. package/build/dataform-controls/toggle.js.map +1 -0
  41. package/build/dataform-controls/url.js +40 -0
  42. package/build/dataform-controls/url.js.map +1 -0
  43. package/build/dataform-controls/utils/validated-input.js +83 -0
  44. package/build/dataform-controls/utils/validated-input.js.map +1 -0
  45. package/build/dataforms-layouts/card/index.js +0 -4
  46. package/build/dataforms-layouts/card/index.js.map +1 -1
  47. package/build/dataforms-layouts/data-form-layout.js +16 -4
  48. package/build/dataforms-layouts/data-form-layout.js.map +1 -1
  49. package/build/dataforms-layouts/index.js +31 -1
  50. package/build/dataforms-layouts/index.js.map +1 -1
  51. package/build/dataforms-layouts/panel/dropdown.js +10 -14
  52. package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
  53. package/build/dataforms-layouts/panel/index.js +24 -11
  54. package/build/dataforms-layouts/panel/index.js.map +1 -1
  55. package/build/dataforms-layouts/panel/modal.js +22 -27
  56. package/build/dataforms-layouts/panel/modal.js.map +1 -1
  57. package/build/dataforms-layouts/panel/summary-button.js +67 -0
  58. package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
  59. package/build/dataforms-layouts/regular/index.js +7 -9
  60. package/build/dataforms-layouts/regular/index.js.map +1 -1
  61. package/build/dataforms-layouts/row/index.js +113 -0
  62. package/build/dataforms-layouts/row/index.js.map +1 -0
  63. package/build/dataviews-layouts/grid/index.js +5 -15
  64. package/build/dataviews-layouts/grid/index.js.map +1 -1
  65. package/build/dataviews-layouts/list/index.js +47 -2
  66. package/build/dataviews-layouts/list/index.js.map +1 -1
  67. package/build/dataviews-layouts/picker-grid/index.js +5 -15
  68. package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
  69. package/build/dataviews-layouts/table/index.js +5 -17
  70. package/build/dataviews-layouts/table/index.js.map +1 -1
  71. package/build/dataviews-layouts/utils/get-data-by-group.js +23 -0
  72. package/build/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
  73. package/build/field-types/boolean.js +1 -1
  74. package/build/field-types/boolean.js.map +1 -1
  75. package/build/field-types/color.js +113 -0
  76. package/build/field-types/color.js.map +1 -0
  77. package/build/field-types/index.js +12 -0
  78. package/build/field-types/index.js.map +1 -1
  79. package/build/field-types/password.js +51 -0
  80. package/build/field-types/password.js.map +1 -0
  81. package/build/field-types/url.js +57 -0
  82. package/build/field-types/url.js.map +1 -0
  83. package/build/normalize-fields.js +17 -0
  84. package/build/normalize-fields.js.map +1 -1
  85. package/build/normalize-form-fields.js +6 -0
  86. package/build/normalize-form-fields.js.map +1 -1
  87. package/build/types.js.map +1 -1
  88. package/build/validation.js +1 -1
  89. package/build/validation.js.map +1 -1
  90. package/build-module/components/dataviews-filters/input-widget.js +48 -4
  91. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  92. package/build-module/components/dataviews-layout/index.js +3 -1
  93. package/build-module/components/dataviews-layout/index.js.map +1 -1
  94. package/build-module/dataform-controls/array.js +9 -7
  95. package/build-module/dataform-controls/array.js.map +1 -1
  96. package/build-module/dataform-controls/checkbox.js +41 -9
  97. package/build-module/dataform-controls/checkbox.js.map +1 -1
  98. package/build-module/dataform-controls/color.js +126 -0
  99. package/build-module/dataform-controls/color.js.map +1 -0
  100. package/build-module/dataform-controls/date.js +32 -24
  101. package/build-module/dataform-controls/date.js.map +1 -1
  102. package/build-module/dataform-controls/datetime.js +135 -21
  103. package/build-module/dataform-controls/datetime.js.map +1 -1
  104. package/build-module/dataform-controls/email.js +14 -2
  105. package/build-module/dataform-controls/email.js.map +1 -1
  106. package/build-module/dataform-controls/index.js +33 -2
  107. package/build-module/dataform-controls/index.js.map +1 -1
  108. package/build-module/dataform-controls/integer.js +46 -34
  109. package/build-module/dataform-controls/integer.js.map +1 -1
  110. package/build-module/dataform-controls/password.js +38 -0
  111. package/build-module/dataform-controls/password.js.map +1 -0
  112. package/build-module/dataform-controls/radio.js +44 -11
  113. package/build-module/dataform-controls/radio.js.map +1 -1
  114. package/build-module/dataform-controls/relative-date-control.js +6 -10
  115. package/build-module/dataform-controls/relative-date-control.js.map +1 -1
  116. package/build-module/dataform-controls/select.js +43 -12
  117. package/build-module/dataform-controls/select.js.map +1 -1
  118. package/build-module/dataform-controls/telephone.js +14 -2
  119. package/build-module/dataform-controls/telephone.js.map +1 -1
  120. package/build-module/dataform-controls/text.js +15 -3
  121. package/build-module/dataform-controls/text.js.map +1 -1
  122. package/build-module/dataform-controls/textarea.js +74 -0
  123. package/build-module/dataform-controls/textarea.js.map +1 -0
  124. package/build-module/dataform-controls/toggle-group.js +38 -8
  125. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  126. package/build-module/dataform-controls/toggle.js +70 -0
  127. package/build-module/dataform-controls/toggle.js.map +1 -0
  128. package/build-module/dataform-controls/url.js +33 -0
  129. package/build-module/dataform-controls/url.js.map +1 -0
  130. package/build-module/dataform-controls/utils/validated-input.js +76 -0
  131. package/build-module/dataform-controls/utils/validated-input.js.map +1 -0
  132. package/build-module/dataforms-layouts/card/index.js +0 -4
  133. package/build-module/dataforms-layouts/card/index.js.map +1 -1
  134. package/build-module/dataforms-layouts/data-form-layout.js +14 -4
  135. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  136. package/build-module/dataforms-layouts/index.js +32 -1
  137. package/build-module/dataforms-layouts/index.js.map +1 -1
  138. package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
  139. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
  140. package/build-module/dataforms-layouts/panel/index.js +24 -11
  141. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  142. package/build-module/dataforms-layouts/panel/modal.js +22 -28
  143. package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
  144. package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
  145. package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
  146. package/build-module/dataforms-layouts/regular/index.js +8 -10
  147. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  148. package/build-module/dataforms-layouts/row/index.js +106 -0
  149. package/build-module/dataforms-layouts/row/index.js.map +1 -0
  150. package/build-module/dataviews-layouts/grid/index.js +6 -16
  151. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  152. package/build-module/dataviews-layouts/list/index.js +48 -3
  153. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  154. package/build-module/dataviews-layouts/picker-grid/index.js +6 -16
  155. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
  156. package/build-module/dataviews-layouts/table/index.js +5 -17
  157. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  158. package/build-module/dataviews-layouts/utils/get-data-by-group.js +17 -0
  159. package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
  160. package/build-module/field-types/boolean.js +1 -1
  161. package/build-module/field-types/boolean.js.map +1 -1
  162. package/build-module/field-types/color.js +107 -0
  163. package/build-module/field-types/color.js.map +1 -0
  164. package/build-module/field-types/index.js +12 -0
  165. package/build-module/field-types/index.js.map +1 -1
  166. package/build-module/field-types/password.js +46 -0
  167. package/build-module/field-types/password.js.map +1 -0
  168. package/build-module/field-types/url.js +51 -0
  169. package/build-module/field-types/url.js.map +1 -0
  170. package/build-module/normalize-fields.js +15 -0
  171. package/build-module/normalize-fields.js.map +1 -1
  172. package/build-module/normalize-form-fields.js +6 -0
  173. package/build-module/normalize-form-fields.js.map +1 -1
  174. package/build-module/types.js.map +1 -1
  175. package/build-module/validation.js +1 -1
  176. package/build-module/validation.js.map +1 -1
  177. package/build-style/style-rtl.css +13 -6
  178. package/build-style/style.css +13 -6
  179. package/build-types/components/dataform/stories/index.story.d.ts +21 -17
  180. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  181. package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
  182. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  183. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  184. package/build-types/dataform-controls/array.d.ts.map +1 -1
  185. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  186. package/build-types/dataform-controls/color.d.ts +6 -0
  187. package/build-types/dataform-controls/color.d.ts.map +1 -0
  188. package/build-types/dataform-controls/date.d.ts.map +1 -1
  189. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  190. package/build-types/dataform-controls/email.d.ts.map +1 -1
  191. package/build-types/dataform-controls/index.d.ts +1 -1
  192. package/build-types/dataform-controls/index.d.ts.map +1 -1
  193. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  194. package/build-types/dataform-controls/password.d.ts +3 -0
  195. package/build-types/dataform-controls/password.d.ts.map +1 -0
  196. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  197. package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
  198. package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
  199. package/build-types/dataform-controls/select.d.ts.map +1 -1
  200. package/build-types/dataform-controls/telephone.d.ts.map +1 -1
  201. package/build-types/dataform-controls/text.d.ts +1 -1
  202. package/build-types/dataform-controls/text.d.ts.map +1 -1
  203. package/build-types/dataform-controls/textarea.d.ts +6 -0
  204. package/build-types/dataform-controls/textarea.d.ts.map +1 -0
  205. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  206. package/build-types/dataform-controls/toggle.d.ts +6 -0
  207. package/build-types/dataform-controls/toggle.d.ts.map +1 -0
  208. package/build-types/dataform-controls/url.d.ts +6 -0
  209. package/build-types/dataform-controls/url.d.ts.map +1 -0
  210. package/build-types/dataform-controls/utils/validated-input.d.ts +20 -0
  211. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -0
  212. package/build-types/dataforms-layouts/card/index.d.ts +0 -3
  213. package/build-types/dataforms-layouts/card/index.d.ts.map +1 -1
  214. package/build-types/dataforms-layouts/data-form-layout.d.ts +4 -1
  215. package/build-types/dataforms-layouts/data-form-layout.d.ts.map +1 -1
  216. package/build-types/dataforms-layouts/index.d.ts +10 -0
  217. package/build-types/dataforms-layouts/index.d.ts.map +1 -1
  218. package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
  219. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
  220. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  221. package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
  222. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
  223. package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
  224. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
  225. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  226. package/build-types/dataforms-layouts/row/index.d.ts +6 -0
  227. package/build-types/dataforms-layouts/row/index.d.ts.map +1 -0
  228. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  229. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  230. package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
  231. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  232. package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts +6 -0
  233. package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts.map +1 -0
  234. package/build-types/field-types/color.d.ts +20 -0
  235. package/build-types/field-types/color.d.ts.map +1 -0
  236. package/build-types/field-types/index.d.ts.map +1 -1
  237. package/build-types/field-types/password.d.ts +17 -0
  238. package/build-types/field-types/password.d.ts.map +1 -0
  239. package/build-types/field-types/stories/index.story.d.ts +13 -1
  240. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  241. package/build-types/field-types/url.d.ts +20 -0
  242. package/build-types/field-types/url.d.ts.map +1 -0
  243. package/build-types/normalize-fields.d.ts +3 -0
  244. package/build-types/normalize-fields.d.ts.map +1 -1
  245. package/build-types/normalize-form-fields.d.ts.map +1 -1
  246. package/build-types/types.d.ts +78 -7
  247. package/build-types/types.d.ts.map +1 -1
  248. package/build-types/validation.d.ts.map +1 -1
  249. package/build-wp/index.js +2577 -1708
  250. package/package.json +17 -15
  251. package/src/components/dataform/stories/index.story.tsx +794 -27
  252. package/src/components/dataviews/stories/fixtures.tsx +99 -41
  253. package/src/components/dataviews/stories/index.story.tsx +2 -2
  254. package/src/components/dataviews-filters/input-widget.tsx +44 -5
  255. package/src/components/dataviews-layout/index.tsx +1 -1
  256. package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
  257. package/src/dataform-controls/array.tsx +4 -6
  258. package/src/dataform-controls/checkbox.tsx +54 -7
  259. package/src/dataform-controls/color.tsx +148 -0
  260. package/src/dataform-controls/date.tsx +47 -21
  261. package/src/dataform-controls/datetime.tsx +171 -23
  262. package/src/dataform-controls/email.tsx +22 -2
  263. package/src/dataform-controls/index.tsx +36 -2
  264. package/src/dataform-controls/integer.tsx +82 -49
  265. package/src/dataform-controls/password.tsx +50 -0
  266. package/src/dataform-controls/radio.tsx +53 -11
  267. package/src/dataform-controls/relative-date-control.tsx +11 -10
  268. package/src/dataform-controls/select.tsx +53 -10
  269. package/src/dataform-controls/telephone.tsx +22 -2
  270. package/src/dataform-controls/text.tsx +19 -2
  271. package/src/dataform-controls/textarea.tsx +85 -0
  272. package/src/dataform-controls/toggle-group.tsx +50 -10
  273. package/src/dataform-controls/toggle.tsx +79 -0
  274. package/src/dataform-controls/url.tsx +38 -0
  275. package/src/dataform-controls/utils/validated-input.tsx +109 -0
  276. package/src/dataforms-layouts/card/index.tsx +0 -4
  277. package/src/dataforms-layouts/data-form-layout.tsx +15 -3
  278. package/src/dataforms-layouts/index.tsx +35 -0
  279. package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
  280. package/src/dataforms-layouts/panel/index.tsx +39 -16
  281. package/src/dataforms-layouts/panel/modal.tsx +24 -30
  282. package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
  283. package/src/dataforms-layouts/regular/index.tsx +9 -7
  284. package/src/dataforms-layouts/regular/style.scss +0 -6
  285. package/src/dataforms-layouts/row/index.tsx +115 -0
  286. package/src/dataforms-layouts/row/style.scss +3 -0
  287. package/src/dataviews-layouts/grid/index.tsx +9 -14
  288. package/src/dataviews-layouts/grid/style.scss +1 -0
  289. package/src/dataviews-layouts/list/index.tsx +74 -2
  290. package/src/dataviews-layouts/list/style.scss +8 -0
  291. package/src/dataviews-layouts/picker-grid/index.tsx +9 -13
  292. package/src/dataviews-layouts/table/index.tsx +10 -14
  293. package/src/dataviews-layouts/utils/get-data-by-group.ts +18 -0
  294. package/src/field-types/boolean.tsx +1 -1
  295. package/src/field-types/color.tsx +115 -0
  296. package/src/field-types/index.tsx +15 -0
  297. package/src/field-types/password.tsx +46 -0
  298. package/src/field-types/stories/index.story.tsx +234 -3
  299. package/src/field-types/url.tsx +71 -0
  300. package/src/normalize-fields.ts +18 -0
  301. package/src/normalize-form-fields.ts +6 -0
  302. package/src/style.scss +1 -0
  303. package/src/test/dataform.tsx +2 -2
  304. package/src/test/filter-and-sort-data-view.js +148 -138
  305. package/src/test/normalize-fields.ts +114 -0
  306. package/src/types.ts +89 -6
  307. package/src/validation.ts +5 -0
  308. package/tsconfig.tsbuildinfo +1 -1
  309. package/build/dataform-controls/boolean.js +0 -64
  310. package/build/dataform-controls/boolean.js.map +0 -1
  311. package/build/dataform-controls/utils/validated-text.js +0 -68
  312. package/build/dataform-controls/utils/validated-text.js.map +0 -1
  313. package/build-module/dataform-controls/boolean.js +0 -58
  314. package/build-module/dataform-controls/boolean.js.map +0 -1
  315. package/build-module/dataform-controls/utils/validated-text.js +0 -62
  316. package/build-module/dataform-controls/utils/validated-text.js.map +0 -1
  317. package/build-types/dataform-controls/boolean.d.ts +0 -6
  318. package/build-types/dataform-controls/boolean.d.ts.map +0 -1
  319. package/build-types/dataform-controls/utils/validated-text.d.ts +0 -12
  320. package/build-types/dataform-controls/utils/validated-text.d.ts.map +0 -1
  321. package/src/dataform-controls/boolean.tsx +0 -61
  322. package/src/dataform-controls/utils/validated-text.tsx +0 -79
package/CHANGELOG.md CHANGED
@@ -2,12 +2,34 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- ## 8.0.1-next.0 (2025-09-05)
5
+ ## 9.0.0 (2025-09-17)
6
+
7
+ ### Breaking changes
8
+
9
+ - Remove `boolean` form control. Fields using `Edit: 'boolean'` must now use `Edit: 'checkbox'` or `Edit: 'toggle'` instead. Boolean field types now use checkboxes by default. [#71505](https://github.com/WordPress/gutenberg/pull/71505)
10
+ - DataViews: Custom `empty` elements are no longer wrapped in `<p>` tags to improve accessibility. [#71561](https://github.com/WordPress/gutenberg/pull/71561)
6
11
 
7
12
  ### Features
8
13
 
14
+ - Field API: introduce `setValue` to fix DataViews filters and DataForm panel layout (modal) when working with nested data. [#71604](https://github.com/WordPress/gutenberg/pull/71604)
9
15
  - Introduce a new `DataViewsPicker` component. [#70971](https://github.com/WordPress/gutenberg/pull/70971)
10
16
  - Dataform: Add new `telephone` field type and field control. [#71498](https://github.com/WordPress/gutenberg/pull/71498)
17
+ - DataForm: introduce a new `row` layout, check the README for details. [#71124](https://github.com/WordPress/gutenberg/pull/71124)
18
+ - Dataform: Add new `url` field type and field control. [#71518](https://github.com/WordPress/gutenberg/pull/71518)
19
+ - Dataform: Add new `password` field type and field control. [#71545](https://github.com/WordPress/gutenberg/pull/71545)
20
+ - DataForm: Add a textarea control for use with the `text` field type ([#71495](https://github.com/WordPress/gutenberg/pull/71495))
21
+ - DataViews: support groupBy in the list layout. [#71548](https://github.com/WordPress/gutenberg/pull/71548)
22
+ - DataForm: support validation in select control [#71665](https://github.com/WordPress/gutenberg/pull/71665)
23
+ - DataForm: support validation in toggleGroup control. ([#71666](https://github.com/WordPress/gutenberg/pull/71666))
24
+ - DataForm: Add object configuration support for Edit property with some options. ([#71582](https://github.com/WordPress/gutenberg/pull/71582))
25
+ - DataForm: Add summary field support for composed fields. ([#71614](https://github.com/WordPress/gutenberg/pull/71614))
26
+ - DataForm: update radio control to support `required` and `custom` validation. [#71664](https://github.com/WordPress/gutenberg/pull/71664)
27
+
28
+ ### Bug Fixes
29
+
30
+ - DataViews grid layout: make sure media previews have rounded corners. [#71543](https://github.com/WordPress/gutenberg/pull/71543)
31
+ - DataForm regular layout: Remove label style overrides as they cause inconsistent results. ([#71574](https://github.com/WordPress/gutenberg/pull/71574))
32
+ - DataForm regular layout: Use BaseControl visual label for readonly fields when in top labelPosition. ([#71597](https://github.com/WordPress/gutenberg/pull/71597))
11
33
 
12
34
  ## 8.0.0 (2025-09-03)
13
35
 
package/README.md CHANGED
@@ -426,7 +426,7 @@ Optional. Pass an object with a list of `perPageSizes` to control the available
426
426
 
427
427
  #### `empty`: React node
428
428
 
429
- A message or element to be displayed instead of the dataview's default empty message.
429
+ An element to display when the `data` prop is empty. Defaults to `<p>No results</p>`.
430
430
 
431
431
  ### Composition modes
432
432
 
@@ -989,24 +989,119 @@ Example:
989
989
  }
990
990
  ```
991
991
 
992
- ### `getValue`
992
+ ### `getValue` and `setValue`
993
993
 
994
- React component that returns the value of a field. This value is used to sort or filter the fields.
994
+ These functions control how field values are read from and written to your data structure.
995
995
 
996
- - Type: React component.
996
+ Both functions are optional and automatically generated from the field's `id` when not provided. The `id` is treated as a dot-notation path (e.g., `"user.profile.name"` accesses `item.user.profile.name`).
997
+
998
+ #### `getValue`
999
+
1000
+ Function that extracts the field value from an item. This value is used to sort, filter, and display the field.
1001
+
1002
+ - Type: `function`.
997
1003
  - Optional.
998
- - Defaults to `item[ id ]`.
999
- - Props:
1000
- - `item` value to be processed.
1001
- - Returns a value that represents the field.
1004
+ - Args:
1005
+ - `item`: the data item to be processed.
1006
+ - Returns the field's value.
1002
1007
 
1003
- Example:
1008
+ #### `setValue`
1009
+
1010
+ Function that creates a partial item object with updated field values. This is used by DataForm for editing operations and determines the structure of data passed to the `onChange` callback.
1011
+
1012
+ - Type: `function`.
1013
+ - Optional.
1014
+ - Args:
1015
+ - `item`: the current item being edited.
1016
+ - `value`: the new value to be set for the field.
1017
+ - Returns a partial item object with the changes to be applied.
1018
+
1019
+ #### Simple field access
1020
+
1021
+ For basic field access, you only need to specify the field `id`. Both `getValue` and `setValue` are automatically generated:
1004
1022
 
1005
1023
  ```js
1024
+ // Data structure
1025
+ const item = {
1026
+ title: 'Hello World',
1027
+ author: 'John Doe'
1028
+ };
1029
+
1030
+ // Field definition
1006
1031
  {
1007
- getValue: ( { item } ) => {
1008
- /* The field's value. */
1009
- };
1032
+ id: 'title',
1033
+ label: 'Title'
1034
+ // getValue: automatically becomes ( { item } ) => item.title
1035
+ // setValue: automatically becomes ( { value } ) => ( { title: value } )
1036
+ }
1037
+ ```
1038
+
1039
+ #### Nested data access
1040
+
1041
+ Use dot notation in the field `id` to access nested properties:
1042
+
1043
+ ```js
1044
+ // Data structure
1045
+ const item = {
1046
+ user: {
1047
+ profile: {
1048
+ name: 'John Doe',
1049
+ email: 'john@example.com'
1050
+ }
1051
+ }
1052
+ };
1053
+
1054
+ // Field definition - using dot notation (automatic)
1055
+ {
1056
+ id: 'user.profile.name',
1057
+ label: 'User Name'
1058
+ // getValue: automatically becomes ( { item } ) => item.user.profile.name
1059
+ // setValue: automatically becomes ( { value } ) => ( { user: { profile: { name: value } } } )
1060
+ }
1061
+
1062
+ // Alternative - using simple ID with custom functions
1063
+ {
1064
+ id: 'userName',
1065
+ label: 'User Name',
1066
+ getValue: ( { item } ) => item.user.profile.name,
1067
+ setValue: ( { value } ) => ( {
1068
+ user: {
1069
+ profile: { name: value }
1070
+ }
1071
+ } )
1072
+ }
1073
+ ```
1074
+
1075
+ #### Custom data transformation
1076
+
1077
+ Provide custom `getValue` and `setValue` functions when you need to transform data between the storage format and display format:
1078
+
1079
+ ```js
1080
+ // Data structure
1081
+ const item = {
1082
+ user: {
1083
+ preferences: {
1084
+ notifications: true
1085
+ }
1086
+ }
1087
+ };
1088
+
1089
+ // Field definition - transform boolean to string options
1090
+ {
1091
+ id: 'notifications',
1092
+ label: 'Notifications',
1093
+ Edit: 'radio',
1094
+ elements: [
1095
+ { label: 'Enabled', value: 'enabled' },
1096
+ { label: 'Disabled', value: 'disabled' }
1097
+ ],
1098
+ getValue: ( { item } ) =>
1099
+ item.user.preferences.notifications === true ? 'enabled' : 'disabled',
1100
+ setValue: ( { value } ) => ( {
1101
+ user: {
1102
+ preferences: { notifications: value === 'enabled' }
1103
+ }
1104
+ } )
1010
1105
  }
1011
1106
  ```
1012
1107
 
@@ -1379,7 +1474,7 @@ Example:
1379
1474
 
1380
1475
  ### `layout`
1381
1476
 
1382
- Represents the type of layout used to render the field. It'll be one of Regular, Panel, or Card. This prop is the same as the `form.layout` prop.
1477
+ Represents the type of layout used to render the field. It'll be one of Regular, Panel, Card, or Row. This prop is the same as the `form.layout` prop.
1383
1478
 
1384
1479
  #### Regular
1385
1480
 
@@ -1433,6 +1528,25 @@ For example:
1433
1528
  }
1434
1529
  ```
1435
1530
 
1531
+ #### Row
1532
+
1533
+ - `type`: `row`. Required.
1534
+ - `alignment`: one of `start`, `center`, or `end`. Optional. `center` by default.
1535
+
1536
+ The Row layout displays fields horizontally in a single row. It's particularly useful for grouping related fields that should be displayed side by side. This layout can be used both as a top-level form layout and for individual field groups.
1537
+
1538
+ For example:
1539
+
1540
+ ```js
1541
+ {
1542
+ id: 'field_id',
1543
+ layout: {
1544
+ type: 'row',
1545
+ alignment: 'start'
1546
+ },
1547
+ }
1548
+ ```
1549
+
1436
1550
  ### `label`
1437
1551
 
1438
1552
  The label used when displaying a combined field, this requires the use of `children` as well.
@@ -30,12 +30,54 @@ function InputWidget({
30
30
  fields
31
31
  }) {
32
32
  const currentFilter = view.filters?.find(f => f.field === filter.field);
33
- const field = fields.find(f => f.id === filter.field);
34
33
  const currentValue = (0, _utils.getCurrentValue)(filter, currentFilter);
34
+
35
+ /*
36
+ * We are reusing the field.Edit component for filters. By doing so,
37
+ * we get for free a filter control specific to the field type
38
+ * and other aspects of the field API (Edit control configuration, etc.).
39
+ *
40
+ * This approach comes with an issue: the field.Edit controls work with getValue
41
+ * and setValue methods, which take an item (Item) as parameter. But, at this point,
42
+ * we don't have an item and we don't know how to create one, either.
43
+ *
44
+ * So, what we do is to prepare the data and the relevant field configuration
45
+ * as if Item was a plain object whose keys are the field ids:
46
+ *
47
+ * {
48
+ * [ fieldOne.id ]: value,
49
+ * [ fieldTwo.id ]: value,
50
+ * }
51
+ *
52
+ */
53
+ const field = (0, _element.useMemo)(() => {
54
+ const currentField = fields.find(f => f.id === filter.field);
55
+ if (currentField) {
56
+ return {
57
+ ...currentField,
58
+ // Deactivate validation for filters.
59
+ isValid: {
60
+ required: false,
61
+ custom: () => null
62
+ },
63
+ // Configure getValue/setValue as if Item was a plain object.
64
+ getValue: ({
65
+ item
66
+ }) => item[currentField.id],
67
+ setValue: ({
68
+ value
69
+ }) => ({
70
+ [currentField.id]: value
71
+ })
72
+ };
73
+ }
74
+ return currentField;
75
+ }, [fields, filter.field]);
35
76
  const data = (0, _element.useMemo)(() => {
36
77
  var _view$filters;
37
- return ((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).reduce((acc, f) => {
38
- acc[f.field] = f.value;
78
+ return ((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).reduce((acc, activeFilter) => {
79
+ // We can now assume the field is stored as a Item prop.
80
+ acc[activeFilter.field] = activeFilter.value;
39
81
  return acc;
40
82
  }, {});
41
83
  }, [view.filters]);
@@ -44,7 +86,9 @@ function InputWidget({
44
86
  if (!field || !currentFilter) {
45
87
  return;
46
88
  }
47
- const nextValue = updatedData[field.id];
89
+ const nextValue = field.getValue({
90
+ item: updatedData
91
+ });
48
92
  if ((0, _es.default)(nextValue, currentValue)) {
49
93
  return;
50
94
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_es","_interopRequireDefault","require","_compose","_element","_components","_utils","_jsxRuntime","InputWidget","filter","view","onChangeView","fields","currentFilter","filters","find","f","field","id","currentValue","getCurrentValue","data","useMemo","_view$filters","reduce","acc","value","handleChange","useEvent","updatedData","_view$filters2","nextValue","fastDeepEqual","map","_filter","operator","operators","undefined","Edit","jsx","Flex","className","gap","direction","children","hideLabelFromVision","onChange"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/input-widget.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useEvent } from '@wordpress/compose';\nimport { useMemo } from '@wordpress/element';\nimport { Flex } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { View, NormalizedFilter, NormalizedField } from '../../types';\nimport { getCurrentValue } from './utils';\n\ninterface UserInputWidgetProps {\n\tview: View;\n\tfilter: NormalizedFilter;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< any >[];\n}\n\nexport default function InputWidget( {\n\tfilter,\n\tview,\n\tonChangeView,\n\tfields,\n}: UserInputWidgetProps ) {\n\tconst currentFilter = view.filters?.find(\n\t\t( f ) => f.field === filter.field\n\t);\n\n\tconst field = fields.find( ( f ) => f.id === filter.field );\n\tconst currentValue = getCurrentValue( filter, currentFilter );\n\tconst data = useMemo( () => {\n\t\treturn ( view.filters ?? [] ).reduce(\n\t\t\t( acc, f ) => {\n\t\t\t\tacc[ f.field ] = f.value;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, any >\n\t\t);\n\t}, [ view.filters ] );\n\n\tconst handleChange = useEvent( ( updatedData: Record< string, any > ) => {\n\t\tif ( ! field || ! currentFilter ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextValue = updatedData[ field.id ];\n\t\tif ( fastDeepEqual( nextValue, currentValue ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChangeView( {\n\t\t\t...view,\n\t\t\tfilters: ( view.filters ?? [] ).map( ( _filter ) =>\n\t\t\t\t_filter.field === filter.field\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\tcurrentFilter.operator || filter.operators[ 0 ],\n\t\t\t\t\t\t\t// Consider empty strings as undefined:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records\n\t\t\t\t\t\t\t// - empty string as value means \"search empty string\": returns only the records that have an empty string as value\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// In practice, this means the filter will not be able to find an empty string as the value.\n\t\t\t\t\t\t\tvalue: nextValue === '' ? undefined : nextValue,\n\t\t\t\t\t }\n\t\t\t\t\t: _filter\n\t\t\t),\n\t\t} );\n\t} );\n\n\tif ( ! field || ! field.Edit || ! currentFilter ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Flex\n\t\t\tclassName=\"dataviews-filters__user-input-widget\"\n\t\t\tgap={ 2.5 }\n\t\t\tdirection=\"column\"\n\t\t>\n\t\t\t<field.Edit\n\t\t\t\thideLabelFromVision\n\t\t\t\tdata={ data }\n\t\t\t\tfield={ field }\n\t\t\t\toperator={ currentFilter.operator }\n\t\t\t\tonChange={ handleChange }\n\t\t\t/>\n\t\t</Flex>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAMA,IAAAI,MAAA,GAAAJ,OAAA;AAA0C,IAAAK,WAAA,GAAAL,OAAA;AAhB1C;AACA;AACA;;AAGA;AACA;AACA;;AAKA;AACA;AACA;;AAWe,SAASM,WAAWA,CAAE;EACpCC,MAAM;EACNC,IAAI;EACJC,YAAY;EACZC;AACqB,CAAC,EAAG;EACzB,MAAMC,aAAa,GAAGH,IAAI,CAACI,OAAO,EAAEC,IAAI,CACrCC,CAAC,IAAMA,CAAC,CAACC,KAAK,KAAKR,MAAM,CAACQ,KAC7B,CAAC;EAED,MAAMA,KAAK,GAAGL,MAAM,CAACG,IAAI,CAAIC,CAAC,IAAMA,CAAC,CAACE,EAAE,KAAKT,MAAM,CAACQ,KAAM,CAAC;EAC3D,MAAME,YAAY,GAAG,IAAAC,sBAAe,EAAEX,MAAM,EAAEI,aAAc,CAAC;EAC7D,MAAMQ,IAAI,GAAG,IAAAC,gBAAO,EAAE,MAAM;IAAA,IAAAC,aAAA;IAC3B,OAAO,EAAAA,aAAA,GAAEb,IAAI,CAACI,OAAO,cAAAS,aAAA,cAAAA,aAAA,GAAI,EAAE,EAAGC,MAAM,CACnC,CAAEC,GAAG,EAAET,CAAC,KAAM;MACbS,GAAG,CAAET,CAAC,CAACC,KAAK,CAAE,GAAGD,CAAC,CAACU,KAAK;MACxB,OAAOD,GAAG;IACX,CAAC,EACD,CAAC,CACF,CAAC;EACF,CAAC,EAAE,CAAEf,IAAI,CAACI,OAAO,CAAG,CAAC;EAErB,MAAMa,YAAY,GAAG,IAAAC,iBAAQ,EAAIC,WAAkC,IAAM;IAAA,IAAAC,cAAA;IACxE,IAAK,CAAEb,KAAK,IAAI,CAAEJ,aAAa,EAAG;MACjC;IACD;IACA,MAAMkB,SAAS,GAAGF,WAAW,CAAEZ,KAAK,CAACC,EAAE,CAAE;IACzC,IAAK,IAAAc,WAAa,EAAED,SAAS,EAAEZ,YAAa,CAAC,EAAG;MAC/C;IACD;IAEAR,YAAY,CAAE;MACb,GAAGD,IAAI;MACPI,OAAO,EAAE,EAAAgB,cAAA,GAAEpB,IAAI,CAACI,OAAO,cAAAgB,cAAA,cAAAA,cAAA,GAAI,EAAE,EAAGG,GAAG,CAAIC,OAAO,IAC7CA,OAAO,CAACjB,KAAK,KAAKR,MAAM,CAACQ,KAAK,GAC3B;QACA,GAAGiB,OAAO;QACVC,QAAQ,EACPtB,aAAa,CAACsB,QAAQ,IAAI1B,MAAM,CAAC2B,SAAS,CAAE,CAAC,CAAE;QAChD;QACA;QACA;QACA;QACA;QACA;QACAV,KAAK,EAAEK,SAAS,KAAK,EAAE,GAAGM,SAAS,GAAGN;MACtC,CAAC,GACDG,OACJ;IACD,CAAE,CAAC;EACJ,CAAE,CAAC;EAEH,IAAK,CAAEjB,KAAK,IAAI,CAAEA,KAAK,CAACqB,IAAI,IAAI,CAAEzB,aAAa,EAAG;IACjD,OAAO,IAAI;EACZ;EAEA,oBACC,IAAAN,WAAA,CAAAgC,GAAA,EAAClC,WAAA,CAAAmC,IAAI;IACJC,SAAS,EAAC,sCAAsC;IAChDC,GAAG,EAAG,GAAK;IACXC,SAAS,EAAC,QAAQ;IAAAC,QAAA,eAElB,IAAArC,WAAA,CAAAgC,GAAA,EAACtB,KAAK,CAACqB,IAAI;MACVO,mBAAmB;MACnBxB,IAAI,EAAGA,IAAM;MACbJ,KAAK,EAAGA,KAAO;MACfkB,QAAQ,EAAGtB,aAAa,CAACsB,QAAU;MACnCW,QAAQ,EAAGnB;IAAc,CACzB;EAAC,CACG,CAAC;AAET","ignoreList":[]}
1
+ {"version":3,"names":["_es","_interopRequireDefault","require","_compose","_element","_components","_utils","_jsxRuntime","InputWidget","filter","view","onChangeView","fields","currentFilter","filters","find","f","field","currentValue","getCurrentValue","useMemo","currentField","id","isValid","required","custom","getValue","item","setValue","value","data","_view$filters","reduce","acc","activeFilter","handleChange","useEvent","updatedData","_view$filters2","nextValue","fastDeepEqual","map","_filter","operator","operators","undefined","Edit","jsx","Flex","className","gap","direction","children","hideLabelFromVision","onChange"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/input-widget.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useEvent } from '@wordpress/compose';\nimport { useMemo } from '@wordpress/element';\nimport { Flex } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { View, NormalizedFilter, NormalizedField } from '../../types';\nimport { getCurrentValue } from './utils';\n\ninterface UserInputWidgetProps {\n\tview: View;\n\tfilter: NormalizedFilter;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< any >[];\n}\n\nexport default function InputWidget( {\n\tfilter,\n\tview,\n\tonChangeView,\n\tfields,\n}: UserInputWidgetProps ) {\n\tconst currentFilter = view.filters?.find(\n\t\t( f ) => f.field === filter.field\n\t);\n\tconst currentValue = getCurrentValue( filter, currentFilter );\n\n\t/*\n\t * We are reusing the field.Edit component for filters. By doing so,\n\t * we get for free a filter control specific to the field type\n\t * and other aspects of the field API (Edit control configuration, etc.).\n\t *\n\t * This approach comes with an issue: the field.Edit controls work with getValue\n\t * and setValue methods, which take an item (Item) as parameter. But, at this point,\n\t * we don't have an item and we don't know how to create one, either.\n\t *\n\t * So, what we do is to prepare the data and the relevant field configuration\n\t * as if Item was a plain object whose keys are the field ids:\n\t *\n\t * {\n\t * [ fieldOne.id ]: value,\n\t * [ fieldTwo.id ]: value,\n\t * }\n\t *\n\t */\n\tconst field = useMemo( () => {\n\t\tconst currentField = fields.find( ( f ) => f.id === filter.field );\n\t\tif ( currentField ) {\n\t\t\treturn {\n\t\t\t\t...currentField,\n\t\t\t\t// Deactivate validation for filters.\n\t\t\t\tisValid: {\n\t\t\t\t\trequired: false,\n\t\t\t\t\tcustom: () => null,\n\t\t\t\t},\n\t\t\t\t// Configure getValue/setValue as if Item was a plain object.\n\t\t\t\tgetValue: ( { item }: { item: any } ) =>\n\t\t\t\t\titem[ currentField.id ],\n\t\t\t\tsetValue: ( { value }: { value: any } ) => ( {\n\t\t\t\t\t[ currentField.id ]: value,\n\t\t\t\t} ),\n\t\t\t};\n\t\t}\n\t\treturn currentField;\n\t}, [ fields, filter.field ] );\n\n\tconst data = useMemo( () => {\n\t\treturn ( view.filters ?? [] ).reduce(\n\t\t\t( acc, activeFilter ) => {\n\t\t\t\t// We can now assume the field is stored as a Item prop.\n\t\t\t\tacc[ activeFilter.field ] = activeFilter.value;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, any >\n\t\t);\n\t}, [ view.filters ] );\n\n\tconst handleChange = useEvent( ( updatedData: Record< string, any > ) => {\n\t\tif ( ! field || ! currentFilter ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextValue = field.getValue( { item: updatedData } );\n\t\tif ( fastDeepEqual( nextValue, currentValue ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChangeView( {\n\t\t\t...view,\n\t\t\tfilters: ( view.filters ?? [] ).map( ( _filter ) =>\n\t\t\t\t_filter.field === filter.field\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\tcurrentFilter.operator || filter.operators[ 0 ],\n\t\t\t\t\t\t\t// Consider empty strings as undefined:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records\n\t\t\t\t\t\t\t// - empty string as value means \"search empty string\": returns only the records that have an empty string as value\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// In practice, this means the filter will not be able to find an empty string as the value.\n\t\t\t\t\t\t\tvalue: nextValue === '' ? undefined : nextValue,\n\t\t\t\t\t }\n\t\t\t\t\t: _filter\n\t\t\t),\n\t\t} );\n\t} );\n\n\tif ( ! field || ! field.Edit || ! currentFilter ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Flex\n\t\t\tclassName=\"dataviews-filters__user-input-widget\"\n\t\t\tgap={ 2.5 }\n\t\t\tdirection=\"column\"\n\t\t>\n\t\t\t<field.Edit\n\t\t\t\thideLabelFromVision\n\t\t\t\tdata={ data }\n\t\t\t\tfield={ field }\n\t\t\t\toperator={ currentFilter.operator }\n\t\t\t\tonChange={ handleChange }\n\t\t\t/>\n\t\t</Flex>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAMA,IAAAI,MAAA,GAAAJ,OAAA;AAA0C,IAAAK,WAAA,GAAAL,OAAA;AAhB1C;AACA;AACA;;AAGA;AACA;AACA;;AAKA;AACA;AACA;;AAWe,SAASM,WAAWA,CAAE;EACpCC,MAAM;EACNC,IAAI;EACJC,YAAY;EACZC;AACqB,CAAC,EAAG;EACzB,MAAMC,aAAa,GAAGH,IAAI,CAACI,OAAO,EAAEC,IAAI,CACrCC,CAAC,IAAMA,CAAC,CAACC,KAAK,KAAKR,MAAM,CAACQ,KAC7B,CAAC;EACD,MAAMC,YAAY,GAAG,IAAAC,sBAAe,EAAEV,MAAM,EAAEI,aAAc,CAAC;;EAE7D;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACC,MAAMI,KAAK,GAAG,IAAAG,gBAAO,EAAE,MAAM;IAC5B,MAAMC,YAAY,GAAGT,MAAM,CAACG,IAAI,CAAIC,CAAC,IAAMA,CAAC,CAACM,EAAE,KAAKb,MAAM,CAACQ,KAAM,CAAC;IAClE,IAAKI,YAAY,EAAG;MACnB,OAAO;QACN,GAAGA,YAAY;QACf;QACAE,OAAO,EAAE;UACRC,QAAQ,EAAE,KAAK;UACfC,MAAM,EAAEA,CAAA,KAAM;QACf,CAAC;QACD;QACAC,QAAQ,EAAEA,CAAE;UAAEC;QAAoB,CAAC,KAClCA,IAAI,CAAEN,YAAY,CAACC,EAAE,CAAE;QACxBM,QAAQ,EAAEA,CAAE;UAAEC;QAAsB,CAAC,MAAQ;UAC5C,CAAER,YAAY,CAACC,EAAE,GAAIO;QACtB,CAAC;MACF,CAAC;IACF;IACA,OAAOR,YAAY;EACpB,CAAC,EAAE,CAAET,MAAM,EAAEH,MAAM,CAACQ,KAAK,CAAG,CAAC;EAE7B,MAAMa,IAAI,GAAG,IAAAV,gBAAO,EAAE,MAAM;IAAA,IAAAW,aAAA;IAC3B,OAAO,EAAAA,aAAA,GAAErB,IAAI,CAACI,OAAO,cAAAiB,aAAA,cAAAA,aAAA,GAAI,EAAE,EAAGC,MAAM,CACnC,CAAEC,GAAG,EAAEC,YAAY,KAAM;MACxB;MACAD,GAAG,CAAEC,YAAY,CAACjB,KAAK,CAAE,GAAGiB,YAAY,CAACL,KAAK;MAC9C,OAAOI,GAAG;IACX,CAAC,EACD,CAAC,CACF,CAAC;EACF,CAAC,EAAE,CAAEvB,IAAI,CAACI,OAAO,CAAG,CAAC;EAErB,MAAMqB,YAAY,GAAG,IAAAC,iBAAQ,EAAIC,WAAkC,IAAM;IAAA,IAAAC,cAAA;IACxE,IAAK,CAAErB,KAAK,IAAI,CAAEJ,aAAa,EAAG;MACjC;IACD;IACA,MAAM0B,SAAS,GAAGtB,KAAK,CAACS,QAAQ,CAAE;MAAEC,IAAI,EAAEU;IAAY,CAAE,CAAC;IACzD,IAAK,IAAAG,WAAa,EAAED,SAAS,EAAErB,YAAa,CAAC,EAAG;MAC/C;IACD;IAEAP,YAAY,CAAE;MACb,GAAGD,IAAI;MACPI,OAAO,EAAE,EAAAwB,cAAA,GAAE5B,IAAI,CAACI,OAAO,cAAAwB,cAAA,cAAAA,cAAA,GAAI,EAAE,EAAGG,GAAG,CAAIC,OAAO,IAC7CA,OAAO,CAACzB,KAAK,KAAKR,MAAM,CAACQ,KAAK,GAC3B;QACA,GAAGyB,OAAO;QACVC,QAAQ,EACP9B,aAAa,CAAC8B,QAAQ,IAAIlC,MAAM,CAACmC,SAAS,CAAE,CAAC,CAAE;QAChD;QACA;QACA;QACA;QACA;QACA;QACAf,KAAK,EAAEU,SAAS,KAAK,EAAE,GAAGM,SAAS,GAAGN;MACtC,CAAC,GACDG,OACJ;IACD,CAAE,CAAC;EACJ,CAAE,CAAC;EAEH,IAAK,CAAEzB,KAAK,IAAI,CAAEA,KAAK,CAAC6B,IAAI,IAAI,CAAEjC,aAAa,EAAG;IACjD,OAAO,IAAI;EACZ;EAEA,oBACC,IAAAN,WAAA,CAAAwC,GAAA,EAAC1C,WAAA,CAAA2C,IAAI;IACJC,SAAS,EAAC,sCAAsC;IAChDC,GAAG,EAAG,GAAK;IACXC,SAAS,EAAC,QAAQ;IAAAC,QAAA,eAElB,IAAA7C,WAAA,CAAAwC,GAAA,EAAC9B,KAAK,CAAC6B,IAAI;MACVO,mBAAmB;MACnBvB,IAAI,EAAGA,IAAM;MACbb,KAAK,EAAGA,KAAO;MACf0B,QAAQ,EAAG9B,aAAa,CAAC8B,QAAU;MACnCW,QAAQ,EAAGnB;IAAc,CACzB;EAAC,CACG,CAAC;AAET","ignoreList":[]}
@@ -41,7 +41,9 @@ function DataViewsLayout({
41
41
  isItemClickable,
42
42
  renderItemLink,
43
43
  defaultLayouts,
44
- empty = (0, _i18n.__)('No results')
44
+ empty = /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
45
+ children: (0, _i18n.__)('No results')
46
+ })
45
47
  } = (0, _element.useContext)(_dataviewsContext.default);
46
48
  const ViewComponent = _dataviewsLayouts.VIEW_LAYOUTS.find(v => v.type === view.type && defaultLayouts[v.type])?.component;
47
49
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ViewComponent, {
@@ -1 +1 @@
1
- {"version":3,"names":["_element","require","_i18n","_dataviewsContext","_interopRequireDefault","_dataviewsLayouts","_jsxRuntime","DataViewsLayout","className","actions","data","fields","getItemId","getItemLevel","isLoading","view","onChangeView","selection","onChangeSelection","setOpenedFilter","onClickItem","isItemClickable","renderItemLink","defaultLayouts","empty","__","useContext","DataViewsContext","ViewComponent","VIEW_LAYOUTS","find","v","type","component","jsx"],"sources":["@wordpress/dataviews/src/components/dataviews-layout/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentType } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport { VIEW_LAYOUTS } from '../../dataviews-layouts';\nimport type { ViewBaseProps } from '../../types';\n\ntype DataViewsLayoutProps = {\n\tclassName?: string;\n};\n\nexport default function DataViewsLayout( { className }: DataViewsLayoutProps ) {\n\tconst {\n\t\tactions = [],\n\t\tdata,\n\t\tfields,\n\t\tgetItemId,\n\t\tgetItemLevel,\n\t\tisLoading,\n\t\tview,\n\t\tonChangeView,\n\t\tselection,\n\t\tonChangeSelection,\n\t\tsetOpenedFilter,\n\t\tonClickItem,\n\t\tisItemClickable,\n\t\trenderItemLink,\n\t\tdefaultLayouts,\n\t\tempty = __( 'No results' ),\n\t} = useContext( DataViewsContext );\n\n\tconst ViewComponent = VIEW_LAYOUTS.find(\n\t\t( v ) => v.type === view.type && defaultLayouts[ v.type ]\n\t)?.component as ComponentType< ViewBaseProps< any > >;\n\n\treturn (\n\t\t<ViewComponent\n\t\t\tclassName={ className }\n\t\t\tactions={ actions }\n\t\t\tdata={ data }\n\t\t\tfields={ fields }\n\t\t\tgetItemId={ getItemId }\n\t\t\tgetItemLevel={ getItemLevel }\n\t\t\tisLoading={ isLoading }\n\t\t\tonChangeView={ onChangeView }\n\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\tselection={ selection }\n\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\tonClickItem={ onClickItem }\n\t\t\trenderItemLink={ renderItemLink }\n\t\t\tisItemClickable={ isItemClickable }\n\t\t\tview={ view }\n\t\t\tempty={ empty }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAQA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAKA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AAAuD,IAAAK,WAAA,GAAAL,OAAA;AAfvD;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AASe,SAASM,eAAeA,CAAE;EAAEC;AAAgC,CAAC,EAAG;EAC9E,MAAM;IACLC,OAAO,GAAG,EAAE;IACZC,IAAI;IACJC,MAAM;IACNC,SAAS;IACTC,YAAY;IACZC,SAAS;IACTC,IAAI;IACJC,YAAY;IACZC,SAAS;IACTC,iBAAiB;IACjBC,eAAe;IACfC,WAAW;IACXC,eAAe;IACfC,cAAc;IACdC,cAAc;IACdC,KAAK,GAAG,IAAAC,QAAE,EAAE,YAAa;EAC1B,CAAC,GAAG,IAAAC,mBAAU,EAAEC,yBAAiB,CAAC;EAElC,MAAMC,aAAa,GAAGC,8BAAY,CAACC,IAAI,CACpCC,CAAC,IAAMA,CAAC,CAACC,IAAI,KAAKjB,IAAI,CAACiB,IAAI,IAAIT,cAAc,CAAEQ,CAAC,CAACC,IAAI,CACxD,CAAC,EAAEC,SAAkD;EAErD,oBACC,IAAA3B,WAAA,CAAA4B,GAAA,EAACN,aAAa;IACbpB,SAAS,EAAGA,SAAW;IACvBC,OAAO,EAAGA,OAAS;IACnBC,IAAI,EAAGA,IAAM;IACbC,MAAM,EAAGA,MAAQ;IACjBC,SAAS,EAAGA,SAAW;IACvBC,YAAY,EAAGA,YAAc;IAC7BC,SAAS,EAAGA,SAAW;IACvBE,YAAY,EAAGA,YAAc;IAC7BE,iBAAiB,EAAGA,iBAAmB;IACvCD,SAAS,EAAGA,SAAW;IACvBE,eAAe,EAAGA,eAAiB;IACnCC,WAAW,EAAGA,WAAa;IAC3BE,cAAc,EAAGA,cAAgB;IACjCD,eAAe,EAAGA,eAAiB;IACnCN,IAAI,EAAGA,IAAM;IACbS,KAAK,EAAGA;EAAO,CACf,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_element","require","_i18n","_dataviewsContext","_interopRequireDefault","_dataviewsLayouts","_jsxRuntime","DataViewsLayout","className","actions","data","fields","getItemId","getItemLevel","isLoading","view","onChangeView","selection","onChangeSelection","setOpenedFilter","onClickItem","isItemClickable","renderItemLink","defaultLayouts","empty","jsx","children","__","useContext","DataViewsContext","ViewComponent","VIEW_LAYOUTS","find","v","type","component"],"sources":["@wordpress/dataviews/src/components/dataviews-layout/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentType } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport { VIEW_LAYOUTS } from '../../dataviews-layouts';\nimport type { ViewBaseProps } from '../../types';\n\ntype DataViewsLayoutProps = {\n\tclassName?: string;\n};\n\nexport default function DataViewsLayout( { className }: DataViewsLayoutProps ) {\n\tconst {\n\t\tactions = [],\n\t\tdata,\n\t\tfields,\n\t\tgetItemId,\n\t\tgetItemLevel,\n\t\tisLoading,\n\t\tview,\n\t\tonChangeView,\n\t\tselection,\n\t\tonChangeSelection,\n\t\tsetOpenedFilter,\n\t\tonClickItem,\n\t\tisItemClickable,\n\t\trenderItemLink,\n\t\tdefaultLayouts,\n\t\tempty = <p>{ __( 'No results' ) }</p>,\n\t} = useContext( DataViewsContext );\n\n\tconst ViewComponent = VIEW_LAYOUTS.find(\n\t\t( v ) => v.type === view.type && defaultLayouts[ v.type ]\n\t)?.component as ComponentType< ViewBaseProps< any > >;\n\n\treturn (\n\t\t<ViewComponent\n\t\t\tclassName={ className }\n\t\t\tactions={ actions }\n\t\t\tdata={ data }\n\t\t\tfields={ fields }\n\t\t\tgetItemId={ getItemId }\n\t\t\tgetItemLevel={ getItemLevel }\n\t\t\tisLoading={ isLoading }\n\t\t\tonChangeView={ onChangeView }\n\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\tselection={ selection }\n\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\tonClickItem={ onClickItem }\n\t\t\trenderItemLink={ renderItemLink }\n\t\t\tisItemClickable={ isItemClickable }\n\t\t\tview={ view }\n\t\t\tempty={ empty }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAQA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAKA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AAAuD,IAAAK,WAAA,GAAAL,OAAA;AAfvD;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AASe,SAASM,eAAeA,CAAE;EAAEC;AAAgC,CAAC,EAAG;EAC9E,MAAM;IACLC,OAAO,GAAG,EAAE;IACZC,IAAI;IACJC,MAAM;IACNC,SAAS;IACTC,YAAY;IACZC,SAAS;IACTC,IAAI;IACJC,YAAY;IACZC,SAAS;IACTC,iBAAiB;IACjBC,eAAe;IACfC,WAAW;IACXC,eAAe;IACfC,cAAc;IACdC,cAAc;IACdC,KAAK,gBAAG,IAAAlB,WAAA,CAAAmB,GAAA;MAAAC,QAAA,EAAK,IAAAC,QAAE,EAAE,YAAa;IAAC,CAAK;EACrC,CAAC,GAAG,IAAAC,mBAAU,EAAEC,yBAAiB,CAAC;EAElC,MAAMC,aAAa,GAAGC,8BAAY,CAACC,IAAI,CACpCC,CAAC,IAAMA,CAAC,CAACC,IAAI,KAAKnB,IAAI,CAACmB,IAAI,IAAIX,cAAc,CAAEU,CAAC,CAACC,IAAI,CACxD,CAAC,EAAEC,SAAkD;EAErD,oBACC,IAAA7B,WAAA,CAAAmB,GAAA,EAACK,aAAa;IACbtB,SAAS,EAAGA,SAAW;IACvBC,OAAO,EAAGA,OAAS;IACnBC,IAAI,EAAGA,IAAM;IACbC,MAAM,EAAGA,MAAQ;IACjBC,SAAS,EAAGA,SAAW;IACvBC,YAAY,EAAGA,YAAc;IAC7BC,SAAS,EAAGA,SAAW;IACvBE,YAAY,EAAGA,YAAc;IAC7BE,iBAAiB,EAAGA,iBAAmB;IACvCD,SAAS,EAAGA,SAAW;IACvBE,eAAe,EAAGA,eAAiB;IACnCC,WAAW,EAAGA,WAAa;IAC3BE,cAAc,EAAGA,cAAgB;IACjCD,eAAe,EAAGA,eAAiB;IACnCN,IAAI,EAAGA,IAAM;IACbS,KAAK,EAAGA;EAAO,CACf,CAAC;AAEJ","ignoreList":[]}
@@ -23,12 +23,13 @@ function ArrayControl({
23
23
  }) {
24
24
  var _elements$map;
25
25
  const {
26
- id,
27
26
  label,
28
27
  placeholder,
29
- elements
28
+ elements,
29
+ getValue,
30
+ setValue
30
31
  } = field;
31
- const value = field.getValue({
32
+ const value = getValue({
32
33
  item: data
33
34
  });
34
35
  const findElementByValue = (0, _element.useCallback)(suggestionValue => {
@@ -52,10 +53,11 @@ function ArrayControl({
52
53
  const tokenByLabel = findElementByLabel(token);
53
54
  return tokenByLabel?.value || token;
54
55
  });
55
- onChange({
56
- [id]: stringTokens
57
- });
58
- }, [id, onChange, findElementByLabel]);
56
+ onChange(setValue({
57
+ item: data,
58
+ value: stringTokens
59
+ }));
60
+ }, [onChange, setValue, data, findElementByLabel]);
59
61
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
60
62
  label: hideLabelFromVision ? undefined : label,
61
63
  value: arrayValue,
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_jsxRuntime","ArrayControl","data","field","onChange","hideLabelFromVision","_elements$map","id","label","placeholder","elements","value","getValue","item","findElementByValue","useCallback","suggestionValue","find","suggestion","findElementByLabel","suggestionLabel","arrayValue","useMemo","Array","isArray","map","token","tokenLabel","onChangeControl","tokens","stringTokens","tokenByLabel","jsx","FormTokenField","undefined","suggestions","__experimentalExpandOnFocus","length","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/array.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function ArrayControl< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, placeholder, elements } = field;\n\tconst value = field.getValue( { item: data } );\n\n\tconst findElementByValue = useCallback(\n\t\t( suggestionValue: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.value === suggestionValue\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\tconst findElementByLabel = useCallback(\n\t\t( suggestionLabel: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.label === suggestionLabel\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\t// Ensure value is an array\n\tconst arrayValue = useMemo(\n\t\t() =>\n\t\t\tArray.isArray( value )\n\t\t\t\t? value.map( ( token ) => {\n\t\t\t\t\t\tconst tokenLabel = findElementByValue( token )?.label;\n\t\t\t\t\t\treturn tokenLabel || token;\n\t\t\t\t } )\n\t\t\t\t: [],\n\t\t[ value, findElementByValue ]\n\t);\n\n\tconst onChangeControl = useCallback(\n\t\t( tokens: ( string | { value: string } )[] ) => {\n\t\t\t// Convert TokenItem objects to strings\n\t\t\tconst stringTokens = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token !== 'string' ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\n\t\t\t\tconst tokenByLabel = findElementByLabel( token );\n\n\t\t\t\treturn tokenByLabel?.value || token;\n\t\t\t} );\n\n\t\t\tonChange( {\n\t\t\t\t[ id ]: stringTokens,\n\t\t\t} );\n\t\t},\n\t\t[ id, onChange, findElementByLabel ]\n\t);\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ hideLabelFromVision ? undefined : label }\n\t\t\tvalue={ arrayValue }\n\t\t\tonChange={ onChangeControl }\n\t\t\tplaceholder={ placeholder }\n\t\t\tsuggestions={\n\t\t\t\telements?.map( ( suggestion ) => suggestion.label ) ?? []\n\t\t\t}\n\t\t\t__experimentalExpandOnFocus={ elements && elements.length > 0 }\n\t\t\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA0D,IAAAE,WAAA,GAAAF,OAAA;AAJ1D;AACA;AACA;;AAIA;AACA;AACA;;AAGe,SAASG,YAAYA,CAAU;EAC7CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EAAA,IAAAC,aAAA;EACjC,MAAM;IAAEC,EAAE;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGP,KAAK;EAClD,MAAMQ,KAAK,GAAGR,KAAK,CAACS,QAAQ,CAAE;IAAEC,IAAI,EAAEX;EAAK,CAAE,CAAC;EAE9C,MAAMY,kBAAkB,GAAG,IAAAC,oBAAW,EACnCC,eAAuB,IAAM;IAC9B,OAAON,QAAQ,EAAEO,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACP,KAAK,KAAKK,eACxC,CAAC;EACF,CAAC,EACD,CAAEN,QAAQ,CACX,CAAC;EAED,MAAMS,kBAAkB,GAAG,IAAAJ,oBAAW,EACnCK,eAAuB,IAAM;IAC9B,OAAOV,QAAQ,EAAEO,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACV,KAAK,KAAKY,eACxC,CAAC;EACF,CAAC,EACD,CAAEV,QAAQ,CACX,CAAC;;EAED;EACA,MAAMW,UAAU,GAAG,IAAAC,gBAAO,EACzB,MACCC,KAAK,CAACC,OAAO,CAAEb,KAAM,CAAC,GACnBA,KAAK,CAACc,GAAG,CAAIC,KAAK,IAAM;IACxB,MAAMC,UAAU,GAAGb,kBAAkB,CAAEY,KAAM,CAAC,EAAElB,KAAK;IACrD,OAAOmB,UAAU,IAAID,KAAK;EAC1B,CAAE,CAAC,GACH,EAAE,EACN,CAAEf,KAAK,EAAEG,kBAAkB,CAC5B,CAAC;EAED,MAAMc,eAAe,GAAG,IAAAb,oBAAW,EAChCc,MAAwC,IAAM;IAC/C;IACA,MAAMC,YAAY,GAAGD,MAAM,CAACJ,GAAG,CAAIC,KAAK,IAAM;MAC7C,IAAK,OAAOA,KAAK,KAAK,QAAQ,EAAG;QAChC,OAAOA,KAAK,CAACf,KAAK;MACnB;MAEA,MAAMoB,YAAY,GAAGZ,kBAAkB,CAAEO,KAAM,CAAC;MAEhD,OAAOK,YAAY,EAAEpB,KAAK,IAAIe,KAAK;IACpC,CAAE,CAAC;IAEHtB,QAAQ,CAAE;MACT,CAAEG,EAAE,GAAIuB;IACT,CAAE,CAAC;EACJ,CAAC,EACD,CAAEvB,EAAE,EAAEH,QAAQ,EAAEe,kBAAkB,CACnC,CAAC;EAED,oBACC,IAAAnB,WAAA,CAAAgC,GAAA,EAACnC,WAAA,CAAAoC,cAAc;IACdzB,KAAK,EAAGH,mBAAmB,GAAG6B,SAAS,GAAG1B,KAAO;IACjDG,KAAK,EAAGU,UAAY;IACpBjB,QAAQ,EAAGwB,eAAiB;IAC5BnB,WAAW,EAAGA,WAAa;IAC3B0B,WAAW,GAAA7B,aAAA,GACVI,QAAQ,EAAEe,GAAG,CAAIP,UAAU,IAAMA,UAAU,CAACV,KAAM,CAAC,cAAAF,aAAA,cAAAA,aAAA,GAAI,EACvD;IACD8B,2BAA2B,EAAG1B,QAAQ,IAAIA,QAAQ,CAAC2B,MAAM,GAAG,CAAG;IAC/DC,qBAAqB;IACrBC,uBAAuB;EAAA,CACvB,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","_element","_jsxRuntime","ArrayControl","data","field","onChange","hideLabelFromVision","_elements$map","label","placeholder","elements","getValue","setValue","value","item","findElementByValue","useCallback","suggestionValue","find","suggestion","findElementByLabel","suggestionLabel","arrayValue","useMemo","Array","isArray","map","token","tokenLabel","onChangeControl","tokens","stringTokens","tokenByLabel","jsx","FormTokenField","undefined","suggestions","__experimentalExpandOnFocus","length","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/array.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function ArrayControl< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { label, placeholder, elements, getValue, setValue } = field;\n\tconst value = getValue( { item: data } );\n\n\tconst findElementByValue = useCallback(\n\t\t( suggestionValue: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.value === suggestionValue\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\tconst findElementByLabel = useCallback(\n\t\t( suggestionLabel: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.label === suggestionLabel\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\t// Ensure value is an array\n\tconst arrayValue = useMemo(\n\t\t() =>\n\t\t\tArray.isArray( value )\n\t\t\t\t? value.map( ( token ) => {\n\t\t\t\t\t\tconst tokenLabel = findElementByValue( token )?.label;\n\t\t\t\t\t\treturn tokenLabel || token;\n\t\t\t\t } )\n\t\t\t\t: [],\n\t\t[ value, findElementByValue ]\n\t);\n\n\tconst onChangeControl = useCallback(\n\t\t( tokens: ( string | { value: string } )[] ) => {\n\t\t\t// Convert TokenItem objects to strings\n\t\t\tconst stringTokens = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token !== 'string' ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\n\t\t\t\tconst tokenByLabel = findElementByLabel( token );\n\n\t\t\t\treturn tokenByLabel?.value || token;\n\t\t\t} );\n\n\t\t\tonChange( setValue( { item: data, value: stringTokens } ) );\n\t\t},\n\t\t[ onChange, setValue, data, findElementByLabel ]\n\t);\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ hideLabelFromVision ? undefined : label }\n\t\t\tvalue={ arrayValue }\n\t\t\tonChange={ onChangeControl }\n\t\t\tplaceholder={ placeholder }\n\t\t\tsuggestions={\n\t\t\t\telements?.map( ( suggestion ) => suggestion.label ) ?? []\n\t\t\t}\n\t\t\t__experimentalExpandOnFocus={ elements && elements.length > 0 }\n\t\t\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA0D,IAAAE,WAAA,GAAAF,OAAA;AAJ1D;AACA;AACA;;AAIA;AACA;AACA;;AAGe,SAASG,YAAYA,CAAU;EAC7CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EAAA,IAAAC,aAAA;EACjC,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAGR,KAAK;EAClE,MAAMS,KAAK,GAAGF,QAAQ,CAAE;IAAEG,IAAI,EAAEX;EAAK,CAAE,CAAC;EAExC,MAAMY,kBAAkB,GAAG,IAAAC,oBAAW,EACnCC,eAAuB,IAAM;IAC9B,OAAOP,QAAQ,EAAEQ,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACN,KAAK,KAAKI,eACxC,CAAC;EACF,CAAC,EACD,CAAEP,QAAQ,CACX,CAAC;EAED,MAAMU,kBAAkB,GAAG,IAAAJ,oBAAW,EACnCK,eAAuB,IAAM;IAC9B,OAAOX,QAAQ,EAAEQ,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACX,KAAK,KAAKa,eACxC,CAAC;EACF,CAAC,EACD,CAAEX,QAAQ,CACX,CAAC;;EAED;EACA,MAAMY,UAAU,GAAG,IAAAC,gBAAO,EACzB,MACCC,KAAK,CAACC,OAAO,CAAEZ,KAAM,CAAC,GACnBA,KAAK,CAACa,GAAG,CAAIC,KAAK,IAAM;IACxB,MAAMC,UAAU,GAAGb,kBAAkB,CAAEY,KAAM,CAAC,EAAEnB,KAAK;IACrD,OAAOoB,UAAU,IAAID,KAAK;EAC1B,CAAE,CAAC,GACH,EAAE,EACN,CAAEd,KAAK,EAAEE,kBAAkB,CAC5B,CAAC;EAED,MAAMc,eAAe,GAAG,IAAAb,oBAAW,EAChCc,MAAwC,IAAM;IAC/C;IACA,MAAMC,YAAY,GAAGD,MAAM,CAACJ,GAAG,CAAIC,KAAK,IAAM;MAC7C,IAAK,OAAOA,KAAK,KAAK,QAAQ,EAAG;QAChC,OAAOA,KAAK,CAACd,KAAK;MACnB;MAEA,MAAMmB,YAAY,GAAGZ,kBAAkB,CAAEO,KAAM,CAAC;MAEhD,OAAOK,YAAY,EAAEnB,KAAK,IAAIc,KAAK;IACpC,CAAE,CAAC;IAEHtB,QAAQ,CAAEO,QAAQ,CAAE;MAAEE,IAAI,EAAEX,IAAI;MAAEU,KAAK,EAAEkB;IAAa,CAAE,CAAE,CAAC;EAC5D,CAAC,EACD,CAAE1B,QAAQ,EAAEO,QAAQ,EAAET,IAAI,EAAEiB,kBAAkB,CAC/C,CAAC;EAED,oBACC,IAAAnB,WAAA,CAAAgC,GAAA,EAACnC,WAAA,CAAAoC,cAAc;IACd1B,KAAK,EAAGF,mBAAmB,GAAG6B,SAAS,GAAG3B,KAAO;IACjDK,KAAK,EAAGS,UAAY;IACpBjB,QAAQ,EAAGwB,eAAiB;IAC5BpB,WAAW,EAAGA,WAAa;IAC3B2B,WAAW,GAAA7B,aAAA,GACVG,QAAQ,EAAEgB,GAAG,CAAIP,UAAU,IAAMA,UAAU,CAACX,KAAM,CAAC,cAAAD,aAAA,cAAAA,aAAA,GAAI,EACvD;IACD8B,2BAA2B,EAAG3B,QAAQ,IAAIA,QAAQ,CAAC4B,MAAM,GAAG,CAAG;IAC/DC,qBAAqB;IACrBC,uBAAuB;EAAA,CACvB,CAAC;AAEJ","ignoreList":[]}
@@ -1,11 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = Checkbox;
8
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
7
9
  var _components = require("@wordpress/components");
10
+ var _element = require("@wordpress/element");
11
+ var _lockUnlock = require("../lock-unlock");
8
12
  var _jsxRuntime = require("react/jsx-runtime");
13
+ /**
14
+ * External dependencies
15
+ */
16
+
9
17
  /**
10
18
  * WordPress dependencies
11
19
  */
@@ -14,6 +22,9 @@ var _jsxRuntime = require("react/jsx-runtime");
14
22
  * Internal dependencies
15
23
  */
16
24
 
25
+ const {
26
+ ValidatedCheckboxControl
27
+ } = (0, _lockUnlock.unlock)(_components.privateApis);
17
28
  function Checkbox({
18
29
  field,
19
30
  onChange,
@@ -21,24 +32,45 @@ function Checkbox({
21
32
  hideLabelFromVision
22
33
  }) {
23
34
  const {
24
- id,
25
35
  getValue,
36
+ setValue,
26
37
  label,
27
38
  description
28
39
  } = field;
29
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.CheckboxControl, {
30
- __nextHasNoMarginBottom: true,
40
+ const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
41
+ const onChangeControl = (0, _element.useCallback)(() => {
42
+ onChange(setValue({
43
+ item: data,
44
+ value: !getValue({
45
+ item: data
46
+ })
47
+ }));
48
+ }, [data, getValue, onChange, setValue]);
49
+ const onValidateControl = (0, _element.useCallback)(newValue => {
50
+ const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
51
+ item: data,
52
+ value: newValue
53
+ })), field);
54
+ if (message) {
55
+ setCustomValidity({
56
+ type: 'invalid',
57
+ message
58
+ });
59
+ return;
60
+ }
61
+ setCustomValidity(undefined);
62
+ }, [data, field, setValue]);
63
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedCheckboxControl, {
64
+ required: !!field.isValid?.required,
65
+ onValidate: onValidateControl,
66
+ customValidity: customValidity,
31
67
  hidden: hideLabelFromVision,
32
68
  label: label,
33
69
  help: description,
34
70
  checked: getValue({
35
71
  item: data
36
72
  }),
37
- onChange: () => onChange({
38
- [id]: !getValue({
39
- item: data
40
- })
41
- })
73
+ onChange: onChangeControl
42
74
  });
43
75
  }
44
76
  //# sourceMappingURL=checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_jsxRuntime","Checkbox","field","onChange","data","hideLabelFromVision","id","getValue","label","description","jsx","CheckboxControl","__nextHasNoMarginBottom","hidden","help","checked","item"],"sources":["@wordpress/dataviews/src/dataform-controls/checkbox.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { CheckboxControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function Checkbox< Item >( {\n\tfield,\n\tonChange,\n\tdata,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, getValue, label, description } = field;\n\n\treturn (\n\t\t<CheckboxControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\thidden={ hideLabelFromVision }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tchecked={ getValue( { item: data } ) }\n\t\t\tonChange={ () =>\n\t\t\t\tonChange( { [ id ]: ! getValue( { item: data } ) } )\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AAAwD,IAAAC,WAAA,GAAAD,OAAA;AAHxD;AACA;AACA;;AAGA;AACA;AACA;;AAGe,SAASE,QAAQA,CAAU;EACzCC,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,KAAK;EAElD,oBACC,IAAAF,WAAA,CAAAU,GAAA,EAACZ,WAAA,CAAAa,eAAe;IACfC,uBAAuB;IACvBC,MAAM,EAAGR,mBAAqB;IAC9BG,KAAK,EAAGA,KAAO;IACfM,IAAI,EAAGL,WAAa;IACpBM,OAAO,EAAGR,QAAQ,CAAE;MAAES,IAAI,EAAEZ;IAAK,CAAE,CAAG;IACtCD,QAAQ,EAAGA,CAAA,KACVA,QAAQ,CAAE;MAAE,CAAEG,EAAE,GAAI,CAAEC,QAAQ,CAAE;QAAES,IAAI,EAAEZ;MAAK,CAAE;IAAE,CAAE;EACnD,CACD,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_lockUnlock","_jsxRuntime","ValidatedCheckboxControl","unlock","privateApis","Checkbox","field","onChange","data","hideLabelFromVision","getValue","setValue","label","description","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","item","value","onValidateControl","newValue","message","isValid","custom","deepMerge","type","jsx","required","onValidate","hidden","help","checked"],"sources":["@wordpress/dataviews/src/dataform-controls/checkbox.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedCheckboxControl } = unlock( privateApis );\n\nexport default function Checkbox< Item >( {\n\tfield,\n\tonChange,\n\tdata,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { getValue, setValue, label, description } = field;\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedCheckboxControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback( () => {\n\t\tonChange(\n\t\t\tsetValue( { item: data, value: ! getValue( { item: data } ) } )\n\t\t);\n\t}, [ data, getValue, onChange, setValue ] );\n\n\tconst onValidateControl = useCallback(\n\t\t( newValue: any ) => {\n\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\tdeepMerge(\n\t\t\t\t\tdata,\n\t\t\t\t\tsetValue( {\n\t\t\t\t\t\titem: data,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t} ) as Partial< Item >\n\t\t\t\t),\n\t\t\t\tfield\n\t\t\t);\n\n\t\t\tif ( message ) {\n\t\t\t\tsetCustomValidity( {\n\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\tmessage,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCustomValidity( undefined );\n\t\t},\n\t\t[ data, field, setValue ]\n\t);\n\n\treturn (\n\t\t<ValidatedCheckboxControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ onValidateControl }\n\t\t\tcustomValidity={ customValidity }\n\t\t\thidden={ hideLabelFromVision }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tchecked={ getValue( { item: data } ) }\n\t\t\tonChange={ onChangeControl }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAMA,IAAAG,WAAA,GAAAH,OAAA;AAAwC,IAAAI,WAAA,GAAAJ,OAAA;AAfxC;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEK;AAAyB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAE3C,SAASC,QAAQA,CAAU;EACzCC,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,KAAK;EACxD,MAAM,CAAEQ,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAAE,MAAM;IAC1CZ,QAAQ,CACPI,QAAQ,CAAE;MAAES,IAAI,EAAEZ,IAAI;MAAEa,KAAK,EAAE,CAAEX,QAAQ,CAAE;QAAEU,IAAI,EAAEZ;MAAK,CAAE;IAAE,CAAE,CAC/D,CAAC;EACF,CAAC,EAAE,CAAEA,IAAI,EAAEE,QAAQ,EAAEH,QAAQ,EAAEI,QAAQ,CAAG,CAAC;EAE3C,MAAMW,iBAAiB,GAAG,IAAAH,oBAAW,EAClCI,QAAa,IAAM;IACpB,MAAMC,OAAO,GAAGlB,KAAK,CAACmB,OAAO,EAAEC,MAAM,GACpC,IAAAC,kBAAS,EACRnB,IAAI,EACJG,QAAQ,CAAE;MACTS,IAAI,EAAEZ,IAAI;MACVa,KAAK,EAAEE;IACR,CAAE,CACH,CAAC,EACDjB,KACD,CAAC;IAED,IAAKkB,OAAO,EAAG;MACdT,iBAAiB,CAAE;QAClBa,IAAI,EAAE,SAAS;QACfJ;MACD,CAAE,CAAC;MACH;IACD;IAEAT,iBAAiB,CAAEE,SAAU,CAAC;EAC/B,CAAC,EACD,CAAET,IAAI,EAAEF,KAAK,EAAEK,QAAQ,CACxB,CAAC;EAED,oBACC,IAAAV,WAAA,CAAA4B,GAAA,EAAC3B,wBAAwB;IACxB4B,QAAQ,EAAG,CAAC,CAAExB,KAAK,CAACmB,OAAO,EAAEK,QAAU;IACvCC,UAAU,EAAGT,iBAAmB;IAChCR,cAAc,EAAGA,cAAgB;IACjCkB,MAAM,EAAGvB,mBAAqB;IAC9BG,KAAK,EAAGA,KAAO;IACfqB,IAAI,EAAGpB,WAAa;IACpBqB,OAAO,EAAGxB,QAAQ,CAAE;MAAEU,IAAI,EAAEZ;IAAK,CAAE,CAAG;IACtCD,QAAQ,EAAGW;EAAiB,CAC5B,CAAC;AAEJ","ignoreList":[]}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = Color;
8
+ var _colord = require("colord");
9
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
10
+ var _components = require("@wordpress/components");
11
+ var _element = require("@wordpress/element");
12
+ var _lockUnlock = require("../lock-unlock");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ /**
15
+ * External dependencies
16
+ */
17
+
18
+ /**
19
+ * WordPress dependencies
20
+ */
21
+
22
+ /**
23
+ * Internal dependencies
24
+ */
25
+
26
+ const {
27
+ ValidatedInputControl,
28
+ Picker
29
+ } = (0, _lockUnlock.unlock)(_components.privateApis);
30
+ const ColorPicker = ({
31
+ color,
32
+ onColorChange
33
+ }) => {
34
+ const validColor = color && (0, _colord.colord)(color).isValid() ? color : '#ffffff';
35
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Dropdown, {
36
+ renderToggle: ({
37
+ onToggle,
38
+ isOpen
39
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalInputControlPrefixWrapper, {
40
+ variant: "icon",
41
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
42
+ type: "button",
43
+ onClick: onToggle,
44
+ style: {
45
+ width: '24px',
46
+ height: '24px',
47
+ borderRadius: '50%',
48
+ backgroundColor: validColor,
49
+ border: '1px solid #ddd',
50
+ cursor: 'pointer',
51
+ outline: isOpen ? '2px solid #007cba' : 'none',
52
+ outlineOffset: '2px',
53
+ display: 'flex',
54
+ alignItems: 'center',
55
+ justifyContent: 'center',
56
+ padding: 0,
57
+ margin: 0
58
+ },
59
+ "aria-label": "Open color picker"
60
+ })
61
+ }),
62
+ renderContent: () => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
63
+ style: {
64
+ padding: '16px'
65
+ },
66
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Picker, {
67
+ color: (0, _colord.colord)(validColor),
68
+ onChange: onColorChange,
69
+ enableAlpha: true
70
+ })
71
+ })
72
+ });
73
+ };
74
+ function Color({
75
+ data,
76
+ field,
77
+ onChange,
78
+ hideLabelFromVision
79
+ }) {
80
+ const {
81
+ label,
82
+ placeholder,
83
+ description,
84
+ setValue
85
+ } = field;
86
+ const value = field.getValue({
87
+ item: data
88
+ }) || '';
89
+ const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
90
+ const handleColorChange = (0, _element.useCallback)(colorObject => {
91
+ onChange(setValue({
92
+ item: data,
93
+ value: colorObject.toHex()
94
+ }));
95
+ }, [data, onChange, setValue]);
96
+ const handleInputChange = (0, _element.useCallback)(newValue => {
97
+ onChange(setValue({
98
+ item: data,
99
+ value: newValue || ''
100
+ }));
101
+ }, [data, onChange, setValue]);
102
+ const onValidateControl = (0, _element.useCallback)(newValue => {
103
+ const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
104
+ item: data,
105
+ value: newValue
106
+ })), field);
107
+ if (message) {
108
+ setCustomValidity({
109
+ type: 'invalid',
110
+ message
111
+ });
112
+ return;
113
+ }
114
+ setCustomValidity(undefined);
115
+ }, [data, field, setValue]);
116
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedInputControl, {
117
+ required: !!field.isValid?.required,
118
+ onValidate: onValidateControl,
119
+ customValidity: customValidity,
120
+ label: label,
121
+ placeholder: placeholder,
122
+ value: value,
123
+ help: description,
124
+ onChange: handleInputChange,
125
+ hideLabelFromVision: hideLabelFromVision,
126
+ type: "text",
127
+ prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(ColorPicker, {
128
+ color: value,
129
+ onColorChange: handleColorChange
130
+ })
131
+ });
132
+ }
133
+ //# sourceMappingURL=color.js.map