@wordpress/dataviews 14.0.0 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +16 -5
  3. package/build/components/dataform-controls/array.cjs +2 -0
  4. package/build/components/dataform-controls/array.cjs.map +2 -2
  5. package/build/components/dataform-controls/checkbox.cjs +3 -1
  6. package/build/components/dataform-controls/checkbox.cjs.map +2 -2
  7. package/build/components/dataform-controls/color.cjs +8 -2
  8. package/build/components/dataform-controls/color.cjs.map +2 -2
  9. package/build/components/dataform-controls/date.cjs +31 -9
  10. package/build/components/dataform-controls/date.cjs.map +3 -3
  11. package/build/components/dataform-controls/datetime.cjs +9 -2
  12. package/build/components/dataform-controls/datetime.cjs.map +3 -3
  13. package/build/components/dataform-controls/password.cjs +4 -1
  14. package/build/components/dataform-controls/password.cjs.map +2 -2
  15. package/build/components/dataform-controls/radio.cjs +3 -1
  16. package/build/components/dataform-controls/radio.cjs.map +2 -2
  17. package/build/components/dataform-controls/select.cjs +3 -1
  18. package/build/components/dataform-controls/select.cjs.map +2 -2
  19. package/build/components/dataform-controls/textarea.cjs +2 -0
  20. package/build/components/dataform-controls/textarea.cjs.map +2 -2
  21. package/build/components/dataform-controls/toggle-group.cjs +3 -1
  22. package/build/components/dataform-controls/toggle-group.cjs.map +2 -2
  23. package/build/components/dataform-controls/toggle.cjs +3 -1
  24. package/build/components/dataform-controls/toggle.cjs.map +2 -2
  25. package/build/components/dataform-controls/utils/relative-date-control.cjs +5 -2
  26. package/build/components/dataform-controls/utils/relative-date-control.cjs.map +2 -2
  27. package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs +48 -0
  28. package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs.map +7 -0
  29. package/build/components/dataform-controls/utils/validated-input.cjs +2 -0
  30. package/build/components/dataform-controls/utils/validated-input.cjs.map +2 -2
  31. package/build/components/dataform-controls/utils/validated-number.cjs +3 -1
  32. package/build/components/dataform-controls/utils/validated-number.cjs.map +2 -2
  33. package/build/components/dataform-layouts/panel/summary-button.cjs +0 -1
  34. package/build/components/dataform-layouts/panel/summary-button.cjs.map +2 -2
  35. package/build/components/dataviews-context/index.cjs.map +1 -1
  36. package/build/components/dataviews-filters/input-widget.cjs +4 -0
  37. package/build/components/dataviews-filters/input-widget.cjs.map +2 -2
  38. package/build/components/dataviews-layouts/picker-grid/index.cjs +1 -4
  39. package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
  40. package/build/components/dataviews-layouts/picker-table/index.cjs +15 -12
  41. package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
  42. package/build/components/dataviews-layouts/table/index.cjs +0 -1
  43. package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
  44. package/build/components/dataviews-pagination/index.cjs +1 -0
  45. package/build/components/dataviews-pagination/index.cjs.map +2 -2
  46. package/build/dataviews/index.cjs +10 -8
  47. package/build/dataviews/index.cjs.map +2 -2
  48. package/build/dataviews-picker/index.cjs +16 -9
  49. package/build/dataviews-picker/index.cjs.map +2 -2
  50. package/build/field-types/date.cjs +4 -1
  51. package/build/field-types/date.cjs.map +2 -2
  52. package/build/field-types/datetime.cjs +4 -1
  53. package/build/field-types/datetime.cjs.map +2 -2
  54. package/build/field-types/index.cjs +1 -0
  55. package/build/field-types/index.cjs.map +2 -2
  56. package/build/field-types/utils/get-is-valid.cjs +29 -24
  57. package/build/field-types/utils/get-is-valid.cjs.map +2 -2
  58. package/build/field-types/utils/is-valid-date-boundary.cjs +64 -0
  59. package/build/field-types/utils/is-valid-date-boundary.cjs.map +7 -0
  60. package/build/types/dataviews.cjs.map +1 -1
  61. package/build/types/field-api.cjs.map +1 -1
  62. package/build-module/components/dataform-controls/array.mjs +2 -0
  63. package/build-module/components/dataform-controls/array.mjs.map +2 -2
  64. package/build-module/components/dataform-controls/checkbox.mjs +3 -1
  65. package/build-module/components/dataform-controls/checkbox.mjs.map +2 -2
  66. package/build-module/components/dataform-controls/color.mjs +8 -2
  67. package/build-module/components/dataform-controls/color.mjs.map +2 -2
  68. package/build-module/components/dataform-controls/date.mjs +31 -9
  69. package/build-module/components/dataform-controls/date.mjs.map +2 -2
  70. package/build-module/components/dataform-controls/datetime.mjs +9 -2
  71. package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
  72. package/build-module/components/dataform-controls/password.mjs +4 -1
  73. package/build-module/components/dataform-controls/password.mjs.map +2 -2
  74. package/build-module/components/dataform-controls/radio.mjs +3 -1
  75. package/build-module/components/dataform-controls/radio.mjs.map +2 -2
  76. package/build-module/components/dataform-controls/select.mjs +3 -1
  77. package/build-module/components/dataform-controls/select.mjs.map +2 -2
  78. package/build-module/components/dataform-controls/textarea.mjs +2 -0
  79. package/build-module/components/dataform-controls/textarea.mjs.map +2 -2
  80. package/build-module/components/dataform-controls/toggle-group.mjs +3 -1
  81. package/build-module/components/dataform-controls/toggle-group.mjs.map +2 -2
  82. package/build-module/components/dataform-controls/toggle.mjs +3 -1
  83. package/build-module/components/dataform-controls/toggle.mjs.map +2 -2
  84. package/build-module/components/dataform-controls/utils/relative-date-control.mjs +5 -2
  85. package/build-module/components/dataform-controls/utils/relative-date-control.mjs.map +2 -2
  86. package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs +27 -0
  87. package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs.map +7 -0
  88. package/build-module/components/dataform-controls/utils/validated-input.mjs +2 -0
  89. package/build-module/components/dataform-controls/utils/validated-input.mjs.map +2 -2
  90. package/build-module/components/dataform-controls/utils/validated-number.mjs +3 -1
  91. package/build-module/components/dataform-controls/utils/validated-number.mjs.map +2 -2
  92. package/build-module/components/dataform-layouts/panel/summary-button.mjs +0 -1
  93. package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
  94. package/build-module/components/dataviews-context/index.mjs.map +1 -1
  95. package/build-module/components/dataviews-filters/input-widget.mjs +4 -0
  96. package/build-module/components/dataviews-filters/input-widget.mjs.map +2 -2
  97. package/build-module/components/dataviews-layouts/picker-grid/index.mjs +1 -4
  98. package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
  99. package/build-module/components/dataviews-layouts/picker-table/index.mjs +15 -12
  100. package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
  101. package/build-module/components/dataviews-layouts/table/index.mjs +0 -1
  102. package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
  103. package/build-module/components/dataviews-pagination/index.mjs +1 -0
  104. package/build-module/components/dataviews-pagination/index.mjs.map +2 -2
  105. package/build-module/dataviews/index.mjs +10 -8
  106. package/build-module/dataviews/index.mjs.map +2 -2
  107. package/build-module/dataviews-picker/index.mjs +16 -9
  108. package/build-module/dataviews-picker/index.mjs.map +2 -2
  109. package/build-module/field-types/date.mjs +4 -1
  110. package/build-module/field-types/date.mjs.map +2 -2
  111. package/build-module/field-types/datetime.mjs +4 -1
  112. package/build-module/field-types/datetime.mjs.map +2 -2
  113. package/build-module/field-types/index.mjs +1 -0
  114. package/build-module/field-types/index.mjs.map +2 -2
  115. package/build-module/field-types/utils/get-is-valid.mjs +29 -24
  116. package/build-module/field-types/utils/get-is-valid.mjs.map +2 -2
  117. package/build-module/field-types/utils/is-valid-date-boundary.mjs +38 -0
  118. package/build-module/field-types/utils/is-valid-date-boundary.mjs.map +7 -0
  119. package/build-style/style-rtl.css +14 -15
  120. package/build-style/style.css +14 -15
  121. package/build-types/components/dataform-controls/array.d.ts.map +1 -1
  122. package/build-types/components/dataform-controls/checkbox.d.ts.map +1 -1
  123. package/build-types/components/dataform-controls/color.d.ts.map +1 -1
  124. package/build-types/components/dataform-controls/date.d.ts.map +1 -1
  125. package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
  126. package/build-types/components/dataform-controls/password.d.ts.map +1 -1
  127. package/build-types/components/dataform-controls/radio.d.ts.map +1 -1
  128. package/build-types/components/dataform-controls/select.d.ts.map +1 -1
  129. package/build-types/components/dataform-controls/textarea.d.ts.map +1 -1
  130. package/build-types/components/dataform-controls/toggle-group.d.ts.map +1 -1
  131. package/build-types/components/dataform-controls/toggle.d.ts.map +1 -1
  132. package/build-types/components/dataform-controls/utils/relative-date-control.d.ts.map +1 -1
  133. package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts +16 -0
  134. package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts.map +1 -0
  135. package/build-types/components/dataform-controls/utils/validated-input.d.ts.map +1 -1
  136. package/build-types/components/dataform-controls/utils/validated-number.d.ts.map +1 -1
  137. package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
  138. package/build-types/components/dataviews-context/index.d.ts +2 -2
  139. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  140. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  141. package/build-types/components/dataviews-layouts/index.d.ts +6 -6
  142. package/build-types/components/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
  143. package/build-types/components/dataviews-layouts/picker-table/index.d.ts.map +1 -1
  144. package/build-types/components/dataviews-layouts/table/index.d.ts.map +1 -1
  145. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  146. package/build-types/components/dataviews-search/index.d.ts +1 -1
  147. package/build-types/components/dataviews-search/index.d.ts.map +1 -1
  148. package/build-types/constants.d.ts +2 -2
  149. package/build-types/dataform/stories/index.story.d.ts +11 -1
  150. package/build-types/dataform/stories/index.story.d.ts.map +1 -1
  151. package/build-types/dataform/stories/layout-regular.d.ts +2 -1
  152. package/build-types/dataform/stories/layout-regular.d.ts.map +1 -1
  153. package/build-types/dataform/stories/validation.d.ts.map +1 -1
  154. package/build-types/dataviews/index.d.ts +1 -1
  155. package/build-types/dataviews/index.d.ts.map +1 -1
  156. package/build-types/dataviews-picker/index.d.ts +3 -2
  157. package/build-types/dataviews-picker/index.d.ts.map +1 -1
  158. package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
  159. package/build-types/field-types/array.d.ts +1 -1
  160. package/build-types/field-types/array.d.ts.map +1 -1
  161. package/build-types/field-types/boolean.d.ts +1 -1
  162. package/build-types/field-types/boolean.d.ts.map +1 -1
  163. package/build-types/field-types/color.d.ts +1 -1
  164. package/build-types/field-types/color.d.ts.map +1 -1
  165. package/build-types/field-types/date.d.ts +3 -0
  166. package/build-types/field-types/date.d.ts.map +1 -1
  167. package/build-types/field-types/datetime.d.ts +3 -0
  168. package/build-types/field-types/datetime.d.ts.map +1 -1
  169. package/build-types/field-types/email.d.ts +1 -1
  170. package/build-types/field-types/email.d.ts.map +1 -1
  171. package/build-types/field-types/index.d.ts.map +1 -1
  172. package/build-types/field-types/integer.d.ts +1 -1
  173. package/build-types/field-types/integer.d.ts.map +1 -1
  174. package/build-types/field-types/number.d.ts +1 -1
  175. package/build-types/field-types/number.d.ts.map +1 -1
  176. package/build-types/field-types/stories/index.story.d.ts +37 -15
  177. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  178. package/build-types/field-types/utils/get-is-valid.d.ts.map +1 -1
  179. package/build-types/field-types/utils/is-valid-date-boundary.d.ts +7 -0
  180. package/build-types/field-types/utils/is-valid-date-boundary.d.ts.map +1 -0
  181. package/build-types/types/dataviews.d.ts +8 -0
  182. package/build-types/types/dataviews.d.ts.map +1 -1
  183. package/build-types/types/field-api.d.ts +24 -9
  184. package/build-types/types/field-api.d.ts.map +1 -1
  185. package/build-wp/index.js +1141 -990
  186. package/package.json +16 -16
  187. package/src/components/dataform-controls/array.tsx +2 -0
  188. package/src/components/dataform-controls/checkbox.tsx +2 -0
  189. package/src/components/dataform-controls/color.tsx +7 -0
  190. package/src/components/dataform-controls/date.tsx +30 -4
  191. package/src/components/dataform-controls/datetime.tsx +17 -0
  192. package/src/components/dataform-controls/password.tsx +3 -0
  193. package/src/components/dataform-controls/radio.tsx +2 -0
  194. package/src/components/dataform-controls/select.tsx +2 -0
  195. package/src/components/dataform-controls/textarea.tsx +2 -0
  196. package/src/components/dataform-controls/toggle-group.tsx +2 -0
  197. package/src/components/dataform-controls/toggle.tsx +2 -0
  198. package/src/components/dataform-controls/utils/relative-date-control.tsx +3 -0
  199. package/src/components/dataform-controls/utils/use-disabled-date-matchers.ts +48 -0
  200. package/src/components/dataform-controls/utils/validated-input.tsx +2 -0
  201. package/src/components/dataform-controls/utils/validated-number.tsx +2 -0
  202. package/src/components/dataform-layouts/panel/style.scss +4 -5
  203. package/src/components/dataform-layouts/panel/summary-button.tsx +0 -1
  204. package/src/components/dataviews-context/index.ts +2 -2
  205. package/src/components/dataviews-filters/input-widget.tsx +4 -0
  206. package/src/components/dataviews-filters/style.scss +2 -2
  207. package/src/components/dataviews-layouts/activity/style.scss +3 -3
  208. package/src/components/dataviews-layouts/grid/style.scss +1 -1
  209. package/src/components/dataviews-layouts/list/style.scss +1 -1
  210. package/src/components/dataviews-layouts/picker-grid/index.tsx +2 -6
  211. package/src/components/dataviews-layouts/picker-grid/style.scss +1 -1
  212. package/src/components/dataviews-layouts/picker-table/index.tsx +9 -7
  213. package/src/components/dataviews-layouts/picker-table/style.scss +1 -1
  214. package/src/components/dataviews-layouts/table/index.tsx +0 -2
  215. package/src/components/dataviews-pagination/index.tsx +1 -0
  216. package/src/dataform/stories/content.story.tsx +1 -1
  217. package/src/dataform/stories/data-adapter.tsx +6 -6
  218. package/src/dataform/stories/index.story.tsx +7 -0
  219. package/src/dataform/stories/layout-card.tsx +5 -5
  220. package/src/dataform/stories/layout-details.tsx +5 -5
  221. package/src/dataform/stories/layout-panel.tsx +9 -9
  222. package/src/dataform/stories/layout-regular.tsx +31 -10
  223. package/src/dataform/stories/layout-row.tsx +9 -9
  224. package/src/dataform/stories/validation.tsx +25 -10
  225. package/src/dataviews/index.tsx +11 -7
  226. package/src/dataviews/stories/empty.tsx +4 -4
  227. package/src/dataviews/stories/free-composition.tsx +2 -2
  228. package/src/dataviews/stories/infinite-scroll.tsx +4 -4
  229. package/src/dataviews/stories/layout-custom.tsx +1 -1
  230. package/src/dataviews/stories/layout-grid.tsx +1 -1
  231. package/src/dataviews/stories/layout-list.tsx +1 -1
  232. package/src/dataviews/stories/layout-table.tsx +1 -1
  233. package/src/dataviews/stories/minimal-ui.tsx +1 -1
  234. package/src/dataviews/stories/with-card.tsx +4 -4
  235. package/src/dataviews/style.scss +1 -1
  236. package/src/dataviews/test/dataviews.tsx +73 -6
  237. package/src/dataviews-picker/index.tsx +17 -7
  238. package/src/dataviews-picker/stories/index.story.tsx +1 -5
  239. package/src/dataviews-picker/test/dataviews-picker.tsx +79 -2
  240. package/src/field-types/date.tsx +3 -0
  241. package/src/field-types/datetime.tsx +3 -0
  242. package/src/field-types/index.tsx +4 -0
  243. package/src/field-types/stories/index.story.tsx +67 -6
  244. package/src/field-types/test/normalize-fields.ts +44 -0
  245. package/src/field-types/utils/get-is-valid.ts +44 -31
  246. package/src/field-types/utils/is-valid-date-boundary.ts +80 -0
  247. package/src/hooks/test/use-form-validity.ts +479 -0
  248. package/src/types/dataviews.ts +9 -0
  249. package/src/types/field-api.ts +27 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/dataviews",
