@wordpress/dataviews 8.0.1-next.e256d081a.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +203 -13
  3. package/build/components/dataform-context/index.js +1 -0
  4. package/build/components/dataform-context/index.js.map +1 -1
  5. package/build/components/dataviews/index.js +11 -1
  6. package/build/components/dataviews/index.js.map +1 -1
  7. package/build/components/dataviews-context/index.js +1 -0
  8. package/build/components/dataviews-context/index.js.map +1 -1
  9. package/build/components/dataviews-filters/input-widget.js +48 -4
  10. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  11. package/build/components/dataviews-layout/index.js +5 -2
  12. package/build/components/dataviews-layout/index.js.map +1 -1
  13. package/build/components/dataviews-picker/footer.js +145 -0
  14. package/build/components/dataviews-picker/footer.js.map +1 -0
  15. package/build/components/dataviews-picker/index.js +201 -0
  16. package/build/components/dataviews-picker/index.js.map +1 -0
  17. package/build/components/dataviews-selection-checkbox/index.js +4 -2
  18. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  19. package/build/components/dataviews-view-config/index.js +1 -0
  20. package/build/components/dataviews-view-config/index.js.map +1 -1
  21. package/build/constants.js +4 -1
  22. package/build/constants.js.map +1 -1
  23. package/build/dataform-controls/array.js +9 -7
  24. package/build/dataform-controls/array.js.map +1 -1
  25. package/build/dataform-controls/checkbox.js +40 -8
  26. package/build/dataform-controls/checkbox.js.map +1 -1
  27. package/build/dataform-controls/color.js +133 -0
  28. package/build/dataform-controls/color.js.map +1 -0
  29. package/build/dataform-controls/date.js +32 -24
  30. package/build/dataform-controls/date.js.map +1 -1
  31. package/build/dataform-controls/datetime.js +133 -19
  32. package/build/dataform-controls/datetime.js.map +1 -1
  33. package/build/dataform-controls/email.js +15 -44
  34. package/build/dataform-controls/email.js.map +1 -1
  35. package/build/dataform-controls/index.js +35 -2
  36. package/build/dataform-controls/index.js.map +1 -1
  37. package/build/dataform-controls/integer.js +47 -34
  38. package/build/dataform-controls/integer.js.map +1 -1
  39. package/build/dataform-controls/password.js +47 -0
  40. package/build/dataform-controls/password.js.map +1 -0
  41. package/build/dataform-controls/radio.js +42 -9
  42. package/build/dataform-controls/radio.js.map +1 -1
  43. package/build/dataform-controls/relative-date-control.js +6 -10
  44. package/build/dataform-controls/relative-date-control.js.map +1 -1
  45. package/build/dataform-controls/select.js +41 -10
  46. package/build/dataform-controls/select.js.map +1 -1
  47. package/build/dataform-controls/telephone.js +40 -0
  48. package/build/dataform-controls/telephone.js.map +1 -0
  49. package/build/dataform-controls/text.js +14 -43
  50. package/build/dataform-controls/text.js.map +1 -1
  51. package/build/dataform-controls/textarea.js +81 -0
  52. package/build/dataform-controls/textarea.js.map +1 -0
  53. package/build/dataform-controls/toggle-group.js +36 -6
  54. package/build/dataform-controls/toggle-group.js.map +1 -1
  55. package/build/dataform-controls/toggle.js +77 -0
  56. package/build/dataform-controls/toggle.js.map +1 -0
  57. package/build/dataform-controls/url.js +40 -0
  58. package/build/dataform-controls/url.js.map +1 -0
  59. package/build/dataform-controls/utils/validated-input.js +83 -0
  60. package/build/dataform-controls/utils/validated-input.js.map +1 -0
  61. package/build/dataforms-layouts/card/index.js +6 -7
  62. package/build/dataforms-layouts/card/index.js.map +1 -1
  63. package/build/dataforms-layouts/data-form-layout.js +16 -4
  64. package/build/dataforms-layouts/data-form-layout.js.map +1 -1
  65. package/build/dataforms-layouts/index.js +31 -1
  66. package/build/dataforms-layouts/index.js.map +1 -1
  67. package/build/dataforms-layouts/panel/dropdown.js +10 -14
  68. package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
  69. package/build/dataforms-layouts/panel/index.js +24 -11
  70. package/build/dataforms-layouts/panel/index.js.map +1 -1
  71. package/build/dataforms-layouts/panel/modal.js +22 -27
  72. package/build/dataforms-layouts/panel/modal.js.map +1 -1
  73. package/build/dataforms-layouts/panel/summary-button.js +67 -0
  74. package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
  75. package/build/dataforms-layouts/regular/index.js +7 -9
  76. package/build/dataforms-layouts/regular/index.js.map +1 -1
  77. package/build/dataforms-layouts/row/index.js +113 -0
  78. package/build/dataforms-layouts/row/index.js.map +1 -0
  79. package/build/dataviews-layouts/grid/index.js +21 -26
  80. package/build/dataviews-layouts/grid/index.js.map +1 -1
  81. package/build/dataviews-layouts/index.js +9 -1
  82. package/build/dataviews-layouts/index.js.map +1 -1
  83. package/build/dataviews-layouts/list/index.js +47 -2
  84. package/build/dataviews-layouts/list/index.js.map +1 -1
  85. package/build/dataviews-layouts/picker-grid/index.js +347 -0
  86. package/build/dataviews-layouts/picker-grid/index.js.map +1 -0
  87. package/build/dataviews-layouts/table/index.js +5 -17
  88. package/build/dataviews-layouts/table/index.js.map +1 -1
  89. package/build/dataviews-layouts/utils/get-data-by-group.js +23 -0
  90. package/build/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
  91. package/build/dataviews-layouts/utils/grid-items.js +37 -0
  92. package/build/dataviews-layouts/utils/grid-items.js.map +1 -0
  93. package/build/dataviews-layouts/utils/preview-size-picker.js +81 -0
  94. package/build/dataviews-layouts/utils/preview-size-picker.js.map +1 -0
  95. package/build/field-types/boolean.js +1 -1
  96. package/build/field-types/boolean.js.map +1 -1
  97. package/build/field-types/color.js +113 -0
  98. package/build/field-types/color.js.map +1 -0
  99. package/build/field-types/index.js +16 -0
  100. package/build/field-types/index.js.map +1 -1
  101. package/build/field-types/password.js +51 -0
  102. package/build/field-types/password.js.map +1 -0
  103. package/build/field-types/telephone.js +57 -0
  104. package/build/field-types/telephone.js.map +1 -0
  105. package/build/field-types/url.js +57 -0
  106. package/build/field-types/url.js.map +1 -0
  107. package/build/normalize-fields.js +17 -0
  108. package/build/normalize-fields.js.map +1 -1
  109. package/build/normalize-form-fields.js +6 -0
  110. package/build/normalize-form-fields.js.map +1 -1
  111. package/build/types.js.map +1 -1
  112. package/build/validation.js +1 -1
  113. package/build/validation.js.map +1 -1
  114. package/build-module/components/dataform-context/index.js +1 -0
  115. package/build-module/components/dataform-context/index.js.map +1 -1
  116. package/build-module/components/dataviews/index.js +11 -1
  117. package/build-module/components/dataviews/index.js.map +1 -1
  118. package/build-module/components/dataviews-context/index.js +1 -0
  119. package/build-module/components/dataviews-context/index.js.map +1 -1
  120. package/build-module/components/dataviews-filters/input-widget.js +48 -4
  121. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  122. package/build-module/components/dataviews-layout/index.js +5 -2
  123. package/build-module/components/dataviews-layout/index.js.map +1 -1
  124. package/build-module/components/dataviews-picker/footer.js +136 -0
  125. package/build-module/components/dataviews-picker/footer.js.map +1 -0
  126. package/build-module/components/dataviews-picker/index.js +191 -0
  127. package/build-module/components/dataviews-picker/index.js.map +1 -0
  128. package/build-module/components/dataviews-selection-checkbox/index.js +4 -2
  129. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  130. package/build-module/components/dataviews-view-config/index.js +1 -0
  131. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  132. package/build-module/constants.js +3 -0
  133. package/build-module/constants.js.map +1 -1
  134. package/build-module/dataform-controls/array.js +9 -7
  135. package/build-module/dataform-controls/array.js.map +1 -1
  136. package/build-module/dataform-controls/checkbox.js +41 -9
  137. package/build-module/dataform-controls/checkbox.js.map +1 -1
  138. package/build-module/dataform-controls/color.js +126 -0
  139. package/build-module/dataform-controls/color.js.map +1 -0
  140. package/build-module/dataform-controls/date.js +32 -24
  141. package/build-module/dataform-controls/date.js.map +1 -1
  142. package/build-module/dataform-controls/datetime.js +135 -21
  143. package/build-module/dataform-controls/datetime.js.map +1 -1
  144. package/build-module/dataform-controls/email.js +15 -45
  145. package/build-module/dataform-controls/email.js.map +1 -1
  146. package/build-module/dataform-controls/index.js +35 -2
  147. package/build-module/dataform-controls/index.js.map +1 -1
  148. package/build-module/dataform-controls/integer.js +46 -34
  149. package/build-module/dataform-controls/integer.js.map +1 -1
  150. package/build-module/dataform-controls/password.js +38 -0
  151. package/build-module/dataform-controls/password.js.map +1 -0
  152. package/build-module/dataform-controls/radio.js +44 -11
  153. package/build-module/dataform-controls/radio.js.map +1 -1
  154. package/build-module/dataform-controls/relative-date-control.js +6 -10
  155. package/build-module/dataform-controls/relative-date-control.js.map +1 -1
  156. package/build-module/dataform-controls/select.js +43 -12
  157. package/build-module/dataform-controls/select.js.map +1 -1
  158. package/build-module/dataform-controls/telephone.js +33 -0
  159. package/build-module/dataform-controls/telephone.js.map +1 -0
  160. package/build-module/dataform-controls/text.js +14 -44
  161. package/build-module/dataform-controls/text.js.map +1 -1
  162. package/build-module/dataform-controls/textarea.js +74 -0
  163. package/build-module/dataform-controls/textarea.js.map +1 -0
  164. package/build-module/dataform-controls/toggle-group.js +38 -8
  165. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  166. package/build-module/dataform-controls/toggle.js +70 -0
  167. package/build-module/dataform-controls/toggle.js.map +1 -0
  168. package/build-module/dataform-controls/url.js +33 -0
  169. package/build-module/dataform-controls/url.js.map +1 -0
  170. package/build-module/dataform-controls/utils/validated-input.js +76 -0
  171. package/build-module/dataform-controls/utils/validated-input.js.map +1 -0
  172. package/build-module/dataforms-layouts/card/index.js +6 -7
  173. package/build-module/dataforms-layouts/card/index.js.map +1 -1
  174. package/build-module/dataforms-layouts/data-form-layout.js +14 -4
  175. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  176. package/build-module/dataforms-layouts/index.js +32 -1
  177. package/build-module/dataforms-layouts/index.js.map +1 -1
  178. package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
  179. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
  180. package/build-module/dataforms-layouts/panel/index.js +24 -11
  181. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  182. package/build-module/dataforms-layouts/panel/modal.js +22 -28
  183. package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
  184. package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
  185. package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
  186. package/build-module/dataforms-layouts/regular/index.js +8 -10
  187. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  188. package/build-module/dataforms-layouts/row/index.js +106 -0
  189. package/build-module/dataforms-layouts/row/index.js.map +1 -0
  190. package/build-module/dataviews-layouts/grid/index.js +22 -27
  191. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  192. package/build-module/dataviews-layouts/index.js +10 -2
  193. package/build-module/dataviews-layouts/index.js.map +1 -1
  194. package/build-module/dataviews-layouts/list/index.js +48 -3
  195. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  196. package/build-module/dataviews-layouts/picker-grid/index.js +338 -0
  197. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -0
  198. package/build-module/dataviews-layouts/table/index.js +5 -17
  199. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  200. package/build-module/dataviews-layouts/utils/get-data-by-group.js +17 -0
  201. package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
  202. package/build-module/dataviews-layouts/utils/grid-items.js +29 -0
  203. package/build-module/dataviews-layouts/utils/grid-items.js.map +1 -0
  204. package/build-module/dataviews-layouts/utils/preview-size-picker.js +73 -0
  205. package/build-module/dataviews-layouts/utils/preview-size-picker.js.map +1 -0
  206. package/build-module/field-types/boolean.js +1 -1
  207. package/build-module/field-types/boolean.js.map +1 -1
  208. package/build-module/field-types/color.js +107 -0
  209. package/build-module/field-types/color.js.map +1 -0
  210. package/build-module/field-types/index.js +16 -0
  211. package/build-module/field-types/index.js.map +1 -1
  212. package/build-module/field-types/password.js +46 -0
  213. package/build-module/field-types/password.js.map +1 -0
  214. package/build-module/field-types/telephone.js +51 -0
  215. package/build-module/field-types/telephone.js.map +1 -0
  216. package/build-module/field-types/url.js +51 -0
  217. package/build-module/field-types/url.js.map +1 -0
  218. package/build-module/normalize-fields.js +15 -0
  219. package/build-module/normalize-fields.js.map +1 -1
  220. package/build-module/normalize-form-fields.js +6 -0
  221. package/build-module/normalize-form-fields.js.map +1 -1
  222. package/build-module/types.js.map +1 -1
  223. package/build-module/validation.js +1 -1
  224. package/build-module/validation.js.map +1 -1
  225. package/build-style/style-rtl.css +261 -18
  226. package/build-style/style.css +261 -18
  227. package/build-types/components/dataform/stories/index.story.d.ts +21 -17
  228. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  229. package/build-types/components/dataform-context/index.d.ts.map +1 -1
  230. package/build-types/components/dataviews/index.d.ts +1 -1
  231. package/build-types/components/dataviews/index.d.ts.map +1 -1
  232. package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
  233. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  234. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  235. package/build-types/components/dataviews-context/index.d.ts +1 -0
  236. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  237. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  238. package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
  239. package/build-types/components/dataviews-picker/footer.d.ts +4 -0
  240. package/build-types/components/dataviews-picker/footer.d.ts.map +1 -0
  241. package/build-types/components/dataviews-picker/index.d.ts +55 -0
  242. package/build-types/components/dataviews-picker/index.d.ts.map +1 -0
  243. package/build-types/components/dataviews-picker/stories/index.story.d.ts +42 -0
  244. package/build-types/components/dataviews-picker/stories/index.story.d.ts.map +1 -0
  245. package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -1
  246. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  247. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  248. package/build-types/constants.d.ts +1 -0
  249. package/build-types/constants.d.ts.map +1 -1
  250. package/build-types/dataform-controls/array.d.ts.map +1 -1
  251. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  252. package/build-types/dataform-controls/color.d.ts +6 -0
  253. package/build-types/dataform-controls/color.d.ts.map +1 -0
  254. package/build-types/dataform-controls/date.d.ts.map +1 -1
  255. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  256. package/build-types/dataform-controls/email.d.ts.map +1 -1
  257. package/build-types/dataform-controls/index.d.ts +1 -1
  258. package/build-types/dataform-controls/index.d.ts.map +1 -1
  259. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  260. package/build-types/dataform-controls/password.d.ts +3 -0
  261. package/build-types/dataform-controls/password.d.ts.map +1 -0
  262. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  263. package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
  264. package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
  265. package/build-types/dataform-controls/select.d.ts.map +1 -1
  266. package/build-types/dataform-controls/telephone.d.ts +6 -0
  267. package/build-types/dataform-controls/telephone.d.ts.map +1 -0
  268. package/build-types/dataform-controls/text.d.ts +1 -1
  269. package/build-types/dataform-controls/text.d.ts.map +1 -1
  270. package/build-types/dataform-controls/textarea.d.ts +6 -0
  271. package/build-types/dataform-controls/textarea.d.ts.map +1 -0
  272. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  273. package/build-types/dataform-controls/toggle.d.ts +6 -0
  274. package/build-types/dataform-controls/toggle.d.ts.map +1 -0
  275. package/build-types/dataform-controls/url.d.ts +6 -0
  276. package/build-types/dataform-controls/url.d.ts.map +1 -0
  277. package/build-types/dataform-controls/utils/validated-input.d.ts +20 -0
  278. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -0
  279. package/build-types/dataforms-layouts/card/index.d.ts +0 -3
  280. package/build-types/dataforms-layouts/card/index.d.ts.map +1 -1
  281. package/build-types/dataforms-layouts/data-form-layout.d.ts +4 -1
  282. package/build-types/dataforms-layouts/data-form-layout.d.ts.map +1 -1
  283. package/build-types/dataforms-layouts/index.d.ts +10 -0
  284. package/build-types/dataforms-layouts/index.d.ts.map +1 -1
  285. package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
  286. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
  287. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  288. package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
  289. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
  290. package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
  291. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
  292. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  293. package/build-types/dataforms-layouts/row/index.d.ts +6 -0
  294. package/build-types/dataforms-layouts/row/index.d.ts.map +1 -0
  295. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  296. package/build-types/dataviews-layouts/index.d.ts +12 -1
  297. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  298. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  299. package/build-types/dataviews-layouts/picker-grid/index.d.ts +4 -0
  300. package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -0
  301. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  302. package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts +6 -0
  303. package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts.map +1 -0
  304. package/build-types/dataviews-layouts/utils/grid-items.d.ts +5 -0
  305. package/build-types/dataviews-layouts/utils/grid-items.d.ts.map +1 -0
  306. package/build-types/dataviews-layouts/utils/preview-size-picker.d.ts +2 -0
  307. package/build-types/dataviews-layouts/utils/preview-size-picker.d.ts.map +1 -0
  308. package/build-types/field-types/color.d.ts +20 -0
  309. package/build-types/field-types/color.d.ts.map +1 -0
  310. package/build-types/field-types/index.d.ts.map +1 -1
  311. package/build-types/field-types/password.d.ts +17 -0
  312. package/build-types/field-types/password.d.ts.map +1 -0
  313. package/build-types/field-types/stories/index.story.d.ts +85 -0
  314. package/build-types/field-types/stories/index.story.d.ts.map +1 -0
  315. package/build-types/field-types/telephone.d.ts +20 -0
  316. package/build-types/field-types/telephone.d.ts.map +1 -0
  317. package/build-types/field-types/url.d.ts +20 -0
  318. package/build-types/field-types/url.d.ts.map +1 -0
  319. package/build-types/normalize-fields.d.ts +3 -0
  320. package/build-types/normalize-fields.d.ts.map +1 -1
  321. package/build-types/normalize-form-fields.d.ts.map +1 -1
  322. package/build-types/test/dataviews-picker.d.ts +2 -0
  323. package/build-types/test/dataviews-picker.d.ts.map +1 -0
  324. package/build-types/types.d.ts +102 -8
  325. package/build-types/types.d.ts.map +1 -1
  326. package/build-types/validation.d.ts.map +1 -1
  327. package/build-wp/index.js +6380 -5012
  328. package/package.json +17 -15
  329. package/src/components/dataform/stories/index.story.tsx +822 -28
  330. package/src/components/dataform-context/index.tsx +1 -0
  331. package/src/components/dataviews/index.tsx +25 -1
  332. package/src/components/dataviews/stories/fixtures.tsx +100 -42
  333. package/src/components/dataviews/stories/index.story.tsx +16 -2
  334. package/src/components/dataviews/style.scss +4 -2
  335. package/src/components/dataviews-context/index.ts +3 -0
  336. package/src/components/dataviews-filters/input-widget.tsx +44 -5
  337. package/src/components/dataviews-layout/index.tsx +5 -3
  338. package/src/components/dataviews-picker/footer.tsx +207 -0
  339. package/src/components/dataviews-picker/index.tsx +284 -0
  340. package/src/components/dataviews-picker/stories/index.story.tsx +251 -0
  341. package/src/components/dataviews-picker/style.scss +10 -0
  342. package/src/components/dataviews-selection-checkbox/index.tsx +3 -0
  343. package/src/components/dataviews-view-config/index.tsx +1 -0
  344. package/src/constants.ts +3 -0
  345. package/src/dataform-controls/array.tsx +4 -6
  346. package/src/dataform-controls/checkbox.tsx +54 -7
  347. package/src/dataform-controls/color.tsx +148 -0
  348. package/src/dataform-controls/date.tsx +47 -21
  349. package/src/dataform-controls/datetime.tsx +171 -23
  350. package/src/dataform-controls/email.tsx +18 -52
  351. package/src/dataform-controls/index.tsx +38 -2
  352. package/src/dataform-controls/integer.tsx +82 -49
  353. package/src/dataform-controls/password.tsx +50 -0
  354. package/src/dataform-controls/radio.tsx +53 -11
  355. package/src/dataform-controls/relative-date-control.tsx +11 -10
  356. package/src/dataform-controls/select.tsx +53 -10
  357. package/src/dataform-controls/telephone.tsx +38 -0
  358. package/src/dataform-controls/text.tsx +12 -50
  359. package/src/dataform-controls/textarea.tsx +85 -0
  360. package/src/dataform-controls/toggle-group.tsx +50 -10
  361. package/src/dataform-controls/toggle.tsx +79 -0
  362. package/src/dataform-controls/url.tsx +38 -0
  363. package/src/dataform-controls/utils/validated-input.tsx +109 -0
  364. package/src/dataforms-layouts/card/index.tsx +5 -4
  365. package/src/dataforms-layouts/card/style.scss +7 -0
  366. package/src/dataforms-layouts/data-form-layout.tsx +15 -3
  367. package/src/dataforms-layouts/index.tsx +35 -0
  368. package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
  369. package/src/dataforms-layouts/panel/index.tsx +39 -16
  370. package/src/dataforms-layouts/panel/modal.tsx +24 -30
  371. package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
  372. package/src/dataforms-layouts/regular/index.tsx +9 -7
  373. package/src/dataforms-layouts/regular/style.scss +0 -6
  374. package/src/dataforms-layouts/row/index.tsx +115 -0
  375. package/src/dataforms-layouts/row/style.scss +3 -0
  376. package/src/dataviews-layouts/grid/index.tsx +47 -47
  377. package/src/dataviews-layouts/grid/style.scss +43 -20
  378. package/src/dataviews-layouts/index.ts +16 -2
  379. package/src/dataviews-layouts/list/index.tsx +74 -2
  380. package/src/dataviews-layouts/list/style.scss +8 -0
  381. package/src/dataviews-layouts/picker-grid/index.tsx +486 -0
  382. package/src/dataviews-layouts/picker-grid/style.scss +171 -0
  383. package/src/dataviews-layouts/table/index.tsx +10 -14
  384. package/src/dataviews-layouts/utils/get-data-by-group.ts +18 -0
  385. package/src/dataviews-layouts/utils/grid-items.scss +21 -0
  386. package/src/dataviews-layouts/utils/grid-items.tsx +35 -0
  387. package/src/dataviews-layouts/utils/preview-size-picker.tsx +87 -0
  388. package/src/field-types/boolean.tsx +1 -1
  389. package/src/field-types/color.tsx +115 -0
  390. package/src/field-types/index.tsx +20 -0
  391. package/src/field-types/password.tsx +46 -0
  392. package/src/field-types/stories/index.story.tsx +856 -0
  393. package/src/field-types/telephone.tsx +71 -0
  394. package/src/field-types/url.tsx +71 -0
  395. package/src/normalize-fields.ts +18 -0
  396. package/src/normalize-form-fields.ts +6 -0
  397. package/src/style.scss +4 -0
  398. package/src/test/dataform.tsx +2 -2
  399. package/src/test/dataviews-picker.tsx +478 -0
  400. package/src/test/dataviews.tsx +86 -0
  401. package/src/test/filter-and-sort-data-view.js +148 -138
  402. package/src/test/normalize-fields.ts +114 -0
  403. package/src/types.ts +130 -7
  404. package/src/validation.ts +5 -0
  405. package/tsconfig.tsbuildinfo +1 -1
  406. package/build/dataform-controls/boolean.js +0 -64
  407. package/build/dataform-controls/boolean.js.map +0 -1
  408. package/build-module/dataform-controls/boolean.js +0 -58
  409. package/build-module/dataform-controls/boolean.js.map +0 -1
  410. package/build-types/components/stories/index.story.d.ts +0 -63
  411. package/build-types/components/stories/index.story.d.ts.map +0 -1
  412. package/build-types/dataform-controls/boolean.d.ts +0 -6
  413. package/build-types/dataform-controls/boolean.d.ts.map +0 -1
  414. package/src/components/stories/index.story.tsx +0 -372
  415. package/src/dataform-controls/boolean.tsx +0 -61
