@wordpress/dataviews 13.1.1-next.v.202603161435.0 → 14.1.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 (370) hide show
  1. package/CHANGELOG.md +36 -6
  2. package/README.md +33 -7
  3. package/build/components/dataform-controls/array.cjs +2 -0
  4. package/build/components/dataform-controls/array.cjs.map +2 -2
  5. package/build/components/dataform-controls/checkbox.cjs +3 -1
  6. package/build/components/dataform-controls/checkbox.cjs.map +2 -2
  7. package/build/components/dataform-controls/color.cjs +8 -2
  8. package/build/components/dataform-controls/color.cjs.map +2 -2
  9. package/build/components/dataform-controls/date.cjs +31 -9
  10. package/build/components/dataform-controls/date.cjs.map +3 -3
  11. package/build/components/dataform-controls/datetime.cjs +17 -6
  12. package/build/components/dataform-controls/datetime.cjs.map +3 -3
  13. package/build/components/dataform-controls/password.cjs +4 -1
  14. package/build/components/dataform-controls/password.cjs.map +2 -2
  15. package/build/components/dataform-controls/radio.cjs +3 -1
  16. package/build/components/dataform-controls/radio.cjs.map +2 -2
  17. package/build/components/dataform-controls/select.cjs +3 -1
  18. package/build/components/dataform-controls/select.cjs.map +2 -2
  19. package/build/components/dataform-controls/textarea.cjs +2 -0
  20. package/build/components/dataform-controls/textarea.cjs.map +2 -2
  21. package/build/components/dataform-controls/toggle-group.cjs +3 -1
  22. package/build/components/dataform-controls/toggle-group.cjs.map +2 -2
  23. package/build/components/dataform-controls/toggle.cjs +3 -1
  24. package/build/components/dataform-controls/toggle.cjs.map +2 -2
  25. package/build/components/dataform-controls/utils/relative-date-control.cjs +5 -2
  26. package/build/components/dataform-controls/utils/relative-date-control.cjs.map +2 -2
  27. package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs +48 -0
  28. package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs.map +7 -0
  29. package/build/components/dataform-controls/utils/validated-input.cjs +2 -0
  30. package/build/components/dataform-controls/utils/validated-input.cjs.map +2 -2
  31. package/build/components/dataform-controls/utils/validated-number.cjs +3 -1
  32. package/build/components/dataform-controls/utils/validated-number.cjs.map +2 -2
  33. package/build/components/dataform-layouts/card/index.cjs +132 -128
  34. package/build/components/dataform-layouts/card/index.cjs.map +3 -3
  35. package/build/components/dataform-layouts/panel/summary-button.cjs +0 -1
  36. package/build/components/dataform-layouts/panel/summary-button.cjs.map +2 -2
  37. package/build/components/dataviews-bulk-actions/index.cjs +28 -5
  38. package/build/components/dataviews-bulk-actions/index.cjs.map +2 -2
  39. package/build/components/dataviews-context/index.cjs +2 -2
  40. package/build/components/dataviews-context/index.cjs.map +2 -2
  41. package/build/components/dataviews-filters/input-widget.cjs +4 -0
  42. package/build/components/dataviews-filters/input-widget.cjs.map +2 -2
  43. package/build/components/dataviews-footer/index.cjs +2 -3
  44. package/build/components/dataviews-footer/index.cjs.map +2 -2
  45. package/build/components/dataviews-layouts/grid/composite-grid.cjs +378 -249
  46. package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
  47. package/build/components/dataviews-layouts/picker-grid/index.cjs +60 -30
  48. package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
  49. package/build/components/dataviews-layouts/picker-table/index.cjs +45 -30
  50. package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
  51. package/build/components/dataviews-layouts/table/index.cjs +0 -1
  52. package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
  53. package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs +62 -0
  54. package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs.map +7 -0
  55. package/build/components/dataviews-pagination/index.cjs +1 -0
  56. package/build/components/dataviews-pagination/index.cjs.map +2 -2
  57. package/build/components/dataviews-picker-footer/index.cjs +23 -4
  58. package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
  59. package/build/components/dataviews-search/index.cjs +2 -1
  60. package/build/components/dataviews-search/index.cjs.map +2 -2
  61. package/build/components/dataviews-selection-checkbox/index.cjs +3 -2
  62. package/build/components/dataviews-selection-checkbox/index.cjs.map +2 -2
  63. package/build/components/dataviews-view-config/index.cjs +0 -2
  64. package/build/components/dataviews-view-config/index.cjs.map +3 -3
  65. package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs +0 -3
  66. package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs.map +2 -2
  67. package/build/dataviews/index.cjs +47 -45
  68. package/build/dataviews/index.cjs.map +3 -3
  69. package/build/dataviews-picker/index.cjs +41 -33
  70. package/build/dataviews-picker/index.cjs.map +3 -3
  71. package/build/field-types/date.cjs +4 -1
  72. package/build/field-types/date.cjs.map +2 -2
  73. package/build/field-types/datetime.cjs +4 -1
  74. package/build/field-types/datetime.cjs.map +2 -2
  75. package/build/field-types/index.cjs +1 -0
  76. package/build/field-types/index.cjs.map +2 -2
  77. package/build/field-types/utils/get-is-valid.cjs +29 -24
  78. package/build/field-types/utils/get-is-valid.cjs.map +2 -2
  79. package/build/field-types/utils/is-valid-date-boundary.cjs +64 -0
  80. package/build/field-types/utils/is-valid-date-boundary.cjs.map +7 -0
  81. package/build/hooks/index.cjs +11 -2
  82. package/build/hooks/index.cjs.map +2 -2
  83. package/build/hooks/use-data.cjs +146 -9
  84. package/build/hooks/use-data.cjs.map +2 -2
  85. package/build/hooks/use-infinite-scroll.cjs +208 -0
  86. package/build/hooks/use-infinite-scroll.cjs.map +7 -0
  87. package/build/hooks/use-selected-items.cjs +57 -0
  88. package/build/hooks/use-selected-items.cjs.map +7 -0
  89. package/build/types/dataviews.cjs.map +1 -1
  90. package/build/types/field-api.cjs.map +1 -1
  91. package/build/utils/filter-sort-and-paginate.cjs +5 -1
  92. package/build/utils/filter-sort-and-paginate.cjs.map +2 -2
  93. package/build/utils/get-footer-message.cjs +8 -8
  94. package/build/utils/get-footer-message.cjs.map +2 -2
  95. package/build-module/components/dataform-controls/array.mjs +2 -0
  96. package/build-module/components/dataform-controls/array.mjs.map +2 -2
  97. package/build-module/components/dataform-controls/checkbox.mjs +3 -1
  98. package/build-module/components/dataform-controls/checkbox.mjs.map +2 -2
  99. package/build-module/components/dataform-controls/color.mjs +8 -2
  100. package/build-module/components/dataform-controls/color.mjs.map +2 -2
  101. package/build-module/components/dataform-controls/date.mjs +31 -9
  102. package/build-module/components/dataform-controls/date.mjs.map +2 -2
  103. package/build-module/components/dataform-controls/datetime.mjs +17 -6
  104. package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
  105. package/build-module/components/dataform-controls/password.mjs +4 -1
  106. package/build-module/components/dataform-controls/password.mjs.map +2 -2
  107. package/build-module/components/dataform-controls/radio.mjs +3 -1
  108. package/build-module/components/dataform-controls/radio.mjs.map +2 -2
  109. package/build-module/components/dataform-controls/select.mjs +3 -1
  110. package/build-module/components/dataform-controls/select.mjs.map +2 -2
  111. package/build-module/components/dataform-controls/textarea.mjs +2 -0
  112. package/build-module/components/dataform-controls/textarea.mjs.map +2 -2
  113. package/build-module/components/dataform-controls/toggle-group.mjs +3 -1
  114. package/build-module/components/dataform-controls/toggle-group.mjs.map +2 -2
  115. package/build-module/components/dataform-controls/toggle.mjs +3 -1
  116. package/build-module/components/dataform-controls/toggle.mjs.map +2 -2
  117. package/build-module/components/dataform-controls/utils/relative-date-control.mjs +5 -2
  118. package/build-module/components/dataform-controls/utils/relative-date-control.mjs.map +2 -2
  119. package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs +27 -0
  120. package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs.map +7 -0
  121. package/build-module/components/dataform-controls/utils/validated-input.mjs +2 -0
  122. package/build-module/components/dataform-controls/utils/validated-input.mjs.map +2 -2
  123. package/build-module/components/dataform-controls/utils/validated-number.mjs +3 -1
  124. package/build-module/components/dataform-controls/utils/validated-number.mjs.map +2 -2
  125. package/build-module/components/dataform-layouts/card/index.mjs +132 -133
  126. package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
  127. package/build-module/components/dataform-layouts/panel/summary-button.mjs +0 -1
  128. package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
  129. package/build-module/components/dataviews-bulk-actions/index.mjs +28 -5
  130. package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
  131. package/build-module/components/dataviews-context/index.mjs +2 -2
  132. package/build-module/components/dataviews-context/index.mjs.map +2 -2
  133. package/build-module/components/dataviews-filters/input-widget.mjs +4 -0
  134. package/build-module/components/dataviews-filters/input-widget.mjs.map +2 -2
  135. package/build-module/components/dataviews-footer/index.mjs +2 -3
  136. package/build-module/components/dataviews-footer/index.mjs.map +2 -2
  137. package/build-module/components/dataviews-layouts/grid/composite-grid.mjs +387 -250
  138. package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
  139. package/build-module/components/dataviews-layouts/picker-grid/index.mjs +64 -31
  140. package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
  141. package/build-module/components/dataviews-layouts/picker-table/index.mjs +45 -30
  142. package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
  143. package/build-module/components/dataviews-layouts/table/index.mjs +0 -1
  144. package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
  145. package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs +26 -0
  146. package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs.map +7 -0
  147. package/build-module/components/dataviews-pagination/index.mjs +1 -0
  148. package/build-module/components/dataviews-pagination/index.mjs.map +2 -2
  149. package/build-module/components/dataviews-picker-footer/index.mjs +23 -4
  150. package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
  151. package/build-module/components/dataviews-search/index.mjs +2 -1
  152. package/build-module/components/dataviews-search/index.mjs.map +2 -2
  153. package/build-module/components/dataviews-selection-checkbox/index.mjs +3 -2
  154. package/build-module/components/dataviews-selection-checkbox/index.mjs.map +2 -2
  155. package/build-module/components/dataviews-view-config/index.mjs +0 -2
  156. package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
  157. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +0 -3
  158. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs.map +2 -2
  159. package/build-module/dataviews/index.mjs +55 -47
  160. package/build-module/dataviews/index.mjs.map +2 -2
  161. package/build-module/dataviews-picker/index.mjs +49 -35
  162. package/build-module/dataviews-picker/index.mjs.map +2 -2
  163. package/build-module/field-types/date.mjs +4 -1
  164. package/build-module/field-types/date.mjs.map +2 -2
  165. package/build-module/field-types/datetime.mjs +4 -1
  166. package/build-module/field-types/datetime.mjs.map +2 -2
  167. package/build-module/field-types/index.mjs +1 -0
  168. package/build-module/field-types/index.mjs.map +2 -2
  169. package/build-module/field-types/utils/get-is-valid.mjs +29 -24
  170. package/build-module/field-types/utils/get-is-valid.mjs.map +2 -2
  171. package/build-module/field-types/utils/is-valid-date-boundary.mjs +38 -0
  172. package/build-module/field-types/utils/is-valid-date-boundary.mjs.map +7 -0
  173. package/build-module/hooks/index.mjs +7 -1
  174. package/build-module/hooks/index.mjs.map +2 -2
  175. package/build-module/hooks/use-data.mjs +147 -10
  176. package/build-module/hooks/use-data.mjs.map +2 -2
  177. package/build-module/hooks/use-infinite-scroll.mjs +188 -0
  178. package/build-module/hooks/use-infinite-scroll.mjs.map +7 -0
  179. package/build-module/hooks/use-selected-items.mjs +36 -0
  180. package/build-module/hooks/use-selected-items.mjs.map +7 -0
  181. package/build-module/utils/filter-sort-and-paginate.mjs +5 -1
  182. package/build-module/utils/filter-sort-and-paginate.mjs.map +2 -2
  183. package/build-module/utils/get-footer-message.mjs +8 -8
  184. package/build-module/utils/get-footer-message.mjs.map +2 -2
  185. package/build-style/style-rtl.css +75 -52
  186. package/build-style/style.css +75 -52
  187. package/build-types/components/dataform-controls/array.d.ts.map +1 -1
  188. package/build-types/components/dataform-controls/checkbox.d.ts.map +1 -1
  189. package/build-types/components/dataform-controls/color.d.ts.map +1 -1
  190. package/build-types/components/dataform-controls/date.d.ts.map +1 -1
  191. package/build-types/components/dataform-controls/datetime.d.ts +1 -1
  192. package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
  193. package/build-types/components/dataform-controls/password.d.ts.map +1 -1
  194. package/build-types/components/dataform-controls/radio.d.ts.map +1 -1
  195. package/build-types/components/dataform-controls/select.d.ts.map +1 -1
  196. package/build-types/components/dataform-controls/textarea.d.ts.map +1 -1
  197. package/build-types/components/dataform-controls/toggle-group.d.ts.map +1 -1
  198. package/build-types/components/dataform-controls/toggle.d.ts.map +1 -1
  199. package/build-types/components/dataform-controls/utils/relative-date-control.d.ts.map +1 -1
  200. package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts +16 -0
  201. package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts.map +1 -0
  202. package/build-types/components/dataform-controls/utils/validated-input.d.ts.map +1 -1
  203. package/build-types/components/dataform-controls/utils/validated-number.d.ts.map +1 -1
  204. package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
  205. package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
  206. package/build-types/components/dataviews-bulk-actions/index.d.ts +2 -1
  207. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  208. package/build-types/components/dataviews-context/index.d.ts +3 -3
  209. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  210. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  211. package/build-types/components/dataviews-footer/index.d.ts.map +1 -1
  212. package/build-types/components/dataviews-layouts/grid/composite-grid.d.ts.map +1 -1
  213. package/build-types/components/dataviews-layouts/index.d.ts +6 -6
  214. package/build-types/components/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
  215. package/build-types/components/dataviews-layouts/picker-table/index.d.ts.map +1 -1
  216. package/build-types/components/dataviews-layouts/table/index.d.ts.map +1 -1
  217. package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts +22 -0
  218. package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts.map +1 -0
  219. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  220. package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
  221. package/build-types/components/dataviews-search/index.d.ts +1 -1
  222. package/build-types/components/dataviews-search/index.d.ts.map +1 -1
  223. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  224. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  225. package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts +1 -1
  226. package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts.map +1 -1
  227. package/build-types/constants.d.ts +2 -2
  228. package/build-types/dataform/stories/index.story.d.ts +11 -1
  229. package/build-types/dataform/stories/index.story.d.ts.map +1 -1
  230. package/build-types/dataform/stories/layout-regular.d.ts +2 -1
  231. package/build-types/dataform/stories/layout-regular.d.ts.map +1 -1
  232. package/build-types/dataform/stories/validation.d.ts.map +1 -1
  233. package/build-types/dataviews/index.d.ts +1 -2
  234. package/build-types/dataviews/index.d.ts.map +1 -1
  235. package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
  236. package/build-types/dataviews/stories/free-composition.d.ts.map +1 -1
  237. package/build-types/dataviews/stories/index.story.d.ts +11 -0
  238. package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
  239. package/build-types/dataviews/stories/infinite-scroll.d.ts.map +1 -1
  240. package/build-types/dataviews/stories/with-card.d.ts.map +1 -1
  241. package/build-types/dataviews-picker/index.d.ts +3 -3
  242. package/build-types/dataviews-picker/index.d.ts.map +1 -1
  243. package/build-types/dataviews-picker/stories/fixtures.d.ts.map +1 -1
  244. package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
  245. package/build-types/field-types/array.d.ts +1 -1
  246. package/build-types/field-types/array.d.ts.map +1 -1
  247. package/build-types/field-types/boolean.d.ts +1 -1
  248. package/build-types/field-types/boolean.d.ts.map +1 -1
  249. package/build-types/field-types/color.d.ts +1 -1
  250. package/build-types/field-types/color.d.ts.map +1 -1
  251. package/build-types/field-types/date.d.ts +3 -0
  252. package/build-types/field-types/date.d.ts.map +1 -1
  253. package/build-types/field-types/datetime.d.ts +3 -0
  254. package/build-types/field-types/datetime.d.ts.map +1 -1
  255. package/build-types/field-types/email.d.ts +1 -1
  256. package/build-types/field-types/email.d.ts.map +1 -1
  257. package/build-types/field-types/index.d.ts.map +1 -1
  258. package/build-types/field-types/integer.d.ts +1 -1
  259. package/build-types/field-types/integer.d.ts.map +1 -1
  260. package/build-types/field-types/number.d.ts +1 -1
  261. package/build-types/field-types/number.d.ts.map +1 -1
  262. package/build-types/field-types/stories/index.story.d.ts +37 -15
  263. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  264. package/build-types/field-types/utils/get-is-valid.d.ts.map +1 -1
  265. package/build-types/field-types/utils/is-valid-date-boundary.d.ts +7 -0
  266. package/build-types/field-types/utils/is-valid-date-boundary.d.ts.map +1 -0
  267. package/build-types/hooks/index.d.ts +3 -0
  268. package/build-types/hooks/index.d.ts.map +1 -1
  269. package/build-types/hooks/test/use-data.d.ts +2 -0
  270. package/build-types/hooks/test/use-data.d.ts.map +1 -0
  271. package/build-types/hooks/use-data.d.ts +41 -3
  272. package/build-types/hooks/use-data.d.ts.map +1 -1
  273. package/build-types/hooks/use-infinite-scroll.d.ts +21 -0
  274. package/build-types/hooks/use-infinite-scroll.d.ts.map +1 -0
  275. package/build-types/hooks/use-selected-items.d.ts +19 -0
  276. package/build-types/hooks/use-selected-items.d.ts.map +1 -0
  277. package/build-types/types/dataviews.d.ts +15 -1
  278. package/build-types/types/dataviews.d.ts.map +1 -1
  279. package/build-types/types/field-api.d.ts +39 -13
  280. package/build-types/types/field-api.d.ts.map +1 -1
  281. package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -1
  282. package/build-types/utils/get-footer-message.d.ts +3 -2
  283. package/build-types/utils/get-footer-message.d.ts.map +1 -1
  284. package/build-wp/index.js +3264 -2713
  285. package/package.json +19 -19
  286. package/src/components/dataform-controls/array.tsx +2 -0
  287. package/src/components/dataform-controls/checkbox.tsx +2 -0
  288. package/src/components/dataform-controls/color.tsx +7 -0
  289. package/src/components/dataform-controls/date.tsx +30 -4
  290. package/src/components/dataform-controls/datetime.tsx +36 -11
  291. package/src/components/dataform-controls/password.tsx +3 -0
  292. package/src/components/dataform-controls/radio.tsx +2 -0
  293. package/src/components/dataform-controls/select.tsx +2 -0
  294. package/src/components/dataform-controls/textarea.tsx +2 -0
  295. package/src/components/dataform-controls/toggle-group.tsx +2 -0
  296. package/src/components/dataform-controls/toggle.tsx +2 -0
  297. package/src/components/dataform-controls/utils/relative-date-control.tsx +3 -0
  298. package/src/components/dataform-controls/utils/use-disabled-date-matchers.ts +48 -0
  299. package/src/components/dataform-controls/utils/validated-input.tsx +2 -0
  300. package/src/components/dataform-controls/utils/validated-number.tsx +2 -0
  301. package/src/components/dataform-layouts/card/index.tsx +171 -146
  302. package/src/components/dataform-layouts/card/style.scss +8 -5
  303. package/src/components/dataform-layouts/panel/style.scss +4 -5
  304. package/src/components/dataform-layouts/panel/summary-button.tsx +0 -1
  305. package/src/components/dataviews-bulk-actions/index.tsx +28 -1
  306. package/src/components/dataviews-context/index.ts +4 -4
  307. package/src/components/dataviews-filters/input-widget.tsx +4 -0
  308. package/src/components/dataviews-filters/style.scss +2 -2
  309. package/src/components/dataviews-footer/index.tsx +1 -6
  310. package/src/components/dataviews-layouts/activity/style.scss +3 -3
  311. package/src/components/dataviews-layouts/grid/composite-grid.tsx +433 -284
  312. package/src/components/dataviews-layouts/grid/style.scss +5 -1
  313. package/src/components/dataviews-layouts/list/style.scss +1 -1
  314. package/src/components/dataviews-layouts/picker-grid/index.tsx +49 -15
  315. package/src/components/dataviews-layouts/picker-grid/style.scss +1 -1
  316. package/src/components/dataviews-layouts/picker-table/index.tsx +45 -23
  317. package/src/components/dataviews-layouts/picker-table/style.scss +1 -1
  318. package/src/components/dataviews-layouts/table/index.tsx +0 -2
  319. package/src/components/dataviews-layouts/utils/use-infinite-scroll.ts +64 -0
  320. package/src/components/dataviews-pagination/index.tsx +1 -0
  321. package/src/components/dataviews-picker-footer/index.tsx +21 -1
  322. package/src/components/dataviews-search/index.tsx +2 -1
  323. package/src/components/dataviews-selection-checkbox/index.tsx +4 -2
  324. package/src/components/dataviews-view-config/index.tsx +0 -2
  325. package/src/components/dataviews-view-config/infinite-scroll-toggle.tsx +0 -5
  326. package/src/dataform/stories/content.story.tsx +1 -1
  327. package/src/dataform/stories/data-adapter.tsx +6 -6
  328. package/src/dataform/stories/index.story.tsx +7 -0
  329. package/src/dataform/stories/layout-card.tsx +5 -5
  330. package/src/dataform/stories/layout-details.tsx +5 -5
  331. package/src/dataform/stories/layout-panel.tsx +9 -9
  332. package/src/dataform/stories/layout-regular.tsx +31 -10
  333. package/src/dataform/stories/layout-row.tsx +9 -9
  334. package/src/dataform/stories/validation.tsx +25 -10
  335. package/src/dataviews/index.tsx +68 -59
  336. package/src/dataviews/stories/empty.tsx +4 -4
  337. package/src/dataviews/stories/fixtures.tsx +288 -0
  338. package/src/dataviews/stories/free-composition.tsx +14 -13
  339. package/src/dataviews/stories/index.story.tsx +19 -2
  340. package/src/dataviews/stories/infinite-scroll.tsx +16 -96
  341. package/src/dataviews/stories/layout-custom.tsx +1 -1
  342. package/src/dataviews/stories/layout-grid.tsx +1 -1
  343. package/src/dataviews/stories/layout-list.tsx +1 -1
  344. package/src/dataviews/stories/layout-table.tsx +1 -1
  345. package/src/dataviews/stories/minimal-ui.tsx +1 -1
  346. package/src/dataviews/stories/with-card.tsx +30 -23
  347. package/src/dataviews/style.scss +6 -8
  348. package/src/dataviews/test/dataviews.tsx +94 -15
  349. package/src/dataviews-picker/index.tsx +57 -41
  350. package/src/dataviews-picker/stories/fixtures.tsx +270 -0
  351. package/src/dataviews-picker/stories/index.story.tsx +62 -133
  352. package/src/dataviews-picker/test/dataviews-picker.tsx +79 -2
  353. package/src/field-types/date.tsx +3 -0
  354. package/src/field-types/datetime.tsx +3 -0
  355. package/src/field-types/index.tsx +4 -0
  356. package/src/field-types/stories/index.story.tsx +79 -6
  357. package/src/field-types/test/normalize-fields.ts +44 -0
  358. package/src/field-types/utils/get-is-valid.ts +44 -31
  359. package/src/field-types/utils/is-valid-date-boundary.ts +80 -0
  360. package/src/hooks/index.ts +3 -0
  361. package/src/hooks/test/use-data.ts +791 -0
  362. package/src/hooks/test/use-form-validity.ts +479 -0
  363. package/src/hooks/use-data.ts +288 -21
  364. package/src/hooks/use-infinite-scroll.ts +304 -0
  365. package/src/hooks/use-selected-items.ts +72 -0
  366. package/src/types/dataviews.ts +17 -1
  367. package/src/types/field-api.ts +43 -12
  368. package/src/utils/filter-sort-and-paginate.ts +13 -1
  369. package/src/utils/get-footer-message.ts +12 -9
  370. package/src/utils/test/filter-sort-and-paginate.js +78 -54
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/dataviews",
3
- "version": "13.1.1-next.v.202603161435.0+ab4981c4f",
3
+ "version": "14.1.0",
4
4
  "description": "DataViews is a component that provides an API to render datasets using different types of layouts (table, grid, list, etc.).",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -53,20 +53,20 @@