3
- "version": "14.0.0",
3
+ "version": "14.1.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",
@@ -53,20 +53,20 @@
53
53
  "sideEffects": false,
54
54
  "dependencies": {
55
55
  "@ariakit/react": "^0.4.21",
56
- "@wordpress/base-styles": "^6.19.0",
57
- "@wordpress/components": "^32.5.0",
58
- "@wordpress/compose": "^7.43.0",
59
- "@wordpress/data": "^10.43.0",
60
- "@wordpress/date": "^5.43.0",
61
- "@wordpress/deprecated": "^4.43.0",
62
- "@wordpress/element": "^6.43.0",
63
- "@wordpress/i18n": "^6.16.0",
64
- "@wordpress/icons": "^12.1.0",
65
- "@wordpress/keycodes": "^4.43.0",
66
- "@wordpress/primitives": "^4.43.0",
67
- "@wordpress/private-apis": "^1.43.0",
68
- "@wordpress/ui": "^0.10.0",
69
- "@wordpress/warning": "^3.43.0",
56
+ "@wordpress/base-styles": "^6.20.0",
57
+ "@wordpress/components": "^32.6.0",
58
+ "@wordpress/compose": "^7.44.0",
59
+ "@wordpress/data": "^10.44.0",
60
+ "@wordpress/date": "^5.44.0",
61
+ "@wordpress/deprecated": "^4.44.0",
62
+ "@wordpress/element": "^6.44.0",
63
+ "@wordpress/i18n": "^6.17.0",
64
+ "@wordpress/icons": "^12.2.0",
65
+ "@wordpress/keycodes": "^4.44.0",
66
+ "@wordpress/primitives": "^4.44.0",
67
+ "@wordpress/private-apis": "^1.44.0",
68
+ "@wordpress/ui": "^0.11.0",
69
+ "@wordpress/warning": "^3.44.0",
70
70
  "clsx": "^2.1.1",
71
71
  "colord": "^2.7.0",
72
72
  "date-fns": "^4.1.0",
@@ -92,5 +92,5 @@
92
92
  "scripts": {
93
93
  "build:wp": "node build.cjs"
94
94
  },
95
- "gitHead": "2cea90674d11aa521ec3f71652fb3a6a4c383969"
95
+ "gitHead": "b862d8c84121a47bbeff882f6c87e61681ce2e0d"
96
96
  }