@@ -24,7 +24,7 @@ import {
24
24
  useState,
25
25
  useContext,
26
26
  } from '@wordpress/element';
27
- import { __ } from '@wordpress/i18n';
27
+ import { __, sprintf } from '@wordpress/i18n';
28
28
  import { moreVertical } from '@wordpress/icons';
29
29
  import { useRegistry } from '@wordpress/data';
30
30
 
@@ -44,6 +44,7 @@ import type {
44
44
  ViewListProps,
45
45
  ActionModal as ActionModalType,
46
46
  } from '../../types';
47
+ import getDataByGroup from '../utils/get-data-by-group';
47
48
 
48
49
  interface ListViewItemProps< Item > {
49
50
  view: ViewListType;
@@ -512,11 +513,82 @@ export default function ViewList< Item >( props: ViewListProps< Item > ) {
512
513
  'dataviews-no-results': ! hasData && ! isLoading,
513
514
  } ) }
514
515
  >
515
- { ! hasData && <p>{ isLoading ? <Spinner /> : empty }</p> }
516
+ { ! hasData &&
517
+ ( isLoading ? (
518
+ <p>
519
+ <Spinner />
520
+ </p>
521
+ ) : (
522
+ empty
523
+ ) ) }
516
524
  </div>
517
525
  );
