@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
@@ -1,13 +1,6 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- Button,
6
- Card,
7
- CardBody,
8
- CardHeader as OriginalCardHeader,
9
- } from '@wordpress/components';
10
- import { useInstanceId } from '@wordpress/compose';
11
4
  import {
12
5
  useCallback,
13
6
  useContext,
@@ -16,7 +9,10 @@ import {
16
9
  useRef,
17
10
  useState,
18
11
  } from '@wordpress/element';
19
- import { chevronDown, chevronUp } from '@wordpress/icons';
12
+ // TODO: enable in the ESlint rule once we complete
13
+ // https://github.com/WordPress/gutenberg/issues/76135.
14
+ // eslint-disable-next-line @wordpress/use-recommended-components
15
+ import { Card, CollapsibleCard, Stack } from '@wordpress/ui';
20
16
 
21
17
  /**
22
18
  * Internal dependencies
@@ -87,6 +83,113 @@ function isSummaryFieldVisible< Item >(
87
83
  return true;
88
84
  }
89
85
 
86
+ function HeaderContent< Item >( {
87
+ data,
88
+ fields,
89
+ label,
90
+ layout,
91
+ isOpen,
92
+ touched,
93
+ validity,
94
+ }: {
95
+ data: Item;
96
+ fields: NormalizedField< Item >[];
97
+ label: string | undefined;
98
+ layout: NormalizedCardLayout;
99
+ isOpen: boolean;
100
+ touched: boolean;
101
+ validity: FieldLayoutProps< Item >[ 'validity' ];
102
+ } ) {
103
+ const summaryFields = getSummaryFields< Item >( layout.summary, fields );
104
+
105
+ const visibleSummaryFields = summaryFields.filter( ( summaryField ) =>
106
+ isSummaryFieldVisible( summaryField, layout.summary, isOpen )
107
+ );
108
+
109
+ const hasBadge = touched && layout.isCollapsible;
110
+ const hasSummary = visibleSummaryFields.length > 0 && layout.withHeader;
111
+
112
+ return (
113
+ <Stack
114
+ align="center"
115
+ justify="space-between"
116
+ className="dataforms-layouts-card__field-header-content"
117
+ >
118
+ <Card.Title>{ label }</Card.Title>
119
+ { ( hasBadge || hasSummary ) && (
120
+ <CollapsibleCard.HeaderDescription className="dataforms-layouts-card__field-header-content-description">
121
+ { hasBadge && <ValidationBadge validity={ validity } /> }
122
+ { hasSummary && (
123
+ <div className="dataforms-layouts-card__field-summary">
124
+ { visibleSummaryFields.map( ( summaryField ) => (
125
+ <summaryField.render
126
+ key={ summaryField.id }
127
+ item={ data }
128
+ field={ summaryField }
129
+ />
130
+ ) ) }
131
+ </div>
132
+ ) }
133
+ </CollapsibleCard.HeaderDescription>
134
+ ) }
135
+ </Stack>
136
+ );
137
+ }
138
+
139
+ function BodyContent< Item >( {
140
+ data,
141
+ field,
142
+ form,
143
+ onChange,
144
+ hideLabelFromVision,
145
+ markWhenOptional,
146
+ validity,
147
+ withHeader,
148
+ }: {
149
+ data: Item;
150
+ field: FieldLayoutProps< Item >[ 'field' ];
151
+ form: NormalizedForm;
152
+ onChange: FieldLayoutProps< Item >[ 'onChange' ];
153
+ hideLabelFromVision?: boolean;
154
+ markWhenOptional?: boolean;
155
+ validity: FieldLayoutProps< Item >[ 'validity' ];
156
+ withHeader: boolean;
157
+ } ) {
158
+ if ( field.children ) {
159
+ return (
160
+ <>
161
+ { field.description && (
162
+ <div className="dataforms-layouts-card__field-description">
163
+ { field.description }
164
+ </div>
165
+ ) }
166
+ <DataFormLayout
167
+ data={ data }
168
+ form={ form }
169
+ onChange={ onChange }
170
+ validity={ validity?.children }
171
+ />
172
+ </>
173
+ );
174
+ }
175
+
176
+ const SingleFieldLayout = getFormFieldLayout( 'regular' )?.component;
177
+ if ( ! SingleFieldLayout ) {
178
+ return null;
179
+ }
180
+
181
+ return (
182
+ <SingleFieldLayout
183
+ data={ data }
184
+ field={ field }
185
+ onChange={ onChange }
186
+ hideLabelFromVision={ hideLabelFromVision || withHeader }
187
+ markWhenOptional={ markWhenOptional }
188
+ validity={ validity }
189
+ />
190
+ );
191
+ }
192
+
90
193
  export default function FormCardField< Item >( {
91
194
  data,
92
195
  field,
@@ -97,10 +200,7 @@ export default function FormCardField< Item >( {
97
200
  }: FieldLayoutProps< Item > ) {
98
201
  const { fields } = useContext( DataFormContext );
99
202
  const layout = field.layout as NormalizedCardLayout;
100
- const cardBodyRef = useRef< HTMLDivElement >( null );
101
- const instanceId = useInstanceId( FormCardField );
102
- const bodyId = `dataforms-layouts-card-card-body-${ instanceId }`;
103
- const titleId = `dataforms-layouts-card-card-title-${ instanceId }`;
203
+ const contentRef = useRef< HTMLDivElement >( null );
104
204
 
105
205
  const form: NormalizedForm = useMemo(
106
206
  () => ( {
@@ -111,7 +211,7 @@ export default function FormCardField< Item >( {
111
211
  );
112
212
 
113
213
  const { isOpened, isCollapsible } = layout;
114
- const [ internalIsOpen, setIsOpen ] = useState( isOpened );
214
+ const [ isOpen, setIsOpen ] = useState( isOpened );
115
215
  const [ touched, setTouched ] = useState( false );
116
216
 
117
217
  // Sync internal state when the isOpened prop changes.
@@ -120,67 +220,32 @@ export default function FormCardField< Item >( {
120
220
  setIsOpen( isOpened );
121
221
  }, [ isOpened ] );
122
222
 
123
- const toggle = useCallback( () => {
124
- setIsOpen( ( prev ) => {
125
- // Mark as touched when collapsing (going from open to closed)
126
- if ( prev ) {
127
- setTouched( true );
128
- }
129
- return ! prev;
130
- } );
223
+ const handleOpenChange = useCallback( ( open: boolean ) => {
224
+ // Mark as touched when collapsing (going from open to closed)
225
+ if ( ! open ) {
226
+ setTouched( true );
227
+ }
228
+ setIsOpen( open );
131
229
  }, [] );
132
230
 
133
- const isOpen = isCollapsible ? internalIsOpen : true;
134
-
135
231
  // Mark the card as touched when any field inside it is blurred.
136
232
  // This aligns with how validated controls show errors on blur.
137
233
  const handleBlur = useCallback( () => {
138
234
  setTouched( true );
139
- }, [ setTouched ] );
235
+ }, [] );
140
236
 
141
237
  // When the card is expanded after being touched (collapsed with errors),
142
238
  // trigger reportValidity to show field-level errors.
143
- useReportValidity( cardBodyRef, isOpen && touched );
144
-
145
- const summaryFields = getSummaryFields< Item >( layout.summary, fields );
146
-
147
- const visibleSummaryFields = summaryFields.filter( ( summaryField ) =>
148
- isSummaryFieldVisible( summaryField, layout.summary, isOpen )
239
+ useReportValidity(
240
+ contentRef,
241
+ ( isCollapsible ? isOpen : true ) && touched
149
242
  );
150
243
 
151
- const validationBadge =
152
- touched && layout.isCollapsible ? (
153
- <ValidationBadge validity={ validity } />
154
- ) : null;
155
-
156
- const sizeCard = {
157
- blockStart: 'medium' as const,
158
- blockEnd: 'medium' as const,
159
- inlineStart: 'medium' as const,
160
- inlineEnd: 'medium' as const,
161
- };
162
-
163
244
  let label = field.label;
164
245
  let withHeader: boolean;
165
- let bodyContent: React.ReactNode;
166
246
 
167
247
  if ( field.children ) {
168
248
  withHeader = !! label && layout.withHeader;
169
- bodyContent = (
170
- <>
171
- { field.description && (
172
- <div className="dataforms-layouts-card__field-description">
173
- { field.description }
174
- </div>
175
- ) }
176
- <DataFormLayout
177
- data={ data }
178
- form={ form }
179
- onChange={ onChange }
180
- validity={ validity?.children }
181
- />
182
- </>
183
- );
184
249
  } else {
185
250
  const fieldDefinition = fields.find(
186
251
  ( fieldDef ) => fieldDef.id === field.id
@@ -190,101 +255,61 @@ export default function FormCardField< Item >( {
190
255
  return null;
191
256
  }
192
257
 
193
- const SingleFieldLayout = getFormFieldLayout( 'regular' )?.component;
194
- if ( ! SingleFieldLayout ) {
195
- return null;
196
- }
197
-
198
258
  label = fieldDefinition.label;
199
259
  withHeader = !! label && layout.withHeader;
200
- bodyContent = (
201
- <SingleFieldLayout
202
- data={ data }
203
- field={ field }
204
- onChange={ onChange }
205
- hideLabelFromVision={ hideLabelFromVision || withHeader }
206
- markWhenOptional={ markWhenOptional }
207
- validity={ validity }
208
- />
209
- );
210
260
  }
211
261
 
212
- const sizeCardBody = {
213
- blockStart: withHeader ? ( 'none' as const ) : ( 'medium' as const ),
214
- blockEnd: 'medium' as const,
215
- inlineStart: 'medium' as const,
216
- inlineEnd: 'medium' as const,
217
- };
262
+ const bodyContent = (
263
+ <BodyContent
264
+ data={ data }
265
+ field={ field }
266
+ form={ form }
267
+ onChange={ onChange }
268
+ hideLabelFromVision={ hideLabelFromVision }
269
+ markWhenOptional={ markWhenOptional }
270
+ validity={ validity }
271
+ withHeader={ withHeader }
272
+ />
273
+ );
218
274
 
219
- return (
220
- <Card className="dataforms-layouts-card__field" size={ sizeCard }>
221
- { withHeader && (
222
- <OriginalCardHeader
223
- className="dataforms-layouts-card__field-header"
224
- onClick={ isCollapsible ? toggle : undefined }
225
- style={ {
226
- cursor: isCollapsible ? 'pointer' : undefined,
227
- } }
228
- isBorderless
229
- >
230
- <div
231
- style={ {
232
- // Match the expand/collapse button's height to avoid layout
233
- // differences when that button is not displayed.
234
- height: isCollapsible ? undefined : '40px',
235
- width: '100%',
236
- display: 'flex',
237
- justifyContent: 'space-between',
238
- alignItems: 'center',
239
- } }
240
- >
241
- <span
242
- id={ titleId }
243
- className="dataforms-layouts-card__field-header-label"
244
- >
245
- { label }
246
- </span>
247
- { validationBadge }
248
- { visibleSummaryFields.length > 0 &&
249
- layout.withHeader && (
250
- <div className="dataforms-layouts-card__field-summary">
251
- { visibleSummaryFields.map(
252
- ( summaryField ) => (
253
- <summaryField.render
254
- key={ summaryField.id }
255
- item={ data }
256
- field={ summaryField }
257
- />
258
- )
259
- ) }
260
- </div>
261
- ) }
262
- </div>
263
- { isCollapsible && (
264
- <Button
265
- __next40pxDefaultSize
266
- variant="tertiary"
267
- icon={ isOpen ? chevronUp : chevronDown }
268
- aria-expanded={ isOpen }
269
- aria-controls={ bodyId }
270
- aria-labelledby={ titleId }
271
- />
272
- ) }
273
- </OriginalCardHeader>
274
- ) }
275
- { ( isOpen || ! withHeader ) && (
276
- // If it doesn't have a header, keep it open.
277
- // Otherwise, the card will not be visible.
278
- <CardBody
279
- id={ bodyId }
280
- size={ sizeCardBody }
281
- className="dataforms-layouts-card__field-control"
282
- ref={ cardBodyRef }
275
+ const headerContent = (
276
+ <HeaderContent
277
+ data={ data }
278
+ fields={ fields }
279
+ label={ label }
280
+ layout={ layout }
281
+ isOpen={ isCollapsible ? !! isOpen : true }
282
+ touched={ touched }
283
+ validity={ validity }
284
+ />
285
+ );
286
+
287
+ if ( withHeader && isCollapsible ) {
288
+ return (
289
+ <CollapsibleCard.Root
290
+ className="dataforms-layouts-card__field"
291
+ open={ isOpen }
292
+ onOpenChange={ handleOpenChange }
293
+ >
294
+ <CollapsibleCard.Header>
295
+ { headerContent }
296
+ </CollapsibleCard.Header>
297
+ <CollapsibleCard.Content
298
+ ref={ contentRef }
283
299
  onBlur={ handleBlur }
284
300
  >
285
301
  { bodyContent }
286
- </CardBody>
287
- ) }
288
- </Card>
302
+ </CollapsibleCard.Content>
303
+ </CollapsibleCard.Root>
304
+ );
305
+ }
306
+
307
+ return (
308
+ <Card.Root className="dataforms-layouts-card__field">
309
+ { withHeader && <Card.Header>{ headerContent }</Card.Header> }
310
+ <Card.Content ref={ contentRef } onBlur={ handleBlur }>
311
+ { bodyContent }
312
+ </Card.Content>
313
+ </Card.Root>
289
314
  );
290
315
  }
@@ -1,15 +1,18 @@
1
1
  @use "@wordpress/base-styles/colors" as *;
2
2
  @use "@wordpress/base-styles/variables" as *;
3
- @use "@wordpress/base-styles/mixins" as *;
4
-
5
- .dataforms-layouts-card__field-header-label {
6
- @include heading-large();
7
- }
8
3
 
9
4
  .dataforms-layouts-card__field {
10
5
  width: 100%;
11
6
  }
12
7
 
8
+ .dataforms-layouts-card__field-header-content {
9
+ min-height: 24px; // TODO: use size / height DS token when available
10
+ }
11
+
12
+ .dataforms-layouts-card__field-header-content-description {
13
+ display: contents;
14
+ }
15
+
13
16
  .dataforms-layouts-card__field-description {
14
17
  color: $gray-700;
15
18
  display: block;
@@ -8,7 +8,7 @@
8
8
  display: flex;
9
9
  width: 100%;
10
10
  min-height: $grid-unit-30;
11
- cursor: pointer;
11
+ cursor: var(--wpds-cursor-control);
12
12
  align-items: flex-start;
13
13
  border-radius: $radius-small;
14
14
  isolation: isolate;
@@ -44,7 +44,7 @@
44
44
 
45
45
  .dataforms-layouts-panel__field-control {
46
46
  color: $gray-700;
47
- font-weight: var(--wpds-font-weight-regular);
47
+ font-weight: var(--wpds-typography-font-weight-regular);
48
48
  }
49
49
  }
50
50
  }
@@ -92,7 +92,6 @@
92
92
  line-height: $grid-unit-05 * 5;
93
93
  hyphens: auto;
94
94
  color: $gray-700;
95
- text-transform: capitalize;
96
95
 
97
96
  .components-base-control__label {
98
97
  display: inline;
@@ -123,12 +122,12 @@
123
122
  flex-grow: 1;
124
123
  min-width: 0;
125
124
  min-height: $grid-unit-30;
126
- line-height: var(--wpds-font-line-height-md);
125
+ line-height: var(--wpds-typography-line-height-md);
127
126
  display: flex;
128
127
  align-items: center;
129
128
  overflow: hidden;
130
129
  word-break: break-word;
131
- font-weight: var(--wpds-font-weight-medium);
130
+ font-weight: var(--wpds-typography-font-weight-medium);
132
131
 
133
132
  > * {
134
133
  min-width: 0;
@@ -157,7 +157,6 @@ export default function SummaryButton< Item >( {
157
157
  <Button
158
158
  className="dataforms-layouts-panel__field-trigger-icon"
159
159
  label={ ariaLabel }
160
- showTooltip={ false }
161
160
  icon={ pencil }
162
161
  size="small"
163
162
  aria-expanded={ ariaExpanded }
@@ -95,6 +95,7 @@ interface BulkSelectionCheckboxProps< Item > {
95
95
  data: Item[];
96
96
  actions: Action< Item >[];
97
97
  getItemId: ( item: Item ) => string;
98
+ disableSelectAll?: boolean;
98
99
  }
99
100
 
100
101
  export function BulkSelectionCheckbox< Item >( {
@@ -103,6 +104,7 @@ export function BulkSelectionCheckbox< Item >( {
103
104
  data,
104
105
  actions,
105
106
  getItemId,
107
+ disableSelectAll = false,
106
108
  }: BulkSelectionCheckboxProps< Item > ) {
107
109
  const selectableItems = useMemo( () => {
108
110
  return data.filter( ( item ) => {
@@ -118,7 +120,23 @@ export function BulkSelectionCheckbox< Item >( {
118
120
  selection.includes( getItemId( item ) ) &&
119
121
  selectableItems.includes( item )
120
122
  );
123
+ const hasSelection = selection.length > 0;
121
124
  const areAllSelected = selectedItems.length === selectableItems.length;
125
+
126
+ if ( disableSelectAll ) {
127
+ return (
128
+ <CheckboxControl
129
+ className="dataviews-view-table-selection-checkbox"
130
+ checked={ hasSelection }
131
+ disabled={ ! hasSelection }
132
+ onChange={ () => {
133
+ onChangeSelection( [] );
134
+ } }
135
+ aria-label={ __( 'Deselect all' ) }
136
+ />
137
+ );
138
+ }
139
+
122
140
  return (
123
141
  <CheckboxControl
124
142
  className="dataviews-view-table-selection-checkbox"
@@ -153,6 +171,7 @@ interface ToolbarContentProps< Item > {
153
171
  data: Item[];
154
172
  actions: Action< Item >[];
155
173
  getItemId: ( item: Item ) => string;
174
+ isInfiniteScroll: boolean;
156
175
  paginationInfo: {
157
176
  totalItems: number;
158
177
  totalPages: number;
@@ -241,6 +260,7 @@ function renderFooterContent< Item >(
241
260
  data: Item[],
242
261
  actions: Action< Item >[],
243
262
  getItemId: ( item: Item ) => string,
263
+ isInfiniteScroll: boolean,
244
264
  selection: string[],
245
265
  actionsToShow: Action< Item >[],
246
266
  selectedItems: Item[],
@@ -255,7 +275,8 @@ function renderFooterContent< Item >(
255
275
  const message = getFooterMessage(
256
276
  selection.length,
257
277
  data.length,
258
- paginationInfo.totalItems
278
+ paginationInfo.totalItems,
279
+ isInfiniteScroll
259
280
  );
260
281
  return (
261
282
  <Stack
@@ -270,6 +291,7 @@ function renderFooterContent< Item >(
270
291
  data={ data }
271
292
  actions={ actions }
272
293
  getItemId={ getItemId }
294
+ disableSelectAll={ isInfiniteScroll }
273
295
  />
274
296
  <span className="dataviews-bulk-actions-footer__item-count">
275
297
  { message }
@@ -315,6 +337,7 @@ function FooterContent< Item >( {
315
337
  onChangeSelection,
316
338
  data,
317
339
  getItemId,
340
+ isInfiniteScroll,
318
341
  paginationInfo,
319
342
  }: ToolbarContentProps< Item > ) {
320
343
  const [ actionInProgress, setActionInProgress ] = useState< string | null >(
@@ -365,6 +388,7 @@ function FooterContent< Item >( {
365
388
  data,
366
389
  actions,
367
390
  getItemId,
391
+ isInfiniteScroll,
368
392
  selection,
369
393
  actionsToShow,
370
394
  selectedItems,
@@ -378,6 +402,7 @@ function FooterContent< Item >( {
378
402
  data,
379
403
  actions,
380
404
  getItemId,
405
+ isInfiniteScroll,
381
406
  selection,
382
407
  actionsToShow,
383
408
  selectedItems,
@@ -398,6 +423,7 @@ export function BulkActionsFooter() {
398
423
  onChangeSelection,
399
424
  getItemId,
400
425
  paginationInfo,
426
+ view,
401
427
  } = useContext( DataViewsContext );
402
428
  return (
403
429
  <FooterContent
@@ -406,6 +432,7 @@ export function BulkActionsFooter() {
406
432
  data={ data }
407
433
  actions={ actions }
408
434
  getItemId={ getItemId }
435
+ isInfiniteScroll={ !! view.infiniteScrollEnabled }
409
436
  paginationInfo={ paginationInfo }
410
437
  />
411
438
  );
@@ -15,7 +15,7 @@ import type {
15
15
  View,
16
16
  Action,
17
17
  NormalizedField,
18
- SupportedLayouts,
18
+ NormalizedSupportedLayouts,
19
19
  NormalizedFilter,
20
20
  } from '../../types';
21
21
  import type { SetSelection } from '../../types/private';
@@ -50,16 +50,16 @@ type DataViewsContextType< Item > = {
50
50
  resizeObserverRef:
51
51
  | ( ( element?: HTMLDivElement | null ) => void )
52
52
  | React.RefObject< HTMLDivElement >;
53
- defaultLayouts: SupportedLayouts;
53
+ defaultLayouts: NormalizedSupportedLayouts;
54
54
  filters: NormalizedFilter[];
55
55
  isShowingFilter: boolean;
56
56
  setIsShowingFilter: ( value: boolean ) => void;
57
57
  config: { perPageSizes: number[] };
58
58
  empty?: ReactNode;
59
59
  hasInitiallyLoaded?: boolean;
60
- hasInfiniteScrollHandler: boolean;
61
60
  itemListLabel?: string;
62
61
  onReset?: ( () => void ) | false;
62
+ intersectionObserver?: IntersectionObserver | null;
63
63
  };
64
64
 
65
65
  const DataViewsContext = createContext< DataViewsContextType< any > >( {
@@ -86,10 +86,10 @@ const DataViewsContext = createContext< DataViewsContextType< any > >( {
86
86
  isShowingFilter: false,
87
87
  setIsShowingFilter: () => {},
88
88
  hasInitiallyLoaded: false,
89
- hasInfiniteScrollHandler: false,
90
89
  config: {
91
90
  perPageSizes: [],
92
91
  },
92
+ intersectionObserver: null,
93
93
  } );
94
94
 
95
95
  DataViewsContext.displayName = 'DataViewsContext';
@@ -64,6 +64,10 @@ export default function InputWidget( {
64
64
  ...currentField,
65
65
  // Deactivate validation for filters.
66
66
  isValid: {} satisfies NormalizedRules< any >,
67
+ // Filter controls are always enabled.
68
+ isDisabled: () => false,
69
+ // Filter controls are always visible.
70
+ isVisible: () => true,
67
71
  // Configure getValue/setValue as if Item was a plain object.
68
72
  getValue: ( { item }: { item: any } ) =>
69
73
  item[ currentField.id ],
@@ -76,7 +76,7 @@
76
76
  .dataviews-filters__summary-chip {
77
77
  border-radius: $grid-unit-20;
78
78
  border: $border-width solid transparent;
79
- cursor: pointer;
79
+ cursor: var(--wpds-cursor-control);
80
80
  padding: $grid-unit-05 $grid-unit-15;
81
81
  min-height: $grid-unit-40;
82
82
  background: $gray-100;
@@ -137,7 +137,7 @@
137
137
  align-items: center;
138
138
  justify-content: center;
139
139
  background: transparent;
140
- cursor: pointer;
140
+ cursor: var(--wpds-cursor-control);
141
141
 
142
142
  svg {
143
143
  fill: $gray-700;
@@ -31,14 +31,9 @@ export default function DataViewsFooter() {
31
31
  actions = EMPTY_ARRAY,
32
32
  isLoading,
33
33
  hasInitiallyLoaded,
34
- hasInfiniteScrollHandler,
35
34
  } = useContext( DataViewsContext );
36
35
 
37
- const isRefreshing =
38
- !! isLoading &&
39
- hasInitiallyLoaded &&
40
- ! hasInfiniteScrollHandler &&
41
- !! data?.length;
36
+ const isRefreshing = !! isLoading && hasInitiallyLoaded && !! data?.length;
42
37
 
43
38
  const isDelayedRefreshing = useDelayedLoading( !! isRefreshing );
44
39
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  .dataviews-view-activity {
6
6
  margin: 0 0 auto;
7
- padding: $grid-unit-10 $grid-unit-30;
7
+ padding: 0 $grid-unit-30;
8
8
 
9
9
  .dataviews-view-activity__group-header {
10
10
  font-size: $font-size-large;
@@ -35,7 +35,7 @@
35
35
  overflow: hidden;
36
36
 
37
37
  &--clickable {
38
- cursor: pointer;
38
+ cursor: var(--wpds-cursor-control);
39
39
 
40
40
  &:focus-visible {
41
41
  outline: var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color);
@@ -104,7 +104,7 @@
104
104
  .dataviews-view-activity__item {
105
105
  &.is-compact {
106
106
  .dataviews-view-activity__item-type {
107
- width: $grid-unit-10;
107
+ width: $grid-unit-15;
108
108
 
109
109
  &::before {
110
110
  height: $grid-unit-15;