@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,11 +1,4 @@
1
1
  // packages/dataviews/src/components/dataform-layouts/card/index.tsx
2
- import {
3
- Button,
4
- Card,
5
- CardBody,
6
- CardHeader as OriginalCardHeader
7
- } from "@wordpress/components";
8
- import { useInstanceId } from "@wordpress/compose";
9
2
  import {
10
3
  useCallback,
11
4
  useContext,
@@ -14,7 +7,7 @@ import {
14
7
  useRef,
15
8
  useState
16
9
  } from "@wordpress/element";
17
- import { chevronDown, chevronUp } from "@wordpress/icons";
10
+ import { Card, CollapsibleCard, Stack } from "@wordpress/ui";
18
11
  import { getFormFieldLayout } from "../index.mjs";
19
12
  import DataFormContext from "../../dataform-context/index.mjs";
20
13
  import { DataFormLayout } from "../data-form-layout.mjs";
@@ -48,6 +41,84 @@ function isSummaryFieldVisible(summaryField, summaryConfig, isOpen) {
48
41
  }
49
42
  return true;
50
43
  }
44
+ function HeaderContent({
45
+ data,
46
+ fields,
47
+ label,
48
+ layout,
49
+ isOpen,
50
+ touched,
51
+ validity
52
+ }) {
53
+ const summaryFields = getSummaryFields(layout.summary, fields);
54
+ const visibleSummaryFields = summaryFields.filter(
55
+ (summaryField) => isSummaryFieldVisible(summaryField, layout.summary, isOpen)
56
+ );
57
+ const hasBadge = touched && layout.isCollapsible;
58
+ const hasSummary = visibleSummaryFields.length > 0 && layout.withHeader;
59
+ return /* @__PURE__ */ jsxs(
60
+ Stack,
61
+ {
62
+ align: "center",
63
+ justify: "space-between",
64
+ className: "dataforms-layouts-card__field-header-content",
65
+ children: [
66
+ /* @__PURE__ */ jsx(Card.Title, { children: label }),
67
+ (hasBadge || hasSummary) && /* @__PURE__ */ jsxs(CollapsibleCard.HeaderDescription, { className: "dataforms-layouts-card__field-header-content-description", children: [
68
+ hasBadge && /* @__PURE__ */ jsx(ValidationBadge, { validity }),
69
+ hasSummary && /* @__PURE__ */ jsx("div", { className: "dataforms-layouts-card__field-summary", children: visibleSummaryFields.map((summaryField) => /* @__PURE__ */ jsx(
70
+ summaryField.render,
71
+ {
72
+ item: data,
73
+ field: summaryField
74
+ },
75
+ summaryField.id
76
+ )) })
77
+ ] })
78
+ ]
79
+ }
80
+ );
81
+ }
82
+ function BodyContent({
83
+ data,
84
+ field,
85
+ form,
86
+ onChange,
87
+ hideLabelFromVision,
88
+ markWhenOptional,
89
+ validity,
90
+ withHeader
91
+ }) {
92
+ if (field.children) {
93
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
94
+ field.description && /* @__PURE__ */ jsx("div", { className: "dataforms-layouts-card__field-description", children: field.description }),
95
+ /* @__PURE__ */ jsx(
96
+ DataFormLayout,
97
+ {
98
+ data,
99
+ form,
100
+ onChange,
101
+ validity: validity?.children
102
+ }
103
+ )
104
+ ] });
105
+ }
106
+ const SingleFieldLayout = getFormFieldLayout("regular")?.component;
107
+ if (!SingleFieldLayout) {
108
+ return null;
109
+ }
110
+ return /* @__PURE__ */ jsx(
111
+ SingleFieldLayout,
112
+ {
113
+ data,
114
+ field,
115
+ onChange,
116
+ hideLabelFromVision: hideLabelFromVision || withHeader,
117
+ markWhenOptional,
118
+ validity
119
+ }
120
+ );
121
+ }
51
122
  function FormCardField({
52
123
  data,
53
124
  field,
@@ -58,10 +129,7 @@ function FormCardField({
58
129
  }) {
59
130
  const { fields } = useContext(DataFormContext);
60
131
  const layout = field.layout;
61
- const cardBodyRef = useRef(null);
62
- const instanceId = useInstanceId(FormCardField);
63
- const bodyId = `dataforms-layouts-card-card-body-${instanceId}`;
64
- const titleId = `dataforms-layouts-card-card-title-${instanceId}`;
132
+ const contentRef = useRef(null);
65
133
  const form = useMemo(
66
134
  () => ({
67
135
  layout: DEFAULT_LAYOUT,
@@ -70,52 +138,28 @@ function FormCardField({
70
138
  [field]
71
139
  );
72
140
  const { isOpened, isCollapsible } = layout;
73
- const [internalIsOpen, setIsOpen] = useState(isOpened);
141
+ const [isOpen, setIsOpen] = useState(isOpened);
74
142
  const [touched, setTouched] = useState(false);
75
143
  useEffect(() => {
76
144
  setIsOpen(isOpened);
77
145
  }, [isOpened]);
78
- const toggle = useCallback(() => {
79
- setIsOpen((prev) => {
80
- if (prev) {
81
- setTouched(true);
82
- }
83
- return !prev;
84
- });
146
+ const handleOpenChange = useCallback((open) => {
147
+ if (!open) {
148
+ setTouched(true);
149
+ }
150
+ setIsOpen(open);
85
151
  }, []);
86
- const isOpen = isCollapsible ? internalIsOpen : true;
87
152
  const handleBlur = useCallback(() => {
88
153
  setTouched(true);
89
- }, [setTouched]);
90
- useReportValidity(cardBodyRef, isOpen && touched);
91
- const summaryFields = getSummaryFields(layout.summary, fields);
92
- const visibleSummaryFields = summaryFields.filter(
93
- (summaryField) => isSummaryFieldVisible(summaryField, layout.summary, isOpen)
154
+ }, []);
155
+ useReportValidity(
156
+ contentRef,
157
+ (isCollapsible ? isOpen : true) && touched
94
158
  );
95
- const validationBadge = touched && layout.isCollapsible ? /* @__PURE__ */ jsx(ValidationBadge, { validity }) : null;
96
- const sizeCard = {
97
- blockStart: "medium",
98
- blockEnd: "medium",
99
- inlineStart: "medium",
100
- inlineEnd: "medium"
101
- };
102
159
  let label = field.label;
103
160
  let withHeader;
104
- let bodyContent;
105
161
  if (field.children) {
106
162
  withHeader = !!label && layout.withHeader;
107
- bodyContent = /* @__PURE__ */ jsxs(Fragment, { children: [
108
- field.description && /* @__PURE__ */ jsx("div", { className: "dataforms-layouts-card__field-description", children: field.description }),
109
- /* @__PURE__ */ jsx(
110
- DataFormLayout,
111
- {
112
- data,
113
- form,
114
- onChange,
115
- validity: validity?.children
116
- }
117
- )
118
- ] });
119
163
  } else {
120
164
  const fieldDefinition = fields.find(
121
165
  (fieldDef) => fieldDef.id === field.id
@@ -123,103 +167,58 @@ function FormCardField({
123
167
  if (!fieldDefinition || !fieldDefinition.Edit) {
124
168
  return null;
125
169
  }
126
- const SingleFieldLayout = getFormFieldLayout("regular")?.component;
127
- if (!SingleFieldLayout) {
128
- return null;
129
- }
130
170
  label = fieldDefinition.label;
131
171
  withHeader = !!label && layout.withHeader;
132
- bodyContent = /* @__PURE__ */ jsx(
133
- SingleFieldLayout,
134
- {
135
- data,
136
- field,
137
- onChange,
138
- hideLabelFromVision: hideLabelFromVision || withHeader,
139
- markWhenOptional,
140
- validity
141
- }
142
- );
143
172
  }
144
- const sizeCardBody = {
145
- blockStart: withHeader ? "none" : "medium",
146
- blockEnd: "medium",
147
- inlineStart: "medium",
148
- inlineEnd: "medium"
149
- };
150
- return /* @__PURE__ */ jsxs(Card, { className: "dataforms-layouts-card__field", size: sizeCard, children: [
151
- withHeader && /* @__PURE__ */ jsxs(
152
- OriginalCardHeader,
173
+ const bodyContent = /* @__PURE__ */ jsx(
174
+ BodyContent,
175
+ {
176
+ data,
177
+ field,
178
+ form,
179
+ onChange,
180
+ hideLabelFromVision,
181
+ markWhenOptional,
182
+ validity,
183
+ withHeader
184
+ }
185
+ );
186
+ const headerContent = /* @__PURE__ */ jsx(
187
+ HeaderContent,
188
+ {
189
+ data,
190
+ fields,
191
+ label,
192
+ layout,
193
+ isOpen: isCollapsible ? !!isOpen : true,
194
+ touched,
195
+ validity
196
+ }
197
+ );
198
+ if (withHeader && isCollapsible) {
199
+ return /* @__PURE__ */ jsxs(
200
+ CollapsibleCard.Root,
153
201
  {
154
- className: "dataforms-layouts-card__field-header",
155
- onClick: isCollapsible ? toggle : void 0,
156
- style: {
157
- cursor: isCollapsible ? "pointer" : void 0
158
- },
159
- isBorderless: true,
202
+ className: "dataforms-layouts-card__field",
203
+ open: isOpen,
204
+ onOpenChange: handleOpenChange,
160
205
  children: [
161
- /* @__PURE__ */ jsxs(
162
- "div",
163
- {
164
- style: {
165
- // Match the expand/collapse button's height to avoid layout
166
- // differences when that button is not displayed.
167
- height: isCollapsible ? void 0 : "40px",
168
- width: "100%",
169
- display: "flex",
170
- justifyContent: "space-between",
171
- alignItems: "center"
172
- },
173
- children: [
174
- /* @__PURE__ */ jsx(
175
- "span",
176
- {
177
- id: titleId,
178
- className: "dataforms-layouts-card__field-header-label",
179
- children: label
180
- }
181
- ),
182
- validationBadge,
183
- visibleSummaryFields.length > 0 && layout.withHeader && /* @__PURE__ */ jsx("div", { className: "dataforms-layouts-card__field-summary", children: visibleSummaryFields.map(
184
- (summaryField) => /* @__PURE__ */ jsx(
185
- summaryField.render,
186
- {
187
- item: data,
188
- field: summaryField
189
- },
190
- summaryField.id
191
- )
192
- ) })
193
- ]
194
- }
195
- ),
196
- isCollapsible && /* @__PURE__ */ jsx(
197
- Button,
206
+ /* @__PURE__ */ jsx(CollapsibleCard.Header, { children: headerContent }),
207
+ /* @__PURE__ */ jsx(
208
+ CollapsibleCard.Content,
198
209
  {
199
- __next40pxDefaultSize: true,
200
- variant: "tertiary",
201
- icon: isOpen ? chevronUp : chevronDown,
202
- "aria-expanded": isOpen,
203
- "aria-controls": bodyId,
204
- "aria-labelledby": titleId
210
+ ref: contentRef,
211
+ onBlur: handleBlur,
212
+ children: bodyContent
205
213
  }
206
214
  )
207
215
  ]
208
216
  }
209
- ),
210
- (isOpen || !withHeader) && // If it doesn't have a header, keep it open.
211
- // Otherwise, the card will not be visible.
212
- /* @__PURE__ */ jsx(
213
- CardBody,
214
- {
215
- id: bodyId,
216
- size: sizeCardBody,
217
- className: "dataforms-layouts-card__field-control",
218
- ref: cardBodyRef,
219
- onBlur: handleBlur,
220
- children: bodyContent
221
- }
222
- )
217
+ );
218
+ }
219
+ return /* @__PURE__ */ jsxs(Card.Root, { className: "dataforms-layouts-card__field", children: [
220
+ withHeader && /* @__PURE__ */ jsx(Card.Header, { children: headerContent }),
221
+ /* @__PURE__ */ jsx(Card.Content, { ref: contentRef, onBlur: handleBlur, children: bodyContent })
223
222
  ] });
224
223
  }
225
224
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/dataform-layouts/card/index.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tCard,\n\tCardBody,\n\tCardHeader as OriginalCardHeader,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport {\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { chevronDown, chevronUp } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getFormFieldLayout } from '..';\nimport DataFormContext from '../../dataform-context';\nimport type {\n\tFieldLayoutProps,\n\tNormalizedCardLayout,\n\tNormalizedField,\n\tNormalizedForm,\n\tNormalizedLayout,\n} from '../../../types';\nimport { DataFormLayout } from '../data-form-layout';\nimport { DEFAULT_LAYOUT } from '../normalize-form';\nimport { getSummaryFields } from '../get-summary-fields';\nimport useReportValidity from '../../../hooks/use-report-validity';\nimport ValidationBadge from '../validation-badge';\n\nfunction isSummaryFieldVisible< Item >(\n\tsummaryField: NormalizedField< Item >,\n\tsummaryConfig: NormalizedCardLayout[ 'summary' ],\n\tisOpen: boolean\n) {\n\t// If no summary config, dont't show any fields\n\tif (\n\t\t! summaryConfig ||\n\t\t( Array.isArray( summaryConfig ) && summaryConfig.length === 0 )\n\t) {\n\t\treturn false;\n\t}\n\n\t// Convert to array for consistent handling\n\tconst summaryConfigArray = Array.isArray( summaryConfig )\n\t\t? summaryConfig\n\t\t: [ summaryConfig ];\n\n\t// Find the config for this specific field\n\tconst fieldConfig = summaryConfigArray.find( ( config ) => {\n\t\tif ( typeof config === 'string' ) {\n\t\t\treturn config === summaryField.id;\n\t\t}\n\t\tif ( typeof config === 'object' && 'id' in config ) {\n\t\t\treturn config.id === summaryField.id;\n\t\t}\n\t\treturn false;\n\t} );\n\n\t// If field is not in summary config, don't show it\n\tif ( ! fieldConfig ) {\n\t\treturn false;\n\t}\n\n\t// If it's a string, always show it\n\tif ( typeof fieldConfig === 'string' ) {\n\t\treturn true;\n\t}\n\n\t// If it has visibility rules, respect them\n\tif ( typeof fieldConfig === 'object' && 'visibility' in fieldConfig ) {\n\t\treturn (\n\t\t\tfieldConfig.visibility === 'always' ||\n\t\t\t( fieldConfig.visibility === 'when-collapsed' && ! isOpen )\n\t\t);\n\t}\n\n\t// Default to always show\n\treturn true;\n}\n\nexport default function FormCardField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\tmarkWhenOptional,\n\tvalidity,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\tconst layout = field.layout as NormalizedCardLayout;\n\tconst cardBodyRef = useRef< HTMLDivElement >( null );\n\tconst instanceId = useInstanceId( FormCardField );\n\tconst bodyId = `dataforms-layouts-card-card-body-${ instanceId }`;\n\tconst titleId = `dataforms-layouts-card-card-title-${ instanceId }`;\n\n\tconst form: NormalizedForm = useMemo(\n\t\t() => ( {\n\t\t\tlayout: DEFAULT_LAYOUT as NormalizedLayout,\n\t\t\tfields: field.children ?? [],\n\t\t} ),\n\t\t[ field ]\n\t);\n\n\tconst { isOpened, isCollapsible } = layout;\n\tconst [ internalIsOpen, setIsOpen ] = useState( isOpened );\n\tconst [ touched, setTouched ] = useState( false );\n\n\t// Sync internal state when the isOpened prop changes.\n\t// This is unlikely to happen in production, but it helps with storybook controls.\n\tuseEffect( () => {\n\t\tsetIsOpen( isOpened );\n\t}, [ isOpened ] );\n\n\tconst toggle = useCallback( () => {\n\t\tsetIsOpen( ( prev ) => {\n\t\t\t// Mark as touched when collapsing (going from open to closed)\n\t\t\tif ( prev ) {\n\t\t\t\tsetTouched( true );\n\t\t\t}\n\t\t\treturn ! prev;\n\t\t} );\n\t}, [] );\n\n\tconst isOpen = isCollapsible ? internalIsOpen : true;\n\n\t// Mark the card as touched when any field inside it is blurred.\n\t// This aligns with how validated controls show errors on blur.\n\tconst handleBlur = useCallback( () => {\n\t\tsetTouched( true );\n\t}, [ setTouched ] );\n\n\t// When the card is expanded after being touched (collapsed with errors),\n\t// trigger reportValidity to show field-level errors.\n\tuseReportValidity( cardBodyRef, isOpen && touched );\n\n\tconst summaryFields = getSummaryFields< Item >( layout.summary, fields );\n\n\tconst visibleSummaryFields = summaryFields.filter( ( summaryField ) =>\n\t\tisSummaryFieldVisible( summaryField, layout.summary, isOpen )\n\t);\n\n\tconst validationBadge =\n\t\ttouched && layout.isCollapsible ? (\n\t\t\t<ValidationBadge validity={ validity } />\n\t\t) : null;\n\n\tconst sizeCard = {\n\t\tblockStart: 'medium' as const,\n\t\tblockEnd: 'medium' as const,\n\t\tinlineStart: 'medium' as const,\n\t\tinlineEnd: 'medium' as const,\n\t};\n\n\tlet label = field.label;\n\tlet withHeader: boolean;\n\tlet bodyContent: React.ReactNode;\n\n\tif ( field.children ) {\n\t\twithHeader = !! label && layout.withHeader;\n\t\tbodyContent = (\n\t\t\t<>\n\t\t\t\t{ field.description && (\n\t\t\t\t\t<div className=\"dataforms-layouts-card__field-description\">\n\t\t\t\t\t\t{ field.description }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<DataFormLayout\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tform={ form }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tvalidity={ validity?.children }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t} else {\n\t\tconst fieldDefinition = fields.find(\n\t\t\t( fieldDef ) => fieldDef.id === field.id\n\t\t);\n\n\t\tif ( ! fieldDefinition || ! fieldDefinition.Edit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst SingleFieldLayout = getFormFieldLayout( 'regular' )?.component;\n\t\tif ( ! SingleFieldLayout ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlabel = fieldDefinition.label;\n\t\twithHeader = !! label && layout.withHeader;\n\t\tbodyContent = (\n\t\t\t<SingleFieldLayout\n\t\t\t\tdata={ data }\n\t\t\t\tfield={ field }\n\t\t\t\tonChange={ onChange }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision || withHeader }\n\t\t\t\tmarkWhenOptional={ markWhenOptional }\n\t\t\t\tvalidity={ validity }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst sizeCardBody = {\n\t\tblockStart: withHeader ? ( 'none' as const ) : ( 'medium' as const ),\n\t\tblockEnd: 'medium' as const,\n\t\tinlineStart: 'medium' as const,\n\t\tinlineEnd: 'medium' as const,\n\t};\n\n\treturn (\n\t\t<Card className=\"dataforms-layouts-card__field\" size={ sizeCard }>\n\t\t\t{ withHeader && (\n\t\t\t\t<OriginalCardHeader\n\t\t\t\t\tclassName=\"dataforms-layouts-card__field-header\"\n\t\t\t\t\tonClick={ isCollapsible ? toggle : undefined }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\tcursor: isCollapsible ? 'pointer' : undefined,\n\t\t\t\t\t} }\n\t\t\t\t\tisBorderless\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t// Match the expand/collapse button's height to avoid layout\n\t\t\t\t\t\t\t// differences when that button is not displayed.\n\t\t\t\t\t\t\theight: isCollapsible ? undefined : '40px',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tid={ titleId }\n\t\t\t\t\t\t\tclassName=\"dataforms-layouts-card__field-header-label\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{ validationBadge }\n\t\t\t\t\t\t{ visibleSummaryFields.length > 0 &&\n\t\t\t\t\t\t\tlayout.withHeader && (\n\t\t\t\t\t\t\t\t<div className=\"dataforms-layouts-card__field-summary\">\n\t\t\t\t\t\t\t\t\t{ visibleSummaryFields.map(\n\t\t\t\t\t\t\t\t\t\t( summaryField ) => (\n\t\t\t\t\t\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</div>\n\t\t\t\t\t{ isCollapsible && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\ticon={ isOpen ? chevronUp : chevronDown }\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t\taria-controls={ bodyId }\n\t\t\t\t\t\t\taria-labelledby={ titleId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</OriginalCardHeader>\n\t\t\t) }\n\t\t\t{ ( isOpen || ! withHeader ) && (\n\t\t\t\t// If it doesn't have a header, keep it open.\n\t\t\t\t// Otherwise, the card will not be visible.\n\t\t\t\t<CardBody\n\t\t\t\t\tid={ bodyId }\n\t\t\t\t\tsize={ sizeCardBody }\n\t\t\t\t\tclassName=\"dataforms-layouts-card__field-control\"\n\t\t\t\t\tref={ cardBodyRef }\n\t\t\t\t\tonBlur={ handleBlur }\n\t\t\t\t>\n\t\t\t\t\t{ bodyContent }\n\t\t\t\t</CardBody>\n\t\t\t) }\n\t\t</Card>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\n// TODO: enable in the ESlint rule once we complete\n// https://github.com/WordPress/gutenberg/issues/76135.\n// eslint-disable-next-line @wordpress/use-recommended-components\nimport { Card, CollapsibleCard, Stack } from '@wordpress/ui';\n\n/**\n * Internal dependencies\n */\nimport { getFormFieldLayout } from '..';\nimport DataFormContext from '../../dataform-context';\nimport type {\n\tFieldLayoutProps,\n\tNormalizedCardLayout,\n\tNormalizedField,\n\tNormalizedForm,\n\tNormalizedLayout,\n} from '../../../types';\nimport { DataFormLayout } from '../data-form-layout';\nimport { DEFAULT_LAYOUT } from '../normalize-form';\nimport { getSummaryFields } from '../get-summary-fields';\nimport useReportValidity from '../../../hooks/use-report-validity';\nimport ValidationBadge from '../validation-badge';\n\nfunction isSummaryFieldVisible< Item >(\n\tsummaryField: NormalizedField< Item >,\n\tsummaryConfig: NormalizedCardLayout[ 'summary' ],\n\tisOpen: boolean\n) {\n\t// If no summary config, dont't show any fields\n\tif (\n\t\t! summaryConfig ||\n\t\t( Array.isArray( summaryConfig ) && summaryConfig.length === 0 )\n\t) {\n\t\treturn false;\n\t}\n\n\t// Convert to array for consistent handling\n\tconst summaryConfigArray = Array.isArray( summaryConfig )\n\t\t? summaryConfig\n\t\t: [ summaryConfig ];\n\n\t// Find the config for this specific field\n\tconst fieldConfig = summaryConfigArray.find( ( config ) => {\n\t\tif ( typeof config === 'string' ) {\n\t\t\treturn config === summaryField.id;\n\t\t}\n\t\tif ( typeof config === 'object' && 'id' in config ) {\n\t\t\treturn config.id === summaryField.id;\n\t\t}\n\t\treturn false;\n\t} );\n\n\t// If field is not in summary config, don't show it\n\tif ( ! fieldConfig ) {\n\t\treturn false;\n\t}\n\n\t// If it's a string, always show it\n\tif ( typeof fieldConfig === 'string' ) {\n\t\treturn true;\n\t}\n\n\t// If it has visibility rules, respect them\n\tif ( typeof fieldConfig === 'object' && 'visibility' in fieldConfig ) {\n\t\treturn (\n\t\t\tfieldConfig.visibility === 'always' ||\n\t\t\t( fieldConfig.visibility === 'when-collapsed' && ! isOpen )\n\t\t);\n\t}\n\n\t// Default to always show\n\treturn true;\n}\n\nfunction HeaderContent< Item >( {\n\tdata,\n\tfields,\n\tlabel,\n\tlayout,\n\tisOpen,\n\ttouched,\n\tvalidity,\n}: {\n\tdata: Item;\n\tfields: NormalizedField< Item >[];\n\tlabel: string | undefined;\n\tlayout: NormalizedCardLayout;\n\tisOpen: boolean;\n\ttouched: boolean;\n\tvalidity: FieldLayoutProps< Item >[ 'validity' ];\n} ) {\n\tconst summaryFields = getSummaryFields< Item >( layout.summary, fields );\n\n\tconst visibleSummaryFields = summaryFields.filter( ( summaryField ) =>\n\t\tisSummaryFieldVisible( summaryField, layout.summary, isOpen )\n\t);\n\n\tconst hasBadge = touched && layout.isCollapsible;\n\tconst hasSummary = visibleSummaryFields.length > 0 && layout.withHeader;\n\n\treturn (\n\t\t<Stack\n\t\t\talign=\"center\"\n\t\t\tjustify=\"space-between\"\n\t\t\tclassName=\"dataforms-layouts-card__field-header-content\"\n\t\t>\n\t\t\t<Card.Title>{ label }</Card.Title>\n\t\t\t{ ( hasBadge || hasSummary ) && (\n\t\t\t\t<CollapsibleCard.HeaderDescription className=\"dataforms-layouts-card__field-header-content-description\">\n\t\t\t\t\t{ hasBadge && <ValidationBadge validity={ validity } /> }\n\t\t\t\t\t{ hasSummary && (\n\t\t\t\t\t\t<div className=\"dataforms-layouts-card__field-summary\">\n\t\t\t\t\t\t\t{ visibleSummaryFields.map( ( summaryField ) => (\n\t\t\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t</CollapsibleCard.HeaderDescription>\n\t\t\t) }\n\t\t</Stack>\n\t);\n}\n\nfunction BodyContent< Item >( {\n\tdata,\n\tfield,\n\tform,\n\tonChange,\n\thideLabelFromVision,\n\tmarkWhenOptional,\n\tvalidity,\n\twithHeader,\n}: {\n\tdata: Item;\n\tfield: FieldLayoutProps< Item >[ 'field' ];\n\tform: NormalizedForm;\n\tonChange: FieldLayoutProps< Item >[ 'onChange' ];\n\thideLabelFromVision?: boolean;\n\tmarkWhenOptional?: boolean;\n\tvalidity: FieldLayoutProps< Item >[ 'validity' ];\n\twithHeader: boolean;\n} ) {\n\tif ( field.children ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ field.description && (\n\t\t\t\t\t<div className=\"dataforms-layouts-card__field-description\">\n\t\t\t\t\t\t{ field.description }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<DataFormLayout\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tform={ form }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tvalidity={ validity?.children }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n\n\tconst SingleFieldLayout = getFormFieldLayout( 'regular' )?.component;\n\tif ( ! SingleFieldLayout ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SingleFieldLayout\n\t\t\tdata={ data }\n\t\t\tfield={ field }\n\t\t\tonChange={ onChange }\n\t\t\thideLabelFromVision={ hideLabelFromVision || withHeader }\n\t\t\tmarkWhenOptional={ markWhenOptional }\n\t\t\tvalidity={ validity }\n\t\t/>\n\t);\n}\n\nexport default function FormCardField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\tmarkWhenOptional,\n\tvalidity,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\tconst layout = field.layout as NormalizedCardLayout;\n\tconst contentRef = useRef< HTMLDivElement >( null );\n\n\tconst form: NormalizedForm = useMemo(\n\t\t() => ( {\n\t\t\tlayout: DEFAULT_LAYOUT as NormalizedLayout,\n\t\t\tfields: field.children ?? [],\n\t\t} ),\n\t\t[ field ]\n\t);\n\n\tconst { isOpened, isCollapsible } = layout;\n\tconst [ isOpen, setIsOpen ] = useState( isOpened );\n\tconst [ touched, setTouched ] = useState( false );\n\n\t// Sync internal state when the isOpened prop changes.\n\t// This is unlikely to happen in production, but it helps with storybook controls.\n\tuseEffect( () => {\n\t\tsetIsOpen( isOpened );\n\t}, [ isOpened ] );\n\n\tconst handleOpenChange = useCallback( ( open: boolean ) => {\n\t\t// Mark as touched when collapsing (going from open to closed)\n\t\tif ( ! open ) {\n\t\t\tsetTouched( true );\n\t\t}\n\t\tsetIsOpen( open );\n\t}, [] );\n\n\t// Mark the card as touched when any field inside it is blurred.\n\t// This aligns with how validated controls show errors on blur.\n\tconst handleBlur = useCallback( () => {\n\t\tsetTouched( true );\n\t}, [] );\n\n\t// When the card is expanded after being touched (collapsed with errors),\n\t// trigger reportValidity to show field-level errors.\n\tuseReportValidity(\n\t\tcontentRef,\n\t\t( isCollapsible ? isOpen : true ) && touched\n\t);\n\n\tlet label = field.label;\n\tlet withHeader: boolean;\n\n\tif ( field.children ) {\n\t\twithHeader = !! label && layout.withHeader;\n\t} else {\n\t\tconst fieldDefinition = fields.find(\n\t\t\t( fieldDef ) => fieldDef.id === field.id\n\t\t);\n\n\t\tif ( ! fieldDefinition || ! fieldDefinition.Edit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlabel = fieldDefinition.label;\n\t\twithHeader = !! label && layout.withHeader;\n\t}\n\n\tconst bodyContent = (\n\t\t<BodyContent\n\t\t\tdata={ data }\n\t\t\tfield={ field }\n\t\t\tform={ form }\n\t\t\tonChange={ onChange }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\tmarkWhenOptional={ markWhenOptional }\n\t\t\tvalidity={ validity }\n\t\t\twithHeader={ withHeader }\n\t\t/>\n\t);\n\n\tconst headerContent = (\n\t\t<HeaderContent\n\t\t\tdata={ data }\n\t\t\tfields={ fields }\n\t\t\tlabel={ label }\n\t\t\tlayout={ layout }\n\t\t\tisOpen={ isCollapsible ? !! isOpen : true }\n\t\t\ttouched={ touched }\n\t\t\tvalidity={ validity }\n\t\t/>\n\t);\n\n\tif ( withHeader && isCollapsible ) {\n\t\treturn (\n\t\t\t<CollapsibleCard.Root\n\t\t\t\tclassName=\"dataforms-layouts-card__field\"\n\t\t\t\topen={ isOpen }\n\t\t\t\tonOpenChange={ handleOpenChange }\n\t\t\t>\n\t\t\t\t<CollapsibleCard.Header>\n\t\t\t\t\t{ headerContent }\n\t\t\t\t</CollapsibleCard.Header>\n\t\t\t\t<CollapsibleCard.Content\n\t\t\t\t\tref={ contentRef }\n\t\t\t\t\tonBlur={ handleBlur }\n\t\t\t\t>\n\t\t\t\t\t{ bodyContent }\n\t\t\t\t</CollapsibleCard.Content>\n\t\t\t</CollapsibleCard.Root>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Card.Root className=\"dataforms-layouts-card__field\">\n\t\t\t{ withHeader && <Card.Header>{ headerContent }</Card.Header> }\n\t\t\t<Card.Content ref={ contentRef } onBlur={ handleBlur }>\n\t\t\t\t{ bodyContent }\n\t\t\t</Card.Content>\n\t\t</Card.Root>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -115,7 +115,6 @@ function SummaryButton({
115
115
  {
116
116
  className: "dataforms-layouts-panel__field-trigger-icon",
117
117
  label: ariaLabel,
118
- showTooltip: false,
119
118
  icon: pencil,
120
119
  size: "small",
121
120
  "aria-expanded": ariaExpanded,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/dataform-layouts/panel/summary-button.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Icon, Tooltip } from '@wordpress/components';\nimport { sprintf, _x } from '@wordpress/i18n';\nimport { error as errorIcon, pencil } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tFieldValidity,\n\tNormalizedField,\n\tNormalizedFormField,\n\tNormalizedPanelLayout,\n} from '../../../types';\nimport getLabelClassName from './utils/get-label-classname';\nimport getLabelContent from './utils/get-label-content';\nimport getFirstValidationError from './utils/get-first-validation-error';\n\nexport default function SummaryButton< Item >( {\n\tdata,\n\tfield,\n\tfieldLabel,\n\tsummaryFields,\n\tvalidity,\n\ttouched,\n\tdisabled,\n\tonClick,\n\t'aria-expanded': ariaExpanded,\n}: {\n\tdata: Item;\n\tfield: NormalizedFormField;\n\tfieldLabel?: string;\n\tsummaryFields: NormalizedField< Item >[];\n\tvalidity?: FieldValidity;\n\ttouched: boolean;\n\tdisabled?: boolean;\n\tonClick: () => void;\n\t'aria-expanded'?: boolean;\n} ) {\n\tconst { labelPosition, editVisibility } =\n\t\tfield.layout as NormalizedPanelLayout;\n\tconst errorMessage = getFirstValidationError( validity );\n\tconst showError = touched && !! errorMessage;\n\tconst labelClassName = getLabelClassName( labelPosition, showError );\n\tconst labelContent = getLabelContent( showError, errorMessage, fieldLabel );\n\tconst className = clsx(\n\t\t'dataforms-layouts-panel__field-trigger',\n\t\t`dataforms-layouts-panel__field-trigger--label-${ labelPosition }`,\n\t\t{\n\t\t\t'is-disabled': disabled,\n\t\t\t'dataforms-layouts-panel__field-trigger--edit-always':\n\t\t\t\teditVisibility === 'always',\n\t\t}\n\t);\n\n\tconst controlId = useInstanceId(\n\t\tSummaryButton,\n\t\t'dataforms-layouts-panel__field-control'\n\t);\n\n\tconst ariaLabel = showError\n\t\t? sprintf(\n\t\t\t\t// translators: %s: Field name.\n\t\t\t\t_x( 'Edit %s (has errors)', 'field' ),\n\t\t\t\tfieldLabel || ''\n\t\t )\n\t\t: sprintf(\n\t\t\t\t// translators: %s: Field name.\n\t\t\t\t_x( 'Edit %s', 'field' ),\n\t\t\t\tfieldLabel || ''\n\t\t );\n\n\tconst rowRef = useRef< HTMLDivElement >( null );\n\n\tconst handleRowClick = () => {\n\t\tconst selection =\n\t\t\trowRef.current?.ownerDocument.defaultView?.getSelection();\n\t\tif ( selection && selection.toString().length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tonClick();\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif (\n\t\t\tevent.target === event.currentTarget &&\n\t\t\t( event.key === 'Enter' || event.key === ' ' )\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\tonClick();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={ rowRef }\n\t\t\tclassName={ className }\n\t\t\tonClick={ ! disabled ? handleRowClick : undefined }\n\t\t\tonKeyDown={ ! disabled ? handleKeyDown : undefined }\n\t\t>\n\t\t\t{ labelPosition !== 'none' && (\n\t\t\t\t<span className={ labelClassName }>{ labelContent }</span>\n\t\t\t) }\n\t\t\t{ labelPosition === 'none' && showError && (\n\t\t\t\t<Tooltip text={ errorMessage } placement=\"top\">\n\t\t\t\t\t<span className=\"dataforms-layouts-panel__field-label-error-content\">\n\t\t\t\t\t\t<Icon icon={ errorIcon } size={ 16 } />\n\t\t\t\t\t</span>\n\t\t\t\t</Tooltip>\n\t\t\t) }\n\t\t\t<span\n\t\t\t\tid={ `${ controlId }` }\n\t\t\t\tclassName=\"dataforms-layouts-panel__field-control\"\n\t\t\t>\n\t\t\t\t{ summaryFields.length > 1 ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tgap: '2px',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ summaryFields.map( ( summaryField ) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\t\tstyle={ { width: '100%' } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tsummaryFields.map( ( summaryField ) => (\n\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) )\n\t\t\t\t) }\n\t\t\t</span>\n\t\t\t{ ! disabled && (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"dataforms-layouts-panel__field-trigger-icon\"\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\tshowTooltip={ false }\n\t\t\t\t\ticon={ pencil }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\taria-expanded={ ariaExpanded }\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\taria-describedby={ `${ controlId }` }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Icon, Tooltip } from '@wordpress/components';\nimport { sprintf, _x } from '@wordpress/i18n';\nimport { error as errorIcon, pencil } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tFieldValidity,\n\tNormalizedField,\n\tNormalizedFormField,\n\tNormalizedPanelLayout,\n} from '../../../types';\nimport getLabelClassName from './utils/get-label-classname';\nimport getLabelContent from './utils/get-label-content';\nimport getFirstValidationError from './utils/get-first-validation-error';\n\nexport default function SummaryButton< Item >( {\n\tdata,\n\tfield,\n\tfieldLabel,\n\tsummaryFields,\n\tvalidity,\n\ttouched,\n\tdisabled,\n\tonClick,\n\t'aria-expanded': ariaExpanded,\n}: {\n\tdata: Item;\n\tfield: NormalizedFormField;\n\tfieldLabel?: string;\n\tsummaryFields: NormalizedField< Item >[];\n\tvalidity?: FieldValidity;\n\ttouched: boolean;\n\tdisabled?: boolean;\n\tonClick: () => void;\n\t'aria-expanded'?: boolean;\n} ) {\n\tconst { labelPosition, editVisibility } =\n\t\tfield.layout as NormalizedPanelLayout;\n\tconst errorMessage = getFirstValidationError( validity );\n\tconst showError = touched && !! errorMessage;\n\tconst labelClassName = getLabelClassName( labelPosition, showError );\n\tconst labelContent = getLabelContent( showError, errorMessage, fieldLabel );\n\tconst className = clsx(\n\t\t'dataforms-layouts-panel__field-trigger',\n\t\t`dataforms-layouts-panel__field-trigger--label-${ labelPosition }`,\n\t\t{\n\t\t\t'is-disabled': disabled,\n\t\t\t'dataforms-layouts-panel__field-trigger--edit-always':\n\t\t\t\teditVisibility === 'always',\n\t\t}\n\t);\n\n\tconst controlId = useInstanceId(\n\t\tSummaryButton,\n\t\t'dataforms-layouts-panel__field-control'\n\t);\n\n\tconst ariaLabel = showError\n\t\t? sprintf(\n\t\t\t\t// translators: %s: Field name.\n\t\t\t\t_x( 'Edit %s (has errors)', 'field' ),\n\t\t\t\tfieldLabel || ''\n\t\t )\n\t\t: sprintf(\n\t\t\t\t// translators: %s: Field name.\n\t\t\t\t_x( 'Edit %s', 'field' ),\n\t\t\t\tfieldLabel || ''\n\t\t );\n\n\tconst rowRef = useRef< HTMLDivElement >( null );\n\n\tconst handleRowClick = () => {\n\t\tconst selection =\n\t\t\trowRef.current?.ownerDocument.defaultView?.getSelection();\n\t\tif ( selection && selection.toString().length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tonClick();\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif (\n\t\t\tevent.target === event.currentTarget &&\n\t\t\t( event.key === 'Enter' || event.key === ' ' )\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\tonClick();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={ rowRef }\n\t\t\tclassName={ className }\n\t\t\tonClick={ ! disabled ? handleRowClick : undefined }\n\t\t\tonKeyDown={ ! disabled ? handleKeyDown : undefined }\n\t\t>\n\t\t\t{ labelPosition !== 'none' && (\n\t\t\t\t<span className={ labelClassName }>{ labelContent }</span>\n\t\t\t) }\n\t\t\t{ labelPosition === 'none' && showError && (\n\t\t\t\t<Tooltip text={ errorMessage } placement=\"top\">\n\t\t\t\t\t<span className=\"dataforms-layouts-panel__field-label-error-content\">\n\t\t\t\t\t\t<Icon icon={ errorIcon } size={ 16 } />\n\t\t\t\t\t</span>\n\t\t\t\t</Tooltip>\n\t\t\t) }\n\t\t\t<span\n\t\t\t\tid={ `${ controlId }` }\n\t\t\t\tclassName=\"dataforms-layouts-panel__field-control\"\n\t\t\t>\n\t\t\t\t{ summaryFields.length > 1 ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tgap: '2px',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ summaryFields.map( ( summaryField ) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\t\tstyle={ { width: '100%' } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tsummaryFields.map( ( summaryField ) => (\n\t\t\t\t\t\t<summaryField.render\n\t\t\t\t\t\t\tkey={ summaryField.id }\n\t\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\t\tfield={ summaryField }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) )\n\t\t\t\t) }\n\t\t\t</span>\n\t\t\t{ ! disabled && (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"dataforms-layouts-panel__field-trigger-icon\"\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\ticon={ pencil }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\taria-expanded={ ariaExpanded }\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\taria-describedby={ `${ controlId }` }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -56,7 +56,8 @@ function BulkSelectionCheckbox({
56
56
  onChangeSelection,
57
57
  data,
58
58
  actions,
59
- getItemId
59
+ getItemId,
60
+ disableSelectAll = false
60
61
  }) {
61
62
  const selectableItems = useMemo(() => {
62
63
  return data.filter((item) => {
@@ -68,7 +69,22 @@ function BulkSelectionCheckbox({
68
69
  const selectedItems = data.filter(
69
70
  (item) => selection.includes(getItemId(item)) && selectableItems.includes(item)
70
71
  );
72
+ const hasSelection = selection.length > 0;
71
73
  const areAllSelected = selectedItems.length === selectableItems.length;
74
+ if (disableSelectAll) {
75
+ return /* @__PURE__ */ jsx(
76
+ CheckboxControl,
77
+ {
78
+ className: "dataviews-view-table-selection-checkbox",
79
+ checked: hasSelection,
80
+ disabled: !hasSelection,
81
+ onChange: () => {
82
+ onChangeSelection([]);
83
+ },
84
+ "aria-label": __("Deselect all")
85
+ }
86
+ );
87
+ }
72
88
  return /* @__PURE__ */ jsx(
73
89
  CheckboxControl,
74
90
  {
@@ -163,11 +179,12 @@ function ActionButton({
163
179
  action.id
164
180
  );
165
181
  }
166
- function renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) {
182
+ function renderFooterContent(data, actions, getItemId, isInfiniteScroll, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) {
167
183
  const message = getFooterMessage(
168
184
  selection.length,
169
185
  data.length,
170
- paginationInfo.totalItems
186
+ paginationInfo.totalItems,
187
+ isInfiniteScroll
171
188
  );
172
189
  return /* @__PURE__ */ jsxs(
173
190
  Stack,
@@ -184,7 +201,8 @@ function renderFooterContent(data, actions, getItemId, selection, actionsToShow,
184
201
  onChangeSelection,
185
202
  data,
186
203
  actions,
187
- getItemId
204
+ getItemId,
205
+ disableSelectAll: isInfiniteScroll
188
206
  }
189
207
  ),
190
208
  /* @__PURE__ */ jsx("span", { className: "dataviews-bulk-actions-footer__item-count", children: message }),
@@ -235,6 +253,7 @@ function FooterContent({
235
253
  onChangeSelection,
236
254
  data,
237
255
  getItemId,
256
+ isInfiniteScroll,
238
257
  paginationInfo
239
258
  }) {
240
259
  const [actionInProgress, setActionInProgress] = useState(
@@ -274,6 +293,7 @@ function FooterContent({
274
293
  data,
275
294
  actions,
276
295
  getItemId,
296
+ isInfiniteScroll,
277
297
  selection,
278
298
  actionsToShow,
279
299
  selectedItems,
@@ -287,6 +307,7 @@ function FooterContent({
287
307
  data,
288
308
  actions,
289
309
  getItemId,
310
+ isInfiniteScroll,
290
311
  selection,
291
312
  actionsToShow,
292
313
  selectedItems,
@@ -305,7 +326,8 @@ function BulkActionsFooter() {
305
326
  actions = EMPTY_ARRAY,
306
327
  onChangeSelection,
307
328
  getItemId,
308
- paginationInfo
329
+ paginationInfo,
330
+ view
309
331
  } = useContext(DataViewsContext);
310
332
  return /* @__PURE__ */ jsx(
311
333
  FooterContent,
@@ -315,6 +337,7 @@ function BulkActionsFooter() {
315
337
  data,
316
338
  actions,
317
339
  getItemId,
340
+ isInfiniteScroll: !!view.infiniteScrollEnabled,
318
341
  paginationInfo
319
342
  }
320
343
  );