518
526
  }
519
527
 
528
+ const groupField = view.groupByField
529
+ ? fields.find( ( field ) => field.id === view.groupByField )
530
+ : null;
531
+ const dataByGroup = groupField ? getDataByGroup( data, groupField ) : null;
532
+
533
+ // Render data grouped by field
534
+ if ( hasData && groupField && dataByGroup ) {
535
+ return (
536
+ <Composite
537
+ id={ `${ baseId }` }
538
+ render={ <div /> }
539
+ className="dataviews-view-list__group"
540
+ role="grid"
541
+ activeId={ activeCompositeId }
542
+ setActiveId={ setActiveCompositeId }
543
+ >
544
+ <VStack
545
+ spacing={ 4 }
546
+ className={ clsx( 'dataviews-view-list', className ) }
547
+ >
548
+ { Array.from( dataByGroup.entries() ).map(
549
+ ( [ groupName, groupItems ] ) => (
550
+ <VStack key={ groupName } spacing={ 2 }>
551
+ <h3 className="dataviews-view-list__group-header">
552
+ { sprintf(
553
+ // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
554
+ __( '%1$s: %2$s' ),
555
+ groupField.label,
556
+ groupName
557
+ ) }
558
+ </h3>
559
+ { groupItems.map( ( item ) => {
560
+ const id =
561
+ generateCompositeItemIdPrefix( item );
562
+ return (
563
+ <ListItem
564
+ key={ id }
565
+ view={ view }
566
+ idPrefix={ id }
567
+ actions={ actions }
568
+ item={ item }
569
+ isSelected={ item === selectedItem }
570
+ onSelect={ onSelect }
571
+ mediaField={ mediaField }
572
+ titleField={ titleField }
573
+ descriptionField={
574
+ descriptionField
575
+ }
576
+ otherFields={ otherFields }
577
+ onDropdownTriggerKeyDown={
578
+ onDropdownTriggerKeyDown
579
+ }
580
+ />
581
+ );
582
+ } ) }
583
+ </VStack>
584
+ )
585
+ ) }
586
+ </VStack>
587
+ </Composite>
588
+ );
589
+ }
590
+
591
+ // Render ungrouped data
520
592
  return (
521
593
  <>
522
594
  <Composite
@@ -196,3 +196,11 @@ div.dataviews-view-list {
196
196
  justify-content: space-between;
197
197
  }
198
198
  }
