@wordpress/dataviews 9.1.1-next.233ccab9b.0 → 10.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 (787) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +137 -36
  3. package/build/components/dataform/index.js +52 -28
  4. package/build/components/dataform/index.js.map +7 -1
  5. package/build/components/dataform-context/index.js +33 -25
  6. package/build/components/dataform-context/index.js.map +7 -1
  7. package/build/components/dataviews/index.js +193 -154
  8. package/build/components/dataviews/index.js.map +7 -1
  9. package/build/components/dataviews-bulk-actions/index.js +264 -155
  10. package/build/components/dataviews-bulk-actions/index.js.map +7 -1
  11. package/build/components/dataviews-context/index.js +40 -36
  12. package/build/components/dataviews-context/index.js.map +7 -1
  13. package/build/components/dataviews-filters/add-filter.js +78 -73
  14. package/build/components/dataviews-filters/add-filter.js.map +7 -1
  15. package/build/components/dataviews-filters/filter.js +473 -263
  16. package/build/components/dataviews-filters/filter.js.map +7 -1
  17. package/build/components/dataviews-filters/filters-toggled.js +39 -25
  18. package/build/components/dataviews-filters/filters-toggled.js.map +7 -1
  19. package/build/components/dataviews-filters/filters.js +95 -67
  20. package/build/components/dataviews-filters/filters.js.map +7 -1
  21. package/build/components/dataviews-filters/index.js +44 -31
  22. package/build/components/dataviews-filters/index.js.map +7 -1
  23. package/build/components/dataviews-filters/input-widget.js +88 -89
  24. package/build/components/dataviews-filters/input-widget.js.map +7 -1
  25. package/build/components/dataviews-filters/reset-filters.js +50 -34
  26. package/build/components/dataviews-filters/reset-filters.js.map +7 -1
  27. package/build/components/dataviews-filters/search-widget.js +301 -205
  28. package/build/components/dataviews-filters/search-widget.js.map +7 -1
  29. package/build/components/dataviews-filters/toggle.js +88 -63
  30. package/build/components/dataviews-filters/toggle.js.map +7 -1
  31. package/build/components/dataviews-filters/use-filters.js +40 -29
  32. package/build/components/dataviews-filters/use-filters.js.map +7 -1
  33. package/build/components/dataviews-filters/utils.js +26 -10
  34. package/build/components/dataviews-filters/utils.js.map +7 -1
  35. package/build/components/dataviews-footer/index.js +54 -33
  36. package/build/components/dataviews-footer/index.js.map +7 -1
  37. package/build/components/dataviews-item-actions/index.js +188 -150
  38. package/build/components/dataviews-item-actions/index.js.map +7 -1
  39. package/build/components/dataviews-layout/index.js +64 -49
  40. package/build/components/dataviews-layout/index.js.map +7 -1
  41. package/build/components/dataviews-pagination/index.js +143 -99
  42. package/build/components/dataviews-pagination/index.js.map +7 -1
  43. package/build/components/dataviews-picker/footer.js +152 -101
  44. package/build/components/dataviews-picker/footer.js.map +7 -1
  45. package/build/components/dataviews-picker/index.js +173 -145
  46. package/build/components/dataviews-picker/index.js.map +7 -1
  47. package/build/components/dataviews-search/index.js +63 -46
  48. package/build/components/dataviews-search/index.js.map +7 -1
  49. package/build/components/dataviews-selection-checkbox/index.js +45 -35
  50. package/build/components/dataviews-selection-checkbox/index.js.map +7 -1
  51. package/build/components/dataviews-view-config/index.js +587 -512
  52. package/build/components/dataviews-view-config/index.js.map +7 -1
  53. package/build/components/dataviews-view-config/infinite-scroll-toggle.js +56 -39
  54. package/build/components/dataviews-view-config/infinite-scroll-toggle.js.map +7 -1
  55. package/build/constants.js +215 -108
  56. package/build/constants.js.map +7 -1
  57. package/build/dataform-controls/array.js +109 -145
  58. package/build/dataform-controls/array.js.map +7 -1
  59. package/build/dataform-controls/checkbox.js +56 -66
  60. package/build/dataform-controls/checkbox.js.map +7 -1
  61. package/build/dataform-controls/color.js +112 -119
  62. package/build/dataform-controls/color.js.map +7 -1
  63. package/build/dataform-controls/date.js +531 -349
  64. package/build/dataform-controls/date.js.map +7 -1
  65. package/build/dataform-controls/datetime.js +189 -148
  66. package/build/dataform-controls/datetime.js.map +7 -1
  67. package/build/dataform-controls/email.js +52 -32
  68. package/build/dataform-controls/email.js.map +7 -1
  69. package/build/dataform-controls/index.js +83 -63
  70. package/build/dataform-controls/index.js.map +7 -1
  71. package/build/dataform-controls/integer.js +36 -129
  72. package/build/dataform-controls/integer.js.map +7 -1
  73. package/build/dataform-controls/number.js +39 -0
  74. package/build/dataform-controls/number.js.map +7 -0
  75. package/build/dataform-controls/password.js +66 -38
  76. package/build/dataform-controls/password.js.map +7 -1
  77. package/build/dataform-controls/radio.js +61 -64
  78. package/build/dataform-controls/radio.js.map +7 -1
  79. package/build/dataform-controls/select.js +70 -88
  80. package/build/dataform-controls/select.js.map +7 -1
  81. package/build/dataform-controls/telephone.js +52 -32
  82. package/build/dataform-controls/telephone.js.map +7 -1
  83. package/build/dataform-controls/text.js +52 -30
  84. package/build/dataform-controls/text.js.map +7 -1
  85. package/build/dataform-controls/textarea.js +62 -71
  86. package/build/dataform-controls/textarea.js.map +7 -1
  87. package/build/dataform-controls/toggle-group.js +73 -66
  88. package/build/dataform-controls/toggle-group.js.map +7 -1
  89. package/build/dataform-controls/toggle.js +57 -67
  90. package/build/dataform-controls/toggle.js.map +7 -1
  91. package/build/dataform-controls/url.js +52 -32
  92. package/build/dataform-controls/url.js.map +7 -1
  93. package/build/dataform-controls/utils/get-custom-validity.js +35 -0
  94. package/build/dataform-controls/utils/get-custom-validity.js.map +7 -0
  95. package/build/dataform-controls/utils/relative-date-control.js +122 -0
  96. package/build/dataform-controls/utils/relative-date-control.js.map +7 -0
  97. package/build/dataform-controls/utils/validated-input.js +67 -71
  98. package/build/dataform-controls/utils/validated-input.js.map +7 -1
  99. package/build/dataform-controls/utils/validated-number.js +167 -0
  100. package/build/dataform-controls/utils/validated-number.js.map +7 -0
  101. package/build/dataform-layouts/card/index.js +217 -0
  102. package/build/dataform-layouts/card/index.js.map +7 -0
  103. package/build/dataform-layouts/data-form-layout.js +95 -0
  104. package/build/dataform-layouts/data-form-layout.js.map +7 -0
  105. package/build/dataform-layouts/get-summary-fields.js +45 -0
  106. package/build/dataform-layouts/get-summary-fields.js.map +7 -0
  107. package/build/dataform-layouts/index.js +99 -0
  108. package/build/dataform-layouts/index.js.map +7 -0
  109. package/build/dataform-layouts/is-combined-field.js +31 -0
  110. package/build/dataform-layouts/is-combined-field.js.map +7 -0
  111. package/build/dataform-layouts/normalize-form-fields.js +104 -0
  112. package/build/dataform-layouts/normalize-form-fields.js.map +7 -0
  113. package/build/dataform-layouts/panel/dropdown.js +159 -0
  114. package/build/dataform-layouts/panel/dropdown.js.map +7 -0
  115. package/build/dataform-layouts/panel/index.js +152 -0
  116. package/build/dataform-layouts/panel/index.js.map +7 -0
  117. package/build/dataform-layouts/panel/modal.js +176 -0
  118. package/build/dataform-layouts/panel/modal.js.map +7 -0
  119. package/build/dataform-layouts/panel/summary-button.js +93 -0
  120. package/build/dataform-layouts/panel/summary-button.js.map +7 -0
  121. package/build/dataform-layouts/regular/index.js +139 -0
  122. package/build/dataform-layouts/regular/index.js.map +7 -0
  123. package/build/dataform-layouts/row/index.js +120 -0
  124. package/build/dataform-layouts/row/index.js.map +7 -0
  125. package/build/dataviews-layouts/grid/index.js +337 -278
  126. package/build/dataviews-layouts/grid/index.js.map +7 -1
  127. package/build/dataviews-layouts/grid/preview-size-picker.js +94 -69
  128. package/build/dataviews-layouts/grid/preview-size-picker.js.map +7 -1
  129. package/build/dataviews-layouts/index.js +75 -48
  130. package/build/dataviews-layouts/index.js.map +7 -1
  131. package/build/dataviews-layouts/list/index.js +441 -354
  132. package/build/dataviews-layouts/list/index.js.map +7 -1
  133. package/build/dataviews-layouts/picker-grid/index.js +366 -300
  134. package/build/dataviews-layouts/picker-grid/index.js.map +7 -1
  135. package/build/dataviews-layouts/table/column-header-menu.js +144 -133
  136. package/build/dataviews-layouts/table/column-header-menu.js.map +7 -1
  137. package/build/dataviews-layouts/table/column-primary.js +86 -66
  138. package/build/dataviews-layouts/table/column-primary.js.map +7 -1
  139. package/build/dataviews-layouts/table/density-picker.js +86 -46
  140. package/build/dataviews-layouts/table/density-picker.js.map +7 -1
  141. package/build/dataviews-layouts/table/index.js +354 -319
  142. package/build/dataviews-layouts/table/index.js.map +7 -1
  143. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +55 -47
  144. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +7 -1
  145. package/build/dataviews-layouts/utils/get-data-by-group.js +24 -13
  146. package/build/dataviews-layouts/utils/get-data-by-group.js.map +7 -1
  147. package/build/dataviews-layouts/utils/grid-items.js +51 -34
  148. package/build/dataviews-layouts/utils/grid-items.js.map +7 -1
  149. package/build/dataviews-layouts/utils/item-click-wrapper.js +53 -31
  150. package/build/dataviews-layouts/utils/item-click-wrapper.js.map +7 -1
  151. package/build/dataviews-layouts/utils/preview-size-picker.js +94 -69
  152. package/build/dataviews-layouts/utils/preview-size-picker.js.map +7 -1
  153. package/build/field-types/array.js +46 -41
  154. package/build/field-types/array.js.map +7 -1
  155. package/build/field-types/boolean.js +52 -47
  156. package/build/field-types/boolean.js.map +7 -1
  157. package/build/field-types/color.js +79 -81
  158. package/build/field-types/color.js.map +7 -1
  159. package/build/field-types/date.js +69 -48
  160. package/build/field-types/date.js.map +7 -1
  161. package/build/field-types/datetime.js +62 -43
  162. package/build/field-types/datetime.js.map +7 -1
  163. package/build/field-types/email.js +58 -47
  164. package/build/field-types/email.js.map +7 -1
  165. package/build/field-types/index.js +84 -89
  166. package/build/field-types/index.js.map +7 -1
  167. package/build/field-types/integer.js +68 -45
  168. package/build/field-types/integer.js.map +7 -1
  169. package/build/field-types/media.js +25 -27
  170. package/build/field-types/media.js.map +7 -1
  171. package/build/field-types/number.js +95 -0
  172. package/build/field-types/number.js.map +7 -0
  173. package/build/field-types/password.js +40 -39
  174. package/build/field-types/password.js.map +7 -1
  175. package/build/field-types/telephone.js +55 -45
  176. package/build/field-types/telephone.js.map +7 -1
  177. package/build/field-types/text.js +55 -46
  178. package/build/field-types/text.js.map +7 -1
  179. package/build/field-types/url.js +55 -45
  180. package/build/field-types/url.js.map +7 -1
  181. package/build/field-types/utils/render-from-elements.js +52 -0
  182. package/build/field-types/utils/render-from-elements.js.map +7 -0
  183. package/build/hooks/index.js +39 -0
  184. package/build/hooks/index.js.map +7 -0
  185. package/build/hooks/use-elements.js +63 -0
  186. package/build/hooks/use-elements.js.map +7 -0
  187. package/build/hooks/use-form-validity.js +426 -0
  188. package/build/hooks/use-form-validity.js.map +7 -0
  189. package/build/index.js +50 -45
  190. package/build/index.js.map +7 -1
  191. package/build/lock-unlock.js +31 -14
  192. package/build/lock-unlock.js.map +7 -1
  193. package/build/types/dataform.js +17 -0
  194. package/build/types/dataform.js.map +7 -0
  195. package/build/types/dataviews.js +17 -0
  196. package/build/types/dataviews.js.map +7 -0
  197. package/build/types/field-api.js +17 -0
  198. package/build/types/field-api.js.map +7 -0
  199. package/build/types/index.js +17 -0
  200. package/build/types/index.js.map +7 -0
  201. package/build/types/private.js +17 -0
  202. package/build/types/private.js.map +7 -0
  203. package/build/utils/filter-sort-and-paginate.js +285 -0
  204. package/build/utils/filter-sort-and-paginate.js.map +7 -0
  205. package/build/utils/has-elements.js +27 -0
  206. package/build/utils/has-elements.js.map +7 -0
  207. package/build/utils/normalize-fields.js +160 -0
  208. package/build/utils/normalize-fields.js.map +7 -0
  209. package/build-module/components/dataform/index.js +25 -25
  210. package/build-module/components/dataform/index.js.map +7 -1
  211. package/build-module/components/dataform-context/index.js +11 -19
  212. package/build-module/components/dataform-context/index.js.map +7 -1
  213. package/build-module/components/dataviews/index.js +154 -127
  214. package/build-module/components/dataviews/index.js.map +7 -1
  215. package/build-module/components/dataviews-bulk-actions/index.js +227 -140
  216. package/build-module/components/dataviews-bulk-actions/index.js.map +7 -1
  217. package/build-module/components/dataviews-context/index.js +20 -30
  218. package/build-module/components/dataviews-context/index.js.map +7 -1
  219. package/build-module/components/dataviews-filters/add-filter.js +60 -68
  220. package/build-module/components/dataviews-filters/add-filter.js.map +7 -1
  221. package/build-module/components/dataviews-filters/filter.js +454 -232
  222. package/build-module/components/dataviews-filters/filter.js.map +7 -1
  223. package/build-module/components/dataviews-filters/filters-toggled.js +11 -19
  224. package/build-module/components/dataviews-filters/filters-toggled.js.map +7 -1
  225. package/build-module/components/dataviews-filters/filters.js +65 -59
  226. package/build-module/components/dataviews-filters/filters.js.map +7 -1
  227. package/build-module/components/dataviews-filters/index.js +11 -5
  228. package/build-module/components/dataviews-filters/index.js.map +7 -1
  229. package/build-module/components/dataviews-filters/input-widget.js +57 -81
  230. package/build-module/components/dataviews-filters/input-widget.js.map +7 -1
  231. package/build-module/components/dataviews-filters/reset-filters.js +33 -30
  232. package/build-module/components/dataviews-filters/reset-filters.js.map +7 -1
  233. package/build-module/components/dataviews-filters/search-widget.js +276 -195
  234. package/build-module/components/dataviews-filters/search-widget.js.map +7 -1
  235. package/build-module/components/dataviews-filters/toggle.js +58 -55
  236. package/build-module/components/dataviews-filters/toggle.js.map +7 -1
  237. package/build-module/components/dataviews-filters/use-filters.js +21 -23
  238. package/build-module/components/dataviews-filters/use-filters.js.map +7 -1
  239. package/build-module/components/dataviews-filters/utils.js +5 -6
  240. package/build-module/components/dataviews-filters/utils.js.map +7 -1
  241. package/build-module/components/dataviews-footer/index.js +28 -26
  242. package/build-module/components/dataviews-footer/index.js.map +7 -1
  243. package/build-module/components/dataviews-item-actions/index.js +171 -144
  244. package/build-module/components/dataviews-item-actions/index.js.map +7 -1
  245. package/build-module/components/dataviews-layout/index.js +35 -42
  246. package/build-module/components/dataviews-layout/index.js.map +7 -1
  247. package/build-module/components/dataviews-pagination/index.js +115 -92
  248. package/build-module/components/dataviews-pagination/index.js.map +7 -1
  249. package/build-module/components/dataviews-picker/footer.js +122 -93
  250. package/build-module/components/dataviews-picker/footer.js.map +7 -1
  251. package/build-module/components/dataviews-picker/index.js +137 -121
  252. package/build-module/components/dataviews-picker/index.js.map +7 -1
  253. package/build-module/components/dataviews-search/index.js +30 -35
  254. package/build-module/components/dataviews-search/index.js.map +7 -1
  255. package/build-module/components/dataviews-selection-checkbox/index.js +28 -31
  256. package/build-module/components/dataviews-selection-checkbox/index.js.map +7 -1
  257. package/build-module/components/dataviews-view-config/index.js +579 -504
  258. package/build-module/components/dataviews-view-config/index.js.map +7 -1
  259. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js +28 -33
  260. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js.map +7 -1
  261. package/build-module/constants.js +157 -101
  262. package/build-module/constants.js.map +7 -1
  263. package/build-module/dataform-controls/array.js +82 -141
  264. package/build-module/dataform-controls/array.js.map +7 -1
  265. package/build-module/dataform-controls/checkbox.js +28 -61
  266. package/build-module/dataform-controls/checkbox.js.map +7 -1
  267. package/build-module/dataform-controls/color.js +89 -115
  268. package/build-module/dataform-controls/color.js.map +7 -1
  269. package/build-module/dataform-controls/date.js +524 -337
  270. package/build-module/dataform-controls/date.js.map +7 -1
  271. package/build-module/dataform-controls/datetime.js +162 -139
  272. package/build-module/dataform-controls/datetime.js.map +7 -1
  273. package/build-module/dataform-controls/email.js +28 -28
  274. package/build-module/dataform-controls/email.js.map +7 -1
  275. package/build-module/dataform-controls/index.js +36 -43
  276. package/build-module/dataform-controls/index.js.map +7 -1
  277. package/build-module/dataform-controls/integer.js +8 -123
  278. package/build-module/dataform-controls/integer.js.map +7 -1
  279. package/build-module/dataform-controls/number.js +9 -0
  280. package/build-module/dataform-controls/number.js.map +7 -0
  281. package/build-module/dataform-controls/password.js +37 -30
  282. package/build-module/dataform-controls/password.js.map +7 -1
  283. package/build-module/dataform-controls/radio.js +34 -60
  284. package/build-module/dataform-controls/radio.js.map +7 -1
  285. package/build-module/dataform-controls/select.js +43 -84
  286. package/build-module/dataform-controls/select.js.map +7 -1
  287. package/build-module/dataform-controls/telephone.js +28 -28
  288. package/build-module/dataform-controls/telephone.js.map +7 -1
  289. package/build-module/dataform-controls/text.js +25 -26
  290. package/build-module/dataform-controls/text.js.map +7 -1
  291. package/build-module/dataform-controls/textarea.js +35 -67
  292. package/build-module/dataform-controls/textarea.js.map +7 -1
  293. package/build-module/dataform-controls/toggle-group.js +50 -62
  294. package/build-module/dataform-controls/toggle-group.js.map +7 -1
  295. package/build-module/dataform-controls/toggle.js +29 -62
  296. package/build-module/dataform-controls/toggle.js.map +7 -1
  297. package/build-module/dataform-controls/url.js +28 -28
  298. package/build-module/dataform-controls/url.js.map +7 -1
  299. package/build-module/dataform-controls/utils/get-custom-validity.js +15 -0
  300. package/build-module/dataform-controls/utils/get-custom-validity.js.map +7 -0
  301. package/build-module/dataform-controls/utils/relative-date-control.js +97 -0
  302. package/build-module/dataform-controls/utils/relative-date-control.js.map +7 -0
  303. package/build-module/dataform-controls/utils/validated-input.js +40 -67
  304. package/build-module/dataform-controls/utils/validated-input.js.map +7 -1
  305. package/build-module/dataform-controls/utils/validated-number.js +142 -0
  306. package/build-module/dataform-controls/utils/validated-number.js.map +7 -0
  307. package/build-module/dataform-layouts/card/index.js +183 -0
  308. package/build-module/dataform-layouts/card/index.js.map +7 -0
  309. package/build-module/dataform-layouts/data-form-layout.js +61 -0
  310. package/build-module/dataform-layouts/data-form-layout.js.map +7 -0
  311. package/build-module/dataform-layouts/get-summary-fields.js +21 -0
  312. package/build-module/dataform-layouts/get-summary-fields.js.map +7 -0
  313. package/build-module/dataform-layouts/index.js +68 -0
  314. package/build-module/dataform-layouts/index.js.map +7 -0
  315. package/build-module/dataform-layouts/is-combined-field.js +7 -0
  316. package/build-module/dataform-layouts/is-combined-field.js.map +7 -0
  317. package/build-module/dataform-layouts/normalize-form-fields.js +79 -0
  318. package/build-module/dataform-layouts/normalize-form-fields.js.map +7 -0
  319. package/build-module/dataform-layouts/panel/dropdown.js +136 -0
  320. package/build-module/dataform-layouts/panel/dropdown.js.map +7 -0
  321. package/build-module/dataform-layouts/panel/index.js +125 -0
  322. package/build-module/dataform-layouts/panel/index.js.map +7 -0
  323. package/build-module/dataform-layouts/panel/modal.js +151 -0
  324. package/build-module/dataform-layouts/panel/modal.js.map +7 -0
  325. package/build-module/dataform-layouts/panel/summary-button.js +73 -0
  326. package/build-module/dataform-layouts/panel/summary-button.js.map +7 -0
  327. package/build-module/dataform-layouts/regular/index.js +115 -0
  328. package/build-module/dataform-layouts/regular/index.js.map +7 -0
  329. package/build-module/dataform-layouts/row/index.js +95 -0
  330. package/build-module/dataform-layouts/row/index.js.map +7 -0
  331. package/build-module/dataviews-layouts/grid/index.js +316 -267
  332. package/build-module/dataviews-layouts/grid/index.js.map +7 -1
  333. package/build-module/dataviews-layouts/grid/preview-size-picker.js +66 -63
  334. package/build-module/dataviews-layouts/grid/preview-size-picker.js.map +7 -1
  335. package/build-module/dataviews-layouts/index.js +53 -42
  336. package/build-module/dataviews-layouts/index.js.map +7 -1
  337. package/build-module/dataviews-layouts/list/index.js +422 -339
  338. package/build-module/dataviews-layouts/list/index.js.map +7 -1
  339. package/build-module/dataviews-layouts/picker-grid/index.js +344 -291
  340. package/build-module/dataviews-layouts/picker-grid/index.js.map +7 -1
  341. package/build-module/dataviews-layouts/table/column-header-menu.js +129 -127
  342. package/build-module/dataviews-layouts/table/column-header-menu.js.map +7 -1
  343. package/build-module/dataviews-layouts/table/column-primary.js +71 -62
  344. package/build-module/dataviews-layouts/table/column-primary.js.map +7 -1
  345. package/build-module/dataviews-layouts/table/density-picker.js +61 -40
  346. package/build-module/dataviews-layouts/table/density-picker.js.map +7 -1
  347. package/build-module/dataviews-layouts/table/index.js +326 -302
  348. package/build-module/dataviews-layouts/table/index.js.map +7 -1
  349. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +31 -40
  350. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +7 -1
  351. package/build-module/dataviews-layouts/utils/get-data-by-group.js +7 -10
  352. package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +7 -1
  353. package/build-module/dataviews-layouts/utils/grid-items.js +19 -28
  354. package/build-module/dataviews-layouts/utils/grid-items.js.map +7 -1
  355. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +32 -28
  356. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +7 -1
  357. package/build-module/dataviews-layouts/utils/preview-size-picker.js +66 -63
  358. package/build-module/dataviews-layouts/utils/preview-size-picker.js.map +7 -1
  359. package/build-module/field-types/array.js +32 -37
  360. package/build-module/field-types/array.js.map +7 -1
  361. package/build-module/field-types/boolean.js +22 -41
  362. package/build-module/field-types/boolean.js.map +7 -1
  363. package/build-module/field-types/color.js +51 -72
  364. package/build-module/field-types/color.js.map +7 -1
  365. package/build-module/field-types/date.js +51 -44
  366. package/build-module/field-types/date.js.map +7 -1
  367. package/build-module/field-types/datetime.js +43 -39
  368. package/build-module/field-types/datetime.js.map +7 -1
  369. package/build-module/field-types/email.js +39 -42
  370. package/build-module/field-types/email.js.map +7 -1
  371. package/build-module/field-types/index.js +43 -72
  372. package/build-module/field-types/index.js.map +7 -1
  373. package/build-module/field-types/integer.js +52 -41
  374. package/build-module/field-types/integer.js.map +7 -1
  375. package/build-module/field-types/media.js +7 -23
  376. package/build-module/field-types/media.js.map +7 -1
  377. package/build-module/field-types/number.js +77 -0
  378. package/build-module/field-types/number.js.map +7 -0
  379. package/build-module/field-types/password.js +12 -36
  380. package/build-module/field-types/password.js.map +7 -1
  381. package/build-module/field-types/telephone.js +36 -40
  382. package/build-module/field-types/telephone.js.map +7 -1
  383. package/build-module/field-types/text.js +36 -41
  384. package/build-module/field-types/text.js.map +7 -1
  385. package/build-module/field-types/url.js +36 -40
  386. package/build-module/field-types/url.js.map +7 -1
  387. package/build-module/field-types/utils/render-from-elements.js +22 -0
  388. package/build-module/field-types/utils/render-from-elements.js.map +7 -0
  389. package/build-module/hooks/index.js +5 -0
  390. package/build-module/hooks/index.js.map +7 -0
  391. package/build-module/hooks/use-elements.js +43 -0
  392. package/build-module/hooks/use-elements.js.map +7 -0
  393. package/build-module/hooks/use-form-validity.js +392 -0
  394. package/build-module/hooks/use-form-validity.js.map +7 -0
  395. package/build-module/index.js +15 -7
  396. package/build-module/index.js.map +7 -1
  397. package/build-module/lock-unlock.js +8 -7
  398. package/build-module/lock-unlock.js.map +7 -1
  399. package/build-module/types/dataform.js +1 -0
  400. package/build-module/types/dataform.js.map +7 -0
  401. package/build-module/types/dataviews.js +1 -0
  402. package/build-module/types/dataviews.js.map +7 -0
  403. package/build-module/types/field-api.js +1 -0
  404. package/build-module/types/field-api.js.map +7 -0
  405. package/build-module/types/index.js +1 -0
  406. package/build-module/types/index.js.map +7 -0
  407. package/build-module/types/private.js +1 -0
  408. package/build-module/types/private.js.map +7 -0
  409. package/build-module/utils/filter-sort-and-paginate.js +278 -0
  410. package/build-module/utils/filter-sort-and-paginate.js.map +7 -0
  411. package/build-module/utils/has-elements.js +7 -0
  412. package/build-module/utils/has-elements.js.map +7 -0
  413. package/build-module/utils/normalize-fields.js +134 -0
  414. package/build-module/utils/normalize-fields.js.map +7 -0
  415. package/build-style/style-rtl.css +81 -217
  416. package/build-style/style.css +81 -217
  417. package/build-types/components/dataform/index.d.ts +1 -1
  418. package/build-types/components/dataform/index.d.ts.map +1 -1
  419. package/build-types/components/dataform-context/index.d.ts.map +1 -1
  420. package/build-types/components/dataviews-bulk-actions/index.d.ts +1 -1
  421. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  422. package/build-types/components/dataviews-context/index.d.ts +1 -1
  423. package/build-types/components/dataviews-filters/filter.d.ts +1 -1
  424. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
  425. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  426. package/build-types/components/dataviews-filters/use-filters.d.ts.map +1 -1
  427. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  428. package/build-types/components/dataviews-picker/footer.d.ts.map +1 -1
  429. package/build-types/components/dataviews-selection-checkbox/index.d.ts +1 -1
  430. package/build-types/dataform-controls/array.d.ts +1 -1
  431. package/build-types/dataform-controls/array.d.ts.map +1 -1
  432. package/build-types/dataform-controls/checkbox.d.ts +1 -1
  433. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  434. package/build-types/dataform-controls/color.d.ts +1 -1
  435. package/build-types/dataform-controls/color.d.ts.map +1 -1
  436. package/build-types/dataform-controls/date.d.ts +1 -1
  437. package/build-types/dataform-controls/date.d.ts.map +1 -1
  438. package/build-types/dataform-controls/datetime.d.ts +1 -1
  439. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  440. package/build-types/dataform-controls/email.d.ts +1 -1
  441. package/build-types/dataform-controls/email.d.ts.map +1 -1
  442. package/build-types/dataform-controls/index.d.ts.map +1 -1
  443. package/build-types/dataform-controls/integer.d.ts +4 -1
  444. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  445. package/build-types/dataform-controls/number.d.ts +6 -0
  446. package/build-types/dataform-controls/number.d.ts.map +1 -0
  447. package/build-types/dataform-controls/password.d.ts +1 -1
  448. package/build-types/dataform-controls/password.d.ts.map +1 -1
  449. package/build-types/dataform-controls/radio.d.ts +1 -1
  450. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  451. package/build-types/dataform-controls/select.d.ts +1 -1
  452. package/build-types/dataform-controls/select.d.ts.map +1 -1
  453. package/build-types/dataform-controls/telephone.d.ts +1 -1
  454. package/build-types/dataform-controls/telephone.d.ts.map +1 -1
  455. package/build-types/dataform-controls/text.d.ts +1 -1
  456. package/build-types/dataform-controls/text.d.ts.map +1 -1
  457. package/build-types/dataform-controls/textarea.d.ts +1 -1
  458. package/build-types/dataform-controls/textarea.d.ts.map +1 -1
  459. package/build-types/dataform-controls/toggle-group.d.ts +1 -1
  460. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  461. package/build-types/dataform-controls/toggle.d.ts +1 -1
  462. package/build-types/dataform-controls/toggle.d.ts.map +1 -1
  463. package/build-types/dataform-controls/url.d.ts +1 -1
  464. package/build-types/dataform-controls/url.d.ts.map +1 -1
  465. package/build-types/dataform-controls/utils/get-custom-validity.d.ts +9 -0
  466. package/build-types/dataform-controls/utils/get-custom-validity.d.ts.map +1 -0
  467. package/build-types/dataform-controls/utils/relative-date-control.d.ts +5 -0
  468. package/build-types/dataform-controls/utils/relative-date-control.d.ts.map +1 -0
  469. package/build-types/dataform-controls/utils/validated-input.d.ts +1 -1
  470. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -1
  471. package/build-types/dataform-controls/utils/validated-number.d.ts +9 -0
  472. package/build-types/dataform-controls/utils/validated-number.d.ts.map +1 -0
  473. package/build-types/{dataforms-layouts → dataform-layouts}/card/index.d.ts +1 -1
  474. package/build-types/dataform-layouts/card/index.d.ts.map +1 -0
  475. package/build-types/{dataforms-layouts → dataform-layouts}/data-form-layout.d.ts +5 -3
  476. package/build-types/dataform-layouts/data-form-layout.d.ts.map +1 -0
  477. package/build-types/dataform-layouts/get-summary-fields.d.ts +12 -0
  478. package/build-types/dataform-layouts/get-summary-fields.d.ts.map +1 -0
  479. package/build-types/{dataforms-layouts → dataform-layouts}/index.d.ts +0 -5
  480. package/build-types/dataform-layouts/index.d.ts.map +1 -0
  481. package/build-types/dataform-layouts/is-combined-field.d.ts.map +1 -0
  482. package/build-types/{normalize-form-fields.d.ts → dataform-layouts/normalize-form-fields.d.ts} +1 -1
  483. package/build-types/dataform-layouts/normalize-form-fields.d.ts.map +1 -0
  484. package/build-types/{dataforms-layouts → dataform-layouts}/panel/dropdown.d.ts +8 -7
  485. package/build-types/dataform-layouts/panel/dropdown.d.ts.map +1 -0
  486. package/build-types/{dataforms-layouts → dataform-layouts}/panel/index.d.ts +1 -1
  487. package/build-types/dataform-layouts/panel/index.d.ts.map +1 -0
  488. package/build-types/{dataforms-layouts → dataform-layouts}/panel/modal.d.ts +5 -5
  489. package/build-types/dataform-layouts/panel/modal.d.ts.map +1 -0
  490. package/build-types/dataform-layouts/panel/summary-button.d.ts.map +1 -0
  491. package/build-types/{dataforms-layouts → dataform-layouts}/regular/index.d.ts +1 -1
  492. package/build-types/dataform-layouts/regular/index.d.ts.map +1 -0
  493. package/build-types/{dataforms-layouts → dataform-layouts}/row/index.d.ts +1 -1
  494. package/build-types/dataform-layouts/row/index.d.ts.map +1 -0
  495. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  496. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts +1 -1
  497. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -1
  498. package/build-types/field-types/array.d.ts.map +1 -1
  499. package/build-types/field-types/boolean.d.ts +2 -1
  500. package/build-types/field-types/boolean.d.ts.map +1 -1
  501. package/build-types/field-types/color.d.ts +2 -1
  502. package/build-types/field-types/color.d.ts.map +1 -1
  503. package/build-types/field-types/date.d.ts +4 -3
  504. package/build-types/field-types/date.d.ts.map +1 -1
  505. package/build-types/field-types/datetime.d.ts +3 -2
  506. package/build-types/field-types/datetime.d.ts.map +1 -1
  507. package/build-types/field-types/email.d.ts +3 -2
  508. package/build-types/field-types/email.d.ts.map +1 -1
  509. package/build-types/field-types/index.d.ts.map +1 -1
  510. package/build-types/field-types/integer.d.ts +2 -1
  511. package/build-types/field-types/integer.d.ts.map +1 -1
  512. package/build-types/field-types/media.d.ts +2 -5
  513. package/build-types/field-types/media.d.ts.map +1 -1
  514. package/build-types/field-types/number.d.ts +21 -0
  515. package/build-types/field-types/number.d.ts.map +1 -0
  516. package/build-types/field-types/password.d.ts +4 -3
  517. package/build-types/field-types/password.d.ts.map +1 -1
  518. package/build-types/field-types/telephone.d.ts +4 -3
  519. package/build-types/field-types/telephone.d.ts.map +1 -1
  520. package/build-types/field-types/text.d.ts +4 -3
  521. package/build-types/field-types/text.d.ts.map +1 -1
  522. package/build-types/field-types/url.d.ts +4 -3
  523. package/build-types/field-types/url.d.ts.map +1 -1
  524. package/build-types/field-types/utils/render-from-elements.d.ts +6 -0
  525. package/build-types/field-types/utils/render-from-elements.d.ts.map +1 -0
  526. package/build-types/hooks/index.d.ts +5 -0
  527. package/build-types/hooks/index.d.ts.map +1 -0
  528. package/build-types/hooks/use-elements.d.ts +12 -0
  529. package/build-types/hooks/use-elements.d.ts.map +1 -0
  530. package/build-types/hooks/use-form-validity.d.ts +16 -0
  531. package/build-types/hooks/use-form-validity.d.ts.map +1 -0
  532. package/build-types/index.d.ts +2 -2
  533. package/build-types/index.d.ts.map +1 -1
  534. package/build-types/{components/dataform/stories/index.story.d.ts → stories/dataform.story.d.ts} +16 -6
  535. package/build-types/stories/dataform.story.d.ts.map +1 -0
  536. package/build-types/{components/dataviews-picker/stories/index.story.d.ts → stories/dataviews-picker.story.d.ts} +2 -2
  537. package/build-types/stories/dataviews-picker.story.d.ts.map +1 -0
  538. package/build-types/{components/dataviews/stories/fixtures.d.ts → stories/dataviews.fixtures.d.ts} +2 -2
  539. package/build-types/stories/dataviews.fixtures.d.ts.map +1 -0
  540. package/build-types/{components/dataviews/stories/index.story.d.ts → stories/dataviews.story.d.ts} +3 -3
  541. package/build-types/stories/dataviews.story.d.ts.map +1 -0
  542. package/build-types/stories/field-types.story.d.ts +157 -0
  543. package/build-types/stories/field-types.story.d.ts.map +1 -0
  544. package/build-types/test/use-form-validity.d.ts +2 -0
  545. package/build-types/test/use-form-validity.d.ts.map +1 -0
  546. package/build-types/types/dataform.d.ts +112 -0
  547. package/build-types/types/dataform.d.ts.map +1 -0
  548. package/build-types/types/dataviews.d.ts +341 -0
  549. package/build-types/types/dataviews.d.ts.map +1 -0
  550. package/build-types/types/field-api.d.ts +298 -0
  551. package/build-types/types/field-api.d.ts.map +1 -0
  552. package/build-types/types/index.d.ts +4 -0
  553. package/build-types/types/index.d.ts.map +1 -0
  554. package/build-types/{private-types.d.ts → types/private.d.ts} +1 -1
  555. package/build-types/types/private.d.ts.map +1 -0
  556. package/build-types/{filter-and-sort-data-view.d.ts → utils/filter-sort-and-paginate.d.ts} +3 -3
  557. package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -0
  558. package/build-types/utils/has-elements.d.ts +6 -0
  559. package/build-types/utils/has-elements.d.ts.map +1 -0
  560. package/build-types/utils/normalize-fields.d.ts +9 -0
  561. package/build-types/utils/normalize-fields.d.ts.map +1 -0
  562. package/build-wp/index.js +3151 -2714
  563. package/package.json +16 -18
  564. package/src/components/dataform/index.tsx +9 -3
  565. package/src/components/dataform-context/index.tsx +3 -1
  566. package/src/components/dataviews/index.tsx +2 -2
  567. package/src/components/dataviews/style.scss +4 -0
  568. package/src/components/dataviews-bulk-actions/index.tsx +1 -2
  569. package/src/components/dataviews-bulk-actions/style.scss +3 -0
  570. package/src/components/dataviews-context/index.ts +1 -1
  571. package/src/components/dataviews-filters/filter.tsx +11 -5
  572. package/src/components/dataviews-filters/search-widget.tsx +30 -3
  573. package/src/components/dataviews-filters/style.scss +21 -6
  574. package/src/components/dataviews-filters/use-filters.ts +4 -2
  575. package/src/components/dataviews-footer/style.scss +4 -0
  576. package/src/components/dataviews-item-actions/index.tsx +6 -2
  577. package/src/components/dataviews-item-actions/style.scss +3 -0
  578. package/src/components/dataviews-pagination/style.scss +3 -0
  579. package/src/components/dataviews-picker/footer.tsx +2 -4
  580. package/src/components/dataviews-picker/index.tsx +2 -2
  581. package/src/components/dataviews-picker/style.scss +2 -0
  582. package/src/components/dataviews-selection-checkbox/index.tsx +1 -1
  583. package/src/components/dataviews-selection-checkbox/style.scss +3 -0
  584. package/src/components/dataviews-view-config/style.scss +3 -0
  585. package/src/dataform-controls/array.tsx +16 -82
  586. package/src/dataform-controls/checkbox.tsx +5 -41
  587. package/src/dataform-controls/color.tsx +5 -37
  588. package/src/dataform-controls/date.tsx +375 -238
  589. package/src/dataform-controls/datetime.tsx +92 -60
  590. package/src/dataform-controls/email.tsx +2 -0
  591. package/src/dataform-controls/index.tsx +4 -1
  592. package/src/dataform-controls/integer.tsx +3 -179
  593. package/src/dataform-controls/number.tsx +10 -0
  594. package/src/dataform-controls/password.tsx +2 -0
  595. package/src/dataform-controls/radio.tsx +24 -55
  596. package/src/dataform-controls/select.tsx +14 -61
  597. package/src/dataform-controls/style.scss +2 -0
  598. package/src/dataform-controls/telephone.tsx +2 -0
  599. package/src/dataform-controls/text.tsx +2 -0
  600. package/src/dataform-controls/textarea.tsx +6 -42
  601. package/src/dataform-controls/toggle-group.tsx +38 -64
  602. package/src/dataform-controls/toggle.tsx +6 -42
  603. package/src/dataform-controls/url.tsx +2 -0
  604. package/src/dataform-controls/utils/get-custom-validity.ts +24 -0
  605. package/src/dataform-controls/{relative-date-control.tsx → utils/relative-date-control.tsx} +37 -25
  606. package/src/dataform-controls/utils/validated-input.tsx +4 -40
  607. package/src/dataform-controls/utils/validated-number.tsx +171 -0
  608. package/src/{dataforms-layouts → dataform-layouts}/card/index.tsx +106 -8
  609. package/src/dataform-layouts/card/style.scss +24 -0
  610. package/src/{dataforms-layouts → dataform-layouts}/data-form-layout.tsx +22 -5
  611. package/src/dataform-layouts/get-summary-fields.ts +42 -0
  612. package/src/{dataforms-layouts → dataform-layouts}/index.tsx +32 -2
  613. package/src/{normalize-form-fields.ts → dataform-layouts/normalize-form-fields.ts} +28 -1
  614. package/src/{dataforms-layouts → dataform-layouts}/panel/dropdown.tsx +36 -15
  615. package/src/{dataforms-layouts → dataform-layouts}/panel/index.tsx +88 -55
  616. package/src/{dataforms-layouts → dataform-layouts}/panel/modal.tsx +42 -31
  617. package/src/{dataforms-layouts → dataform-layouts}/panel/style.scss +3 -0
  618. package/src/{dataforms-layouts → dataform-layouts}/regular/index.tsx +5 -1
  619. package/src/{dataforms-layouts → dataform-layouts}/regular/style.scss +2 -0
  620. package/src/{dataforms-layouts → dataform-layouts}/row/index.tsx +9 -4
  621. package/src/dataform-layouts/style.scss +5 -0
  622. package/src/dataviews-layouts/grid/index.tsx +1 -1
  623. package/src/dataviews-layouts/grid/style.scss +8 -3
  624. package/src/dataviews-layouts/list/index.tsx +0 -2
  625. package/src/dataviews-layouts/list/style.scss +3 -0
  626. package/src/dataviews-layouts/picker-grid/index.tsx +1 -1
  627. package/src/dataviews-layouts/picker-grid/style.scss +8 -4
  628. package/src/dataviews-layouts/table/column-header-menu.tsx +1 -1
  629. package/src/dataviews-layouts/table/index.tsx +1 -1
  630. package/src/dataviews-layouts/table/style.scss +9 -0
  631. package/src/dataviews-layouts/utils/grid-items.scss +2 -0
  632. package/src/dataviews-layouts/utils/item-click-wrapper.tsx +40 -2
  633. package/src/field-types/array.tsx +1 -0
  634. package/src/field-types/boolean.tsx +4 -3
  635. package/src/field-types/color.tsx +4 -10
  636. package/src/field-types/{date.ts → date.tsx} +5 -16
  637. package/src/field-types/datetime.tsx +8 -21
  638. package/src/field-types/email.tsx +7 -11
  639. package/src/field-types/index.tsx +13 -23
  640. package/src/field-types/integer.tsx +7 -11
  641. package/src/field-types/media.tsx +3 -17
  642. package/src/field-types/number.tsx +92 -0
  643. package/src/field-types/password.tsx +8 -21
  644. package/src/field-types/telephone.tsx +8 -21
  645. package/src/field-types/text.tsx +8 -21
  646. package/src/field-types/url.tsx +8 -21
  647. package/src/field-types/utils/render-from-elements.tsx +29 -0
  648. package/src/hooks/index.ts +4 -0
  649. package/src/hooks/use-elements.ts +66 -0
  650. package/src/hooks/use-form-validity.ts +571 -0
  651. package/src/index.ts +2 -2
  652. package/src/{components/dataform/stories/index.story.tsx → stories/dataform.story.tsx} +455 -63
  653. package/src/{components/dataviews-picker/stories/index.story.tsx → stories/dataviews-picker.story.tsx} +5 -9
  654. package/src/{components/dataviews/stories/fixtures.tsx → stories/dataviews.fixtures.tsx} +36 -5
  655. package/src/{components/dataviews/stories/index.story.tsx → stories/dataviews.story.tsx} +7 -8
  656. package/src/{field-types/stories/index.story.tsx → stories/field-types.story.tsx} +244 -48
  657. package/src/style.scss +19 -18
  658. package/src/test/dataform.tsx +36 -0
  659. package/src/test/dataviews-picker.tsx +1 -1
  660. package/src/test/dataviews.tsx +1 -2
  661. package/src/test/{filter-and-sort-data-view.js → filter-sort-and-paginate.js} +63 -16
  662. package/src/test/normalize-fields.ts +23 -1
  663. package/src/test/normalize-form-fields.ts +54 -5
  664. package/src/test/use-form-validity.ts +546 -0
  665. package/src/types/dataform.ts +144 -0
  666. package/src/types/dataviews.ts +443 -0
  667. package/src/types/field-api.ts +381 -0
  668. package/src/types/index.ts +3 -0
  669. package/src/{filter-and-sort-data-view.ts → utils/filter-sort-and-paginate.ts} +4 -4
  670. package/src/utils/has-elements.ts +11 -0
  671. package/src/{normalize-fields.ts → utils/normalize-fields.ts} +13 -8
  672. package/tsconfig.tsbuildinfo +1 -1
  673. package/build/dataform-controls/relative-date-control.js +0 -105
  674. package/build/dataform-controls/relative-date-control.js.map +0 -1
  675. package/build/dataforms-layouts/card/index.js +0 -136
  676. package/build/dataforms-layouts/card/index.js.map +0 -1
  677. package/build/dataforms-layouts/data-form-layout.js +0 -71
  678. package/build/dataforms-layouts/data-form-layout.js.map +0 -1
  679. package/build/dataforms-layouts/index.js +0 -58
  680. package/build/dataforms-layouts/index.js.map +0 -1
  681. package/build/dataforms-layouts/is-combined-field.js +0 -14
  682. package/build/dataforms-layouts/is-combined-field.js.map +0 -1
  683. package/build/dataforms-layouts/panel/dropdown.js +0 -120
  684. package/build/dataforms-layouts/panel/dropdown.js.map +0 -1
  685. package/build/dataforms-layouts/panel/index.js +0 -126
  686. package/build/dataforms-layouts/panel/index.js.map +0 -1
  687. package/build/dataforms-layouts/panel/modal.js +0 -120
  688. package/build/dataforms-layouts/panel/modal.js.map +0 -1
  689. package/build/dataforms-layouts/panel/summary-button.js +0 -67
  690. package/build/dataforms-layouts/panel/summary-button.js.map +0 -1
  691. package/build/dataforms-layouts/regular/index.js +0 -116
  692. package/build/dataforms-layouts/regular/index.js.map +0 -1
  693. package/build/dataforms-layouts/row/index.js +0 -113
  694. package/build/dataforms-layouts/row/index.js.map +0 -1
  695. package/build/filter-and-sort-data-view.js +0 -313
  696. package/build/filter-and-sort-data-view.js.map +0 -1
  697. package/build/normalize-fields.js +0 -155
  698. package/build/normalize-fields.js.map +0 -1
  699. package/build/normalize-form-fields.js +0 -81
  700. package/build/normalize-form-fields.js.map +0 -1
  701. package/build/private-types.js +0 -6
  702. package/build/private-types.js.map +0 -1
  703. package/build/types.js +0 -6
  704. package/build/types.js.map +0 -1
  705. package/build/utils.js +0 -22
  706. package/build/utils.js.map +0 -1
  707. package/build/validation.js +0 -61
  708. package/build/validation.js.map +0 -1
  709. package/build-module/dataform-controls/relative-date-control.js +0 -96
  710. package/build-module/dataform-controls/relative-date-control.js.map +0 -1
  711. package/build-module/dataforms-layouts/card/index.js +0 -127
  712. package/build-module/dataforms-layouts/card/index.js.map +0 -1
  713. package/build-module/dataforms-layouts/data-form-layout.js +0 -62
  714. package/build-module/dataforms-layouts/data-form-layout.js.map +0 -1
  715. package/build-module/dataforms-layouts/index.js +0 -51
  716. package/build-module/dataforms-layouts/index.js.map +0 -1
  717. package/build-module/dataforms-layouts/is-combined-field.js +0 -8
  718. package/build-module/dataforms-layouts/is-combined-field.js.map +0 -1
  719. package/build-module/dataforms-layouts/panel/dropdown.js +0 -113
  720. package/build-module/dataforms-layouts/panel/dropdown.js.map +0 -1
  721. package/build-module/dataforms-layouts/panel/index.js +0 -119
  722. package/build-module/dataforms-layouts/panel/index.js.map +0 -1
  723. package/build-module/dataforms-layouts/panel/modal.js +0 -113
  724. package/build-module/dataforms-layouts/panel/modal.js.map +0 -1
  725. package/build-module/dataforms-layouts/panel/summary-button.js +0 -60
  726. package/build-module/dataforms-layouts/panel/summary-button.js.map +0 -1
  727. package/build-module/dataforms-layouts/regular/index.js +0 -109
  728. package/build-module/dataforms-layouts/regular/index.js.map +0 -1
  729. package/build-module/dataforms-layouts/row/index.js +0 -106
  730. package/build-module/dataforms-layouts/row/index.js.map +0 -1
  731. package/build-module/filter-and-sort-data-view.js +0 -305
  732. package/build-module/filter-and-sort-data-view.js.map +0 -1
  733. package/build-module/normalize-fields.js +0 -145
  734. package/build-module/normalize-fields.js.map +0 -1
  735. package/build-module/normalize-form-fields.js +0 -73
  736. package/build-module/normalize-form-fields.js.map +0 -1
  737. package/build-module/private-types.js +0 -2
  738. package/build-module/private-types.js.map +0 -1
  739. package/build-module/types.js +0 -2
  740. package/build-module/types.js.map +0 -1
  741. package/build-module/utils.js +0 -16
  742. package/build-module/utils.js.map +0 -1
  743. package/build-module/validation.js +0 -54
  744. package/build-module/validation.js.map +0 -1
  745. package/build-types/components/dataform/stories/index.story.d.ts.map +0 -1
  746. package/build-types/components/dataviews/stories/fixtures.d.ts.map +0 -1
  747. package/build-types/components/dataviews/stories/index.story.d.ts.map +0 -1
  748. package/build-types/components/dataviews-picker/stories/index.story.d.ts.map +0 -1
  749. package/build-types/dataform-controls/relative-date-control.d.ts +0 -47
  750. package/build-types/dataform-controls/relative-date-control.d.ts.map +0 -1
  751. package/build-types/dataforms-layouts/card/index.d.ts.map +0 -1
  752. package/build-types/dataforms-layouts/data-form-layout.d.ts.map +0 -1
  753. package/build-types/dataforms-layouts/index.d.ts.map +0 -1
  754. package/build-types/dataforms-layouts/is-combined-field.d.ts.map +0 -1
  755. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +0 -1
  756. package/build-types/dataforms-layouts/panel/index.d.ts.map +0 -1
  757. package/build-types/dataforms-layouts/panel/modal.d.ts.map +0 -1
  758. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +0 -1
  759. package/build-types/dataforms-layouts/regular/index.d.ts.map +0 -1
  760. package/build-types/dataforms-layouts/row/index.d.ts.map +0 -1
  761. package/build-types/field-types/stories/index.story.d.ts +0 -85
  762. package/build-types/field-types/stories/index.story.d.ts.map +0 -1
  763. package/build-types/filter-and-sort-data-view.d.ts.map +0 -1
  764. package/build-types/normalize-fields.d.ts +0 -12
  765. package/build-types/normalize-fields.d.ts.map +0 -1
  766. package/build-types/normalize-form-fields.d.ts.map +0 -1
  767. package/build-types/private-types.d.ts.map +0 -1
  768. package/build-types/test/validation.d.ts +0 -2
  769. package/build-types/test/validation.d.ts.map +0 -1
  770. package/build-types/types.d.ts +0 -688
  771. package/build-types/types.d.ts.map +0 -1
  772. package/build-types/utils.d.ts +0 -6
  773. package/build-types/utils.d.ts.map +0 -1
  774. package/build-types/validation.d.ts +0 -12
  775. package/build-types/validation.d.ts.map +0 -1
  776. package/src/dataforms-layouts/card/style.scss +0 -10
  777. package/src/test/validation.ts +0 -312
  778. package/src/types.ts +0 -891
  779. package/src/utils.ts +0 -15
  780. package/src/validation.ts +0 -91
  781. /package/build-types/{dataforms-layouts → dataform-layouts}/is-combined-field.d.ts +0 -0
  782. /package/build-types/{dataforms-layouts → dataform-layouts}/panel/summary-button.d.ts +0 -0
  783. /package/src/{dataforms-layouts → dataform-layouts}/is-combined-field.ts +0 -0
  784. /package/src/{dataforms-layouts → dataform-layouts}/panel/summary-button.tsx +0 -0
  785. /package/src/{dataforms-layouts → dataform-layouts}/row/style.scss +0 -0
  786. /package/src/{components/dataviews/stories/style.css → stories/dataviews.style.css} +0 -0
  787. /package/src/{private-types.tsx → types/private.ts} +0 -0
