@wordpress/dataviews 10.1.5 → 10.3.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 (531) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +109 -1
  3. package/build/components/dataform/index.js +6 -2
  4. package/build/components/dataform/index.js.map +3 -3
  5. package/build/components/dataform-context/index.js +4 -2
  6. package/build/components/dataform-context/index.js.map +1 -1
  7. package/build/components/dataviews/index.js +8 -6
  8. package/build/components/dataviews/index.js.map +1 -1
  9. package/build/components/dataviews-bulk-actions/index.js +4 -2
  10. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  11. package/build/components/dataviews-context/index.js +3 -1
  12. package/build/components/dataviews-context/index.js.map +1 -1
  13. package/build/components/dataviews-filters/add-filter.js +4 -2
  14. package/build/components/dataviews-filters/add-filter.js.map +1 -1
  15. package/build/components/dataviews-filters/filter.js +20 -5
  16. package/build/components/dataviews-filters/filter.js.map +3 -3
  17. package/build/components/dataviews-filters/filters-toggled.js +3 -1
  18. package/build/components/dataviews-filters/filters-toggled.js.map +1 -1
  19. package/build/components/dataviews-filters/filters.js +3 -1
  20. package/build/components/dataviews-filters/filters.js.map +1 -1
  21. package/build/components/dataviews-filters/index.js +2 -0
  22. package/build/components/dataviews-filters/index.js.map +1 -1
  23. package/build/components/dataviews-filters/input-widget.js +3 -1
  24. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  25. package/build/components/dataviews-filters/reset-filters.js +3 -1
  26. package/build/components/dataviews-filters/reset-filters.js.map +1 -1
  27. package/build/components/dataviews-filters/search-widget.js +8 -6
  28. package/build/components/dataviews-filters/search-widget.js.map +2 -2
  29. package/build/components/dataviews-filters/toggle.js +3 -1
  30. package/build/components/dataviews-filters/toggle.js.map +1 -1
  31. package/build/components/dataviews-filters/use-filters.js +2 -0
  32. package/build/components/dataviews-filters/use-filters.js.map +1 -1
  33. package/build/components/dataviews-filters/utils.js +4 -2
  34. package/build/components/dataviews-filters/utils.js.map +1 -1
  35. package/build/components/dataviews-footer/index.js +4 -2
  36. package/build/components/dataviews-footer/index.js.map +1 -1
  37. package/build/components/dataviews-item-actions/index.js +23 -4
  38. package/build/components/dataviews-item-actions/index.js.map +2 -2
  39. package/build/components/dataviews-layout/index.js +3 -1
  40. package/build/components/dataviews-layout/index.js.map +1 -1
  41. package/build/components/dataviews-pagination/index.js +3 -1
  42. package/build/components/dataviews-pagination/index.js.map +1 -1
  43. package/build/components/dataviews-picker/footer.js +4 -2
  44. package/build/components/dataviews-picker/footer.js.map +1 -1
  45. package/build/components/dataviews-picker/index.js +8 -6
  46. package/build/components/dataviews-picker/index.js.map +1 -1
  47. package/build/components/dataviews-search/index.js +4 -2
  48. package/build/components/dataviews-search/index.js.map +1 -1
  49. package/build/components/dataviews-selection-checkbox/index.js +3 -1
  50. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  51. package/build/components/dataviews-view-config/index.js +17 -400
  52. package/build/components/dataviews-view-config/index.js.map +3 -3
  53. package/build/components/dataviews-view-config/infinite-scroll-toggle.js +3 -1
  54. package/build/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -1
  55. package/build/components/dataviews-view-config/properties-section.js +177 -0
  56. package/build/components/dataviews-view-config/properties-section.js.map +7 -0
  57. package/build/constants.js +39 -34
  58. package/build/constants.js.map +2 -2
  59. package/build/dataform-controls/array.js +4 -2
  60. package/build/dataform-controls/array.js.map +1 -1
  61. package/build/dataform-controls/checkbox.js +4 -2
  62. package/build/dataform-controls/checkbox.js.map +1 -1
  63. package/build/dataform-controls/color.js +5 -3
  64. package/build/dataform-controls/color.js.map +1 -1
  65. package/build/dataform-controls/date.js +8 -6
  66. package/build/dataform-controls/date.js.map +1 -1
  67. package/build/dataform-controls/datetime.js +11 -15
  68. package/build/dataform-controls/datetime.js.map +3 -3
  69. package/build/dataform-controls/email.js +3 -1
  70. package/build/dataform-controls/email.js.map +1 -1
  71. package/build/dataform-controls/index.js +4 -2
  72. package/build/dataform-controls/index.js.map +1 -1
  73. package/build/dataform-controls/integer.js +3 -1
  74. package/build/dataform-controls/integer.js.map +1 -1
  75. package/build/dataform-controls/number.js +3 -1
  76. package/build/dataform-controls/number.js.map +1 -1
  77. package/build/dataform-controls/password.js +6 -5
  78. package/build/dataform-controls/password.js.map +3 -3
  79. package/build/dataform-controls/radio.js +4 -2
  80. package/build/dataform-controls/radio.js.map +1 -1
  81. package/build/dataform-controls/select.js +4 -2
  82. package/build/dataform-controls/select.js.map +1 -1
  83. package/build/dataform-controls/telephone.js +3 -1
  84. package/build/dataform-controls/telephone.js.map +1 -1
  85. package/build/dataform-controls/text.js +3 -1
  86. package/build/dataform-controls/text.js.map +1 -1
  87. package/build/dataform-controls/textarea.js +4 -2
  88. package/build/dataform-controls/textarea.js.map +1 -1
  89. package/build/dataform-controls/toggle-group.js +4 -2
  90. package/build/dataform-controls/toggle-group.js.map +1 -1
  91. package/build/dataform-controls/toggle.js +4 -2
  92. package/build/dataform-controls/toggle.js.map +1 -1
  93. package/build/dataform-controls/url.js +3 -1
  94. package/build/dataform-controls/url.js.map +1 -1
  95. package/build/dataform-controls/utils/get-custom-validity.js +2 -0
  96. package/build/dataform-controls/utils/get-custom-validity.js.map +1 -1
  97. package/build/dataform-controls/utils/relative-date-control.js +4 -2
  98. package/build/dataform-controls/utils/relative-date-control.js.map +1 -1
  99. package/build/dataform-controls/utils/validated-input.js +4 -2
  100. package/build/dataform-controls/utils/validated-input.js.map +1 -1
  101. package/build/dataform-controls/utils/validated-number.js +4 -2
  102. package/build/dataform-controls/utils/validated-number.js.map +1 -1
  103. package/build/dataform-layouts/card/index.js +91 -42
  104. package/build/dataform-layouts/card/index.js.map +3 -3
  105. package/build/dataform-layouts/data-form-layout.js +8 -14
  106. package/build/dataform-layouts/data-form-layout.js.map +3 -3
  107. package/build/dataform-layouts/details/index.js +78 -0
  108. package/build/dataform-layouts/details/index.js.map +7 -0
  109. package/build/dataform-layouts/get-summary-fields.js +3 -1
  110. package/build/dataform-layouts/get-summary-fields.js.map +1 -1
  111. package/build/dataform-layouts/index.js +9 -2
  112. package/build/dataform-layouts/index.js.map +3 -3
  113. package/build/dataform-layouts/{normalize-form-fields.js → normalize-form.js} +48 -24
  114. package/build/dataform-layouts/normalize-form.js.map +7 -0
  115. package/build/dataform-layouts/panel/dropdown.js +9 -8
  116. package/build/dataform-layouts/panel/dropdown.js.map +2 -2
  117. package/build/dataform-layouts/panel/index.js +10 -14
  118. package/build/dataform-layouts/panel/index.js.map +2 -2
  119. package/build/dataform-layouts/panel/modal.js +9 -8
  120. package/build/dataform-layouts/panel/modal.js.map +2 -2
  121. package/build/dataform-layouts/panel/summary-button.js +3 -1
  122. package/build/dataform-layouts/panel/summary-button.js.map +1 -1
  123. package/build/dataform-layouts/regular/index.js +8 -10
  124. package/build/dataform-layouts/regular/index.js.map +2 -2
  125. package/build/dataform-layouts/row/index.js +10 -33
  126. package/build/dataform-layouts/row/index.js.map +3 -3
  127. package/build/dataviews-layouts/grid/index.js +4 -2
  128. package/build/dataviews-layouts/grid/index.js.map +1 -1
  129. package/build/dataviews-layouts/grid/preview-size-picker.js +4 -2
  130. package/build/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  131. package/build/dataviews-layouts/index.js +12 -1
  132. package/build/dataviews-layouts/index.js.map +3 -3
  133. package/build/dataviews-layouts/list/index.js +4 -2
  134. package/build/dataviews-layouts/list/index.js.map +1 -1
  135. package/build/dataviews-layouts/picker-grid/index.js +4 -2
  136. package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
  137. package/build/dataviews-layouts/picker-table/index.js +422 -0
  138. package/build/dataviews-layouts/picker-table/index.js.map +7 -0
  139. package/build/dataviews-layouts/table/column-header-menu.js +6 -4
  140. package/build/dataviews-layouts/table/column-header-menu.js.map +2 -2
  141. package/build/dataviews-layouts/table/column-primary.js +4 -7
  142. package/build/dataviews-layouts/table/column-primary.js.map +2 -2
  143. package/build/dataviews-layouts/table/density-picker.js +3 -1
  144. package/build/dataviews-layouts/table/density-picker.js.map +1 -1
  145. package/build/dataviews-layouts/table/index.js +36 -2
  146. package/build/dataviews-layouts/table/index.js.map +2 -2
  147. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +3 -1
  148. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -1
  149. package/build/dataviews-layouts/utils/get-data-by-group.js +2 -0
  150. package/build/dataviews-layouts/utils/get-data-by-group.js.map +1 -1
  151. package/build/dataviews-layouts/utils/grid-items.js +4 -2
  152. package/build/dataviews-layouts/utils/grid-items.js.map +1 -1
  153. package/build/dataviews-layouts/utils/item-click-wrapper.js +3 -1
  154. package/build/dataviews-layouts/utils/item-click-wrapper.js.map +1 -1
  155. package/build/dataviews-layouts/utils/preview-size-picker.js +4 -2
  156. package/build/dataviews-layouts/utils/preview-size-picker.js.map +1 -1
  157. package/build/field-types/array.js +3 -1
  158. package/build/field-types/array.js.map +1 -1
  159. package/build/field-types/boolean.js +3 -1
  160. package/build/field-types/boolean.js.map +1 -1
  161. package/build/field-types/color.js +3 -1
  162. package/build/field-types/color.js.map +1 -1
  163. package/build/field-types/date.js +4 -2
  164. package/build/field-types/date.js.map +1 -1
  165. package/build/field-types/datetime.js +17 -2
  166. package/build/field-types/datetime.js.map +3 -3
  167. package/build/field-types/email.js +4 -2
  168. package/build/field-types/email.js.map +1 -1
  169. package/build/field-types/index.js +3 -1
  170. package/build/field-types/index.js.map +1 -1
  171. package/build/field-types/integer.js +3 -1
  172. package/build/field-types/integer.js.map +1 -1
  173. package/build/field-types/media.js +2 -0
  174. package/build/field-types/media.js.map +1 -1
  175. package/build/field-types/number.js +3 -1
  176. package/build/field-types/number.js.map +1 -1
  177. package/build/field-types/password.js +3 -1
  178. package/build/field-types/password.js.map +1 -1
  179. package/build/field-types/telephone.js +3 -1
  180. package/build/field-types/telephone.js.map +1 -1
  181. package/build/field-types/text.js +3 -1
  182. package/build/field-types/text.js.map +1 -1
  183. package/build/field-types/url.js +3 -1
  184. package/build/field-types/url.js.map +1 -1
  185. package/build/{dataform-layouts/is-combined-field.js → field-types/utils/parse-date-time.js} +15 -11
  186. package/build/field-types/utils/parse-date-time.js.map +7 -0
  187. package/build/field-types/utils/render-from-elements.js +2 -0
  188. package/build/field-types/utils/render-from-elements.js.map +1 -1
  189. package/build/hooks/index.js +2 -0
  190. package/build/hooks/index.js.map +1 -1
  191. package/build/hooks/use-elements.js +3 -1
  192. package/build/hooks/use-elements.js.map +1 -1
  193. package/build/hooks/use-form-validity.js +425 -321
  194. package/build/hooks/use-form-validity.js.map +3 -3
  195. package/build/index.js +2 -0
  196. package/build/index.js.map +1 -1
  197. package/build/lock-unlock.js +3 -1
  198. package/build/lock-unlock.js.map +1 -1
  199. package/build/types/dataform.js +2 -0
  200. package/build/types/dataform.js.map +2 -2
  201. package/build/types/dataviews.js +2 -0
  202. package/build/types/dataviews.js.map +2 -2
  203. package/build/types/field-api.js +2 -0
  204. package/build/types/field-api.js.map +1 -1
  205. package/build/types/index.js +2 -0
  206. package/build/types/index.js.map +1 -1
  207. package/build/types/private.js +2 -0
  208. package/build/types/private.js.map +1 -1
  209. package/build/utils/filter-sort-and-paginate.js +3 -1
  210. package/build/utils/filter-sort-and-paginate.js.map +1 -1
  211. package/build/utils/has-elements.js +2 -0
  212. package/build/utils/has-elements.js.map +1 -1
  213. package/build/utils/normalize-fields.js +4 -2
  214. package/build/utils/normalize-fields.js.map +1 -1
  215. package/build-module/components/dataform/index.js +5 -2
  216. package/build-module/components/dataform/index.js.map +2 -2
  217. package/build-module/components/dataform-context/index.js +3 -2
  218. package/build-module/components/dataform-context/index.js.map +1 -1
  219. package/build-module/components/dataviews/index.js +7 -6
  220. package/build-module/components/dataviews/index.js.map +1 -1
  221. package/build-module/components/dataviews-bulk-actions/index.js +3 -2
  222. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  223. package/build-module/components/dataviews-context/index.js +2 -1
  224. package/build-module/components/dataviews-context/index.js.map +1 -1
  225. package/build-module/components/dataviews-filters/add-filter.js +3 -2
  226. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  227. package/build-module/components/dataviews-filters/filter.js +19 -5
  228. package/build-module/components/dataviews-filters/filter.js.map +2 -2
  229. package/build-module/components/dataviews-filters/filters-toggled.js +2 -1
  230. package/build-module/components/dataviews-filters/filters-toggled.js.map +1 -1
  231. package/build-module/components/dataviews-filters/filters.js +2 -1
  232. package/build-module/components/dataviews-filters/filters.js.map +1 -1
  233. package/build-module/components/dataviews-filters/index.js +1 -0
  234. package/build-module/components/dataviews-filters/index.js.map +1 -1
  235. package/build-module/components/dataviews-filters/input-widget.js +2 -1
  236. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  237. package/build-module/components/dataviews-filters/reset-filters.js +2 -1
  238. package/build-module/components/dataviews-filters/reset-filters.js.map +1 -1
  239. package/build-module/components/dataviews-filters/search-widget.js +7 -6
  240. package/build-module/components/dataviews-filters/search-widget.js.map +2 -2
  241. package/build-module/components/dataviews-filters/toggle.js +2 -1
  242. package/build-module/components/dataviews-filters/toggle.js.map +1 -1
  243. package/build-module/components/dataviews-filters/use-filters.js +1 -0
  244. package/build-module/components/dataviews-filters/use-filters.js.map +1 -1
  245. package/build-module/components/dataviews-filters/utils.js +3 -2
  246. package/build-module/components/dataviews-filters/utils.js.map +1 -1
  247. package/build-module/components/dataviews-footer/index.js +3 -2
  248. package/build-module/components/dataviews-footer/index.js.map +1 -1
  249. package/build-module/components/dataviews-item-actions/index.js +22 -4
  250. package/build-module/components/dataviews-item-actions/index.js.map +2 -2
  251. package/build-module/components/dataviews-layout/index.js +2 -1
  252. package/build-module/components/dataviews-layout/index.js.map +1 -1
  253. package/build-module/components/dataviews-pagination/index.js +2 -1
  254. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  255. package/build-module/components/dataviews-picker/footer.js +3 -2
  256. package/build-module/components/dataviews-picker/footer.js.map +1 -1
  257. package/build-module/components/dataviews-picker/index.js +7 -6
  258. package/build-module/components/dataviews-picker/index.js.map +1 -1
  259. package/build-module/components/dataviews-search/index.js +3 -2
  260. package/build-module/components/dataviews-search/index.js.map +1 -1
  261. package/build-module/components/dataviews-selection-checkbox/index.js +2 -1
  262. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  263. package/build-module/components/dataviews-view-config/index.js +20 -416
  264. package/build-module/components/dataviews-view-config/index.js.map +2 -2
  265. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js +2 -1
  266. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -1
  267. package/build-module/components/dataviews-view-config/properties-section.js +149 -0
  268. package/build-module/components/dataviews-view-config/properties-section.js.map +7 -0
  269. package/build-module/constants.js +37 -34
  270. package/build-module/constants.js.map +2 -2
  271. package/build-module/dataform-controls/array.js +3 -2
  272. package/build-module/dataform-controls/array.js.map +1 -1
  273. package/build-module/dataform-controls/checkbox.js +3 -2
  274. package/build-module/dataform-controls/checkbox.js.map +1 -1
  275. package/build-module/dataform-controls/color.js +4 -3
  276. package/build-module/dataform-controls/color.js.map +1 -1
  277. package/build-module/dataform-controls/date.js +7 -6
  278. package/build-module/dataform-controls/date.js.map +1 -1
  279. package/build-module/dataform-controls/datetime.js +7 -12
  280. package/build-module/dataform-controls/datetime.js.map +2 -2
  281. package/build-module/dataform-controls/email.js +2 -1
  282. package/build-module/dataform-controls/email.js.map +1 -1
  283. package/build-module/dataform-controls/index.js +3 -2
  284. package/build-module/dataform-controls/index.js.map +1 -1
  285. package/build-module/dataform-controls/integer.js +2 -1
  286. package/build-module/dataform-controls/integer.js.map +1 -1
  287. package/build-module/dataform-controls/number.js +2 -1
  288. package/build-module/dataform-controls/number.js.map +1 -1
  289. package/build-module/dataform-controls/password.js +9 -6
  290. package/build-module/dataform-controls/password.js.map +2 -2
  291. package/build-module/dataform-controls/radio.js +3 -2
  292. package/build-module/dataform-controls/radio.js.map +1 -1
  293. package/build-module/dataform-controls/select.js +3 -2
  294. package/build-module/dataform-controls/select.js.map +1 -1
  295. package/build-module/dataform-controls/telephone.js +2 -1
  296. package/build-module/dataform-controls/telephone.js.map +1 -1
  297. package/build-module/dataform-controls/text.js +2 -1
  298. package/build-module/dataform-controls/text.js.map +1 -1
  299. package/build-module/dataform-controls/textarea.js +3 -2
  300. package/build-module/dataform-controls/textarea.js.map +1 -1
  301. package/build-module/dataform-controls/toggle-group.js +3 -2
  302. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  303. package/build-module/dataform-controls/toggle.js +3 -2
  304. package/build-module/dataform-controls/toggle.js.map +1 -1
  305. package/build-module/dataform-controls/url.js +2 -1
  306. package/build-module/dataform-controls/url.js.map +1 -1
  307. package/build-module/dataform-controls/utils/get-custom-validity.js +1 -0
  308. package/build-module/dataform-controls/utils/get-custom-validity.js.map +1 -1
  309. package/build-module/dataform-controls/utils/relative-date-control.js +3 -2
  310. package/build-module/dataform-controls/utils/relative-date-control.js.map +1 -1
  311. package/build-module/dataform-controls/utils/validated-input.js +3 -2
  312. package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
  313. package/build-module/dataform-controls/utils/validated-number.js +3 -2
  314. package/build-module/dataform-controls/utils/validated-number.js.map +1 -1
  315. package/build-module/dataform-layouts/card/index.js +95 -42
  316. package/build-module/dataform-layouts/card/index.js.map +3 -3
  317. package/build-module/dataform-layouts/data-form-layout.js +8 -15
  318. package/build-module/dataform-layouts/data-form-layout.js.map +2 -2
  319. package/build-module/dataform-layouts/details/index.js +47 -0
  320. package/build-module/dataform-layouts/details/index.js.map +7 -0
  321. package/build-module/dataform-layouts/get-summary-fields.js +2 -1
  322. package/build-module/dataform-layouts/get-summary-fields.js.map +1 -1
  323. package/build-module/dataform-layouts/index.js +8 -2
  324. package/build-module/dataform-layouts/index.js.map +2 -2
  325. package/build-module/dataform-layouts/{normalize-form-fields.js → normalize-form.js} +43 -19
  326. package/build-module/dataform-layouts/normalize-form.js.map +7 -0
  327. package/build-module/dataform-layouts/panel/dropdown.js +7 -7
  328. package/build-module/dataform-layouts/panel/dropdown.js.map +2 -2
  329. package/build-module/dataform-layouts/panel/index.js +9 -14
  330. package/build-module/dataform-layouts/panel/index.js.map +2 -2
  331. package/build-module/dataform-layouts/panel/modal.js +7 -7
  332. package/build-module/dataform-layouts/panel/modal.js.map +2 -2
  333. package/build-module/dataform-layouts/panel/summary-button.js +2 -1
  334. package/build-module/dataform-layouts/panel/summary-button.js.map +1 -1
  335. package/build-module/dataform-layouts/regular/index.js +6 -9
  336. package/build-module/dataform-layouts/regular/index.js.map +2 -2
  337. package/build-module/dataform-layouts/row/index.js +9 -23
  338. package/build-module/dataform-layouts/row/index.js.map +2 -2
  339. package/build-module/dataviews-layouts/grid/index.js +3 -2
  340. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  341. package/build-module/dataviews-layouts/grid/preview-size-picker.js +3 -2
  342. package/build-module/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  343. package/build-module/dataviews-layouts/index.js +13 -2
  344. package/build-module/dataviews-layouts/index.js.map +2 -2
  345. package/build-module/dataviews-layouts/list/index.js +3 -2
  346. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  347. package/build-module/dataviews-layouts/picker-grid/index.js +3 -2
  348. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
  349. package/build-module/dataviews-layouts/picker-table/index.js +397 -0
  350. package/build-module/dataviews-layouts/picker-table/index.js.map +7 -0
  351. package/build-module/dataviews-layouts/table/column-header-menu.js +5 -4
  352. package/build-module/dataviews-layouts/table/column-header-menu.js.map +2 -2
  353. package/build-module/dataviews-layouts/table/column-primary.js +3 -7
  354. package/build-module/dataviews-layouts/table/column-primary.js.map +2 -2
  355. package/build-module/dataviews-layouts/table/density-picker.js +2 -1
  356. package/build-module/dataviews-layouts/table/density-picker.js.map +1 -1
  357. package/build-module/dataviews-layouts/table/index.js +36 -3
  358. package/build-module/dataviews-layouts/table/index.js.map +2 -2
  359. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +2 -1
  360. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -1
  361. package/build-module/dataviews-layouts/utils/get-data-by-group.js +1 -0
  362. package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +1 -1
  363. package/build-module/dataviews-layouts/utils/grid-items.js +3 -2
  364. package/build-module/dataviews-layouts/utils/grid-items.js.map +1 -1
  365. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +2 -1
  366. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -1
  367. package/build-module/dataviews-layouts/utils/preview-size-picker.js +3 -2
  368. package/build-module/dataviews-layouts/utils/preview-size-picker.js.map +1 -1
  369. package/build-module/field-types/array.js +2 -1
  370. package/build-module/field-types/array.js.map +1 -1
  371. package/build-module/field-types/boolean.js +2 -1
  372. package/build-module/field-types/boolean.js.map +1 -1
  373. package/build-module/field-types/color.js +2 -1
  374. package/build-module/field-types/color.js.map +1 -1
  375. package/build-module/field-types/date.js +3 -2
  376. package/build-module/field-types/date.js.map +1 -1
  377. package/build-module/field-types/datetime.js +16 -2
  378. package/build-module/field-types/datetime.js.map +2 -2
  379. package/build-module/field-types/email.js +3 -2
  380. package/build-module/field-types/email.js.map +1 -1
  381. package/build-module/field-types/index.js +2 -1
  382. package/build-module/field-types/index.js.map +1 -1
  383. package/build-module/field-types/integer.js +2 -1
  384. package/build-module/field-types/integer.js.map +1 -1
  385. package/build-module/field-types/media.js +1 -0
  386. package/build-module/field-types/media.js.map +1 -1
  387. package/build-module/field-types/number.js +2 -1
  388. package/build-module/field-types/number.js.map +1 -1
  389. package/build-module/field-types/password.js +2 -1
  390. package/build-module/field-types/password.js.map +1 -1
  391. package/build-module/field-types/telephone.js +2 -1
  392. package/build-module/field-types/telephone.js.map +1 -1
  393. package/build-module/field-types/text.js +2 -1
  394. package/build-module/field-types/text.js.map +1 -1
  395. package/build-module/field-types/url.js +2 -1
  396. package/build-module/field-types/url.js.map +1 -1
  397. package/build-module/field-types/utils/parse-date-time.js +14 -0
  398. package/build-module/field-types/utils/parse-date-time.js.map +7 -0
  399. package/build-module/field-types/utils/render-from-elements.js +1 -0
  400. package/build-module/field-types/utils/render-from-elements.js.map +1 -1
  401. package/build-module/hooks/index.js +1 -0
  402. package/build-module/hooks/index.js.map +1 -1
  403. package/build-module/hooks/use-elements.js +2 -1
  404. package/build-module/hooks/use-elements.js.map +1 -1
  405. package/build-module/hooks/use-form-validity.js +424 -321
  406. package/build-module/hooks/use-form-validity.js.map +3 -3
  407. package/build-module/index.js +1 -0
  408. package/build-module/index.js.map +1 -1
  409. package/build-module/lock-unlock.js +2 -1
  410. package/build-module/lock-unlock.js.map +1 -1
  411. package/build-module/utils/filter-sort-and-paginate.js +2 -1
  412. package/build-module/utils/filter-sort-and-paginate.js.map +1 -1
  413. package/build-module/utils/has-elements.js +1 -0
  414. package/build-module/utils/has-elements.js.map +1 -1
  415. package/build-module/utils/normalize-fields.js +3 -2
  416. package/build-module/utils/normalize-fields.js.map +1 -1
  417. package/build-style/style-rtl.css +41 -51
  418. package/build-style/style.css +41 -51
  419. package/build-types/components/dataform/index.d.ts.map +1 -1
  420. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
  421. package/build-types/components/dataviews-filters/utils.d.ts.map +1 -1
  422. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  423. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  424. package/build-types/components/dataviews-view-config/properties-section.d.ts +4 -0
  425. package/build-types/components/dataviews-view-config/properties-section.d.ts.map +1 -0
  426. package/build-types/constants.d.ts +1 -0
  427. package/build-types/constants.d.ts.map +1 -1
  428. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  429. package/build-types/dataform-controls/password.d.ts.map +1 -1
  430. package/build-types/dataform-layouts/card/index.d.ts +3 -3
  431. package/build-types/dataform-layouts/card/index.d.ts.map +1 -1
  432. package/build-types/dataform-layouts/data-form-layout.d.ts +4 -4
  433. package/build-types/dataform-layouts/data-form-layout.d.ts.map +1 -1
  434. package/build-types/dataform-layouts/details/index.d.ts +6 -0
  435. package/build-types/dataform-layouts/details/index.d.ts.map +1 -0
  436. package/build-types/dataform-layouts/get-summary-fields.d.ts.map +1 -1
  437. package/build-types/dataform-layouts/index.d.ts +7 -2
  438. package/build-types/dataform-layouts/index.d.ts.map +1 -1
  439. package/build-types/dataform-layouts/normalize-form.d.ts +8 -0
  440. package/build-types/dataform-layouts/normalize-form.d.ts.map +1 -0
  441. package/build-types/dataform-layouts/panel/dropdown.d.ts +2 -2
  442. package/build-types/dataform-layouts/panel/dropdown.d.ts.map +1 -1
  443. package/build-types/dataform-layouts/panel/index.d.ts.map +1 -1
  444. package/build-types/dataform-layouts/panel/modal.d.ts +2 -2
  445. package/build-types/dataform-layouts/panel/modal.d.ts.map +1 -1
  446. package/build-types/dataform-layouts/regular/index.d.ts.map +1 -1
  447. package/build-types/dataform-layouts/row/index.d.ts.map +1 -1
  448. package/build-types/dataviews-layouts/index.d.ts +8 -0
  449. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  450. package/build-types/dataviews-layouts/picker-table/index.d.ts +4 -0
  451. package/build-types/dataviews-layouts/picker-table/index.d.ts.map +1 -0
  452. package/build-types/dataviews-layouts/table/column-header-menu.d.ts +3 -3
  453. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  454. package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
  455. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  456. package/build-types/field-types/datetime.d.ts +1 -1
  457. package/build-types/field-types/datetime.d.ts.map +1 -1
  458. package/build-types/field-types/utils/parse-date-time.d.ts +2 -0
  459. package/build-types/field-types/utils/parse-date-time.d.ts.map +1 -0
  460. package/build-types/hooks/use-form-validity.d.ts.map +1 -1
  461. package/build-types/stories/dataform.story.d.ts +13 -11
  462. package/build-types/stories/dataform.story.d.ts.map +1 -1
  463. package/build-types/stories/dataviews-picker.story.d.ts +33 -0
  464. package/build-types/stories/dataviews-picker.story.d.ts.map +1 -1
  465. package/build-types/stories/dataviews.story.d.ts +7 -1
  466. package/build-types/stories/dataviews.story.d.ts.map +1 -1
  467. package/build-types/test/normalize-form.d.ts +2 -0
  468. package/build-types/test/normalize-form.d.ts.map +1 -0
  469. package/build-types/types/dataform.d.ts +27 -9
  470. package/build-types/types/dataform.d.ts.map +1 -1
  471. package/build-types/types/dataviews.d.ts +23 -2
  472. package/build-types/types/dataviews.d.ts.map +1 -1
  473. package/build-wp/index.js +2258 -1817
  474. package/package.json +15 -15
  475. package/src/components/dataform/index.tsx +3 -1
  476. package/src/components/dataviews/style.scss +1 -1
  477. package/src/components/dataviews-bulk-actions/style.scss +1 -1
  478. package/src/components/dataviews-filters/filter.tsx +16 -1
  479. package/src/components/dataviews-filters/style.scss +1 -1
  480. package/src/components/dataviews-item-actions/index.tsx +37 -14
  481. package/src/components/dataviews-pagination/style.scss +2 -2
  482. package/src/components/dataviews-view-config/index.tsx +8 -504
  483. package/src/components/dataviews-view-config/properties-section.tsx +201 -0
  484. package/src/components/dataviews-view-config/style.scss +2 -39
  485. package/src/constants.ts +1 -0
  486. package/src/dataform-controls/datetime.tsx +3 -10
  487. package/src/dataform-controls/password.tsx +16 -12
  488. package/src/dataform-layouts/card/index.tsx +89 -33
  489. package/src/dataform-layouts/data-form-layout.tsx +12 -23
  490. package/src/dataform-layouts/details/index.tsx +71 -0
  491. package/src/dataform-layouts/details/style.scss +5 -0
  492. package/src/dataform-layouts/index.tsx +10 -3
  493. package/src/dataform-layouts/{normalize-form-fields.ts → normalize-form.ts} +50 -23
  494. package/src/dataform-layouts/panel/dropdown.tsx +10 -13
  495. package/src/dataform-layouts/panel/index.tsx +9 -24
  496. package/src/dataform-layouts/panel/modal.tsx +15 -15
  497. package/src/dataform-layouts/regular/index.tsx +7 -12
  498. package/src/dataform-layouts/row/index.tsx +13 -26
  499. package/src/dataviews-layouts/index.ts +10 -0
  500. package/src/dataviews-layouts/picker-table/index.tsx +487 -0
  501. package/src/dataviews-layouts/picker-table/style.scss +45 -0
  502. package/src/dataviews-layouts/table/column-header-menu.tsx +3 -2
  503. package/src/dataviews-layouts/table/column-primary.tsx +4 -7
  504. package/src/dataviews-layouts/table/index.tsx +37 -2
  505. package/src/dataviews-layouts/table/style.scss +2 -2
  506. package/src/field-types/datetime.tsx +16 -5
  507. package/src/field-types/utils/parse-date-time.ts +17 -0
  508. package/src/hooks/use-form-validity.ts +572 -422
  509. package/src/stories/dataform.story.tsx +604 -456
  510. package/src/stories/dataviews-picker.story.tsx +166 -38
  511. package/src/stories/dataviews.story.tsx +10 -2
  512. package/src/stories/field-types.story.tsx +7 -7
  513. package/src/style.scss +2 -0
  514. package/src/test/normalize-form.ts +568 -0
  515. package/src/test/use-form-validity.ts +318 -33
  516. package/src/types/dataform.ts +36 -11
  517. package/src/types/dataviews.ts +36 -2
  518. package/tsconfig.tsbuildinfo +1 -1
  519. package/build/dataform-layouts/is-combined-field.js.map +0 -7
  520. package/build/dataform-layouts/normalize-form-fields.js.map +0 -7
  521. package/build-module/dataform-layouts/is-combined-field.js +0 -7
  522. package/build-module/dataform-layouts/is-combined-field.js.map +0 -7
  523. package/build-module/dataform-layouts/normalize-form-fields.js.map +0 -7
  524. package/build-types/dataform-layouts/is-combined-field.d.ts +0 -6
  525. package/build-types/dataform-layouts/is-combined-field.d.ts.map +0 -1
  526. package/build-types/dataform-layouts/normalize-form-fields.d.ts +0 -19
  527. package/build-types/dataform-layouts/normalize-form-fields.d.ts.map +0 -1
  528. package/build-types/test/normalize-form-fields.d.ts +0 -2
  529. package/build-types/test/normalize-form-fields.d.ts.map +0 -1
  530. package/src/dataform-layouts/is-combined-field.ts +0 -10
  531. package/src/test/normalize-form-fields.ts +0 -317
