@wordpress/dataviews 11.4.1-next.v.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/README.md +44 -2
  3. package/build/components/dataform-controls/adaptive-select.cjs +52 -0
  4. package/build/components/dataform-controls/adaptive-select.cjs.map +7 -0
  5. package/build/components/dataform-controls/array.cjs +2 -0
  6. package/build/components/dataform-controls/array.cjs.map +2 -2
  7. package/build/components/dataform-controls/checkbox.cjs +2 -0
  8. package/build/components/dataform-controls/checkbox.cjs.map +2 -2
  9. package/build/components/dataform-controls/color.cjs +21 -30
  10. package/build/components/dataform-controls/color.cjs.map +3 -3
  11. package/build/components/dataform-controls/date.cjs +23 -9
  12. package/build/components/dataform-controls/date.cjs.map +2 -2
  13. package/build/components/dataform-controls/datetime.cjs +11 -3
  14. package/build/components/dataform-controls/datetime.cjs.map +2 -2
  15. package/build/components/dataform-controls/email.cjs +2 -0
  16. package/build/components/dataform-controls/email.cjs.map +2 -2
  17. package/build/components/dataform-controls/index.cjs +3 -1
  18. package/build/components/dataform-controls/index.cjs.map +3 -3
  19. package/build/components/dataform-controls/password.cjs +2 -0
  20. package/build/components/dataform-controls/password.cjs.map +2 -2
  21. package/build/components/dataform-controls/radio.cjs +2 -0
  22. package/build/components/dataform-controls/radio.cjs.map +2 -2
  23. package/build/components/dataform-controls/select.cjs +2 -0
  24. package/build/components/dataform-controls/select.cjs.map +2 -2
  25. package/build/components/dataform-controls/telephone.cjs +2 -0
  26. package/build/components/dataform-controls/telephone.cjs.map +2 -2
  27. package/build/components/dataform-controls/text.cjs +2 -0
  28. package/build/components/dataform-controls/text.cjs.map +2 -2
  29. package/build/components/dataform-controls/textarea.cjs +2 -0
  30. package/build/components/dataform-controls/textarea.cjs.map +2 -2
  31. package/build/components/dataform-controls/toggle-group.cjs +2 -0
  32. package/build/components/dataform-controls/toggle-group.cjs.map +2 -2
  33. package/build/components/dataform-controls/toggle.cjs +2 -0
  34. package/build/components/dataform-controls/toggle.cjs.map +2 -2
  35. package/build/components/dataform-controls/url.cjs +2 -0
  36. package/build/components/dataform-controls/url.cjs.map +2 -2
  37. package/build/components/dataform-controls/utils/relative-date-control.cjs +1 -1
  38. package/build/components/dataform-controls/utils/relative-date-control.cjs.map +1 -1
  39. package/build/components/dataform-controls/utils/validated-input.cjs +2 -0
  40. package/build/components/dataform-controls/utils/validated-input.cjs.map +2 -2
  41. package/build/components/dataform-controls/utils/validated-number.cjs +2 -0
  42. package/build/components/dataform-controls/utils/validated-number.cjs.map +2 -2
  43. package/build/components/dataform-layouts/card/index.cjs +2 -0
  44. package/build/components/dataform-layouts/card/index.cjs.map +2 -2
  45. package/build/components/dataform-layouts/data-form-layout.cjs +11 -2
  46. package/build/components/dataform-layouts/data-form-layout.cjs.map +2 -2
  47. package/build/components/dataform-layouts/details/index.cjs +1 -1
  48. package/build/components/dataform-layouts/details/index.cjs.map +1 -1
  49. package/build/components/dataform-layouts/index.cjs +5 -5
  50. package/build/components/dataform-layouts/index.cjs.map +1 -1
  51. package/build/components/dataform-layouts/normalize-form.cjs +2 -1
  52. package/build/components/dataform-layouts/normalize-form.cjs.map +2 -2
  53. package/build/components/dataform-layouts/panel/dropdown.cjs +81 -66
  54. package/build/components/dataform-layouts/panel/dropdown.cjs.map +3 -3
  55. package/build/components/dataform-layouts/panel/index.cjs +13 -177
  56. package/build/components/dataform-layouts/panel/index.cjs.map +3 -3
  57. package/build/components/dataform-layouts/panel/modal.cjs +15 -11
  58. package/build/components/dataform-layouts/panel/modal.cjs.map +3 -3
  59. package/build/components/dataform-layouts/panel/summary-button.cjs +125 -56
  60. package/build/components/dataform-layouts/panel/summary-button.cjs.map +3 -3
  61. package/build/components/dataform-layouts/panel/utils/get-first-validation-error.cjs +59 -0
  62. package/build/components/dataform-layouts/panel/utils/get-first-validation-error.cjs.map +7 -0
  63. package/build/components/dataform-layouts/panel/utils/get-label-classname.cjs +45 -0
  64. package/build/components/dataform-layouts/panel/utils/get-label-classname.cjs.map +7 -0
  65. package/build/components/dataform-layouts/panel/utils/get-label-content.cjs +36 -0
  66. package/build/components/dataform-layouts/panel/utils/get-label-content.cjs.map +7 -0
  67. package/build/components/dataform-layouts/panel/utils/use-field-from-form-field.cjs +77 -0
  68. package/build/components/dataform-layouts/panel/utils/use-field-from-form-field.cjs.map +7 -0
  69. package/build/components/dataform-layouts/regular/index.cjs +6 -3
  70. package/build/components/dataform-layouts/regular/index.cjs.map +2 -2
  71. package/build/components/dataform-layouts/row/index.cjs +5 -2
  72. package/build/components/dataform-layouts/row/index.cjs.map +2 -2
  73. package/build/components/dataviews-bulk-actions/index.cjs +4 -4
  74. package/build/components/dataviews-bulk-actions/index.cjs.map +2 -2
  75. package/build/components/dataviews-context/index.cjs.map +2 -2
  76. package/build/components/dataviews-filters/filter.cjs +1 -1
  77. package/build/components/dataviews-filters/filter.cjs.map +1 -1
  78. package/build/components/dataviews-filters/filters.cjs +1 -1
  79. package/build/components/dataviews-filters/filters.cjs.map +1 -1
  80. package/build/components/dataviews-filters/search-widget.cjs +25 -11
  81. package/build/components/dataviews-filters/search-widget.cjs.map +2 -2
  82. package/build/components/dataviews-filters/toggle.cjs.map +1 -1
  83. package/build/components/dataviews-footer/index.cjs +1 -1
  84. package/build/components/dataviews-footer/index.cjs.map +1 -1
  85. package/build/components/dataviews-layouts/activity/activity-item.cjs +4 -4
  86. package/build/components/dataviews-layouts/activity/activity-item.cjs.map +1 -1
  87. package/build/components/dataviews-layouts/activity/index.cjs +1 -1
  88. package/build/components/dataviews-layouts/activity/index.cjs.map +1 -1
  89. package/build/components/dataviews-layouts/grid/composite-grid.cjs +27 -38
  90. package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
  91. package/build/components/dataviews-layouts/grid/index.cjs +2 -2
  92. package/build/components/dataviews-layouts/grid/index.cjs.map +1 -1
  93. package/build/components/dataviews-layouts/list/index.cjs +7 -8
  94. package/build/components/dataviews-layouts/list/index.cjs.map +2 -2
  95. package/build/components/dataviews-layouts/picker-grid/index.cjs +5 -5
  96. package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
  97. package/build/components/dataviews-layouts/picker-table/index.cjs +1 -1
  98. package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
  99. package/build/components/dataviews-layouts/table/column-primary.cjs +1 -1
  100. package/build/components/dataviews-layouts/table/column-primary.cjs.map +1 -1
  101. package/build/components/dataviews-layouts/table/index.cjs +1 -1
  102. package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
  103. package/build/components/dataviews-layouts/utils/item-click-wrapper.cjs.map +2 -2
  104. package/build/components/dataviews-pagination/index.cjs +3 -3
  105. package/build/components/dataviews-pagination/index.cjs.map +2 -2
  106. package/build/components/dataviews-picker-footer/index.cjs +3 -3
  107. package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
  108. package/build/components/dataviews-view-config/index.cjs +74 -57
  109. package/build/components/dataviews-view-config/index.cjs.map +3 -3
  110. package/build/components/dataviews-view-config/properties-section.cjs +1 -1
  111. package/build/components/dataviews-view-config/properties-section.cjs.map +1 -1
  112. package/build/dataviews/index.cjs +7 -5
  113. package/build/dataviews/index.cjs.map +2 -2
  114. package/build/dataviews-picker/index.cjs +3 -3
  115. package/build/dataviews-picker/index.cjs.map +2 -2
  116. package/build/hooks/use-form-validity.cjs +61 -28
  117. package/build/hooks/use-form-validity.cjs.map +2 -2
  118. package/build/types/dataform.cjs.map +1 -1
  119. package/build/types/field-api.cjs.map +1 -1
  120. package/build-module/components/dataform-controls/adaptive-select.mjs +21 -0
  121. package/build-module/components/dataform-controls/adaptive-select.mjs.map +7 -0
  122. package/build-module/components/dataform-controls/array.mjs +2 -0
  123. package/build-module/components/dataform-controls/array.mjs.map +2 -2
  124. package/build-module/components/dataform-controls/checkbox.mjs +2 -0
  125. package/build-module/components/dataform-controls/checkbox.mjs.map +2 -2
  126. package/build-module/components/dataform-controls/color.mjs +26 -31
  127. package/build-module/components/dataform-controls/color.mjs.map +2 -2
  128. package/build-module/components/dataform-controls/date.mjs +23 -9
  129. package/build-module/components/dataform-controls/date.mjs.map +2 -2
  130. package/build-module/components/dataform-controls/datetime.mjs +11 -3
  131. package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
  132. package/build-module/components/dataform-controls/email.mjs +2 -0
  133. package/build-module/components/dataform-controls/email.mjs.map +2 -2
  134. package/build-module/components/dataform-controls/index.mjs +3 -1
  135. package/build-module/components/dataform-controls/index.mjs.map +2 -2
  136. package/build-module/components/dataform-controls/password.mjs +2 -0
  137. package/build-module/components/dataform-controls/password.mjs.map +2 -2
  138. package/build-module/components/dataform-controls/radio.mjs +2 -0
  139. package/build-module/components/dataform-controls/radio.mjs.map +2 -2
  140. package/build-module/components/dataform-controls/select.mjs +2 -0
  141. package/build-module/components/dataform-controls/select.mjs.map +2 -2
  142. package/build-module/components/dataform-controls/telephone.mjs +2 -0
  143. package/build-module/components/dataform-controls/telephone.mjs.map +2 -2
  144. package/build-module/components/dataform-controls/text.mjs +2 -0
  145. package/build-module/components/dataform-controls/text.mjs.map +2 -2
  146. package/build-module/components/dataform-controls/textarea.mjs +2 -0
  147. package/build-module/components/dataform-controls/textarea.mjs.map +2 -2
  148. package/build-module/components/dataform-controls/toggle-group.mjs +2 -0
  149. package/build-module/components/dataform-controls/toggle-group.mjs.map +2 -2
  150. package/build-module/components/dataform-controls/toggle.mjs +2 -0
  151. package/build-module/components/dataform-controls/toggle.mjs.map +2 -2
  152. package/build-module/components/dataform-controls/url.mjs +2 -0
  153. package/build-module/components/dataform-controls/url.mjs.map +2 -2
  154. package/build-module/components/dataform-controls/utils/relative-date-control.mjs +1 -1
  155. package/build-module/components/dataform-controls/utils/relative-date-control.mjs.map +1 -1
  156. package/build-module/components/dataform-controls/utils/validated-input.mjs +2 -0
  157. package/build-module/components/dataform-controls/utils/validated-input.mjs.map +2 -2
  158. package/build-module/components/dataform-controls/utils/validated-number.mjs +2 -0
  159. package/build-module/components/dataform-controls/utils/validated-number.mjs.map +2 -2
  160. package/build-module/components/dataform-layouts/card/index.mjs +2 -0
  161. package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
  162. package/build-module/components/dataform-layouts/data-form-layout.mjs +12 -3
  163. package/build-module/components/dataform-layouts/data-form-layout.mjs.map +2 -2
  164. package/build-module/components/dataform-layouts/details/index.mjs +1 -1
  165. package/build-module/components/dataform-layouts/details/index.mjs.map +1 -1
  166. package/build-module/components/dataform-layouts/index.mjs +5 -5
  167. package/build-module/components/dataform-layouts/index.mjs.map +1 -1
  168. package/build-module/components/dataform-layouts/normalize-form.mjs +2 -1
  169. package/build-module/components/dataform-layouts/normalize-form.mjs.map +2 -2
  170. package/build-module/components/dataform-layouts/panel/dropdown.mjs +83 -68
  171. package/build-module/components/dataform-layouts/panel/dropdown.mjs.map +2 -2
  172. package/build-module/components/dataform-layouts/panel/index.mjs +14 -178
  173. package/build-module/components/dataform-layouts/panel/index.mjs.map +2 -2
  174. package/build-module/components/dataform-layouts/panel/modal.mjs +15 -11
  175. package/build-module/components/dataform-layouts/panel/modal.mjs.map +2 -2
  176. package/build-module/components/dataform-layouts/panel/summary-button.mjs +117 -58
  177. package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
  178. package/build-module/components/dataform-layouts/panel/utils/get-first-validation-error.mjs +38 -0
  179. package/build-module/components/dataform-layouts/panel/utils/get-first-validation-error.mjs.map +7 -0
  180. package/build-module/components/dataform-layouts/panel/utils/get-label-classname.mjs +14 -0
  181. package/build-module/components/dataform-layouts/panel/utils/get-label-classname.mjs.map +7 -0
  182. package/build-module/components/dataform-layouts/panel/utils/get-label-content.mjs +15 -0
  183. package/build-module/components/dataform-layouts/panel/utils/get-label-content.mjs.map +7 -0
  184. package/build-module/components/dataform-layouts/panel/utils/use-field-from-form-field.mjs +46 -0
  185. package/build-module/components/dataform-layouts/panel/utils/use-field-from-form-field.mjs.map +7 -0
  186. package/build-module/components/dataform-layouts/regular/index.mjs +6 -3
  187. package/build-module/components/dataform-layouts/regular/index.mjs.map +2 -2
  188. package/build-module/components/dataform-layouts/row/index.mjs +5 -2
  189. package/build-module/components/dataform-layouts/row/index.mjs.map +2 -2
  190. package/build-module/components/dataviews-bulk-actions/index.mjs +4 -4
  191. package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
  192. package/build-module/components/dataviews-context/index.mjs.map +2 -2
  193. package/build-module/components/dataviews-filters/filter.mjs +1 -1
  194. package/build-module/components/dataviews-filters/filter.mjs.map +1 -1
  195. package/build-module/components/dataviews-filters/filters.mjs +1 -1
  196. package/build-module/components/dataviews-filters/filters.mjs.map +1 -1
  197. package/build-module/components/dataviews-filters/search-widget.mjs +25 -11
  198. package/build-module/components/dataviews-filters/search-widget.mjs.map +2 -2
  199. package/build-module/components/dataviews-filters/toggle.mjs.map +1 -1
  200. package/build-module/components/dataviews-footer/index.mjs +1 -1
  201. package/build-module/components/dataviews-footer/index.mjs.map +1 -1
  202. package/build-module/components/dataviews-layouts/activity/activity-item.mjs +4 -4
  203. package/build-module/components/dataviews-layouts/activity/activity-item.mjs.map +1 -1
  204. package/build-module/components/dataviews-layouts/activity/index.mjs +1 -1
  205. package/build-module/components/dataviews-layouts/activity/index.mjs.map +1 -1
  206. package/build-module/components/dataviews-layouts/grid/composite-grid.mjs +27 -38
  207. package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
  208. package/build-module/components/dataviews-layouts/grid/index.mjs +2 -2
  209. package/build-module/components/dataviews-layouts/grid/index.mjs.map +1 -1
  210. package/build-module/components/dataviews-layouts/list/index.mjs +7 -8
  211. package/build-module/components/dataviews-layouts/list/index.mjs.map +2 -2
  212. package/build-module/components/dataviews-layouts/picker-grid/index.mjs +5 -5
  213. package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
  214. package/build-module/components/dataviews-layouts/picker-table/index.mjs +1 -1
  215. package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
  216. package/build-module/components/dataviews-layouts/table/column-primary.mjs +1 -1
  217. package/build-module/components/dataviews-layouts/table/column-primary.mjs.map +1 -1
  218. package/build-module/components/dataviews-layouts/table/index.mjs +1 -1
  219. package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
  220. package/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs.map +2 -2
  221. package/build-module/components/dataviews-pagination/index.mjs +3 -3
  222. package/build-module/components/dataviews-pagination/index.mjs.map +2 -2
  223. package/build-module/components/dataviews-picker-footer/index.mjs +3 -3
  224. package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
  225. package/build-module/components/dataviews-view-config/index.mjs +74 -59
  226. package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
  227. package/build-module/components/dataviews-view-config/properties-section.mjs +1 -1
  228. package/build-module/components/dataviews-view-config/properties-section.mjs.map +1 -1
  229. package/build-module/dataviews/index.mjs +7 -5
  230. package/build-module/dataviews/index.mjs.map +2 -2
  231. package/build-module/dataviews-picker/index.mjs +3 -3
  232. package/build-module/dataviews-picker/index.mjs.map +2 -2
  233. package/build-module/hooks/use-form-validity.mjs +61 -28
  234. package/build-module/hooks/use-form-validity.mjs.map +2 -2
  235. package/build-style/style-rtl.css +144 -217
  236. package/build-style/style.css +144 -217
  237. package/build-types/components/dataform-controls/adaptive-select.d.ts +6 -0
  238. package/build-types/components/dataform-controls/adaptive-select.d.ts.map +1 -0
  239. package/build-types/components/dataform-controls/array.d.ts +1 -1
  240. package/build-types/components/dataform-controls/array.d.ts.map +1 -1
  241. package/build-types/components/dataform-controls/checkbox.d.ts +1 -1
  242. package/build-types/components/dataform-controls/checkbox.d.ts.map +1 -1
  243. package/build-types/components/dataform-controls/color.d.ts +1 -1
  244. package/build-types/components/dataform-controls/color.d.ts.map +1 -1
  245. package/build-types/components/dataform-controls/date.d.ts +1 -1
  246. package/build-types/components/dataform-controls/date.d.ts.map +1 -1
  247. package/build-types/components/dataform-controls/datetime.d.ts +1 -1
  248. package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
  249. package/build-types/components/dataform-controls/email.d.ts +1 -1
  250. package/build-types/components/dataform-controls/email.d.ts.map +1 -1
  251. package/build-types/components/dataform-controls/index.d.ts.map +1 -1
  252. package/build-types/components/dataform-controls/password.d.ts +1 -1
  253. package/build-types/components/dataform-controls/password.d.ts.map +1 -1
  254. package/build-types/components/dataform-controls/radio.d.ts +1 -1
  255. package/build-types/components/dataform-controls/radio.d.ts.map +1 -1
  256. package/build-types/components/dataform-controls/select.d.ts +1 -1
  257. package/build-types/components/dataform-controls/select.d.ts.map +1 -1
  258. package/build-types/components/dataform-controls/telephone.d.ts +1 -1
  259. package/build-types/components/dataform-controls/telephone.d.ts.map +1 -1
  260. package/build-types/components/dataform-controls/text.d.ts +1 -1
  261. package/build-types/components/dataform-controls/text.d.ts.map +1 -1
  262. package/build-types/components/dataform-controls/textarea.d.ts +1 -1
  263. package/build-types/components/dataform-controls/textarea.d.ts.map +1 -1
  264. package/build-types/components/dataform-controls/toggle-group.d.ts +1 -1
  265. package/build-types/components/dataform-controls/toggle-group.d.ts.map +1 -1
  266. package/build-types/components/dataform-controls/toggle.d.ts +1 -1
  267. package/build-types/components/dataform-controls/toggle.d.ts.map +1 -1
  268. package/build-types/components/dataform-controls/url.d.ts +1 -1
  269. package/build-types/components/dataform-controls/url.d.ts.map +1 -1
  270. package/build-types/components/dataform-controls/utils/validated-input.d.ts +1 -1
  271. package/build-types/components/dataform-controls/utils/validated-input.d.ts.map +1 -1
  272. package/build-types/components/dataform-controls/utils/validated-number.d.ts +1 -1
  273. package/build-types/components/dataform-controls/utils/validated-number.d.ts.map +1 -1
  274. package/build-types/components/dataform-layouts/card/index.d.ts +1 -1
  275. package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
  276. package/build-types/components/dataform-layouts/data-form-layout.d.ts +2 -1
  277. package/build-types/components/dataform-layouts/data-form-layout.d.ts.map +1 -1
  278. package/build-types/components/dataform-layouts/normalize-form.d.ts.map +1 -1
  279. package/build-types/components/dataform-layouts/panel/dropdown.d.ts +2 -13
  280. package/build-types/components/dataform-layouts/panel/dropdown.d.ts.map +1 -1
  281. package/build-types/components/dataform-layouts/panel/index.d.ts +1 -1
  282. package/build-types/components/dataform-layouts/panel/index.d.ts.map +1 -1
  283. package/build-types/components/dataform-layouts/panel/modal.d.ts +2 -11
  284. package/build-types/components/dataform-layouts/panel/modal.d.ts.map +1 -1
  285. package/build-types/components/dataform-layouts/panel/summary-button.d.ts +6 -5
  286. package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
  287. package/build-types/components/dataform-layouts/panel/utils/get-first-validation-error.d.ts +4 -0
  288. package/build-types/components/dataform-layouts/panel/utils/get-first-validation-error.d.ts.map +1 -0
  289. package/build-types/components/dataform-layouts/panel/utils/get-label-classname.d.ts +4 -0
  290. package/build-types/components/dataform-layouts/panel/utils/get-label-classname.d.ts.map +1 -0
  291. package/build-types/components/dataform-layouts/panel/utils/get-label-content.d.ts +3 -0
  292. package/build-types/components/dataform-layouts/panel/utils/get-label-content.d.ts.map +1 -0
  293. package/build-types/components/dataform-layouts/panel/utils/use-field-from-form-field.d.ts +23 -0
  294. package/build-types/components/dataform-layouts/panel/utils/use-field-from-form-field.d.ts.map +1 -0
  295. package/build-types/components/dataform-layouts/regular/index.d.ts +1 -1
  296. package/build-types/components/dataform-layouts/regular/index.d.ts.map +1 -1
  297. package/build-types/components/dataform-layouts/row/index.d.ts +1 -1
  298. package/build-types/components/dataform-layouts/row/index.d.ts.map +1 -1
  299. package/build-types/components/dataviews-context/index.d.ts +1 -0
  300. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  301. package/build-types/components/dataviews-filters/filter.d.ts +1 -1
  302. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
  303. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  304. package/build-types/components/dataviews-layouts/list/index.d.ts.map +1 -1
  305. package/build-types/components/dataviews-layouts/utils/item-click-wrapper.d.ts +1 -0
  306. package/build-types/components/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -1
  307. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  308. package/build-types/dataform/stories/index.story.d.ts +9 -1
  309. package/build-types/dataform/stories/index.story.d.ts.map +1 -1
  310. package/build-types/dataform/stories/layout-panel.d.ts +3 -1
  311. package/build-types/dataform/stories/layout-panel.d.ts.map +1 -1
  312. package/build-types/dataviews/index.d.ts +2 -1
  313. package/build-types/dataviews/index.d.ts.map +1 -1
  314. package/build-types/dataviews/stories/fixtures.d.ts +1 -0
  315. package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
  316. package/build-types/dataviews/stories/index.story.d.ts +14 -2
  317. package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
  318. package/build-types/dataviews/stories/layout-activity.d.ts +2 -1
  319. package/build-types/dataviews/stories/layout-activity.d.ts.map +1 -1
  320. package/build-types/dataviews/stories/layout-list.d.ts +2 -1
  321. package/build-types/dataviews/stories/layout-list.d.ts.map +1 -1
  322. package/build-types/field-types/stories/index.story.d.ts +42 -16
  323. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  324. package/build-types/hooks/use-form-validity.d.ts.map +1 -1
  325. package/build-types/types/dataform.d.ts +4 -0
  326. package/build-types/types/dataform.d.ts.map +1 -1
  327. package/build-types/types/field-api.d.ts +4 -0
  328. package/build-types/types/field-api.d.ts.map +1 -1
  329. package/build-wp/index.js +2689 -2167
  330. package/package.json +21 -21
  331. package/src/components/dataform-controls/adaptive-select.tsx +23 -0
  332. package/src/components/dataform-controls/array.tsx +2 -0
  333. package/src/components/dataform-controls/checkbox.tsx +2 -0
  334. package/src/components/dataform-controls/color.tsx +31 -36
  335. package/src/components/dataform-controls/date.tsx +24 -16
  336. package/src/components/dataform-controls/datetime.tsx +16 -6
  337. package/src/components/dataform-controls/email.tsx +2 -0
  338. package/src/components/dataform-controls/index.tsx +3 -1
  339. package/src/components/dataform-controls/password.tsx +2 -0
  340. package/src/components/dataform-controls/radio.tsx +2 -0
  341. package/src/components/dataform-controls/select.tsx +2 -0
  342. package/src/components/dataform-controls/style.scss +4 -0
  343. package/src/components/dataform-controls/telephone.tsx +2 -0
  344. package/src/components/dataform-controls/text.tsx +2 -0
  345. package/src/components/dataform-controls/textarea.tsx +2 -0
  346. package/src/components/dataform-controls/toggle-group.tsx +2 -0
  347. package/src/components/dataform-controls/toggle.tsx +2 -0
  348. package/src/components/dataform-controls/url.tsx +2 -0
  349. package/src/components/dataform-controls/utils/relative-date-control.tsx +1 -1
  350. package/src/components/dataform-controls/utils/validated-input.tsx +2 -0
  351. package/src/components/dataform-controls/utils/validated-number.tsx +2 -0
  352. package/src/components/dataform-layouts/card/index.tsx +2 -0
  353. package/src/components/dataform-layouts/data-form-layout.tsx +18 -4
  354. package/src/components/dataform-layouts/details/index.tsx +1 -1
  355. package/src/components/dataform-layouts/index.tsx +5 -5
  356. package/src/components/dataform-layouts/normalize-form.ts +1 -0
  357. package/src/components/dataform-layouts/panel/dropdown.tsx +97 -96
  358. package/src/components/dataform-layouts/panel/index.tsx +10 -245
  359. package/src/components/dataform-layouts/panel/modal.tsx +24 -22
  360. package/src/components/dataform-layouts/panel/style.scss +109 -27
  361. package/src/components/dataform-layouts/panel/summary-button.tsx +140 -62
  362. package/src/components/dataform-layouts/panel/utils/get-first-validation-error.ts +47 -0
  363. package/src/components/dataform-layouts/panel/utils/get-label-classname.ts +18 -0
  364. package/src/components/dataform-layouts/panel/utils/get-label-content.tsx +26 -0
  365. package/src/components/dataform-layouts/panel/utils/use-field-from-form-field.ts +78 -0
  366. package/src/components/dataform-layouts/regular/index.tsx +8 -3
  367. package/src/components/dataform-layouts/regular/style.scss +10 -0
  368. package/src/components/dataform-layouts/row/index.tsx +5 -2
  369. package/src/components/dataform-layouts/test/normalize-form.ts +5 -0
  370. package/src/components/dataviews-bulk-actions/index.tsx +4 -4
  371. package/src/components/dataviews-context/index.ts +1 -0
  372. package/src/components/dataviews-filters/filter.tsx +2 -2
  373. package/src/components/dataviews-filters/filters.tsx +1 -1
  374. package/src/components/dataviews-filters/search-widget.tsx +10 -2
  375. package/src/components/dataviews-filters/style.scss +8 -0
  376. package/src/components/dataviews-filters/toggle.tsx +1 -1
  377. package/src/components/dataviews-footer/index.tsx +1 -1
  378. package/src/components/dataviews-layouts/activity/activity-item.tsx +4 -4
  379. package/src/components/dataviews-layouts/activity/index.tsx +1 -1
  380. package/src/components/dataviews-layouts/grid/composite-grid.tsx +35 -35
  381. package/src/components/dataviews-layouts/grid/index.tsx +2 -2
  382. package/src/components/dataviews-layouts/grid/style.scss +15 -1
  383. package/src/components/dataviews-layouts/list/index.tsx +7 -8
  384. package/src/components/dataviews-layouts/list/style.scss +1 -0
  385. package/src/components/dataviews-layouts/picker-grid/index.tsx +5 -5
  386. package/src/components/dataviews-layouts/picker-table/index.tsx +1 -1
  387. package/src/components/dataviews-layouts/table/column-primary.tsx +1 -1
  388. package/src/components/dataviews-layouts/table/index.tsx +1 -1
  389. package/src/components/dataviews-layouts/utils/item-click-wrapper.tsx +1 -0
  390. package/src/components/dataviews-pagination/index.tsx +3 -3
  391. package/src/components/dataviews-picker-footer/index.tsx +3 -3
  392. package/src/components/dataviews-view-config/index.tsx +61 -50
  393. package/src/components/dataviews-view-config/properties-section.tsx +1 -1
  394. package/src/components/dataviews-view-config/style.scss +21 -0
  395. package/src/dataform/stories/content.story.tsx +5 -5
  396. package/src/dataform/stories/index.story.tsx +6 -1
  397. package/src/dataform/stories/layout-panel.tsx +19 -2
  398. package/src/dataform/stories/validation.tsx +2 -2
  399. package/src/dataform/test/dataform.tsx +2 -2
  400. package/src/dataviews/index.tsx +7 -4
  401. package/src/dataviews/stories/empty.tsx +1 -1
  402. package/src/dataviews/stories/fixtures.tsx +93 -4
  403. package/src/dataviews/stories/free-composition.tsx +6 -6
  404. package/src/dataviews/stories/index.story.tsx +12 -0
  405. package/src/dataviews/stories/layout-activity.tsx +6 -3
  406. package/src/dataviews/stories/layout-list.tsx +3 -0
  407. package/src/dataviews-picker/index.tsx +4 -4
  408. package/src/dataviews-picker/stories/fixtures.tsx +2 -2
  409. package/src/dataviews-picker/stories/index.story.tsx +1 -1
  410. package/src/field-types/stories/index.story.tsx +99 -5
  411. package/src/hooks/test/use-form-validity.ts +303 -178
  412. package/src/hooks/use-form-validity.ts +85 -36
  413. package/src/style.scss +0 -2
  414. package/src/types/dataform.ts +5 -0
  415. package/src/types/field-api.ts +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/dataviews",