@@ -16,20 +16,24 @@ import {
16
16
  /**
17
17
  * Internal dependencies
18
18
  */
19
- import DataForm from '../index';
20
- import { isItemValid } from '../../../validation';
19
+ import DataForm from '../components/dataform';
20
+ import useFormValidity from '../hooks/use-form-validity';
21
+
21
22
  import type {
23
+ CardLayout,
24
+ DataFormControlProps,
22
25
  Field,
26
+ FieldValidity,
23
27
  Form,
24
- DataFormControlProps,
25
28
  Layout,
26
- RegularLayout,
27
29
  PanelLayout,
28
- CardLayout,
29
- } from '../../../types';
30
- import { unlock } from '../../../lock-unlock';
30
+ RegularLayout,
31
+ Rules,
32
+ } from '../types';
33
+ import { unlock } from '../lock-unlock';
34
+ import DateControl from '../dataform-controls/date';
31
35
 
32
- const { ValidatedTextControl } = unlock( privateApis );
36
+ const { ValidatedTextControl, Badge } = unlock( privateApis );
33
37
 
34
38
  type SamplePost = {
35
39
  title: string;
@@ -431,7 +435,6 @@ const LayoutPanelComponent = ( {
431
435
  id: 'discussion',
432
436
  label: 'Discussion',
433
437
  children: [ 'comment_status', 'ping_status' ],
434
- summary: 'discussion',
435
438
  },
436
439
  {
437
440
  id: 'address1',
@@ -447,13 +450,19 @@ const LayoutPanelComponent = ( {
447
450
  'flight_status',
448
451
  'gate',
449
452
  ],
450
- summary: [ 'origin', 'destination', 'flight_status' ],
453
+ layout: {
454
+ type: 'panel',
455
+ summary: [ 'origin', 'destination', 'flight_status' ],
456
+ },
451
457
  },
452
458
  {
453
459
  id: 'passenger_details',
454
460
  label: 'Passenger Details',
455
461
  children: [ 'author', 'seat' ],
456
- summary: [ 'author', 'seat' ],
462
+ layout: {
463
+ type: 'panel',
464
+ summary: [ 'author', 'seat' ],
465
+ },
457
466
  },
458
467
  ],
459
468
  };
@@ -474,13 +483,35 @@ const LayoutPanelComponent = ( {
474
483
  );
475
484
  };
476
485
 
486
+ function getCustomValidity< Item >(
487
+ isValid: Rules< Item >,
488
+ validity: FieldValidity | undefined
489
+ ) {
490
+ let customValidity;
491
+ if ( isValid?.required && validity?.required ) {
492
+ // If the consumer provides a message for required,
493
+ // use it instead of the native built-in message.
494
+ customValidity = validity?.required?.message
495
+ ? validity.required
496
+ : undefined;
497
+ } else if ( isValid?.elements && validity?.elements ) {
498
+ customValidity = validity.elements;
499
+ } else if ( validity?.custom ) {
500
+ customValidity = validity.custom;
501
+ }
502
+
503
+ return customValidity;
504
+ }
505
+
477
506
  function CustomEditControl< Item >( {
478
507
  data,
479
508
  field,
480
509
  onChange,
481
510
  hideLabelFromVision,
511
+ validity,
482
512
  }: DataFormControlProps< Item > ) {
483
- const { label, placeholder, description, getValue, setValue } = field;
513
+ const { label, placeholder, description, getValue, setValue, isValid } =
514
+ field;
484
515
  const value = getValue( { item: data } );
485
516
 
486
517
  const onChangeControl = useCallback(
@@ -491,7 +522,8 @@ function CustomEditControl< Item >( {
491
522
 
492
523
  return (
493
524
  <ValidatedTextControl
494
- required={ !! field.isValid?.required }
525
+ required={ !! isValid?.required }
526
+ customValidity={ getCustomValidity( isValid, validity ) }
495
527
  label={ label }
496
528
  placeholder={ placeholder }
497
529
  value={ value ?? '' }
@@ -506,11 +538,13 @@ function CustomEditControl< Item >( {
506
538
 
507
539
  const ValidationComponent = ( {
508
540
  required,
541
+ elements,
509
542
  type,
510
543
  custom,
511
544
  }: {
512
545
  required: boolean;
513
- custom: boolean;
546
+ elements: 'sync' | 'async' | 'none';
547
+ custom: 'sync' | 'async' | 'none';
514
548
  type: 'regular' | 'panel';
515
549
  } ) => {
516
550
  type ValidatedItem = {
@@ -523,6 +557,7 @@ const ValidationComponent = ( {
523
557
  url: string;
524
558
  color: string;
525
559
  integer: number;
560
+ number: number;
526
561
  boolean: boolean;
527
562
  customEdit: string;
528
563
  categories: string[];
@@ -530,6 +565,13 @@ const ValidationComponent = ( {
530
565
  password: string;
531
566
  toggle?: boolean;
532
567
  toggleGroup?: string;
568
+ date?: string;
569
+ dateRange?: string;
570
+ datetime?: string;
571
+ };
572
+
573
+ const DateRangeEdit = ( props: DataFormControlProps< ValidatedItem > ) => {
574
+ return <DateControl { ...props } operator="between" />;
533
575
  };
534
576
 
535
577
  const [ post, setPost ] = useState< ValidatedItem >( {
@@ -542,6 +584,7 @@ const ValidationComponent = ( {
542
584
  url: 'https://example.com',
543
585
  color: '#ff6600',
544
586
  integer: 2,
587
+ number: 3.14,
545
588
  boolean: true,
546
589
  categories: [ 'astronomy' ],
547
590
  countries: [ 'us' ],
@@ -549,8 +592,22 @@ const ValidationComponent = ( {
549
592
  password: 'secretpassword123',
550
593
  toggle: undefined,
551
594
  toggleGroup: undefined,
595
+ date: undefined,
596
+ dateRange: undefined,
597
+ datetime: undefined,
552
598
  } );
553
599
 
600
+ const makeAsync = ( rule: ( item: ValidatedItem ) => null | string ) => {
601
+ return async ( value: ValidatedItem ) => {
602
+ return await new Promise< string | null >( ( resolve ) => {
603
+ setTimeout( () => {
604
+ const validationResult = rule( value );
605
+ resolve( validationResult );
606
+ }, 2000 );
607
+ } );
608
+ };
609
+ };
610
+
554
611
  const customTextRule = ( value: ValidatedItem ) => {
555
612
  if ( ! /^[a-zA-Z ]+$/.test( value.text ) ) {
556
613
  return 'Value must only contain letters and spaces.';
@@ -616,6 +673,13 @@ const ValidationComponent = ( {
616
673
 
617
674
  return null;
618
675
  };
676
+ const customNumberRule = ( value: ValidatedItem ) => {
677
+ if ( ! /^\d+\.\d{2}$/.test( value?.number?.toString() ) ) {
678
+ return 'Number must have exactly two decimal places.';
679
+ }
680
+
681
+ return null;
682
+ };
619
683
  const customBooleanRule = ( value: ValidatedItem ) => {
620
684
  if ( value.boolean !== true ) {
621
685
  return 'Boolean must be active.';
@@ -652,12 +716,164 @@ const ValidationComponent = ( {
652
716
  return null;
653
717
  };
654
718
 
719
+ const customDateRule = ( value: ValidatedItem ) => {
720
+ if ( ! value.date ) {
721
+ return null;
722
+ }
723
+ const selectedDate = new Date( value.date );
724
+ const today = new Date();
725
+ today.setHours( 0, 0, 0, 0 );
726
+ if ( selectedDate < today ) {
727
+ return 'Date must not be in the past.';
728
+ }
729
+
730
+ return null;
731
+ };
732
+ const customDateTimeRule = ( value: ValidatedItem ) => {
733
+ if ( ! value.datetime ) {
734
+ return null;
735
+ }
736
+ const selectedDateTime = new Date( value.datetime );
737
+ const now = new Date();
738
+ if ( selectedDateTime < now ) {
739
+ return 'Date and time must not be in the past.';
740
+ }
741
+
742
+ return null;
743
+ };
744
+
745
+ const customDateRangeRule = ( value: ValidatedItem ) => {
746
+ if ( ! value.dateRange ) {
747
+ return null;
748
+ }
749
+ const [ fromDate, toDate ] = value.dateRange;
750
+ if ( ! fromDate || ! toDate ) {
751
+ return null;
752
+ }
753
+ const from = new Date( fromDate );
754
+ const to = new Date( toDate );
755
+ const daysDiff = Math.ceil(
756
+ ( to.getTime() - from.getTime() ) / ( 1000 * 60 * 60 * 24 )
757
+ );
758
+ if ( daysDiff > 30 ) {
759
+ return 'Date range must not exceed 30 days.';
760
+ }
761
+ return null;
762
+ };
763
+
655
764
  const maybeCustomRule = (
656
765
  rule: ( item: ValidatedItem ) => null | string
657
766
  ) => {
658
- return custom ? rule : undefined;
767
+ if ( custom === 'sync' ) {
768
+ return rule;
769
+ }
770
+
771
+ if ( custom === 'async' ) {
772
+ return makeAsync( rule );
773
+ }
774
+
775
+ return undefined;
659
776
  };
660
777
 
778
+ // Cache for getElements functions - ensures promises are only created once
779
+ const getElements = useMemo( () => {
780
+ const promiseCache: Record< string, Promise< any > > = {};
781
+
782
+ return ( fieldId: string ) => {
783
+ return () => {
784
+ if ( fieldId in promiseCache ) {
785
+ return promiseCache[ fieldId ];
786
+ }
787
+
788
+ switch ( fieldId ) {
789
+ case 'select':
790
+ promiseCache[ fieldId ] = new Promise( ( resolve ) =>
791
+ setTimeout(
792
+ () =>
793
+ resolve( [
794
+ {
795
+ value: 'option1',
796
+ label: 'Option 1',
797
+ },
798
+ {
799
+ value: 'option2',
800
+ label: 'Option 2',
801
+ },
802
+ ] ),
803
+ 3500
804
+ )
805
+ );
806
+ break;
807
+
808
+ case 'textWithRadio':
809
+ promiseCache[ fieldId ] = new Promise( ( resolve ) =>
810
+ setTimeout(
811
+ () =>
812
+ resolve( [
813
+ { value: 'item1', label: 'Item 1' },
814
+ { value: 'item2', label: 'Item 2' },
815
+ ] ),
816
+ 3500
817
+ )
818
+ );
819
+ break;
820
+
821
+ case 'countries':
822
+ promiseCache[ fieldId ] = new Promise( ( resolve ) =>
823
+ setTimeout(
824
+ () =>
825
+ resolve( [
826
+ {
827
+ value: 'us',
828
+ label: 'United States',
829
+ },
830
+ { value: 'ca', label: 'Canada' },
831
+ {
832
+ value: 'uk',
833
+ label: 'United Kingdom',
834
+ },
835
+ { value: 'fr', label: 'France' },
836
+ { value: 'de', label: 'Germany' },
837
+ { value: 'jp', label: 'Japan' },
838
+ { value: 'au', label: 'Australia' },
839
+ ] ),
840
+ 3500
841
+ )
842
+ );
843
+ break;
844
+
845
+ case 'toggleGroup':
846
+ promiseCache[ fieldId ] = new Promise( ( resolve ) =>
847
+ setTimeout(
848
+ () =>
849
+ resolve( [
850
+ {
851
+ value: 'option1',
852
+ label: 'Option 1',
853
+ },
854
+ {
855
+ value: 'option2',
856
+ label: 'Option 2',
857
+ },
858
+ {
859
+ value: 'option3',
860
+ label: 'Option 3',
861
+ },
862
+ ] ),
863
+ 3500
864
+ )
865
+ );
866
+ break;
867
+
868
+ default:
869
+ throw new Error( `Unknown field ID: ${ fieldId }` );
870
+ }
871
+
872
+ return promiseCache[ fieldId ];
873
+ };
874
+ };
875
+ }, [ elements ] );
876
+
661
877
  const _fields: Field< ValidatedItem >[] = [
662
878
  {
663
879
  id: 'text',
@@ -665,6 +881,7 @@ const ValidationComponent = ( {
665
881
  label: 'Text',
666
882
  isValid: {
667
883
  required,
884
+ elements: elements !== 'none' ? true : false,
668
885
  custom: maybeCustomRule( customTextRule ),
669
886
  },
670
887
  },
@@ -672,12 +889,18 @@ const ValidationComponent = ( {
672
889
  id: 'select',
673
890
  type: 'text',
674
891
  label: 'Select',
675
- elements: [
676
- { value: 'option1', label: 'Option 1' },
677
- { value: 'option2', label: 'Option 2' },
678
- ],
892
+ elements:
893
+ elements === 'async'
894
+ ? undefined
895
+ : [
896
+ { value: 'option1', label: 'Option 1' },
897
+ { value: 'option2', label: 'Option 2' },
898
+ ],
899
+ getElements:
900
+ elements === 'async' ? getElements( 'select' ) : undefined,
679
901
  isValid: {
680
902
  required,
903
+ elements: elements !== 'none' ? true : false,
681
904
  custom: maybeCustomRule( customSelectRule ),
682
905
  },
683
906
  },
@@ -686,12 +909,20 @@ const ValidationComponent = ( {
686
909
  type: 'text',
687
910
  Edit: 'radio',
688
911
  label: 'Text with radio',
689
- elements: [
690
- { value: 'item1', label: 'Item 1' },
691
- { value: 'item2', label: 'Item 2' },
692
- ],
912
+ elements:
913
+ elements === 'async'
914
+ ? undefined
915
+ : [
916
+ { value: 'item1', label: 'Item 1' },
917
+ { value: 'item2', label: 'Item 2' },
918
+ ],
919
+ getElements:
920
+ elements === 'async'
921
+ ? getElements( 'textWithRadio' )
922
+ : undefined,
693
923
  isValid: {
694
924
  required,
925
+ elements: elements !== 'none' ? true : false,
695
926
  custom: maybeCustomRule( customTextRadioRule ),
696
927
  },
697
928
  },
@@ -702,6 +933,7 @@ const ValidationComponent = ( {
702
933
  label: 'Textarea',
703
934
  isValid: {
704
935
  required,
936
+ elements: elements !== 'none' ? true : false,
705
937
  custom: maybeCustomRule( customTextareaRule ),
706
938
  },
707
939
  },
@@ -711,6 +943,7 @@ const ValidationComponent = ( {
711
943
  label: 'e-mail',
712
944
  isValid: {
713
945
  required,
946
+ elements: elements !== 'none' ? true : false,
714
947
  custom: maybeCustomRule( customEmailRule ),
715
948
  },
716
949
  },
@@ -720,6 +953,7 @@ const ValidationComponent = ( {
720
953
  label: 'telephone',
721
954
  isValid: {
722
955
  required,
956
+ elements: elements !== 'none' ? true : false,
723
957
  custom: maybeCustomRule( customTelephoneRule ),
724
958
  },
725
959
  },
@@ -729,6 +963,7 @@ const ValidationComponent = ( {
729
963
  label: 'URL',
730
964
  isValid: {
731
965
  required,
966
+ elements: elements !== 'none' ? true : false,
732
967
  custom: maybeCustomRule( customUrlRule ),
733
968
  },
734
969
  },
@@ -738,6 +973,7 @@ const ValidationComponent = ( {
738
973
  label: 'Color',
739
974
  isValid: {
740
975
  required,
976
+ elements: elements !== 'none' ? true : false,
741
977
  custom: maybeCustomRule( customColorRule ),
742
978
  },
743
979
  },
@@ -747,32 +983,29 @@ const ValidationComponent = ( {
747
983
  label: 'Integer',
748
984
  isValid: {
749
985
  required,
986
+ elements: elements !== 'none' ? true : false,
750
987
  custom: maybeCustomRule( customIntegerRule ),
751
988
  },
752
989
  },
753
990
  {
754
- id: 'boolean',
755
- type: 'boolean',
756
- label: 'Boolean',
991
+ id: 'number',
992
+ type: 'number',
993
+ label: 'Number',
757
994
  isValid: {
758
995
  required,
759
- custom: maybeCustomRule( customBooleanRule ),
996
+ elements: elements !== 'none' ? true : false,
997
+ custom: maybeCustomRule( customNumberRule ),
760
998
  },
761
999
  },
762
1000
  {
763
- id: 'categories',
764
- type: 'array' as const,
765
- label: 'Categories',
1001
+ id: 'boolean',
1002
+ type: 'boolean',
1003
+ label: 'Boolean',
766
1004
  isValid: {
767
1005
  required,
1006
+ elements: elements !== 'none' ? true : false,
1007
+ custom: maybeCustomRule( customBooleanRule ),
768
1008
  },
769
- elements: [
770
- { value: 'astronomy', label: 'Astronomy' },
771
- { value: 'book-review', label: 'Book review' },
772
- { value: 'event', label: 'Event' },
773
- { value: 'photography', label: 'Photography' },
774
- { value: 'travel', label: 'Travel' },
775
- ],
776
1009
  },
777
1010
  {
778
1011
  id: 'countries',
@@ -782,17 +1015,22 @@ const ValidationComponent = ( {
782
1015
  description: 'Countries you have visited',
783
1016
  isValid: {
784
1017
  required,
785
- elements: true,
1018
+ elements: elements !== 'none' ? true : false,
786
1019
  },
787
- elements: [
788
- { value: 'us', label: 'United States' },
789
- { value: 'ca', label: 'Canada' },
790
- { value: 'uk', label: 'United Kingdom' },
791
- { value: 'fr', label: 'France' },
792
- { value: 'de', label: 'Germany' },
793
- { value: 'jp', label: 'Japan' },
794
- { value: 'au', label: 'Australia' },
795
- ],
1020
+ elements:
1021
+ elements === 'async'
1022
+ ? undefined
1023
+ : [
1024
+ { value: 'us', label: 'United States' },
1025
+ { value: 'ca', label: 'Canada' },
1026
+ { value: 'uk', label: 'United Kingdom' },
1027
+ { value: 'fr', label: 'France' },
1028
+ { value: 'de', label: 'Germany' },
1029
+ { value: 'jp', label: 'Japan' },
1030
+ { value: 'au', label: 'Australia' },
1031
+ ],
1032
+ getElements:
1033
+ elements === 'async' ? getElements( 'countries' ) : undefined,
796
1034
  },
797
1035
  {
798
1036
  id: 'customEdit',
@@ -800,6 +1038,7 @@ const ValidationComponent = ( {
800
1038
  Edit: CustomEditControl,
801
1039
  isValid: {
802
1040
  required,
1041
+ elements: elements !== 'none' ? true : false,
803
1042
  },
804
1043
  },
805
1044
  {
@@ -808,6 +1047,7 @@ const ValidationComponent = ( {
808
1047
  label: 'Password',
809
1048
  isValid: {
810
1049
  required,
1050
+ elements: elements !== 'none' ? true : false,
811
1051
  custom: maybeCustomRule( customPasswordRule ),
812
1052
  },
813
1053
  },
@@ -818,6 +1058,7 @@ const ValidationComponent = ( {
818
1058
  Edit: 'toggle',
819
1059
  isValid: {
820
1060
  required,
1061
+ elements: elements !== 'none' ? true : false,
821
1062
  custom: maybeCustomRule( customToggleRule ),
822
1063
  },
823
1064
  },
@@ -826,22 +1067,60 @@ const ValidationComponent = ( {
826
1067
  type: 'text',
827
1068
  label: 'Toggle Group',
828
1069
  Edit: 'toggleGroup',
829
- elements: [
830
- { value: 'option1', label: 'Option 1' },
831
- { value: 'option2', label: 'Option 2' },
832
- { value: 'option3', label: 'Option 3' },
833
- ],
1070
+ elements:
1071
+ elements === 'async'
1072
+ ? undefined
1073
+ : [
1074
+ { value: 'option1', label: 'Option 1' },
1075
+ { value: 'option2', label: 'Option 2' },
1076
+ { value: 'option3', label: 'Option 3' },
1077
+ ],
1078
+ getElements:
1079
+ elements === 'async' ? getElements( 'toggleGroup' ) : undefined,
834
1080
  isValid: {
835
1081
  required,
1082
+ elements: elements !== 'none' ? true : false,
836
1083
  custom: maybeCustomRule( customToggleGroupRule ),
837
1084
  },
838
1085
  },
1086
+ {
1087
+ id: 'date',
1088
+ type: 'date',
1089
+ label: 'Date',
1090
+ isValid: {
1091
+ required,
1092
+ elements: elements !== 'none' ? true : false,
1093
+ custom: maybeCustomRule( customDateRule ),
1094
+ },
1095
+ },
1096
+ {
1097
+ id: 'dateRange',
1098
+ type: 'date',
1099
+ label: 'Date Range',
1100
+ Edit: DateRangeEdit,
1101
+ isValid: {
1102
+ required,
1103
+ elements: elements !== 'none' ? true : false,
1104
+ custom: maybeCustomRule( customDateRangeRule ),
1105
+ },
1106
+ },
1107
+ {
1108
+ id: 'datetime',
1109
+ type: 'datetime',
1110
+ label: 'Date Time',
1111
+ isValid: {
1112
+ required,
1113
+ elements: elements !== 'none' ? true : false,
1114
+ custom: maybeCustomRule( customDateTimeRule ),
1115
+ },
1116
+ },
839
1117
  ];
840
1118
 
841
1119
  const form = {
842
1120
  layout: { type },
843
1121
  fields: [
844
- 'text',
1122
+ // Use field object for testing purposes.
1123
+ { id: 'text' },
845
1124
  'select',
846
1125
  'textWithRadio',
847
1126
  'textarea',
@@ -850,6 +1129,7 @@ const ValidationComponent = ( {
850
1129
  'url',
851
1130
  'color',
852
1131
  'integer',
1132
+ 'number',
853
1133
  'boolean',
854
1134
  'categories',
855
1135
  'countries',
@@ -857,10 +1137,16 @@ const ValidationComponent = ( {
857
1137
  'toggleGroup',
858
1138
  'password',
859
1139
  'customEdit',
1140
+ // Use field object with children for testing purposes.
1141
+ {
1142
+ id: 'dates',
1143
+ label: 'Dates',
1144
+ children: [ 'date', 'dateRange', 'datetime' ],
1145
+ },
860
1146
  ],
861
1147
  };
862
1148
 
863
- const canSave = isItemValid( post, _fields, form );
1149
+ const { validity, isValid } = useFormValidity( post, _fields, form );
864
1150
 
865
1151
  return (
866
1152
  <form>
@@ -869,6 +1155,7 @@ const ValidationComponent = ( {
869
1155
  data={ post }
870
1156
  fields={ _fields }
871
1157
  form={ form }
1158
+ validity={ validity }
872
1159
  onChange={ ( edits ) =>
873
1160
  setPost( ( prev ) => ( {
874
1161
  ...prev,
@@ -879,7 +1166,7 @@ const ValidationComponent = ( {
879
1166
  <Button
880
1167
  __next40pxDefaultSize
881
1168
  accessibleWhenDisabled
882
- disabled={ ! canSave }
1169
+ disabled={ ! isValid }
883
1170
  variant="primary"
884
1171
  >
885
1172
  Submit
@@ -980,6 +1267,7 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
980
1267
  hasVat: boolean;
981
1268
  vat: number;
982
1269
  commission: number;
1270
+ dueDate: string;
983
1271
  };
984
1272
 
985
1273
  const customerFields: Field< Customer >[] = [
@@ -1051,6 +1339,22 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
1051
1339
  label: 'Commission',
1052
1340
  type: 'integer',
1053
1341
  },
1342
+ {
1343
+ id: 'dueDate',
1344
+ label: 'Due Date',
1345
+ type: 'text',
1346
+ render: ( { item } ) => {
1347
+ return <Badge>Due on: { item.dueDate }</Badge>;
1348
+ },
1349
+ },
1350
+ {
1351
+ id: 'plan-summary',
1352
+ type: 'text',
1353
+ readOnly: true,
1354
+ render: ( { item } ) => {
1355
+ return <Badge>{ item.plan }</Badge>;
1356
+ },
1357
+ },
1054
1358
  ];
1055
1359
 
1056
1360
  const [ customer, setCustomer ] = useState< Customer >( {
@@ -1067,6 +1371,7 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
1067
1371
  hasVat: true,
1068
1372
  vat: 10,
1069
1373
  commission: 5,
1374
+ dueDate: 'March 1st, 2028',
1070
1375
  } );
1071
1376
 
1072
1377
  const form: Form = useMemo(
@@ -1078,6 +1383,7 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
1078
1383
  fields: [
1079
1384
  {
1080
1385
  id: 'customerCard',
1386
+ layout: { type: 'card', summary: 'plan-summary' },
1081
1387
  label: 'Customer',
1082
1388
  description:
1083
1389
  'Enter your contact details, plan type, and addresses to complete your customer information.',
@@ -1085,7 +1391,10 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
1085
1391
  {
1086
1392
  id: 'customerContact',
1087
1393
  label: 'Contact',
1088
- layout: { type: 'panel', labelPosition: 'top' },
1394
+ layout: {
1395
+ type: 'panel',
1396
+ labelPosition: 'top',
1397
+ },
1089
1398
  children: [
1090
1399
  {
1091
1400
  id: 'name',
@@ -1138,6 +1447,7 @@ const LayoutCardComponent = ( { withHeader }: { withHeader: boolean } ) => {
1138
1447
  layout: {
1139
1448
  type: 'card',
1140
1449
  isOpened: false,
1450
+ summary: [ { id: 'dueDate', visibility: 'always' } ],
1141
1451
  },
1142
1452
  children: [ 'vat', 'commission' ],
1143
1453
  },
@@ -1185,6 +1495,10 @@ const LayoutRowComponent = ( {
1185
1495
  hasDiscount: boolean;
1186
1496
  vat: number;
1187
1497
  commission: number;
1498
+ cost: number;
1499
+ tax: number;
1500
+ quantity: number;
1501
+ total: number;
1188
1502
  };
1189
1503
 
1190
1504
  const customerFields: Field< Customer >[] = [
@@ -1275,6 +1589,42 @@ const LayoutRowComponent = ( {
1275
1589
  { value: 'yearly', label: 'Yearly' },
1276
1590
  ],
1277
1591
  },
1592
+ {
1593
+ id: 'cost',
1594
+ label: 'Cost',
1595
+ type: 'integer',
1596
+ setValue: ( { item, value } ) => ( {
1597
+ cost: value,
1598
+ total: Number( value ) * item.quantity,
1599
+ } ),
1600
+ },
1601
+ {
1602
+ id: 'quantity',
1603
+ label: 'Quantity',
1604
+ type: 'integer',
1605
+ elements: [
1606
+ { value: 1, label: '1' },
1607
+ { value: 2, label: '2' },
1608
+ { value: 3, label: '3' },
1609
+ { value: 4, label: '4' },
1610
+ { value: 5, label: '5' },
1611
+ { value: 6, label: '6' },
1612
+ { value: 7, label: '7' },
1613
+ { value: 8, label: '8' },
1614
+ { value: 9, label: '9' },
1615
+ { value: 10, label: '10' },
1616
+ ],
1617
+ setValue: ( { item, value } ) => ( {
1618
+ quantity: Number( value ),
1619
+ total: Number( value ) * item.cost,
1620
+ } ),
1621
+ },
1622
+ {
1623
+ id: 'total',
1624
+ label: 'Total',
1625
+ type: 'integer',
1626
+ readOnly: true,
1627
+ },
1278
1628
  ];
1279
1629
 
1280
1630
  const [ customer, setCustomer ] = useState< Customer >( {
@@ -1296,6 +1646,10 @@ const LayoutRowComponent = ( {
1296
1646
  vat: 10,
1297
1647
  commission: 5,
1298
1648
  hasDiscount: true,
1649
+ cost: 100,
1650
+ tax: 20,
1651
+ quantity: 5,
1652
+ total: 600,
1299
1653
  } );
1300
1654
 
1301
1655
  const form: Form = useMemo(
@@ -1398,6 +1752,35 @@ const LayoutRowComponent = ( {
1398
1752
  } ) )
1399
1753
  }
1400
1754
  />
1755
+ <h2>Field widths</h2>
1756
+ <DataForm
1757
+ data={ customer }
1758
+ fields={ customerFields }
1759
+ form={ {
1760
+ fields: [
1761
+ {
1762
+ id: 'product',
1763
+ label: 'Product',
1764
+ layout: {
1765
+ type: 'row',
1766
+ alignment: 'end',
1767
+ styles: {
1768
+ total: { flex: 1 },
1769
+ cost: { flex: 3 },
1770
+ quantity: { flex: 3 },
1771
+ },
1772
+ },
1773
+ children: [ 'total', 'cost', 'quantity' ],
1774
+ },
1775
+ ],
1776
+ } }
1777
+ onChange={ ( edits ) =>
1778
+ setCustomer( ( prev ) => ( {
1779
+ ...prev,
1780
+ ...edits,
1781
+ } ) )
1782
+ }
1783
+ />
1401
1784
  </>
1402
1785
  );
1403
1786
  };
@@ -1532,22 +1915,31 @@ export const Validation = {
1532
1915
  argTypes: {
1533
1916
  required: {
1534
1917
  control: { type: 'boolean' },
1535
- description: 'Whether or not the fields are required.',
1918
+ description:
1919
+ 'Whether or not the required validation rule is active.',
1536
1920
  },
1537
- type: {
1921
+ elements: {
1538
1922
  control: { type: 'select' },
1539
- description: 'Chooses the validation type.',
1540
- options: [ 'regular', 'panel' ],
1923
+ description:
1924
+ 'Whether or not the elements validation rule is active.',
1925
+ options: [ 'sync', 'async', 'none' ],
1541
1926
  },
1542
1927
  custom: {
1543
- control: { type: 'boolean' },
1544
- description: 'Whether or not the fields have custom validation.',
1928
+ control: { type: 'select' },
1929
+ description: 'Whether or not the custom validation rule is active.',
1930
+ options: [ 'sync', 'async', 'none' ],
1931
+ },
1932
+ type: {
1933
+ control: { type: 'select' },
1934
+ description: 'Chooses the layout type.',
1935
+ options: [ 'regular', 'panel', 'card', 'row' ],
1545
1936
  },
1546
1937
  },
1547
1938
  args: {
1548
1939
  required: true,
1940
+ elements: 'sync',
1941
+ custom: 'sync',
1549
1942
  type: 'regular',
1550
- custom: true,
1551
1943
  },
1552
1944
  };
1553
1945