@@ -24,6 +24,7 @@ export default function ArrayControl< Item >( {
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { label, placeholder, getValue, setValue, isValid } = field;
26
26
  const value = getValue( { item: data } );
27
+ const disabled = field.isDisabled( { item: data, field } );
27
28
 
28
29
  const { elements, isLoading } = useElements( {
29
30
  elements: field.elements,
@@ -73,6 +74,7 @@ export default function ArrayControl< Item >( {
73
74
  onChange={ onChangeControl }
74
75
  placeholder={ placeholder }
75
76
  suggestions={ elements?.map( ( element ) => element.value ) }
77
+ disabled={ disabled }
76
78
  __experimentalValidateInput={ ( token: string ) => {
77
79
  // If elements validation is required, check if token is valid
78
80
  if ( field.isValid?.elements && elements ) {
@@ -22,6 +22,7 @@ export default function Checkbox< Item >( {
22
22
  validity,
23
23
  }: DataFormControlProps< Item > ) {
24
24
  const { getValue, setValue, label, description, isValid } = field;
25
+ const disabled = field.isDisabled( { item: data, field } );
25
26
 
26
27
  const onChangeControl = useCallback( () => {
27
28
  onChange(
@@ -39,6 +40,7 @@ export default function Checkbox< Item >( {
39
40
  help={ description }
40
41
  checked={ getValue( { item: data } ) }
41
42
  onChange={ onChangeControl }
43
+ disabled={ disabled }
42
44
  />
43
45
  );
44
46
  }
@@ -30,9 +30,11 @@ const { ValidatedInputControl } = unlock( privateApis );
30
30
  const ColorPickerDropdown = ( {
31
31
  color,
32
32
  onColorChange,
33
+ disabled,
33
34
  }: {
34
35
  color: string;
35
36
  onColorChange: ( newColor: string ) => void;
37
+ disabled?: boolean;
36
38
  } ) => {
37
39
  const validColor = color && colord( color ).isValid() ? color : '#ffffff';
38
40
 
@@ -45,6 +47,8 @@ const ColorPickerDropdown = ( {
45
47
  onClick={ onToggle }
46
48
  aria-label={ __( 'Open color picker' ) }
47
49
  size="small"
50
+ disabled={ disabled }
51
+ accessibleWhenDisabled
48
52
  icon={ () => <ColorIndicator colorValue={ validColor } /> }
49
53
  />
50
54
  ) }
@@ -70,6 +74,7 @@ export default function Color< Item >( {
70
74
  validity,
71
75
  }: DataFormControlProps< Item > ) {
72
76
  const { label, placeholder, description, setValue, isValid } = field;
77
+ const disabled = field.isDisabled( { item: data, field } );
73
78
  const value = field.getValue( { item: data } ) || '';
74
79
 
75
80
  const handleColorChange = useCallback(
@@ -98,11 +103,13 @@ export default function Color< Item >( {
98
103
  onChange={ handleInputChange }
99
104
  hideLabelFromVision={ hideLabelFromVision }
100
105
  type="text"
106
+ disabled={ disabled }
101
107
  prefix={
102
108
  <InputControlPrefixWrapper variant="control">
103
109
  <ColorPickerDropdown
104
110
  color={ value }
105
111
  onColorChange={ handleColorChange }
112
+ disabled={ disabled }
106
113
  />
107
114
  </InputControlPrefixWrapper>
108
115
  }
@@ -38,6 +38,7 @@ import { Stack } from '@wordpress/ui';
38
38
  * Internal dependencies
39
39
  */
40
40
  import RelativeDateControl from './utils/relative-date-control';
41
+ import useDisabledDateMatchers from './utils/use-disabled-date-matchers';
41
42
  import {
42
43
  OPERATOR_IN_THE_PAST,
43
44
  OPERATOR_OVER,
@@ -299,6 +300,7 @@ function CalendarDateControl< Item >( {
299
300
  isValid,
300
301
  format: fieldFormat,
301
302
  } = field;
303
+ const disabled = field.isDisabled( { item: data, field } );
302
304
  const [ selectedPresetId, setSelectedPresetId ] = useState< string | null >(
303
305
  null
304
306
  );
@@ -317,6 +319,9 @@ function CalendarDateControl< Item >( {
317
319
  const [ isTouched, setIsTouched ] = useState( false );
318
320
  const validityTargetRef = useRef< HTMLInputElement >( null );
319
321
 
322
+ const { minConstraint, maxConstraint, disabledMatchers } =
323
+ useDisabledDateMatchers( isValid, parseDate );
324
+
320
325
  const onChangeCallback = useCallback(
321
326
  ( newValue: string | undefined ) =>
322
327
  onChange( setValue( { item: data, value: newValue } ) ),
@@ -406,6 +411,8 @@ function CalendarDateControl< Item >( {
406
411
  variant="tertiary"
407
412
  isPressed={ isSelected }
408
413
  size="small"
414
+ disabled={ disabled }
415
+ accessibleWhenDisabled
409
416
  onClick={ () =>
410
417
  handlePresetClick( preset )
411
418
  }
@@ -419,8 +426,8 @@ function CalendarDateControl< Item >( {
419
426
  variant="tertiary"
420
427
  isPressed={ ! selectedPresetId }
421
428
  size="small"
422
- disabled={ !! selectedPresetId }
423
- accessibleWhenDisabled={ false }
429
+ disabled={ !! selectedPresetId || disabled }
430
+ accessibleWhenDisabled
424
431
  >
425
432
  { __( 'Custom' ) }
426
433
  </Button>
@@ -436,6 +443,9 @@ function CalendarDateControl< Item >( {
436
443
  value={ value }
437
444
  onChange={ handleManualDateChange }
438
445
  required={ !! field.isValid?.required }
446
+ disabled={ disabled }
447
+ min={ minConstraint }
448
+ max={ maxConstraint }
439
449
  />
440
450
 
441
451
  { /* Calendar widget */ }
@@ -449,6 +459,8 @@ function CalendarDateControl< Item >( {
449
459
  onMonthChange={ setCalendarMonth }
450
460
  timeZone={ timezoneString || undefined }
451
461
  weekStartsOn={ weekStartsOn }
462
+ disabled={ disabled || disabledMatchers }
463
+ disableNavigation={ disabled }
452
464
  />
453
465
  </Stack>
454
466
  </BaseControl>
@@ -470,8 +482,10 @@ function CalendarDateRangeControl< Item >( {
470
482
  description,
471
483
  getValue,
472
484
  setValue,
485
+ isValid,
473
486
  format: fieldFormat,
474
487
  } = field;
488
+ const disabled = field.isDisabled( { item: data, field } );
475
489
  let value: DateRange;
476
490
  const fieldValue = getValue( { item: data } );
477
491
  if (
@@ -486,6 +500,9 @@ function CalendarDateRangeControl< Item >( {
486
500
  ( fieldFormat as FormatDate ).weekStartsOn ??
487
501
  getSettings().l10n.startOfWeek;
488
502
 
503
+ const { minConstraint, maxConstraint, disabledMatchers } =
504
+ useDisabledDateMatchers( isValid, parseDate );
505
+
489
506
  const onChangeCallback = useCallback(
490
507
  ( newValue: DateRange ) => {
491
508
  onChange(
@@ -626,6 +643,8 @@ function CalendarDateRangeControl< Item >( {
626
643
  variant="tertiary"
627
644
  isPressed={ isSelected }
628
645
  size="small"
646
+ disabled={ disabled }
647
+ accessibleWhenDisabled
629
648
  onClick={ () =>
630
649
  handlePresetClick( preset )
631
650
  }
@@ -639,8 +658,8 @@ function CalendarDateRangeControl< Item >( {
639
658
  variant="tertiary"
640
659
  isPressed={ ! selectedPresetId }
641
660
  size="small"
642
- accessibleWhenDisabled={ false }
643
- disabled={ !! selectedPresetId }
661
+ accessibleWhenDisabled
662
+ disabled={ !! selectedPresetId || disabled }
644
663
  >
645
664
  { __( 'Custom' ) }
646
665
  </Button>
@@ -664,6 +683,9 @@ function CalendarDateRangeControl< Item >( {
664
683
  handleManualDateChange( 'from', newValue )
665
684
  }
666
685
  required={ !! field.isValid?.required }
686
+ disabled={ disabled }
687
+ min={ minConstraint }
688
+ max={ maxConstraint }
667
689
  />
668
690
  <InputControl
669
691
  __next40pxDefaultSize
@@ -676,6 +698,9 @@ function CalendarDateRangeControl< Item >( {
676
698
  handleManualDateChange( 'to', newValue )
677
699
  }
678
700
  required={ !! field.isValid?.required }
701
+ disabled={ disabled }
702
+ min={ minConstraint }
703
+ max={ maxConstraint }
679
704
  />
680
705
  </Stack>
681
706
 
@@ -687,6 +712,7 @@ function CalendarDateRangeControl< Item >( {
687
712
  onMonthChange={ setCalendarMonth }
688
713
  timeZone={ timezone.string || undefined }
689
714
  weekStartsOn={ weekStartsOn }
715
+ disabled={ disabled || disabledMatchers }
690
716
  />
691
717
  </Stack>
692
718
  </BaseControl>
@@ -16,6 +16,7 @@ import { Stack } from '@wordpress/ui';
16
16
  import type { DataFormControlProps, FormatDatetime } from '../../types';
17
17
  import { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../../constants';
18
18
  import RelativeDateControl from './utils/relative-date-control';
19
+ import useDisabledDateMatchers from './utils/use-disabled-date-matchers';
19
20
  import getCustomValidity from './utils/get-custom-validity';
20
21
  import parseDateTime from '../../field-types/utils/parse-date-time';
21
22
  import { unlock } from '../../lock-unlock';
@@ -41,6 +42,7 @@ function CalendarDateTimeControl< Item >( {
41
42
  }: DataFormControlProps< Item > ) {
42
43
  const { compact } = config || {};
43
44
  const { id, label, description, setValue, getValue, isValid } = field;
45
+ const disabled = field.isDisabled( { item: data, field } );
44
46
  const fieldValue = getValue( { item: data } );
45
47
  const value = typeof fieldValue === 'string' ? fieldValue : undefined;
46
48
 
@@ -54,6 +56,9 @@ function CalendarDateTimeControl< Item >( {
54
56
  useRef< ReturnType< typeof setTimeout > >( undefined );
55
57
  const previousFocusRef = useRef< Element | null >( null );
56
58
 
59
+ const { minConstraint, maxConstraint, disabledMatchers } =
60
+ useDisabledDateMatchers( isValid, parseDateTime );
61
+
57
62
  const onChangeCallback = useCallback(
58
63
  ( newValue: string | undefined ) =>
59
64
  onChange( setValue( { item: data, value: newValue } ) ),
@@ -179,6 +184,17 @@ function CalendarDateTimeControl< Item >( {
179
184
  hideLabelFromVision
180
185
  value={ formatDateTime( value ) }
181
186
  onChange={ handleManualDateTimeChange }
187
+ disabled={ disabled }
188
+ min={
189
+ minConstraint
190
+ ? formatDateTime( minConstraint )
191
+ : undefined
192
+ }
193
+ max={
194
+ maxConstraint
195
+ ? formatDateTime( maxConstraint )
196
+ : undefined
197
+ }
182
198
  />
183
199
  { /* Calendar widget */ }
184
200
  { ! compact && (
@@ -194,6 +210,7 @@ function CalendarDateTimeControl< Item >( {
194
210
  onMonthChange={ setCalendarMonth }
195
211
  timeZone={ timezoneString || undefined }
196
212
  weekStartsOn={ weekStartsOn }
213
+ disabled={ disabled || disabledMatchers }
197
214
  />
198
215
  ) }
199
216
  </Stack>
@@ -23,6 +23,7 @@ export default function Password< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const [ isVisible, setIsVisible ] = useState( false );
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
 
27
28
  const toggleVisibility = useCallback( () => {
28
29
  setIsVisible( ( prev ) => ! prev );
@@ -49,6 +50,8 @@ export default function Password< Item >( {
49
50
  ? __( 'Hide password' )
50
51
  : __( 'Show password' )
51
52
  }
53
+ disabled={ disabled }
54
+ accessibleWhenDisabled
52
55
  />
53
56
  </InputControlSuffixWrapper>
54
57
  ),
@@ -23,6 +23,7 @@ export default function Radio< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { label, description, getValue, setValue, isValid } = field;
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
  const { elements, isLoading } = useElements( {
27
28
  elements: field.elements,
28
29
  getElements: field.getElements,
@@ -50,6 +51,7 @@ export default function Radio< Item >( {
50
51
  options={ elements }
51
52
  selected={ value }
52
53
  hideLabelFromVision={ hideLabelFromVision }
54
+ disabled={ disabled }
53
55
  />
54
56
  );
55
57
  }
@@ -23,6 +23,7 @@ export default function Select< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { type, label, description, getValue, setValue, isValid } = field;
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
 
27
28
  const isMultiple = type === 'array';
28
29
  const value = getValue( { item: data } ) ?? ( isMultiple ? [] : '' );
@@ -55,6 +56,7 @@ export default function Select< Item >( {
55
56
  __next40pxDefaultSize
56
57
  hideLabelFromVision={ hideLabelFromVision }
57
58
  multiple={ isMultiple }
59
+ disabled={ disabled }
58
60
  />
59
61
  );
60
62
  }
@@ -23,6 +23,7 @@ export default function Textarea< Item >( {
23
23
  validity,
24
24
  }: DataFormControlProps< Item > ) {
25
25
  const { rows = 4 } = config || {};
26
+ const disabled = field.isDisabled( { item: data, field } );
26
27
  const { label, placeholder, description, setValue, isValid } = field;
27
28
  const value = field.getValue( { item: data } );
28
29
 
@@ -43,6 +44,7 @@ export default function Textarea< Item >( {
43
44
  help={ description }
44
45
  onChange={ onChangeControl }
45
46
  rows={ rows }
47
+ disabled={ disabled }
46
48
  minLength={
47
49
  isValid.minLength ? isValid.minLength.constraint : undefined
48
50
  }
@@ -27,6 +27,7 @@ export default function ToggleGroup< Item >( {
27
27
  validity,
28
28
  }: DataFormControlProps< Item > ) {
29
29
  const { getValue, setValue, isValid } = field;
30
+ const disabled = field.isDisabled( { item: data, field } );
30
31
  const value = getValue( { item: data } );
31
32
 
32
33
  const onChangeControl = useCallback(
@@ -67,6 +68,7 @@ export default function ToggleGroup< Item >( {
67
68
  key={ el.value }
68
69
  label={ el.label }
69
70
  value={ el.value }
71
+ disabled={ disabled }
70
72
  />
71
73
  ) ) }
72
74
  </ValidatedToggleGroupControl>
@@ -22,6 +22,7 @@ export default function Toggle< Item >( {
22
22
  validity,
23
23
  }: DataFormControlProps< Item > ) {
24
24
  const { label, description, getValue, setValue, isValid } = field;
25
+ const disabled = field.isDisabled( { item: data, field } );
25
26
 
26
27
  const onChangeControl = useCallback( () => {
27
28
  onChange(
@@ -39,6 +40,7 @@ export default function Toggle< Item >( {
39
40
  help={ description }
40
41
  checked={ getValue( { item: data } ) }
41
42
  onChange={ onChangeControl }
43
+ disabled={ disabled }
42
44
  />
43
45
  );
44
46
  }
@@ -59,6 +59,7 @@ export default function RelativeDateControl< Item >( {
59
59
  ];
60
60
 
61
61
  const { id, label, description, getValue, setValue } = field;
62
+ const disabled = field.isDisabled( { item: data, field } );
62
63
  const fieldValue = getValue( { item: data } );
63
64
  const { value: relValue = '', unit = options[ 0 ].value } =
64
65
  fieldValue && typeof fieldValue === 'object' ? fieldValue : {};
@@ -102,6 +103,7 @@ export default function RelativeDateControl< Item >( {
102
103
  step={ 1 }
103
104
  value={ relValue }
104
105
  onChange={ onChangeValue }
106
+ disabled={ disabled }
105
107
  />
106
108
  <SelectControl
107
109
  className="dataviews-controls__relative-date-unit"
@@ -111,6 +113,7 @@ export default function RelativeDateControl< Item >( {
111
113
  options={ options }
112
114
  onChange={ onChangeUnit }
113
115
  hideLabelFromVision
116
+ disabled={ disabled }
114
117
  />
115
118
  </Stack>
116
119
  </BaseControl>
@@ -0,0 +1,48 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { NormalizedRules } from '../../../types';
10
+
11
+ type DateMatcher = { before: Date } | { after: Date };
12
+
13
+ export default function useDisabledDateMatchers< Item >(
14
+ isValid: NormalizedRules< Item >,
15
+ parseDateFn: ( dateString?: string ) => Date | null
16
+ ): {
17
+ minConstraint: string | undefined;
18
+ maxConstraint: string | undefined;
19
+ disabledMatchers: DateMatcher[] | undefined;
20
+ } {
21
+ const minConstraint =
22
+ typeof isValid.min?.constraint === 'string'
23
+ ? isValid.min.constraint
24
+ : undefined;
25
+ const maxConstraint =
26
+ typeof isValid.max?.constraint === 'string'
27
+ ? isValid.max.constraint
28
+ : undefined;
29
+
30
+ const disabledMatchers = useMemo( () => {
31
+ const matchers: DateMatcher[] = [];
32
+ if ( minConstraint ) {
33
+ const minDate = parseDateFn( minConstraint );
34
+ if ( minDate ) {
35
+ matchers.push( { before: minDate } );
36
+ }
37
+ }
38
+ if ( maxConstraint ) {
39
+ const maxDate = parseDateFn( maxConstraint );
40
+ if ( maxDate ) {
41
+ matchers.push( { after: maxDate } );
42
+ }
43
+ }
44
+ return matchers.length > 0 ? matchers : undefined;
45
+ }, [ minConstraint, maxConstraint, parseDateFn ] );
46
+
47
+ return { minConstraint, maxConstraint, disabledMatchers };
48
+ }
@@ -43,6 +43,7 @@ export default function ValidatedText< Item >( {
43
43
  const { label, placeholder, description, getValue, setValue, isValid } =
44
44
  field;
45
45
  const value = getValue( { item: data } );
46
+ const disabled = field.isDisabled( { item: data, field } );
46
47
 
47
48
  const onChangeControl = useCallback(
48
49
  ( newValue: string ) =>
@@ -69,6 +70,7 @@ export default function ValidatedText< Item >( {
69
70
  type={ type }
70
71
  prefix={ prefix }
71
72
  suffix={ suffix }
73
+ disabled={ disabled }
72
74
  pattern={ isValid.pattern ? isValid.pattern.constraint : undefined }
73
75
  minLength={
74
76
  isValid.minLength ? isValid.minLength.constraint : undefined
@@ -96,6 +96,7 @@ export default function ValidatedNumber< Item >( {
96
96
  const step = Math.pow( 10, Math.abs( decimals ) * -1 );
97
97
  const { label, description, getValue, setValue, isValid } = field;
98
98
  const value = getValue( { item: data } ) ?? '';
99
+ const disabled = field.isDisabled( { item: data, field } );
99
100
 
100
101
  const onChangeControl = useCallback(
101
102
  ( newValue: string | undefined ) => {
@@ -161,6 +162,7 @@ export default function ValidatedNumber< Item >( {
161
162
  step={ step }
162
163
  min={ isValid.min ? isValid.min.constraint : undefined }
163
164
  max={ isValid.max ? isValid.max.constraint : undefined }
165
+ disabled={ disabled }
164
166
  />
165
167
  );
166
168
  }
@@ -8,7 +8,7 @@
8
8
  display: flex;
9
9
  width: 100%;
10
10
  min-height: $grid-unit-30;
11
- cursor: pointer;
11
+ cursor: var(--wpds-cursor-control);
12
12
  align-items: flex-start;
13
13
  border-radius: $radius-small;
14
14
  isolation: isolate;
@@ -44,7 +44,7 @@
44
44
 
45
45
  .dataforms-layouts-panel__field-control {
46
46
  color: $gray-700;
47
- font-weight: var(--wpds-font-weight-regular);
47
+ font-weight: var(--wpds-typography-font-weight-regular);
48
48
  }
49
49
  }
50
50
  }
@@ -92,7 +92,6 @@
92
92
  line-height: $grid-unit-05 * 5;
93
93
  hyphens: auto;
94
94
  color: $gray-700;
95
- text-transform: capitalize;
96
95
 
97
96
  .components-base-control__label {
98
97
  display: inline;
@@ -123,12 +122,12 @@
123
122
  flex-grow: 1;
124
123
  min-width: 0;
125
124
  min-height: $grid-unit-30;
126
- line-height: var(--wpds-font-line-height-md);
125
+ line-height: var(--wpds-typography-line-height-md);
127
126
  display: flex;
128
127
  align-items: center;
129
128
  overflow: hidden;
130
129
  word-break: break-word;
131
- font-weight: var(--wpds-font-weight-medium);
130
+ font-weight: var(--wpds-typography-font-weight-medium);
132
131
 
133
132
  > * {
134
133
  min-width: 0;
@@ -157,7 +157,6 @@ export default function SummaryButton< Item >( {
157
157
  <Button
158
158
  className="dataforms-layouts-panel__field-trigger-icon"
159
159
  label={ ariaLabel }
160
- showTooltip={ false }
161
160
  icon={ pencil }
162
161
  size="small"
163
162
  aria-expanded={ ariaExpanded }
@@ -15,7 +15,7 @@ import type {
15
15
  View,
16
16
  Action,
17
17
  NormalizedField,
18
- SupportedLayouts,
18
+ NormalizedSupportedLayouts,
19
19
  NormalizedFilter,
20
20
  } from '../../types';
21
21
  import type { SetSelection } from '../../types/private';
@@ -50,7 +50,7 @@ type DataViewsContextType< Item > = {
50
50
  resizeObserverRef:
51
51
  | ( ( element?: HTMLDivElement | null ) => void )
52
52
  | React.RefObject< HTMLDivElement >;
53
- defaultLayouts: SupportedLayouts;
53
+ defaultLayouts: NormalizedSupportedLayouts;
54
54
  filters: NormalizedFilter[];
55
55
  isShowingFilter: boolean;
56
56
  setIsShowingFilter: ( value: boolean ) => void;
@@ -64,6 +64,10 @@ export default function InputWidget( {
64
64
  ...currentField,
65
65
  // Deactivate validation for filters.
66
66
  isValid: {} satisfies NormalizedRules< any >,
67
+ // Filter controls are always enabled.
68
+ isDisabled: () => false,
69
+ // Filter controls are always visible.
70
+ isVisible: () => true,
67
71
  // Configure getValue/setValue as if Item was a plain object.
68
72
  getValue: ( { item }: { item: any } ) =>
69
73
  item[ currentField.id ],
@@ -76,7 +76,7 @@
76
76
  .dataviews-filters__summary-chip {
77
77
  border-radius: $grid-unit-20;
78
78
  border: $border-width solid transparent;
79
- cursor: pointer;
79
+ cursor: var(--wpds-cursor-control);
80
80
  padding: $grid-unit-05 $grid-unit-15;
81
81
  min-height: $grid-unit-40;
82
82
  background: $gray-100;
@@ -137,7 +137,7 @@
137
137
  align-items: center;
138
138
  justify-content: center;
139
139
  background: transparent;
140
- cursor: pointer;
140
+ cursor: var(--wpds-cursor-control);
141
141
 
142
142
  svg {
143
143
  fill: $gray-700;
@@ -4,7 +4,7 @@
4
4
 
5
5
  .dataviews-view-activity {
6
6
  margin: 0 0 auto;
7
- padding: $grid-unit-10 $grid-unit-30;
7
+ padding: 0 $grid-unit-30;
8
8
 
9
9
  .dataviews-view-activity__group-header {
10
10
  font-size: $font-size-large;
@@ -35,7 +35,7 @@
35
35
  overflow: hidden;
36
36
 
37
37
  &--clickable {
38
- cursor: pointer;
38
+ cursor: var(--wpds-cursor-control);
39
39
 
40
40
  &:focus-visible {
41
41
  outline: var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color);
@@ -104,7 +104,7 @@
104
104
  .dataviews-view-activity__item {
105
105
  &.is-compact {
106
106
  .dataviews-view-activity__item-type {
107
- width: $grid-unit-10;
107
+ width: $grid-unit-15;
108
108
 
109
109
  &::before {
110
110
  height: $grid-unit-15;
@@ -250,7 +250,7 @@
250
250
  }
251
251
 
252
252
  .dataviews-view-grid__media--clickable {
253
- cursor: pointer;
253
+ cursor: var(--wpds-cursor-control);
254
254
  }
255
255
 
256
256
  .dataviews-view-grid__group-header {
@@ -115,7 +115,7 @@ div.dataviews-view-list {
115
115
  border: none;
116
116
  background: none;
117
117
  padding: 0;
118
- cursor: pointer;
118
+ cursor: var(--wpds-cursor-control);
119
119
 
120
120
  &:focus-visible {
121
121
  outline: none;