3
- "version": "11.4.1-next.v.0+5aba098fc",
3
+ "version": "12.0.0",
4
4
  "description": "DataViews is a component that provides an API to render datasets using different types of layouts (table, grid, list, etc.).",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -52,24 +52,24 @@
52
52
  "types": "build-types",
53
53
  "sideEffects": false,
54
54
  "dependencies": {
55
- "@ariakit/react": "^0.4.15",
56
- "@wordpress/base-styles": "^6.15.1-next.v.0+5aba098fc",
57
- "@wordpress/components": "^32.1.1-next.v.0+5aba098fc",
58
- "@wordpress/compose": "^7.39.1-next.v.0+5aba098fc",
59
- "@wordpress/data": "^10.39.1-next.v.0+5aba098fc",
60
- "@wordpress/date": "^5.39.1-next.v.0+5aba098fc",
61
- "@wordpress/deprecated": "^4.39.1-next.v.0+5aba098fc",
62
- "@wordpress/dom": "^4.39.1-next.v.0+5aba098fc",
63
- "@wordpress/element": "^6.39.1-next.v.0+5aba098fc",
64
- "@wordpress/i18n": "^6.12.1-next.v.0+5aba098fc",
65
- "@wordpress/icons": "^11.6.1-next.v.0+5aba098fc",
66
- "@wordpress/keycodes": "^4.39.1-next.v.0+5aba098fc",
67
- "@wordpress/primitives": "^4.39.1-next.v.0+5aba098fc",
68
- "@wordpress/private-apis": "^1.39.1-next.v.0+5aba098fc",
69
- "@wordpress/theme": "^0.6.1-next.v.0+5aba098fc",
70
- "@wordpress/ui": "^0.6.1-next.v.0+5aba098fc",
71
- "@wordpress/url": "^4.39.1-next.v.0+5aba098fc",
72
- "@wordpress/warning": "^3.39.1-next.v.0+5aba098fc",
55
+ "@ariakit/react": "^0.4.21",
56
+ "@wordpress/base-styles": "^6.16.0",
57
+ "@wordpress/components": "^32.2.0",
58
+ "@wordpress/compose": "^7.40.0",
59
+ "@wordpress/data": "^10.40.0",
60
+ "@wordpress/date": "^5.40.0",
61
+ "@wordpress/deprecated": "^4.40.0",
62
+ "@wordpress/dom": "^4.40.0",
63
+ "@wordpress/element": "^6.40.0",
64
+ "@wordpress/i18n": "^6.13.0",
65
+ "@wordpress/icons": "^11.7.0",
66
+ "@wordpress/keycodes": "^4.40.0",
67
+ "@wordpress/primitives": "^4.40.0",
68
+ "@wordpress/private-apis": "^1.40.0",
69
+ "@wordpress/theme": "^0.7.0",
70
+ "@wordpress/ui": "^0.7.0",
71
+ "@wordpress/url": "^4.40.0",
72
+ "@wordpress/warning": "^3.40.0",
73
73
  "clsx": "^2.1.1",
74
74
  "colord": "^2.7.0",
75
75
  "date-fns": "^4.1.0",
@@ -80,7 +80,7 @@
80
80
  "devDependencies": {
81
81
  "@storybook/addon-docs": "^10.1.11",
82
82
  "@storybook/react-vite": "^10.1.11",
83
- "@testing-library/jest-dom": "^6.6.3",
83
+ "@testing-library/jest-dom": "^6.9.1",
84
84
  "@types/jest": "^29.5.14",
85
85
  "esbuild": "^0.27.2",
86
86
  "storybook": "^10.1.11"
@@ -95,5 +95,5 @@
95
95
  "scripts": {
96
96
  "build:wp": "node build.cjs"
97
97
  },
98
- "gitHead": "d730f9e00f5462d1b9d2660632850f5f43ccff44"
98
+ "gitHead": "376124aa10dbc2cc0c81c964ec00b99fcfee5382"
99
99
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import type { DataFormControlProps } from '../../types';
5
+ import useElements from '../../hooks/use-elements';
6
+ import Combobox from './combobox';
7
+ import Select from './select';
8
+
9
+ const ELEMENTS_THRESHOLD = 10;
10
+
11
+ export default function AdaptiveSelect< Item >(
12
+ props: DataFormControlProps< Item >
13
+ ) {
14
+ const { field } = props;
15
+ const { elements } = useElements( {
16
+ elements: field.elements,
17
+ getElements: field.getElements,
18
+ } );
19
+ if ( elements.length >= ELEMENTS_THRESHOLD ) {
20
+ return <Combobox { ...props } />;
21
+ }
22
+ return <Select { ...props } />;
23
+ }
@@ -19,6 +19,7 @@ export default function ArrayControl< Item >( {
19
19
  field,
20
20
  onChange,
21
21
  hideLabelFromVision,
22
+ markWhenOptional,
22
23
  validity,
23
24
  }: DataFormControlProps< Item > ) {
24
25
  const { label, placeholder, getValue, setValue, isValid } = field;
@@ -65,6 +66,7 @@ export default function ArrayControl< Item >( {
65
66
  return (
66
67
  <ValidatedFormTokenField
67
68
  required={ !! isValid?.required }
69
+ markWhenOptional={ markWhenOptional }
68
70
  customValidity={ getCustomValidity( isValid, validity ) }
69
71
  label={ hideLabelFromVision ? undefined : label }
70
72
  value={ arrayValueAsElements }
@@ -18,6 +18,7 @@ export default function Checkbox< Item >( {
18
18
  onChange,
19
19
  data,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  validity,
22
23
  }: DataFormControlProps< Item > ) {
23
24
  const { getValue, setValue, label, description, isValid } = field;
@@ -31,6 +32,7 @@ export default function Checkbox< Item >( {
31
32
  return (
32
33
  <ValidatedCheckboxControl
33
34
  required={ !! field.isValid?.required }
35
+ markWhenOptional={ markWhenOptional }
34
36
  customValidity={ getCustomValidity( isValid, validity ) }
35
37
  hidden={ hideLabelFromVision }
36
38
  label={ label }
@@ -7,11 +7,16 @@ import { colord } from 'colord';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import {
10
+ Button,
11
+ ColorIndicator,
12
+ ColorPicker,
10
13
  Dropdown,
11
14
  privateApis,
12
15
  __experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,
16
+ __experimentalDropdownContentWrapper as DropdownContentWrapper,
13
17
  } from '@wordpress/components';
14
18
  import { useCallback } from '@wordpress/element';
19
+ import { __ } from '@wordpress/i18n';
15
20
 
16
21
  /**
17
22
  * Internal dependencies
@@ -20,51 +25,37 @@ import type { DataFormControlProps } from '../../types';
20
25
  import { unlock } from '../../lock-unlock';
21
26
  import getCustomValidity from './utils/get-custom-validity';
22
27
 
23
- const { ValidatedInputControl, Picker } = unlock( privateApis );
28
+ const { ValidatedInputControl } = unlock( privateApis );
24
29
 
25
- const ColorPicker = ( {
30
+ const ColorPickerDropdown = ( {
26
31
  color,
27
32
  onColorChange,
28
33
  }: {
29
34
  color: string;
30
- onColorChange: ( colorObject: any ) => void;
35
+ onColorChange: ( newColor: string ) => void;
31
36
  } ) => {
32
37
  const validColor = color && colord( color ).isValid() ? color : '#ffffff';
33
38
 
34
39
  return (
35
40
  <Dropdown
36
- renderToggle={ ( { onToggle, isOpen } ) => (
37
- <InputControlPrefixWrapper variant="icon">
38
- <button
39
- type="button"
40
- onClick={ onToggle }
41
- style={ {
42
- width: '24px',
43
- height: '24px',
44
- borderRadius: '50%',
45
- backgroundColor: validColor,
46
- border: '1px solid #ddd',
47
- cursor: 'pointer',
48
- outline: isOpen ? '2px solid #007cba' : 'none',
49
- outlineOffset: '2px',
50
- display: 'flex',
51
- alignItems: 'center',
52
- justifyContent: 'center',
53
- padding: 0,
54
- margin: 0,
55
- } }
56
- aria-label="Open color picker"
57
- />
58
- </InputControlPrefixWrapper>
41
+ className="dataviews-controls__color-picker-dropdown"
42
+ popoverProps={ { resize: false } }
43
+ renderToggle={ ( { onToggle } ) => (
44
+ <Button
45
+ onClick={ onToggle }
46
+ aria-label={ __( 'Open color picker' ) }
47
+ size="small"
48
+ icon={ () => <ColorIndicator colorValue={ validColor } /> }
49
+ />
59
50
  ) }
60
51
  renderContent={ () => (
61
- <div style={ { padding: '16px' } }>
62
- <Picker
63
- color={ colord( validColor ) }
52
+ <DropdownContentWrapper paddingSize="none">
53
+ <ColorPicker
54
+ color={ validColor }
64
55
  onChange={ onColorChange }
65
56
  enableAlpha
66
57
  />
67
- </div>
58
+ </DropdownContentWrapper>
68
59
  ) }
69
60
  />
70
61
  );
@@ -75,14 +66,15 @@ export default function Color< Item >( {
75
66
  field,
76
67
  onChange,
77
68
  hideLabelFromVision,
69
+ markWhenOptional,
78
70
  validity,
79
71
  }: DataFormControlProps< Item > ) {
80
72
  const { label, placeholder, description, setValue, isValid } = field;
81
73
  const value = field.getValue( { item: data } ) || '';
82
74
 
83
75
  const handleColorChange = useCallback(
84
- ( colorObject: any ) => {
85
- onChange( setValue( { item: data, value: colorObject.toHex() } ) );
76
+ ( newColor: string ) => {
77
+ onChange( setValue( { item: data, value: newColor } ) );
86
78
  },
87
79
  [ data, onChange, setValue ]
88
80
  );
@@ -97,6 +89,7 @@ export default function Color< Item >( {
97
89
  return (
98
90
  <ValidatedInputControl
99
91
  required={ !! field.isValid?.required }
92
+ markWhenOptional={ markWhenOptional }
100
93
  customValidity={ getCustomValidity( isValid, validity ) }
101
94
  label={ label }
102
95
  placeholder={ placeholder }
@@ -106,10 +99,12 @@ export default function Color< Item >( {
106
99
  hideLabelFromVision={ hideLabelFromVision }
107
100
  type="text"
108
101
  prefix={
109
- <ColorPicker
110
- color={ value }
111
- onColorChange={ handleColorChange }
112
- />
102
+ <InputControlPrefixWrapper variant="control">
103
+ <ColorPickerDropdown
104
+ color={ value }
105
+ onColorChange={ handleColorChange }
106
+ />
107
+ </InputControlPrefixWrapper>
113
108
  }
114
109
  />
115
110
  );
@@ -161,8 +161,8 @@ function ValidatedDateControl< Item >( {
161
161
  field: NormalizedField< Item >;
162
162
  validity?: FieldValidity;
163
163
  inputRefs:
164
- | React.RefObject< HTMLInputElement >
165
- | React.RefObject< HTMLInputElement >[];
164
+ | React.RefObject< HTMLInputElement | null >
165
+ | React.RefObject< HTMLInputElement | null >[];
166
166
  isTouched: boolean;
167
167
  setIsTouched: ( touched: boolean ) => void;
168
168
  children: React.ReactNode;
@@ -265,9 +265,6 @@ function ValidatedDateControl< Item >( {
265
265
  'components-validated-control__indicator',
266
266
  customValidity.type === 'invalid'
267
267
  ? 'is-invalid'
268
- : undefined,
269
- customValidity.type === 'valid'
270
- ? 'is-valid'
271
268
  : undefined
272
269
  ) }
273
270
  >
@@ -290,6 +287,7 @@ function CalendarDateControl< Item >( {
290
287
  field,
291
288
  onChange,
292
289
  hideLabelFromVision,
290
+ markWhenOptional,
293
291
  validity,
294
292
  }: DataFormControlProps< Item > ) {
295
293
  const {
@@ -368,9 +366,12 @@ function CalendarDateControl< Item >( {
368
366
  timezone: { string: timezoneString },
369
367
  } = getSettings();
370
368
 
371
- const displayLabel = isValid?.required
372
- ? `${ label } (${ __( 'Required' ) })`
373
- : label;
369
+ let displayLabel = label;
370
+ if ( isValid?.required && ! markWhenOptional ) {
371
+ displayLabel = `${ label } (${ __( 'Required' ) })`;
372
+ } else if ( ! isValid?.required && markWhenOptional ) {
373
+ displayLabel = `${ label } (${ __( 'Optional' ) })`;
374
+ }
374
375
 
375
376
  return (
376
377
  <ValidatedDateControl
@@ -386,11 +387,11 @@ function CalendarDateControl< Item >( {
386
387
  label={ displayLabel }
387
388
  hideLabelFromVision={ hideLabelFromVision }
388
389
  >
389
- <Stack direction="column" gap="md">
390
+ <Stack direction="column" gap="lg">
390
391
  { /* Preset buttons */ }
391
392
  <Stack
392
393
  direction="row"
393
- gap="xs"
394
+ gap="sm"
394
395
  wrap="wrap"
395
396
  justify="flex-start"
396
397
  >
@@ -458,6 +459,7 @@ function CalendarDateRangeControl< Item >( {
458
459
  field,
459
460
  onChange,
460
461
  hideLabelFromVision,
462
+ markWhenOptional,
461
463
  validity,
462
464
  }: DataFormControlProps< Item > ) {
463
465
  const { id, label, getValue, setValue, format: fieldFormat } = field;
@@ -576,9 +578,12 @@ function CalendarDateRangeControl< Item >( {
576
578
 
577
579
  const { timezone } = getSettings();
578
580
 
579
- const displayLabel = field.isValid?.required
580
- ? `${ label } (${ __( 'Required' ) })`
581
- : label;
581
+ let displayLabel = label;
582
+ if ( field.isValid?.required && ! markWhenOptional ) {
583
+ displayLabel = `${ label } (${ __( 'Required' ) })`;
584
+ } else if ( ! field.isValid?.required && markWhenOptional ) {
585
+ displayLabel = `${ label } (${ __( 'Optional' ) })`;
586
+ }
582
587
 
583
588
  return (
584
589
  <ValidatedDateControl
@@ -594,11 +599,11 @@ function CalendarDateRangeControl< Item >( {
594
599
  label={ displayLabel }
595
600
  hideLabelFromVision={ hideLabelFromVision }
596
601
  >
597
- <Stack direction="column" gap="md">
602
+ <Stack direction="column" gap="lg">
598
603
  { /* Preset buttons */ }
599
604
  <Stack
600
605
  direction="row"
601
- gap="xs"
606
+ gap="sm"
602
607
  wrap="wrap"
603
608
  justify="flex-start"
604
609
  >
@@ -634,7 +639,7 @@ function CalendarDateRangeControl< Item >( {
634
639
  { /* Manual date range inputs */ }
635
640
  <Stack
636
641
  direction="row"
637
- gap="xs"
642
+ gap="sm"
638
643
  justify="space-between"
639
644
  className="dataviews-controls__date-range-inputs"
640
645
  >
@@ -684,6 +689,7 @@ export default function DateControl< Item >( {
684
689
  field,
685
690
  onChange,
686
691
  hideLabelFromVision,
692
+ markWhenOptional,
687
693
  operator,
688
694
  validity,
689
695
  }: DataFormControlProps< Item > ) {
@@ -707,6 +713,7 @@ export default function DateControl< Item >( {
707
713
  field={ field }
708
714
  onChange={ onChange }
709
715
  hideLabelFromVision={ hideLabelFromVision }
716
+ markWhenOptional={ markWhenOptional }
710
717
  validity={ validity }
711
718
  />
712
719
  );
@@ -718,6 +725,7 @@ export default function DateControl< Item >( {
718
725
  field={ field }
719
726
  onChange={ onChange }
720
727
  hideLabelFromVision={ hideLabelFromVision }
728
+ markWhenOptional={ markWhenOptional }
721
729
  validity={ validity }
722
730
  />
723
731
  );
@@ -43,6 +43,7 @@ function CalendarDateTimeControl< Item >( {
43
43
  field,
44
44
  onChange,
45
45
  hideLabelFromVision,
46
+ markWhenOptional,
46
47
  validity,
47
48
  }: DataFormControlProps< Item > ) {
48
49
  const { id, label, description, setValue, getValue, isValid } = field;
@@ -55,7 +56,8 @@ function CalendarDateTimeControl< Item >( {
55
56
  } );
56
57
 
57
58
  const inputControlRef = useRef< HTMLInputElement >( null );
58
- const validationTimeoutRef = useRef< ReturnType< typeof setTimeout > >();
59
+ const validationTimeoutRef =
60
+ useRef< ReturnType< typeof setTimeout > >( undefined );
59
61
  const previousFocusRef = useRef< Element | null >( null );
60
62
 
61
63
  const onChangeCallback = useCallback(
@@ -155,10 +157,16 @@ function CalendarDateTimeControl< Item >( {
155
157
  timezone: { string: timezoneString },
156
158
  } = getSettings();
157
159
 
158
- const displayLabel =
159
- isValid?.required && ! hideLabelFromVision
160
- ? `${ label } (${ __( 'Required' ) })`
161
- : label;
160
+ let displayLabel = label;
161
+ if ( isValid?.required && ! markWhenOptional && ! hideLabelFromVision ) {
162
+ displayLabel = `${ label } (${ __( 'Required' ) })`;
163
+ } else if (
164
+ ! isValid?.required &&
165
+ markWhenOptional &&
166
+ ! hideLabelFromVision
167
+ ) {
168
+ displayLabel = `${ label } (${ __( 'Optional' ) })`;
169
+ }
162
170
 
163
171
  return (
164
172
  <BaseControl
@@ -167,7 +175,7 @@ function CalendarDateTimeControl< Item >( {
167
175
  help={ description }
168
176
  hideLabelFromVision={ hideLabelFromVision }
169
177
  >
170
- <Stack direction="column" gap="md">
178
+ <Stack direction="column" gap="lg">
171
179
  { /* Calendar widget */ }
172
180
  <DateCalendar
173
181
  style={ { width: '100%' } }
@@ -208,6 +216,7 @@ export default function DateTime< Item >( {
208
216
  field,
209
217
  onChange,
210
218
  hideLabelFromVision,
219
+ markWhenOptional,
211
220
  operator,
212
221
  validity,
213
222
  }: DataFormControlProps< Item > ) {
@@ -230,6 +239,7 @@ export default function DateTime< Item >( {
230
239
  field={ field }
231
240
  onChange={ onChange }
232
241
  hideLabelFromVision={ hideLabelFromVision }
242
+ markWhenOptional={ markWhenOptional }
233
243
  validity={ validity }
234
244
  />
235
245
  );
@@ -18,6 +18,7 @@ export default function Email< Item >( {
18
18
  field,
19
19
  onChange,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  validity,
22
23
  }: DataFormControlProps< Item > ) {
23
24
  return (
@@ -27,6 +28,7 @@ export default function Email< Item >( {
27
28
  field,
28
29
  onChange,
29
30
  hideLabelFromVision,
31
+ markWhenOptional,
30
32
  validity,
31
33
  type: 'email',
32
34
  prefix: (
@@ -11,6 +11,7 @@ import checkbox from './checkbox';
11
11
  import combobox from './combobox';
12
12
  import datetime from './datetime';
13
13
  import date from './date';
14
+ import adaptiveSelect from './adaptive-select';
14
15
  import email from './email';
15
16
  import telephone from './telephone';
16
17
  import url from './url';
@@ -32,6 +33,7 @@ interface FormControls {
32
33
  }
33
34
 
34
35
  const FORM_CONTROLS: FormControls = {
36
+ adaptiveSelect,
35
37
  array,
36
38
  checkbox,
37
39
  color,
@@ -89,7 +91,7 @@ export function getControl< Item >(
89
91
  }
90
92
 
91
93
  if ( hasElements( field ) && field.type !== 'array' ) {
92
- return getControlByType( 'select' );
94
+ return getControlByType( 'adaptiveSelect' );
93
95
  }
94
96
 
95
97
  if ( fallback === null ) {
@@ -19,6 +19,7 @@ export default function Password< Item >( {
19
19
  field,
20
20
  onChange,
21
21
  hideLabelFromVision,
22
+ markWhenOptional,
22
23
  validity,
23
24
  }: DataFormControlProps< Item > ) {
24
25
  const [ isVisible, setIsVisible ] = useState( false );
@@ -34,6 +35,7 @@ export default function Password< Item >( {
34
35
  field,
35
36
  onChange,
36
37
  hideLabelFromVision,
38
+ markWhenOptional,
37
39
  validity,
38
40
  type: isVisible ? 'text' : 'password',
39
41
  suffix: (
@@ -19,6 +19,7 @@ export default function Radio< Item >( {
19
19
  field,
20
20
  onChange,
21
21
  hideLabelFromVision,
22
+ markWhenOptional,
22
23
  validity,
23
24
  }: DataFormControlProps< Item > ) {
24
25
  const { label, description, getValue, setValue, isValid } = field;
@@ -41,6 +42,7 @@ export default function Radio< Item >( {
41
42
  return (
42
43
  <ValidatedRadioControl
43
44
  required={ !! field.isValid?.required }
45
+ markWhenOptional={ markWhenOptional }
44
46
  customValidity={ getCustomValidity( isValid, validity ) }
45
47
  label={ label }
46
48
  help={ description }
@@ -19,6 +19,7 @@ export default function Select< Item >( {
19
19
  field,
20
20
  onChange,
21
21
  hideLabelFromVision,
22
+ markWhenOptional,
22
23
  validity,
23
24
  }: DataFormControlProps< Item > ) {
24
25
  const { type, label, description, getValue, setValue, isValid } = field;
@@ -44,6 +45,7 @@ export default function Select< Item >( {
44
45
  return (
45
46
  <ValidatedSelectControl
46
47
  required={ !! field.isValid?.required }
48
+ markWhenOptional={ markWhenOptional }
47
49
  customValidity={ getCustomValidity( isValid, validity ) }
48
50
  label={ label }
49
51
  value={ value }
@@ -23,6 +23,10 @@
23
23
  min-width: 0;
24
24
  }
25
25
 
26
+ .dataviews-controls__color-picker-dropdown {
27
+ display: flex;
28
+ }
29
+
26
30
  .dataviews-controls__date-preset {
27
31
  border: 1px solid #ddd;
28
32
 
@@ -18,6 +18,7 @@ export default function Telephone< Item >( {
18
18
  field,
19
19
  onChange,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  validity,
22
23
  }: DataFormControlProps< Item > ) {
23
24
  return (
@@ -27,6 +28,7 @@ export default function Telephone< Item >( {
27
28
  field,
28
29
  onChange,
29
30
  hideLabelFromVision,
31
+ markWhenOptional,
30
32
  validity,
31
33
  type: 'tel',
32
34
  prefix: (
@@ -14,6 +14,7 @@ export default function Text< Item >( {
14
14
  field,
15
15
  onChange,
16
16
  hideLabelFromVision,
17
+ markWhenOptional,
17
18
  config,
18
19
  validity,
19
20
  }: DataFormControlProps< Item > ) {
@@ -26,6 +27,7 @@ export default function Text< Item >( {
26
27
  field,
27
28
  onChange,
28
29
  hideLabelFromVision,
30
+ markWhenOptional,
29
31
  validity,
30
32
  prefix: prefix ? createElement( prefix ) : undefined,
31
33
  suffix: suffix ? createElement( suffix ) : undefined,
@@ -18,6 +18,7 @@ export default function Textarea< Item >( {
18
18
  field,
19
19
  onChange,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  config,
22
23
  validity,
23
24
  }: DataFormControlProps< Item > ) {
@@ -34,6 +35,7 @@ export default function Textarea< Item >( {
34
35
  return (
35
36
  <ValidatedTextareaControl
36
37
  required={ !! isValid.required }
38
+ markWhenOptional={ markWhenOptional }
37
39
  customValidity={ getCustomValidity( isValid, validity ) }
38
40
  label={ label }
39
41
  placeholder={ placeholder }
@@ -23,6 +23,7 @@ export default function ToggleGroup< Item >( {
23
23
  field,
24
24
  onChange,
25
25
  hideLabelFromVision,
26
+ markWhenOptional,
26
27
  validity,
27
28
  }: DataFormControlProps< Item > ) {
28
29
  const { getValue, setValue, isValid } = field;
@@ -51,6 +52,7 @@ export default function ToggleGroup< Item >( {
51
52
  return (
52
53
  <ValidatedToggleGroupControl
53
54
  required={ !! field.isValid?.required }
55
+ markWhenOptional={ markWhenOptional }
54
56
  customValidity={ getCustomValidity( isValid, validity ) }
55
57
  __next40pxDefaultSize
56
58
  isBlock
@@ -18,6 +18,7 @@ export default function Toggle< Item >( {
18
18
  onChange,
19
19
  data,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  validity,
22
23
  }: DataFormControlProps< Item > ) {
23
24
  const { label, description, getValue, setValue, isValid } = field;
@@ -31,6 +32,7 @@ export default function Toggle< Item >( {
31
32
  return (
32
33
  <ValidatedToggleControl
33
34
  required={ !! isValid.required }
35
+ markWhenOptional={ markWhenOptional }
34
36
  customValidity={ getCustomValidity( isValid, validity ) }
35
37
  hidden={ hideLabelFromVision }
36
38
  label={ label }
@@ -18,6 +18,7 @@ export default function Url< Item >( {
18
18
  field,
19
19
  onChange,
20
20
  hideLabelFromVision,
21
+ markWhenOptional,
21
22
  validity,
22
23
  }: DataFormControlProps< Item > ) {
23
24
  return (
@@ -27,6 +28,7 @@ export default function Url< Item >( {
27
28
  field,
28
29
  onChange,
29
30
  hideLabelFromVision,
31
+ markWhenOptional,
30
32
  validity,
31
33
  type: 'url',
32
34
  prefix: (
@@ -92,7 +92,7 @@ export default function RelativeDateControl< Item >( {
92
92
  label={ label }
93
93
  hideLabelFromVision={ hideLabelFromVision }
94
94
  >
95
- <Stack direction="row" gap="xs">
95
+ <Stack direction="row" gap="sm">
96
96
  <NumberControl
97
97
  __next40pxDefaultSize
98
98
  className="dataviews-controls__relative-date-number"
@@ -34,6 +34,7 @@ export default function ValidatedText< Item >( {
34
34
  field,
35
35
  onChange,
36
36
  hideLabelFromVision,
37
+ markWhenOptional,
37
38
  type,
38
39
  prefix,
39
40
  suffix,
@@ -57,6 +58,7 @@ export default function ValidatedText< Item >( {
57
58
  return (
58
59
  <ValidatedInputControl
59
60
  required={ !! isValid.required }
61
+ markWhenOptional={ markWhenOptional }
60
62
  customValidity={ getCustomValidity( isValid, validity ) }
61
63
  label={ label }
62
64
  placeholder={ placeholder }