199
+
200
+ .dataviews-view-list__group-header {
201
+ font-size: $font-size-large;
202
+ font-weight: $font-weight-medium;
203
+ color: $gray-900;
204
+ margin: 0 0 $grid-unit-10 0;
205
+ padding: 0 $grid-unit-30;
206
+ }
@@ -0,0 +1,486 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+ import type { ReactNode } from 'react';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import {
11
+ __experimentalHStack as HStack,
12
+ __experimentalVStack as VStack,
13
+ Spinner,
14
+ Flex,
15
+ FlexItem,
16
+ privateApis as componentsPrivateApis,
17
+ Composite,
18
+ } from '@wordpress/components';
19
+ import { __, sprintf } from '@wordpress/i18n';
20
+ import { useInstanceId } from '@wordpress/compose';
21
+ import { useContext } from '@wordpress/element';
22
+
23
+ /**
24
+ * Internal dependencies
25
+ */
26
+ import { unlock } from '../../lock-unlock';
27
+ import DataViewsSelectionCheckbox from '../../components/dataviews-selection-checkbox';
28
+ import DataViewsContext from '../../components/dataviews-context';
29
+ import { useIsMultiselectPicker } from '../../components/dataviews-picker/footer';
30
+ import type {
31
+ NormalizedField,
32
+ ViewPickerGrid as ViewPickerGridType,
33
+ ViewPickerGridProps,
34
+ } from '../../types';
35
+ import type { SetSelection } from '../../private-types';
36
+ import { GridItems } from '../utils/grid-items';
37
+ const { Badge } = unlock( componentsPrivateApis );
38
+ import getDataByGroup from '../utils/get-data-by-group';
39
+
40
+ interface GridItemProps< Item > {
41
+ view: ViewPickerGridType;
42
+ multiselect?: boolean;
43
+ selection: string[];
44
+ onChangeSelection: SetSelection;
45
+ getItemId: ( item: Item ) => string;
46
+ item: Item;
47
+ titleField?: NormalizedField< Item >;
48
+ mediaField?: NormalizedField< Item >;
49
+ descriptionField?: NormalizedField< Item >;
50
+ regularFields: NormalizedField< Item >[];
51
+ badgeFields: NormalizedField< Item >[];
52
+ config: {
53
+ sizes: string;
54
+ };
55
+ posinset?: number;
56
+ setsize?: number;
57
+ }
58
+
59
+ function GridItem< Item >( {
60
+ view,
61
+ multiselect,
62
+ selection,
63
+ onChangeSelection,
64
+ getItemId,
65
+ item,
66
+ mediaField,
67
+ titleField,
68
+ descriptionField,
69
+ regularFields,
70
+ badgeFields,
71
+ config,
72
+ posinset,
73
+ setsize,
74
+ }: GridItemProps< Item > ) {
75
+ const { showTitle = true, showMedia = true, showDescription = true } = view;
76
+ const id = getItemId( item );
77
+ const isSelected = selection.includes( id );
78
+ const renderedMediaField = mediaField?.render ? (
79
+ <mediaField.render
80
+ item={ item }
81
+ field={ mediaField }
82
+ config={ config }
83
+ />
84
+ ) : null;
85
+ const renderedTitleField =
86
+ showTitle && titleField?.render ? (
87
+ <titleField.render item={ item } field={ titleField } />
88
+ ) : null;
89
+
90
+ return (
91
+ <Composite.Item
92
+ key={ id }
93
+ render={ ( { children, ...props } ) => (
94
+ <VStack spacing={ 0 } children={ children } { ...props } />
95
+ ) }
96
+ role="option"
97
+ aria-posinset={ posinset }
98
+ aria-setsize={ setsize }
99
+ className={ clsx( 'dataviews-view-picker-grid__card', {
100
+ 'is-selected': isSelected,
101
+ } ) }
102
+ aria-selected={ isSelected }
103
+ onClick={ () => {
104
+ if ( isSelected ) {
105
+ onChangeSelection(
106
+ selection.filter( ( itemId ) => id !== itemId )
107
+ );
108
+ } else {
109
+ const newSelection = multiselect
110
+ ? [ ...selection, id ]
111
+ : [ id ];
112
+ onChangeSelection( newSelection );
113
+ }
114
+ } }
115
+ >
116
+ { showMedia && renderedMediaField && (
117
+ <div className="dataviews-view-picker-grid__media">
118
+ { renderedMediaField }
119
+ </div>
120
+ ) }
121
+ { showMedia && renderedMediaField && (
122
+ <DataViewsSelectionCheckbox
123
+ item={ item }
124
+ selection={ selection }
125
+ onChangeSelection={ onChangeSelection }
126
+ getItemId={ getItemId }
127
+ titleField={ titleField }
128
+ disabled={ false }
129
+ aria-hidden
130
+ tabIndex={ -1 }
131
+ />
132
+ ) }
133
+ <HStack
134
+ justify="space-between"
135
+ className="dataviews-view-picker-grid__title-actions"
136
+ >
137
+ <div className="dataviews-view-picker-grid__title-field dataviews-title-field">
138
+ { renderedTitleField }
139
+ </div>
140
+ </HStack>
141
+ <VStack spacing={ 1 }>
142
+ { showDescription && descriptionField?.render && (
143
+ <descriptionField.render
144
+ item={ item }
145
+ field={ descriptionField }
146
+ />
147
+ ) }
148
+ { !! badgeFields?.length && (
149
+ <HStack
150
+ className="dataviews-view-picker-grid__badge-fields"
151
+ spacing={ 2 }
152
+ wrap
153
+ alignment="top"
154
+ justify="flex-start"
155
+ >
156
+ { badgeFields.map( ( field ) => {
157
+ return (
158
+ <Badge
159
+ key={ field.id }
160
+ className="dataviews-view-picker-grid__field-value"
161
+ >
162
+ <field.render
163
+ item={ item }
164
+ field={ field }
165
+ />
166
+ </Badge>
167
+ );
168
+ } ) }
169
+ </HStack>
170
+ ) }
171
+ { !! regularFields?.length && (
172
+ <VStack
173
+ className="dataviews-view-picker-grid__fields"
174
+ spacing={ 1 }
175
+ >
176
+ { regularFields.map( ( field ) => {
177
+ return (
178
+ <Flex
179
+ className="dataviews-view-picker-grid__field"
180
+ key={ field.id }
181
+ gap={ 1 }
182
+ justify="flex-start"
183
+ expanded
184
+ style={ { height: 'auto' } }
185
+ direction="row"
186
+ >
187
+ <>
188
+ <FlexItem className="dataviews-view-picker-grid__field-name">
189
+ { field.header }
190
+ </FlexItem>
191
+ <FlexItem
192
+ className="dataviews-view-picker-grid__field-value"
193
+ style={ { maxHeight: 'none' } }
194
+ >
195
+ <field.render
196
+ item={ item }
197
+ field={ field }
198
+ />
199
+ </FlexItem>
200
+ </>
201
+ </Flex>
202
+ );
203
+ } ) }
204
+ </VStack>
205
+ ) }
206
+ </VStack>
207
+ </Composite.Item>
208
+ );
209
+ }
210
+
211
+ function GridGroup< Item >( {
212
+ groupName,
213
+ groupField,
214
+ children,
215
+ }: {
216
+ groupName: string;
217
+ groupField: NormalizedField< Item >;
218
+ children: ReactNode;
219
+ } ) {
220
+ const headerId = useInstanceId(
221
+ GridGroup,
222
+ 'dataviews-view-picker-grid-group__header'
223
+ );
224
+ return (
225
+ <VStack
226
+ key={ groupName }
227
+ spacing={ 2 }
228
+ role="group"
229
+ aria-labelledby={ headerId }
230
+ >
231
+ <h3
232
+ className="dataviews-view-picker-grid-group__header"
233
+ id={ headerId }
234
+ >
235
+ { sprintf(
236
+ // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
237
+ __( '%1$s: %2$s' ),
238
+ groupField.label,
239
+ groupName
240
+ ) }
241
+ </h3>
242
+ { children }
243
+ </VStack>
244
+ );
245
+ }
246
+
247
+ function ViewPickerGrid< Item >( {
248
+ actions,
249
+ data,
250
+ fields,
251
+ getItemId,
252
+ isLoading,
253
+ onChangeSelection,
254
+ selection,
255
+ view,
256
+ className,
257
+ empty,
258
+ }: ViewPickerGridProps< Item > ) {
259
+ const { resizeObserverRef, paginationInfo, itemListLabel } =
260
+ useContext( DataViewsContext );
261
+ const titleField = fields.find(
262
+ ( field ) => field.id === view?.titleField
263
+ );
264
+ const mediaField = fields.find(
265
+ ( field ) => field.id === view?.mediaField
266
+ );
267
+ const descriptionField = fields.find(
268
+ ( field ) => field.id === view?.descriptionField
269
+ );
270
+ const otherFields = view.fields ?? [];
271
+ const { regularFields, badgeFields } = otherFields.reduce(
272
+ (
273
+ accumulator: Record< string, NormalizedField< Item >[] >,
274
+ fieldId
275
+ ) => {
276
+ const field = fields.find( ( f ) => f.id === fieldId );
277
+ if ( ! field ) {
278
+ return accumulator;
279
+ }
280
+ // If the field is a badge field, add it to the badgeFields array
281
+ // otherwise add it to the rest visibleFields array.
282
+ const key = view.layout?.badgeFields?.includes( fieldId )
283
+ ? 'badgeFields'
284
+ : 'regularFields';
285
+ accumulator[ key ].push( field );
286
+ return accumulator;
287
+ },
288
+ { regularFields: [], badgeFields: [] }
289
+ );
290
+ const hasData = !! data?.length;
291
+ const usedPreviewSize = view.layout?.previewSize;
292
+ const isMultiselect = useIsMultiselectPicker( actions );
293
+
294
+ /*
295
+ * This is the maximum width that an image can achieve in the grid. The reasoning is:
296
+ * The biggest min image width available is 430px (see /dataviews-layouts/grid/preview-size-picker.tsx).
297
+ * Because the grid is responsive, once there is room for another column, the images shrink to accommodate it.
298
+ * So each image will never grow past 2*430px plus a little more to account for the gaps.
299
+ */
300
+ const size = '900px';
301
+
302
+ const groupField = view.groupByField
303
+ ? fields.find( ( f ) => f.id === view.groupByField )
304
+ : null;
305
+ const dataByGroup = groupField ? getDataByGroup( data, groupField ) : null;
306
+
307
+ const isInfiniteScroll = view.infiniteScrollEnabled && ! dataByGroup;
308
+
309
+ const currentPage = view?.page ?? 1;
310
+ const perPage = view?.perPage ?? 0;
311
+ const setSize = isInfiniteScroll ? paginationInfo?.totalItems : undefined;
312
+
313
+ return (
314
+ <>
315
+ {
316
+ // Render multiple groups.
317
+ hasData && groupField && dataByGroup && (
318
+ <Composite
319
+ virtualFocus
320
+ orientation="horizontal"
321
+ role="listbox"
322
+ aria-multiselectable={ isMultiselect }
323
+ className={ clsx(
324
+ 'dataviews-view-picker-grid',
325
+ className
326
+ ) }
327
+ aria-label={ itemListLabel }
328
+ render={ ( { children, ...props } ) => (
329
+ <VStack
330
+ spacing={ 4 }
331
+ children={ children }
332
+ { ...props }
333
+ />
334
+ ) }
335
+ >
336
+ { Array.from( dataByGroup.entries() ).map(
337
+ ( [ groupName, groupItems ] ) => (
338
+ <GridGroup
339
+ key={ groupName }
340
+ groupName={ groupName }
341
+ groupField={ groupField }
342
+ >
343
+ <GridItems
344
+ previewSize={ usedPreviewSize }
345
+ style={ {
346
+ gridTemplateColumns:
347
+ usedPreviewSize &&
348
+ `repeat(auto-fill, minmax(${ usedPreviewSize }px, 1fr))`,
349
+ } }
350
+ aria-busy={ isLoading }
351
+ ref={
352
+ resizeObserverRef as React.RefObject< HTMLDivElement >
353
+ }
354
+ >
355
+ { groupItems.map( ( item ) => {
356
+ const posInSet =
357
+ ( currentPage - 1 ) * perPage +
358
+ data.indexOf( item ) +
359
+ 1;
360
+ return (
361
+ <GridItem
362
+ key={ getItemId( item ) }
363
+ view={ view }
364
+ multiselect={
365
+ isMultiselect
366
+ }
367
+ selection={ selection }
368
+ onChangeSelection={
369
+ onChangeSelection
370
+ }
371
+ getItemId={ getItemId }
372
+ item={ item }
373
+ mediaField={ mediaField }
374
+ titleField={ titleField }
375
+ descriptionField={
376
+ descriptionField
377
+ }
378
+ regularFields={
379
+ regularFields
380
+ }
381
+ badgeFields={ badgeFields }
382
+ config={ {
383
+ sizes: size,
384
+ } }
385
+ posinset={ posInSet }
386
+ setsize={ setSize }
387
+ />
388
+ );
389
+ } ) }
390
+ </GridItems>
391
+ </GridGroup>
392
+ )
393
+ ) }
394
+ </Composite>
395
+ )
396
+ }
397
+
398
+ {
399
+ // Render a single grid with all data.
400
+ hasData && ! dataByGroup && (
401
+ <Composite
402
+ render={
403
+ <GridItems
404
+ className={ clsx(
405
+ 'dataviews-view-picker-grid',
406
+ className
407
+ ) }
408
+ previewSize={ usedPreviewSize }
409
+ aria-busy={ isLoading }
410
+ ref={
411
+ resizeObserverRef as React.RefObject< HTMLDivElement >
412
+ }
413
+ />
414
+ }
415
+ virtualFocus
416
+ orientation="horizontal"
417
+ role="listbox"
418
+ aria-multiselectable={ isMultiselect }
419
+ aria-label={ itemListLabel }
420
+ >
421
+ { data.map( ( item, index ) => {
422
+ let posinset = isInfiniteScroll
423
+ ? index + 1
424
+ : undefined;
425
+
426
+ if ( ! isInfiniteScroll ) {
427
+ // When infinite scroll isn't active, take pagination into account
428
+ // when calculating the posinset.
429
+ posinset =
430
+ ( currentPage - 1 ) * perPage + index + 1;
431
+ }
432
+
433
+ return (
434
+ <GridItem
435
+ key={ getItemId( item ) }
436
+ view={ view }
437
+ multiselect={ isMultiselect }
438
+ selection={ selection }
439
+ onChangeSelection={ onChangeSelection }
440
+ getItemId={ getItemId }
441
+ item={ item }
442
+ mediaField={ mediaField }
443
+ titleField={ titleField }
444
+ descriptionField={ descriptionField }
445
+ regularFields={ regularFields }
446
+ badgeFields={ badgeFields }
447
+ config={ {
448
+ sizes: size,
449
+ } }
450
+ posinset={ posinset }
451
+ setsize={ setSize }
452
+ />
453
+ );
454
+ } ) }
455
+ </Composite>
456
+ )
457
+ }
458
+ {
459
+ // Render empty state.
460
+ ! hasData && (
461
+ <div
462
+ className={ clsx( {
463
+ 'dataviews-loading': isLoading,
464
+ 'dataviews-no-results': ! isLoading,
465
+ } ) }
466
+ >
467
+ { isLoading ? (
468
+ <p>
469
+ <Spinner />
470
+ </p>
471
+ ) : (
472
+ empty
473
+ ) }
474
+ </div>
475
+ )
476
+ }
477
+ { hasData && isLoading && (
478
+ <p className="dataviews-loading-more">
479
+ <Spinner />
480
+ </p>
481
+ ) }
482
+ </>
483
+ );
484
+ }
485
+
486
+ export default ViewPickerGrid;