53
53
  "sideEffects": false,
54
54
  "dependencies": {
55
55
  "@ariakit/react": "^0.4.21",
56
- "@wordpress/base-styles": "^6.17.1-next.v.202603161435.0+ab4981c4f",
57
- "@wordpress/components": "^32.4.1-next.v.202603161435.0+ab4981c4f",
58
- "@wordpress/compose": "^7.41.1-next.v.202603161435.0+ab4981c4f",
59
- "@wordpress/data": "^10.41.1-next.v.202603161435.0+ab4981c4f",
60
- "@wordpress/date": "^5.41.1-next.v.202603161435.0+ab4981c4f",
61
- "@wordpress/deprecated": "^4.41.1-next.v.202603161435.0+ab4981c4f",
62
- "@wordpress/element": "^6.41.1-next.v.202603161435.0+ab4981c4f",
63
- "@wordpress/i18n": "^6.14.1-next.v.202603161435.0+ab4981c4f",
64
- "@wordpress/icons": "^12.0.1-next.v.202603161435.0+ab4981c4f",
65
- "@wordpress/keycodes": "^4.41.1-next.v.202603161435.0+ab4981c4f",
66
- "@wordpress/primitives": "^4.41.1-next.v.202603161435.0+ab4981c4f",
67
- "@wordpress/private-apis": "^1.41.1-next.v.202603161435.0+ab4981c4f",
68
- "@wordpress/ui": "^0.9.1-next.v.202603161435.0+ab4981c4f",
69
- "@wordpress/warning": "^3.41.1-next.v.202603161435.0+ab4981c4f",
56
+ "@wordpress/base-styles": "^6.20.0",
57
+ "@wordpress/components": "^32.6.0",
58
+ "@wordpress/compose": "^7.44.0",
59
+ "@wordpress/data": "^10.44.0",
60
+ "@wordpress/date": "^5.44.0",
61
+ "@wordpress/deprecated": "^4.44.0",
62
+ "@wordpress/element": "^6.44.0",
63
+ "@wordpress/i18n": "^6.17.0",
64
+ "@wordpress/icons": "^12.2.0",
65
+ "@wordpress/keycodes": "^4.44.0",
66
+ "@wordpress/primitives": "^4.44.0",
67
+ "@wordpress/private-apis": "^1.44.0",
68
+ "@wordpress/ui": "^0.11.0",
69
+ "@wordpress/warning": "^3.44.0",
70
70
  "clsx": "^2.1.1",
71
71
  "colord": "^2.7.0",
72
72
  "date-fns": "^4.1.0",
@@ -75,12 +75,12 @@
75
75
  "remove-accents": "^0.5.0"
76
76
  },