@@ -0,0 +1,568 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import normalizeForm from '../dataform-layouts/normalize-form';
5
+ import type { Form } from '../types';
6
+
7
+ describe( 'normalizeFormFields', () => {
8
+ describe( 'empty form', () => {
9
+ it( 'returns empty array for undefined fields', () => {
10
+ const form: Form = {};
11
+ const result = normalizeForm( form );
12
+ expect( result ).toEqual( {
13
+ fields: [],
14
+ layout: { labelPosition: 'top', type: 'regular' },
15
+ } );
16
+ } );
17
+
18
+ it( 'returns empty array for empty fields', () => {
19
+ const form: Form = { fields: [] };
20
+ const result = normalizeForm( form );
21
+ expect( result ).toEqual( {
22
+ fields: [],
23
+ layout: { labelPosition: 'top', type: 'regular' },
24
+ } );
25
+ } );
26
+ } );
27
+
28
+ describe( 'default layout', () => {
29
+ it( 'applies default layout when layout is not specified', () => {
30
+ const form: Form = {
31
+ fields: [ 'field1', 'field2' ],
32
+ };
33
+ const result = normalizeForm( form );
34
+ expect( result ).toEqual( {
35
+ layout: { labelPosition: 'top', type: 'regular' },
36
+ fields: [
37
+ {
38
+ id: 'field1',
39
+ layout: {
40
+ type: 'regular',
41
+ labelPosition: 'top',
42
+ },
43
+ },
44
+ {
45
+ id: 'field2',
46
+ layout: {
47
+ type: 'regular',
48
+ labelPosition: 'top',
49
+ },
50
+ },
51
+ ],
52
+ } );
53
+ } );
54
+
55
+ it( 'handles mixed string and object field specifications', () => {
56
+ const form: Form = {
57
+ fields: [
58
+ 'field1',
59
+ {
60
+ id: 'field2',
61
+ label: 'Field 2',
62
+ },
63
+ ],
64
+ };
65
+ const result = normalizeForm( form );
66
+ expect( result ).toEqual( {
67
+ layout: { labelPosition: 'top', type: 'regular' },
68
+ fields: [
69
+ {
70
+ id: 'field1',
71
+ layout: {
72
+ type: 'regular',
73
+ labelPosition: 'top',
74
+ },
75
+ },
76
+ {
77
+ id: 'field2',
78
+ label: 'Field 2',
79
+ layout: {
80
+ type: 'regular',
81
+ labelPosition: 'top',
82
+ },
83
+ },
84
+ ],
85
+ } );
86
+ } );
87
+ } );
88
+
89
+ describe( 'layout types', () => {
90
+ it( 'regular: with default layout options', () => {
91
+ const form: Form = {
92
+ layout: { type: 'regular' },
93
+ fields: [ 'field1' ],
94
+ };
95
+ const result = normalizeForm( form );
96
+ expect( result ).toEqual( {
97
+ layout: { labelPosition: 'top', type: 'regular' },
98
+ fields: [
99
+ {
100
+ id: 'field1',
101
+ layout: {
102
+ type: 'regular',
103
+ labelPosition: 'top',
104
+ },
105
+ },
106
+ ],
107
+ } );
108
+ } );
109
+
110
+ it( 'regular: with layout options', () => {
111
+ const form: Form = {
112
+ layout: { type: 'regular', labelPosition: 'side' },
113
+ fields: [ 'field1' ],
114
+ };
115
+ const result = normalizeForm( form );
116
+ expect( result ).toEqual( {
117
+ layout: { labelPosition: 'side', type: 'regular' },
118
+ fields: [
119
+ {
120
+ id: 'field1',
121
+ layout: {
122
+ type: 'regular',
123
+ labelPosition: 'side',
124
+ },
125
+ },
126
+ ],
127
+ } );
128
+ } );
129
+
130
+ it( 'panel: with default layout options', () => {
131
+ const form: Form = {
132
+ layout: { type: 'panel' },
133
+ fields: [ 'field1' ],
134
+ };
135
+ const result = normalizeForm( form );
136
+ expect( result ).toEqual( {
137
+ layout: {
138
+ labelPosition: 'side',
139
+ type: 'panel',
140
+ openAs: 'dropdown',
141
+ summary: [],
142
+ },
143
+ fields: [
144
+ {
145
+ id: 'field1',
146
+ layout: {
147
+ type: 'panel',
148
+ labelPosition: 'side',
149
+ openAs: 'dropdown',
150
+ summary: [],
151
+ },
152
+ },
153
+ ],
154
+ } );
155
+ } );
156
+
157
+ it( 'panel: with layout options', () => {
158
+ const form: Form = {
159
+ layout: { type: 'panel', labelPosition: 'top' },
160
+ fields: [ 'field1' ],
161
+ };
162
+ const result = normalizeForm( form );
163
+ expect( result ).toEqual( {
164
+ layout: {
165
+ labelPosition: 'top',
166
+ type: 'panel',
167
+ openAs: 'dropdown',
168
+ summary: [],
169
+ },
170
+ fields: [
171
+ {
172
+ id: 'field1',
173
+ layout: {
174
+ type: 'panel',
175
+ labelPosition: 'top',
176
+ openAs: 'dropdown',
177
+ summary: [],
178
+ },
179
+ },
180
+ ],
181
+ } );
182
+ } );
183
+
184
+ it( 'card: with default layout options', () => {
185
+ const form: Form = {
186
+ layout: { type: 'card' },
187
+ fields: [ 'field1' ],
188
+ };
189
+ const result = normalizeForm( form );
190
+ expect( result ).toEqual( {
191
+ layout: {
192
+ type: 'card',
193
+ isCollapsible: true,
194
+ isOpened: true,
195
+ summary: [],
196
+ withHeader: true,
197
+ },
198
+ fields: [
199
+ {
200
+ id: 'field1',
201
+ layout: {
202
+ type: 'card',
203
+ withHeader: true,
204
+ isOpened: true,
205
+ summary: [],
206
+ isCollapsible: true,
207
+ },
208
+ },
209
+ ],
210
+ } );
211
+ } );
212
+
213
+ it( 'card: enforces isOpened=true and summary=[] when withHeader=false', () => {
214
+ const form: Form = {
215
+ // @ts-ignore - Test intentionally uses invalid type to verify runtime behavior.
216
+ layout: {
217
+ type: 'card',
218
+ withHeader: false,
219
+ // @ts-ignore - Test intentionally uses invalid type to verify runtime behavior.
220
+ isOpened: false,
221
+ summary: [ { id: 'field1', visibility: 'always' } ],
222
+ },
223
+ fields: [ 'field1' ],
224
+ };
225
+ const result = normalizeForm( form );
226
+ expect( result ).toEqual( {
227
+ layout: {
228
+ type: 'card',
229
+ isCollapsible: false,
230
+ withHeader: false,
231
+ isOpened: true,
232
+ summary: [],
233
+ },
234
+ fields: [
235
+ {
236
+ id: 'field1',
237
+ layout: {
238
+ type: 'card',
239
+ withHeader: false,
240
+ isOpened: true,
241
+ summary: [],
242
+ isCollapsible: false,
243
+ },
244
+ },
245
+ ],
246
+ } );
247
+ } );
248
+
249
+ it( 'card: respects isOpened and summary when withHeader=true', () => {
250
+ const form: Form = {
251
+ layout: {
252
+ type: 'card',
253
+ withHeader: true,
254
+ isOpened: false,
255
+ summary: [ { id: 'field1', visibility: 'always' } ],
256
+ },
257
+ fields: [ 'field1' ],
258
+ };
259
+ const result = normalizeForm( form );
260
+ expect( result ).toEqual( {
261
+ layout: {
262
+ type: 'card',
263
+ isCollapsible: true,
264
+ withHeader: true,
265
+ isOpened: false,
266
+ summary: [ { id: 'field1', visibility: 'always' } ],
267
+ },
268
+ fields: [
269
+ {
270
+ id: 'field1',
271
+ layout: {
272
+ type: 'card',
273
+ withHeader: true,
274
+ isOpened: false,
275
+ summary: [ { id: 'field1', visibility: 'always' } ],
276
+ isCollapsible: true,
277
+ },
278
+ },
279
+ ],
280
+ } );
281
+ } );
282
+
283
+ it( 'card: normalizes summary to array of objects when it is a string', () => {
284
+ const form: Form = {
285
+ layout: {
286
+ type: 'card',
287
+ withHeader: true,
288
+ isOpened: false,
289
+ summary: [
290
+ 'field2',
291
+ { id: 'field1', visibility: 'always' },
292
+ ],
293
+ isCollapsible: true,
294
+ },
295
+ fields: [ 'field1' ],
296
+ };
297
+ const result = normalizeForm( form );
298
+ expect( result ).toEqual( {
299
+ layout: {
300
+ type: 'card',
301
+ withHeader: true,
302
+ isOpened: false,
303
+ summary: [
304
+ { id: 'field2', visibility: 'when-collapsed' },
305
+ { id: 'field1', visibility: 'always' },
306
+ ],
307
+ isCollapsible: true,
308
+ },
309
+ fields: [
310
+ {
311
+ id: 'field1',
312
+ layout: {
313
+ type: 'card',
314
+ withHeader: true,
315
+ isOpened: false,
316
+ summary: [
317
+ { id: 'field2', visibility: 'when-collapsed' },
318
+ { id: 'field1', visibility: 'always' },
319
+ ],
320
+ isCollapsible: true,
321
+ },
322
+ },
323
+ ],
324
+ } );
325
+ } );
326
+ } );
327
+
328
+ describe( 'layout overrides', () => {
329
+ it( 'fields can override form layout', () => {
330
+ const form: Form = {
331
+ layout: { type: 'regular', labelPosition: 'top' },
332
+ fields: [
333
+ 'field1',
334
+ {
335
+ id: 'field2',
336
+ layout: { type: 'panel', labelPosition: 'side' },
337
+ },
338
+ ],
339
+ };
340
+ const result = normalizeForm( form );
341
+ expect( result ).toEqual( {
342
+ layout: {
343
+ type: 'regular',
344
+ labelPosition: 'top',
345
+ },
346
+ fields: [
347
+ {
348
+ id: 'field1',
349
+ layout: {
350
+ type: 'regular',
351
+ labelPosition: 'top',
352
+ },
353
+ },
354
+ {
355
+ id: 'field2',
356
+ layout: {
357
+ type: 'panel',
358
+ labelPosition: 'side',
359
+ openAs: 'dropdown',
360
+ summary: [],
361
+ },
362
+ },
363
+ ],
364
+ } );
365
+ } );
366
+
367
+ it( 'fields do not partially override form layout', () => {
368
+ const form: Form = {
369
+ layout: { type: 'card', withHeader: false, isOpened: true },
370
+ fields: [
371
+ 'field1',
372
+ {
373
+ id: 'field2',
374
+ layout: { type: 'card', isOpened: false },
375
+ },
376
+ ],
377
+ };
378
+ const result = normalizeForm( form );
379
+ expect( result ).toEqual( {
380
+ layout: {
381
+ type: 'card',
382
+ isCollapsible: false,
383
+ withHeader: false,
384
+ isOpened: true,
385
+ summary: [],
386
+ },
387
+ fields: [
388
+ {
389
+ id: 'field1',
390
+ layout: {
391
+ type: 'card',
392
+ withHeader: false,
393
+ isOpened: true,
394
+ summary: [],
395
+ isCollapsible: false,
396
+ },
397
+ },
398
+ {
399
+ id: 'field2',
400
+ layout: {
401
+ type: 'card',
402
+ isCollapsible: true,
403
+ withHeader: true,
404
+ isOpened: false,
405
+ summary: [],
406
+ },
407
+ },
408
+ ],
409
+ } );
410
+ } );
411
+ } );
412
+
413
+ describe( 'nested fields', () => {
414
+ it( 'with same ID are supported', () => {
415
+ const REGULAR = {
416
+ type: 'regular',
417
+ labelPosition: 'top',
418
+ };
419
+ const form: Form = {
420
+ fields: [
421
+ 'field1',
422
+ {
423
+ id: 'field2',
424
+ children: [ 'field2', 'field3' ],
425
+ },
426
+ ],
427
+ };
428
+ const result = normalizeForm( form );
429
+ expect( result ).toStrictEqual( {
430
+ layout: { type: 'regular', labelPosition: 'top' },
431
+ fields: [
432
+ {
433
+ id: 'field1',
434
+ layout: REGULAR,
435
+ },
436
+ {
437
+ id: 'field2',
438
+ layout: REGULAR,
439
+ children: [
440
+ { id: 'field2', layout: REGULAR },
441
+ { id: 'field3', layout: REGULAR },
442
+ ],
443
+ },
444
+ ],
445
+ } );
446
+ } );
447
+
448
+ it( 'are normalized at any level', () => {
449
+ const REGULAR = {
450
+ type: 'regular',
451
+ labelPosition: 'top',
452
+ };
453
+ const form: Form = {
454
+ fields: [
455
+ 'field1',
456
+ {
457
+ id: 'field2',
458
+ children: [
459
+ 'field3',
460
+ {
461
+ id: 'field4',
462
+ children: [
463
+ 'field5',
464
+ {
465
+ id: 'field6',
466
+ children: [
467
+ 'field7',
468
+ {
469
+ id: 'field8',
470
+ children: [ 'field9' ],
471
+ },
472
+ ],
473
+ },
474
+ ],
475
+ },
476
+ ],
477
+ },
478
+ ],
479
+ };
480
+ const result = normalizeForm( form );
481
+ expect( result ).toStrictEqual( {
482
+ layout: { type: 'regular', labelPosition: 'top' },
483
+ fields: [
484
+ {
485
+ id: 'field1',
486
+ layout: REGULAR,
487
+ },
488
+ {
489
+ id: 'field2',
490
+ layout: REGULAR,
491
+ children: [
492
+ { id: 'field3', layout: REGULAR },
493
+ {
494
+ id: 'field4',
495
+ layout: REGULAR,
496
+ children: [
497
+ { id: 'field5', layout: REGULAR },
498
+ {
499
+ id: 'field6',
500
+ layout: REGULAR,
501
+ children: [
502
+ { id: 'field7', layout: REGULAR },
503
+ {
504
+ id: 'field8',
505
+ layout: REGULAR,
506
+ children: [
507
+ {
508
+ id: 'field9',
509
+ layout: REGULAR,
510
+ },
511
+ ],
512
+ },
513
+ ],
514
+ },
515
+ ],
516
+ },
517
+ ],
518
+ },
519
+ ],
520
+ } );
521
+ } );
522
+
523
+ it( 'layout is only prefilled for top-level fields', () => {
524
+ const REGULAR = {
525
+ type: 'regular',
526
+ labelPosition: 'top',
527
+ };
528
+ const CARD = {
529
+ type: 'card',
530
+ withHeader: true,
531
+ isCollapsible: true,
532
+ isOpened: true,
533
+ summary: [],
534
+ };
535
+ const form: Form = {
536
+ layout: { type: 'card' },
537
+ fields: [
538
+ 'field1',
539
+ {
540
+ id: 'field2',
541
+ children: [ 'field3', 'field4' ],
542
+ },
543
+ ],
544
+ };
545
+ const result = normalizeForm( form );
546
+ expect( result ).toStrictEqual( {
547
+ layout: CARD,
548
+ fields: [
549
+ {
550
+ id: 'field1',
551
+ layout: CARD,
552
+ },
553
+ {
554
+ id: 'field2',
555
+ layout: CARD,
556
+ children: [
557
+ { id: 'field3', layout: REGULAR },
558
+ {
559
+ id: 'field4',
560
+ layout: REGULAR,
561
+ },
562
+ ],
563
+ },
564
+ ],
565
+ } );
566
+ } );
567
+ } );
568
+ } );