77
77
  "devDependencies": {
78
- "@storybook/addon-docs": "^10.1.11",
79
- "@storybook/react-vite": "^10.1.11",
78
+ "@storybook/addon-docs": "^10.2.8",
79
+ "@storybook/react-vite": "^10.2.8",
80
80
  "@testing-library/jest-dom": "^6.9.1",
81
81
  "@types/jest": "^29.5.14",
82
82
  "esbuild": "^0.27.2",
83
- "storybook": "^10.1.11"
83
+ "storybook": "^10.2.8"
84
84
  },
85
85
  "peerDependencies": {
86
86
  "react": "^18.0.0",
@@ -92,5 +92,5 @@
92
92
  "scripts": {
93
93
  "build:wp": "node build.cjs"
94
94
  },
95
- "gitHead": "748f4e4564fcc0e6ae90200d90bb993a3cef5828"
95
+ "gitHead": "b862d8c84121a47bbeff882f6c87e61681ce2e0d"
96
96
  }
@@ -24,6 +24,7 @@ export default function ArrayControl< Item >( {
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { label, placeholder, getValue, setValue, isValid } = field;
26
26
  const value = getValue( { item: data } );
27
+ const disabled = field.isDisabled( { item: data, field } );
27
28
 
28
29
  const { elements, isLoading } = useElements( {
29
30
  elements: field.elements,
@@ -73,6 +74,7 @@ export default function ArrayControl< Item >( {
73
74
  onChange={ onChangeControl }
74
75
  placeholder={ placeholder }
75
76
  suggestions={ elements?.map( ( element ) => element.value ) }
77
+ disabled={ disabled }
76
78
  __experimentalValidateInput={ ( token: string ) => {
77
79
  // If elements validation is required, check if token is valid
78
80
  if ( field.isValid?.elements && elements ) {
@@ -22,6 +22,7 @@ export default function Checkbox< Item >( {
22
22
  validity,
23
23
  }: DataFormControlProps< Item > ) {
24
24
  const { getValue, setValue, label, description, isValid } = field;
25
+ const disabled = field.isDisabled( { item: data, field } );
25
26
 
26
27
  const onChangeControl = useCallback( () => {
27
28
  onChange(
@@ -39,6 +40,7 @@ export default function Checkbox< Item >( {
39
40
  help={ description }
40
41
  checked={ getValue( { item: data } ) }
41
42
  onChange={ onChangeControl }
43
+ disabled={ disabled }
42
44
  />
43
45
  );
44
46
  }
@@ -30,9 +30,11 @@ const { ValidatedInputControl } = unlock( privateApis );
30
30
  const ColorPickerDropdown = ( {
31
31
  color,
32
32
  onColorChange,
33
+ disabled,
33
34
  }: {
34
35
  color: string;
35
36
  onColorChange: ( newColor: string ) => void;
37
+ disabled?: boolean;
36
38
  } ) => {
37
39
  const validColor = color && colord( color ).isValid() ? color : '#ffffff';
38
40
 
@@ -45,6 +47,8 @@ const ColorPickerDropdown = ( {
45
47
  onClick={ onToggle }
46
48
  aria-label={ __( 'Open color picker' ) }
47
49
  size="small"
50
+ disabled={ disabled }
51
+ accessibleWhenDisabled
48
52
  icon={ () => <ColorIndicator colorValue={ validColor } /> }
49
53
  />
50
54
  ) }
@@ -70,6 +74,7 @@ export default function Color< Item >( {
70
74
  validity,
71
75
  }: DataFormControlProps< Item > ) {
72
76
  const { label, placeholder, description, setValue, isValid } = field;
77
+ const disabled = field.isDisabled( { item: data, field } );
73
78
  const value = field.getValue( { item: data } ) || '';
74
79
 
75
80
  const handleColorChange = useCallback(
@@ -98,11 +103,13 @@ export default function Color< Item >( {
98
103
  onChange={ handleInputChange }
99
104
  hideLabelFromVision={ hideLabelFromVision }
100
105
  type="text"
106
+ disabled={ disabled }
101
107
  prefix={
102
108
  <InputControlPrefixWrapper variant="control">
103
109
  <ColorPickerDropdown
104
110
  color={ value }
105
111
  onColorChange={ handleColorChange }
112
+ disabled={ disabled }
106
113
  />
107
114
  </InputControlPrefixWrapper>
108
115
  }
@@ -38,6 +38,7 @@ import { Stack } from '@wordpress/ui';
38
38
  * Internal dependencies
39
39
  */
40
40
  import RelativeDateControl from './utils/relative-date-control';
41
+ import useDisabledDateMatchers from './utils/use-disabled-date-matchers';
41
42
  import {
42
43
  OPERATOR_IN_THE_PAST,
43
44
  OPERATOR_OVER,
@@ -299,6 +300,7 @@ function CalendarDateControl< Item >( {
299
300
  isValid,
300
301
  format: fieldFormat,
301
302
  } = field;
303
+ const disabled = field.isDisabled( { item: data, field } );
302
304
  const [ selectedPresetId, setSelectedPresetId ] = useState< string | null >(
303
305
  null
304
306
  );
@@ -317,6 +319,9 @@ function CalendarDateControl< Item >( {
317
319
  const [ isTouched, setIsTouched ] = useState( false );
318
320
  const validityTargetRef = useRef< HTMLInputElement >( null );
319
321
 
322
+ const { minConstraint, maxConstraint, disabledMatchers } =
323
+ useDisabledDateMatchers( isValid, parseDate );
324
+
320
325
  const onChangeCallback = useCallback(
321
326
  ( newValue: string | undefined ) =>
322
327
  onChange( setValue( { item: data, value: newValue } ) ),
@@ -406,6 +411,8 @@ function CalendarDateControl< Item >( {
406
411
  variant="tertiary"
407
412
  isPressed={ isSelected }
408
413
  size="small"
414
+ disabled={ disabled }
415
+ accessibleWhenDisabled
409
416
  onClick={ () =>
410
417
  handlePresetClick( preset )
411
418
  }
@@ -419,8 +426,8 @@ function CalendarDateControl< Item >( {
419
426
  variant="tertiary"
420
427
  isPressed={ ! selectedPresetId }
421
428
  size="small"
422
- disabled={ !! selectedPresetId }
423
- accessibleWhenDisabled={ false }
429
+ disabled={ !! selectedPresetId || disabled }
430
+ accessibleWhenDisabled
424
431
  >
425
432
  { __( 'Custom' ) }
426
433
  </Button>
@@ -436,6 +443,9 @@ function CalendarDateControl< Item >( {
436
443
  value={ value }
437
444
  onChange={ handleManualDateChange }
438
445
  required={ !! field.isValid?.required }
446
+ disabled={ disabled }
447
+ min={ minConstraint }
448
+ max={ maxConstraint }
439
449
  />
440
450
 
441
451
  { /* Calendar widget */ }
@@ -449,6 +459,8 @@ function CalendarDateControl< Item >( {
449
459
  onMonthChange={ setCalendarMonth }
450
460
  timeZone={ timezoneString || undefined }
451
461
  weekStartsOn={ weekStartsOn }
462
+ disabled={ disabled || disabledMatchers }
463
+ disableNavigation={ disabled }
452
464
  />
453
465
  </Stack>
454
466
  </BaseControl>
@@ -470,8 +482,10 @@ function CalendarDateRangeControl< Item >( {
470
482
  description,
471
483
  getValue,
472
484
  setValue,
485
+ isValid,
473
486
  format: fieldFormat,
474
487
  } = field;
488
+ const disabled = field.isDisabled( { item: data, field } );
475
489
  let value: DateRange;
476
490
  const fieldValue = getValue( { item: data } );
477
491
  if (
@@ -486,6 +500,9 @@ function CalendarDateRangeControl< Item >( {
486
500
  ( fieldFormat as FormatDate ).weekStartsOn ??
487
501
  getSettings().l10n.startOfWeek;
488
502
 
503
+ const { minConstraint, maxConstraint, disabledMatchers } =
504
+ useDisabledDateMatchers( isValid, parseDate );
505
+
489
506
  const onChangeCallback = useCallback(
490
507
  ( newValue: DateRange ) => {
491
508
  onChange(
@@ -626,6 +643,8 @@ function CalendarDateRangeControl< Item >( {
626
643
  variant="tertiary"
627
644
  isPressed={ isSelected }
628
645
  size="small"
646
+ disabled={ disabled }
647
+ accessibleWhenDisabled
629
648
  onClick={ () =>
630
649
  handlePresetClick( preset )
631
650
  }
@@ -639,8 +658,8 @@ function CalendarDateRangeControl< Item >( {
639
658
  variant="tertiary"
640
659
  isPressed={ ! selectedPresetId }
641
660
  size="small"
642
- accessibleWhenDisabled={ false }
643
- disabled={ !! selectedPresetId }
661
+ accessibleWhenDisabled
662
+ disabled={ !! selectedPresetId || disabled }
644
663
  >
645
664
  { __( 'Custom' ) }
646
665
  </Button>
@@ -664,6 +683,9 @@ function CalendarDateRangeControl< Item >( {
664
683
  handleManualDateChange( 'from', newValue )
665
684
  }
666
685
  required={ !! field.isValid?.required }
686
+ disabled={ disabled }
687
+ min={ minConstraint }
688
+ max={ maxConstraint }
667
689
  />
668
690
  <InputControl
669
691
  __next40pxDefaultSize
@@ -676,6 +698,9 @@ function CalendarDateRangeControl< Item >( {
676
698
  handleManualDateChange( 'to', newValue )
677
699
  }
678
700
  required={ !! field.isValid?.required }
701
+ disabled={ disabled }
702
+ min={ minConstraint }
703
+ max={ maxConstraint }
679
704
  />
680
705
  </Stack>
681
706
 
@@ -687,6 +712,7 @@ function CalendarDateRangeControl< Item >( {
687
712
  onMonthChange={ setCalendarMonth }
688
713
  timeZone={ timezone.string || undefined }
689
714
  weekStartsOn={ weekStartsOn }
715
+ disabled={ disabled || disabledMatchers }
690
716
  />
691
717
  </Stack>
692
718
  </BaseControl>
@@ -16,6 +16,7 @@ import { Stack } from '@wordpress/ui';
16
16
  import type { DataFormControlProps, FormatDatetime } from '../../types';
17
17
  import { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../../constants';
18
18
  import RelativeDateControl from './utils/relative-date-control';
19
+ import useDisabledDateMatchers from './utils/use-disabled-date-matchers';
19
20
  import getCustomValidity from './utils/get-custom-validity';
20
21
  import parseDateTime from '../../field-types/utils/parse-date-time';
21
22
  import { unlock } from '../../lock-unlock';
@@ -37,8 +38,11 @@ function CalendarDateTimeControl< Item >( {
37
38
  hideLabelFromVision,
38
39
  markWhenOptional,
39
40
  validity,
41
+ config,
40
42
  }: DataFormControlProps< Item > ) {
43
+ const { compact } = config || {};
41
44
  const { id, label, description, setValue, getValue, isValid } = field;
45
+ const disabled = field.isDisabled( { item: data, field } );
42
46
  const fieldValue = getValue( { item: data } );
43
47
  const value = typeof fieldValue === 'string' ? fieldValue : undefined;
44
48
 
@@ -52,6 +56,9 @@ function CalendarDateTimeControl< Item >( {
52
56
  useRef< ReturnType< typeof setTimeout > >( undefined );
53
57
  const previousFocusRef = useRef< Element | null >( null );
54
58
 
59
+ const { minConstraint, maxConstraint, disabledMatchers } =
60
+ useDisabledDateMatchers( isValid, parseDateTime );
61
+
55
62
  const onChangeCallback = useCallback(
56
63
  ( newValue: string | undefined ) =>
57
64
  onChange( setValue( { item: data, value: newValue } ) ),
@@ -177,19 +184,35 @@ function CalendarDateTimeControl< Item >( {
177
184
  hideLabelFromVision
178
185
  value={ formatDateTime( value ) }
179
186
  onChange={ handleManualDateTimeChange }
180
- />
181
- { /* Calendar widget */ }
182
- <DateCalendar
183
- style={ { width: '100%' } }
184
- selected={
185
- value ? parseDateTime( value ) || undefined : undefined
187
+ disabled={ disabled }
188
+ min={
189
+ minConstraint
190
+ ? formatDateTime( minConstraint )
191
+ : undefined
192
+ }
193
+ max={
194
+ maxConstraint
195
+ ? formatDateTime( maxConstraint )
196
+ : undefined
186
197
  }
187
- onSelect={ onSelectDate }
188
- month={ calendarMonth }
189
- onMonthChange={ setCalendarMonth }
190
- timeZone={ timezoneString || undefined }
191
- weekStartsOn={ weekStartsOn }
192
198
  />
199
+ { /* Calendar widget */ }
200
+ { ! compact && (
201
+ <DateCalendar
202
+ style={ { width: '100%' } }
203
+ selected={
204
+ value
205
+ ? parseDateTime( value ) || undefined
206
+ : undefined
207
+ }
208
+ onSelect={ onSelectDate }
209
+ month={ calendarMonth }
210
+ onMonthChange={ setCalendarMonth }
211
+ timeZone={ timezoneString || undefined }
212
+ weekStartsOn={ weekStartsOn }
213
+ disabled={ disabled || disabledMatchers }
214
+ />
215
+ ) }
193
216
  </Stack>
194
217
  </BaseControl>
195
218
  );
@@ -203,6 +226,7 @@ export default function DateTime< Item >( {
203
226
  markWhenOptional,
204
227
  operator,
205
228
  validity,
229
+ config,
206
230
  }: DataFormControlProps< Item > ) {
207
231
  if ( operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER ) {
208
232
  return (
@@ -225,6 +249,7 @@ export default function DateTime< Item >( {
225
249
  hideLabelFromVision={ hideLabelFromVision }
226
250
  markWhenOptional={ markWhenOptional }
227
251
  validity={ validity }
252
+ config={ config }
228
253
  />
229
254
  );
230
255
  }
@@ -23,6 +23,7 @@ export default function Password< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const [ isVisible, setIsVisible ] = useState( false );
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
 
27
28
  const toggleVisibility = useCallback( () => {
28
29
  setIsVisible( ( prev ) => ! prev );
@@ -49,6 +50,8 @@ export default function Password< Item >( {
49
50
  ? __( 'Hide password' )
50
51
  : __( 'Show password' )
51
52
  }
53
+ disabled={ disabled }
54
+ accessibleWhenDisabled
52
55
  />
53
56
  </InputControlSuffixWrapper>
54
57
  ),
@@ -23,6 +23,7 @@ export default function Radio< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { label, description, getValue, setValue, isValid } = field;
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
  const { elements, isLoading } = useElements( {
27
28
  elements: field.elements,
28
29
  getElements: field.getElements,
@@ -50,6 +51,7 @@ export default function Radio< Item >( {
50
51
  options={ elements }
51
52
  selected={ value }
52
53
  hideLabelFromVision={ hideLabelFromVision }
54
+ disabled={ disabled }
53
55
  />
54
56
  );
55
57
  }
@@ -23,6 +23,7 @@ export default function Select< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { type, label, description, getValue, setValue, isValid } = field;
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
 
27
28
  const isMultiple = type === 'array';
28
29
  const value = getValue( { item: data } ) ?? ( isMultiple ? [] : '' );
@@ -55,6 +56,7 @@ export default function Select< Item >( {
55
56
  __next40pxDefaultSize
56
57
  hideLabelFromVision={ hideLabelFromVision }
57
58
  multiple={ isMultiple }
59
+ disabled={ disabled }
58
60
  />
59
61
  );
60
62
  }
@@ -23,6 +23,7 @@ export default function Textarea< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { rows = 4 } = config || {};
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
  const { label, placeholder, description, setValue, isValid } = field;
27
28
  const value = field.getValue( { item: data } );
28
29
 
@@ -43,6 +44,7 @@ export default function Textarea< Item >( {
43
44
  help={ description }
44
45
  onChange={ onChangeControl }
45
46
  rows={ rows }
47
+ disabled={ disabled }
46
48
  minLength={
47
49
  isValid.minLength ? isValid.minLength.constraint : undefined
48
50
  }
@@ -27,6 +27,7 @@ export default function ToggleGroup< Item >( {
27
27
  validity,
28
28
  }: DataFormControlProps< Item > ) {
29
29
  const { getValue, setValue, isValid } = field;
30
+ const disabled = field.isDisabled( { item: data, field } );
30
31
  const value = getValue( { item: data } );
31
32
 
32
33
  const onChangeControl = useCallback(
@@ -67,6 +68,7 @@ export default function ToggleGroup< Item >( {
67
68
  key={ el.value }
68
69
  label={ el.label }
69
70
  value={ el.value }
71
+ disabled={ disabled }
70
72
  />
71
73
  ) ) }
72
74
  </ValidatedToggleGroupControl>
@@ -22,6 +22,7 @@ export default function Toggle< Item >( {
22
22
  validity,
23
23
  }: DataFormControlProps< Item > ) {
24
24
  const { label, description, getValue, setValue, isValid } = field;
25
+ const disabled = field.isDisabled( { item: data, field } );
25
26
 
26
27
  const onChangeControl = useCallback( () => {
27
28
  onChange(
@@ -39,6 +40,7 @@ export default function Toggle< Item >( {
39
40
  help={ description }
40
41
  checked={ getValue( { item: data } ) }
41
42
  onChange={ onChangeControl }
43
+ disabled={ disabled }
42
44
  />
43
45
  );
44
46
  }
@@ -59,6 +59,7 @@ export default function RelativeDateControl< Item >( {
59
59
  ];
60
60
 
61
61
  const { id, label, description, getValue, setValue } = field;
62
+ const disabled = field.isDisabled( { item: data, field } );
62
63
  const fieldValue = getValue( { item: data } );
63
64
  const { value: relValue = '', unit = options[ 0 ].value } =
64
65
  fieldValue && typeof fieldValue === 'object' ? fieldValue : {};
@@ -102,6 +103,7 @@ export default function RelativeDateControl< Item >( {
102
103
  step={ 1 }
103
104
  value={ relValue }
104
105
  onChange={ onChangeValue }
106
+ disabled={ disabled }
105
107
  />
106
108
  <SelectControl
107
109
  className="dataviews-controls__relative-date-unit"
@@ -111,6 +113,7 @@ export default function RelativeDateControl< Item >( {
111
113
  options={ options }
112
114
  onChange={ onChangeUnit }
113
115
  hideLabelFromVision
116
+ disabled={ disabled }
114
117
  />
115
118
  </Stack>
116
119
  </BaseControl>
@@ -0,0 +1,48 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { NormalizedRules } from '../../../types';
10
+
11
+ type DateMatcher = { before: Date } | { after: Date };
12
+
13
+ export default function useDisabledDateMatchers< Item >(
14
+ isValid: NormalizedRules< Item >,
15
+ parseDateFn: ( dateString?: string ) => Date | null
16
+ ): {
17
+ minConstraint: string | undefined;
18
+ maxConstraint: string | undefined;
19
+ disabledMatchers: DateMatcher[] | undefined;
20
+ } {
21
+ const minConstraint =
22
+ typeof isValid.min?.constraint === 'string'
23
+ ? isValid.min.constraint
24
+ : undefined;
25
+ const maxConstraint =
26
+ typeof isValid.max?.constraint === 'string'
27
+ ? isValid.max.constraint
28
+ : undefined;
29
+
30
+ const disabledMatchers = useMemo( () => {
31
+ const matchers: DateMatcher[] = [];
32
+ if ( minConstraint ) {
33
+ const minDate = parseDateFn( minConstraint );
34
+ if ( minDate ) {
35
+ matchers.push( { before: minDate } );
36
+ }
37
+ }
38
+ if ( maxConstraint ) {
39
+ const maxDate = parseDateFn( maxConstraint );
40
+ if ( maxDate ) {
41
+ matchers.push( { after: maxDate } );
42
+ }
43
+ }
44
+ return matchers.length > 0 ? matchers : undefined;
45
+ }, [ minConstraint, maxConstraint, parseDateFn ] );
46
+
47
+ return { minConstraint, maxConstraint, disabledMatchers };
48
+ }
@@ -43,6 +43,7 @@ export default function ValidatedText< Item >( {
43
43
  const { label, placeholder, description, getValue, setValue, isValid } =
44
44
  field;
45
45
  const value = getValue( { item: data } );
46
+ const disabled = field.isDisabled( { item: data, field } );
46
47
 
47
48
  const onChangeControl = useCallback(
48
49
  ( newValue: string ) =>
@@ -69,6 +70,7 @@ export default function ValidatedText< Item >( {
69
70
  type={ type }
70
71
  prefix={ prefix }
71
72
  suffix={ suffix }
73
+ disabled={ disabled }
72
74
  pattern={ isValid.pattern ? isValid.pattern.constraint : undefined }
73
75
  minLength={
74
76
  isValid.minLength ? isValid.minLength.constraint : undefined
@@ -96,6 +96,7 @@ export default function ValidatedNumber< Item >( {
96
96
  const step = Math.pow( 10, Math.abs( decimals ) * -1 );
97
97
  const { label, description, getValue, setValue, isValid } = field;
98
98
  const value = getValue( { item: data } ) ?? '';
99
+ const disabled = field.isDisabled( { item: data, field } );
99
100
 
100
101
  const onChangeControl = useCallback(
101
102
  ( newValue: string | undefined ) => {
@@ -161,6 +162,7 @@ export default function ValidatedNumber< Item >( {
161
162
  step={ step }
162
163
  min={ isValid.min ? isValid.min.constraint : undefined }
163
164
  max={ isValid.max ? isValid.max.constraint : undefined }
165
+ disabled={ disabled }
164
166
  />
165
167
  );
166
168
  }