@wordpress/dataviews 3.0.0 → 4.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 (352) hide show
  1. package/CHANGELOG.md +21 -3
  2. package/README.md +19 -4
  3. package/build/components/dataform/index.js +27 -0
  4. package/build/components/dataform/index.js.map +1 -0
  5. package/build/components/dataviews/index.js +126 -0
  6. package/build/components/dataviews/index.js.map +1 -0
  7. package/build/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +42 -16
  8. package/build/components/dataviews-bulk-actions/index.js.map +1 -0
  9. package/build/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +36 -19
  10. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
  11. package/build/components/dataviews-context/index.js +36 -0
  12. package/build/components/dataviews-context/index.js.map +1 -0
  13. package/build/{add-filter.js → components/dataviews-filters/add-filter.js} +35 -18
  14. package/build/components/dataviews-filters/add-filter.js.map +1 -0
  15. package/build/{filter-summary.js → components/dataviews-filters/filter-summary.js} +9 -9
  16. package/build/components/dataviews-filters/filter-summary.js.map +1 -0
  17. package/build/components/dataviews-filters/index.js +164 -0
  18. package/build/components/dataviews-filters/index.js.map +1 -0
  19. package/build/components/dataviews-filters/reset-filters.js.map +1 -0
  20. package/build/{search-widget.js → components/dataviews-filters/search-widget.js} +13 -13
  21. package/build/components/dataviews-filters/search-widget.js.map +1 -0
  22. package/build/{item-actions.js → components/dataviews-item-actions/index.js} +2 -2
  23. package/build/components/dataviews-item-actions/index.js.map +1 -0
  24. package/build/components/dataviews-layout/index.js +53 -0
  25. package/build/components/dataviews-layout/index.js.map +1 -0
  26. package/build/{pagination.js → components/dataviews-pagination/index.js} +16 -13
  27. package/build/components/dataviews-pagination/index.js.map +1 -0
  28. package/build/{search.js → components/dataviews-search/index.js} +18 -11
  29. package/build/components/dataviews-search/index.js.map +1 -0
  30. package/build/{single-selection-checkbox.js → components/dataviews-selection-checkbox/index.js} +6 -6
  31. package/build/components/dataviews-selection-checkbox/index.js.map +1 -0
  32. package/build/components/dataviews-view-config/index.js +298 -0
  33. package/build/components/dataviews-view-config/index.js.map +1 -0
  34. package/build/constants.js +6 -1
  35. package/build/constants.js.map +1 -1
  36. package/build/dataforms-layouts/index.js +24 -0
  37. package/build/dataforms-layouts/index.js.map +1 -0
  38. package/build/dataforms-layouts/panel/index.js +129 -0
  39. package/build/dataforms-layouts/panel/index.js.map +1 -0
  40. package/build/dataforms-layouts/regular/index.js +39 -0
  41. package/build/dataforms-layouts/regular/index.js.map +1 -0
  42. package/build/dataviews-layouts/grid/density-picker.js +143 -0
  43. package/build/dataviews-layouts/grid/density-picker.js.map +1 -0
  44. package/build/{view-grid.js → dataviews-layouts/grid/index.js} +40 -41
  45. package/build/dataviews-layouts/grid/index.js.map +1 -0
  46. package/build/dataviews-layouts/index.js +52 -0
  47. package/build/dataviews-layouts/index.js.map +1 -0
  48. package/build/{view-list.js → dataviews-layouts/list/index.js} +26 -23
  49. package/build/dataviews-layouts/list/index.js.map +1 -0
  50. package/build/dataviews-layouts/table/column-header-menu.js +196 -0
  51. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -0
  52. package/build/dataviews-layouts/table/index.js +350 -0
  53. package/build/dataviews-layouts/table/index.js.map +1 -0
  54. package/build/field-types/index.js +46 -0
  55. package/build/field-types/index.js.map +1 -0
  56. package/build/field-types/integer.js +94 -0
  57. package/build/field-types/integer.js.map +1 -0
  58. package/build/field-types/text.js +87 -0
  59. package/build/field-types/text.js.map +1 -0
  60. package/build/filter-and-sort-data-view.js +2 -11
  61. package/build/filter-and-sort-data-view.js.map +1 -1
  62. package/build/index.js +11 -4
  63. package/build/index.js.map +1 -1
  64. package/build/normalize-fields.js +36 -2
  65. package/build/normalize-fields.js.map +1 -1
  66. package/build/types.js.map +1 -1
  67. package/build/validation.js +22 -0
  68. package/build/validation.js.map +1 -0
  69. package/build-module/components/dataform/index.js +21 -0
  70. package/build-module/components/dataform/index.js.map +1 -0
  71. package/build-module/components/dataviews/index.js +117 -0
  72. package/build-module/components/dataviews/index.js.map +1 -0
  73. package/build-module/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +42 -17
  74. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -0
  75. package/build-module/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +35 -19
  76. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
  77. package/build-module/components/dataviews-context/index.js +30 -0
  78. package/build-module/components/dataviews-context/index.js.map +1 -0
  79. package/build-module/{add-filter.js → components/dataviews-filters/add-filter.js} +34 -18
  80. package/build-module/components/dataviews-filters/add-filter.js.map +1 -0
  81. package/build-module/{filter-summary.js → components/dataviews-filters/filter-summary.js} +9 -9
  82. package/build-module/components/dataviews-filters/filter-summary.js.map +1 -0
  83. package/build-module/components/dataviews-filters/index.js +153 -0
  84. package/build-module/components/dataviews-filters/index.js.map +1 -0
  85. package/build-module/components/dataviews-filters/reset-filters.js.map +1 -0
  86. package/build-module/{search-widget.js → components/dataviews-filters/search-widget.js} +13 -13
  87. package/build-module/components/dataviews-filters/search-widget.js.map +1 -0
  88. package/build-module/{item-actions.js → components/dataviews-item-actions/index.js} +2 -2
  89. package/build-module/components/dataviews-item-actions/index.js.map +1 -0
  90. package/build-module/components/dataviews-layout/index.js +45 -0
  91. package/build-module/components/dataviews-layout/index.js.map +1 -0
  92. package/build-module/{pagination.js → components/dataviews-pagination/index.js} +17 -15
  93. package/build-module/components/dataviews-pagination/index.js.map +1 -0
  94. package/build-module/{search.js → components/dataviews-search/index.js} +18 -12
  95. package/build-module/components/dataviews-search/index.js.map +1 -0
  96. package/build-module/{single-selection-checkbox.js → components/dataviews-selection-checkbox/index.js} +5 -5
  97. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -0
  98. package/build-module/components/dataviews-view-config/index.js +292 -0
  99. package/build-module/components/dataviews-view-config/index.js.map +1 -0
  100. package/build-module/constants.js +5 -0
  101. package/build-module/constants.js.map +1 -1
  102. package/build-module/dataforms-layouts/index.js +16 -0
  103. package/build-module/dataforms-layouts/index.js.map +1 -0
  104. package/build-module/dataforms-layouts/panel/index.js +124 -0
  105. package/build-module/dataforms-layouts/panel/index.js.map +1 -0
  106. package/build-module/dataforms-layouts/regular/index.js +32 -0
  107. package/build-module/dataforms-layouts/regular/index.js.map +1 -0
  108. package/build-module/dataviews-layouts/grid/density-picker.js +138 -0
  109. package/build-module/dataviews-layouts/grid/density-picker.js.map +1 -0
  110. package/build-module/{view-grid.js → dataviews-layouts/grid/index.js} +38 -39
  111. package/build-module/dataviews-layouts/grid/index.js.map +1 -0
  112. package/build-module/dataviews-layouts/index.js +43 -0
  113. package/build-module/dataviews-layouts/index.js.map +1 -0
  114. package/build-module/{view-list.js → dataviews-layouts/list/index.js} +24 -21
  115. package/build-module/dataviews-layouts/list/index.js.map +1 -0
  116. package/build-module/dataviews-layouts/table/column-header-menu.js +190 -0
  117. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -0
  118. package/build-module/dataviews-layouts/table/index.js +344 -0
  119. package/build-module/dataviews-layouts/table/index.js.map +1 -0
  120. package/build-module/field-types/index.js +40 -0
  121. package/build-module/field-types/index.js.map +1 -0
  122. package/build-module/field-types/integer.js +87 -0
  123. package/build-module/field-types/integer.js.map +1 -0
  124. package/build-module/field-types/text.js +80 -0
  125. package/build-module/field-types/text.js.map +1 -0
  126. package/build-module/filter-and-sort-data-view.js +2 -11
  127. package/build-module/filter-and-sort-data-view.js.map +1 -1
  128. package/build-module/index.js +4 -3
  129. package/build-module/index.js.map +1 -1
  130. package/build-module/normalize-fields.js +35 -3
  131. package/build-module/normalize-fields.js.map +1 -1
  132. package/build-module/types.js.map +1 -1
  133. package/build-module/validation.js +15 -0
  134. package/build-module/validation.js.map +1 -0
  135. package/build-style/style-rtl.css +763 -532
  136. package/build-style/style.css +763 -532
  137. package/build-types/components/dataform/index.d.ts +6 -0
  138. package/build-types/components/dataform/index.d.ts.map +1 -0
  139. package/build-types/components/dataform/stories/index.story.d.ts +22 -0
  140. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -0
  141. package/build-types/{dataviews.d.ts → components/dataviews/index.d.ts} +9 -7
  142. package/build-types/components/dataviews/index.d.ts.map +1 -0
  143. package/build-types/{stories → components/dataviews/stories}/fixtures.d.ts +13 -19
  144. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -0
  145. package/build-types/components/dataviews/stories/index.story.d.ts +46 -0
  146. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -0
  147. package/build-types/components/dataviews-bulk-actions/index.d.ts +5 -0
  148. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -0
  149. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +2 -0
  150. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +1 -0
  151. package/build-types/components/dataviews-context/index.d.ts +26 -0
  152. package/build-types/components/dataviews-context/index.d.ts.map +1 -0
  153. package/build-types/{add-filter.d.ts → components/dataviews-filters/add-filter.d.ts} +4 -2
  154. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -0
  155. package/build-types/{filter-summary.d.ts → components/dataviews-filters/filter-summary.d.ts} +1 -1
  156. package/build-types/components/dataviews-filters/filter-summary.d.ts.map +1 -0
  157. package/build-types/components/dataviews-filters/index.d.ts +14 -0
  158. package/build-types/components/dataviews-filters/index.d.ts.map +1 -0
  159. package/build-types/{reset-filters.d.ts → components/dataviews-filters/reset-filters.d.ts} +1 -2
  160. package/build-types/components/dataviews-filters/reset-filters.d.ts.map +1 -0
  161. package/build-types/{search-widget.d.ts → components/dataviews-filters/search-widget.d.ts} +1 -2
  162. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -0
  163. package/build-types/{item-actions.d.ts → components/dataviews-item-actions/index.d.ts} +2 -2
  164. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -0
  165. package/build-types/components/dataviews-layout/index.d.ts +2 -0
  166. package/build-types/components/dataviews-layout/index.d.ts.map +1 -0
  167. package/build-types/components/dataviews-pagination/index.d.ts +4 -0
  168. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -0
  169. package/build-types/components/dataviews-search/index.d.ts +6 -0
  170. package/build-types/components/dataviews-search/index.d.ts.map +1 -0
  171. package/build-types/components/dataviews-selection-checkbox/index.d.ts +16 -0
  172. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -0
  173. package/build-types/components/dataviews-view-config/index.d.ts +8 -0
  174. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -0
  175. package/build-types/constants.d.ts +4 -0
  176. package/build-types/constants.d.ts.map +1 -1
  177. package/build-types/dataforms-layouts/index.d.ts +9 -0
  178. package/build-types/dataforms-layouts/index.d.ts.map +1 -0
  179. package/build-types/dataforms-layouts/panel/index.d.ts +3 -0
  180. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -0
  181. package/build-types/dataforms-layouts/regular/index.d.ts +3 -0
  182. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -0
  183. package/build-types/dataviews-layouts/grid/density-picker.d.ts +5 -0
  184. package/build-types/dataviews-layouts/grid/density-picker.d.ts.map +1 -0
  185. package/build-types/dataviews-layouts/grid/index.d.ts +3 -0
  186. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -0
  187. package/build-types/{layouts.d.ts → dataviews-layouts/index.d.ts} +6 -5
  188. package/build-types/dataviews-layouts/index.d.ts.map +1 -0
  189. package/build-types/dataviews-layouts/list/index.d.ts +3 -0
  190. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -0
  191. package/build-types/dataviews-layouts/table/column-header-menu.d.ts +17 -0
  192. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -0
  193. package/build-types/dataviews-layouts/table/index.d.ts +4 -0
  194. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -0
  195. package/build-types/field-types/index.d.ts +20 -0
  196. package/build-types/field-types/index.d.ts.map +1 -0
  197. package/build-types/field-types/integer.d.ts +14 -0
  198. package/build-types/field-types/integer.d.ts.map +1 -0
  199. package/build-types/field-types/text.d.ts +14 -0
  200. package/build-types/field-types/text.d.ts.map +1 -0
  201. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  202. package/build-types/index.d.ts +4 -3
  203. package/build-types/index.d.ts.map +1 -1
  204. package/build-types/normalize-fields.d.ts +0 -3
  205. package/build-types/normalize-fields.d.ts.map +1 -1
  206. package/build-types/types.d.ts +73 -19
  207. package/build-types/types.d.ts.map +1 -1
  208. package/build-types/validation.d.ts +3 -0
  209. package/build-types/validation.d.ts.map +1 -0
  210. package/package.json +12 -11
  211. package/src/components/dataform/index.tsx +17 -0
  212. package/src/components/dataform/stories/index.story.tsx +79 -0
  213. package/src/components/dataviews/index.tsx +161 -0
  214. package/src/{stories → components/dataviews/stories}/fixtures.js +8 -11
  215. package/src/{stories → components/dataviews/stories}/index.story.js +17 -3
  216. package/src/components/dataviews/style.scss +100 -0
  217. package/src/{bulk-actions.tsx → components/dataviews-bulk-actions/index.tsx} +51 -29
  218. package/src/components/dataviews-bulk-actions/style.scss +7 -0
  219. package/src/{bulk-actions-toolbar.tsx → components/dataviews-bulk-actions-toolbar/index.tsx} +42 -30
  220. package/src/components/dataviews-bulk-actions-toolbar/style.scss +45 -0
  221. package/src/components/dataviews-context/index.ts +49 -0
  222. package/src/{add-filter.tsx → components/dataviews-filters/add-filter.tsx} +39 -23
  223. package/src/{filter-summary.tsx → components/dataviews-filters/filter-summary.tsx} +18 -10
  224. package/src/components/dataviews-filters/index.tsx +199 -0
  225. package/src/{reset-filters.tsx → components/dataviews-filters/reset-filters.tsx} +1 -1
  226. package/src/{search-widget.tsx → components/dataviews-filters/search-widget.tsx} +14 -14
  227. package/src/components/dataviews-filters/style.scss +282 -0
  228. package/src/{item-actions.tsx → components/dataviews-item-actions/index.tsx} +2 -2
  229. package/src/components/dataviews-item-actions/style.scss +3 -0
  230. package/src/components/dataviews-layout/index.tsx +51 -0
  231. package/src/{pagination.tsx → components/dataviews-pagination/index.tsx} +13 -21
  232. package/src/components/dataviews-pagination/style.scss +26 -0
  233. package/src/{search.tsx → components/dataviews-search/index.tsx} +13 -15
  234. package/src/{single-selection-checkbox.tsx → components/dataviews-selection-checkbox/index.tsx} +9 -9
  235. package/src/components/dataviews-selection-checkbox/style.scss +14 -0
  236. package/src/components/dataviews-view-config/index.tsx +358 -0
  237. package/src/components/dataviews-view-config/style.scss +44 -0
  238. package/src/constants.ts +5 -0
  239. package/src/dataforms-layouts/index.tsx +20 -0
  240. package/src/dataforms-layouts/panel/index.tsx +164 -0
  241. package/src/dataforms-layouts/panel/style.scss +59 -0
  242. package/src/dataforms-layouts/regular/index.tsx +41 -0
  243. package/src/dataviews-layouts/grid/density-picker.tsx +136 -0
  244. package/src/{view-grid.tsx → dataviews-layouts/grid/index.tsx} +35 -36
  245. package/src/dataviews-layouts/grid/style.scss +169 -0
  246. package/src/dataviews-layouts/index.ts +66 -0
  247. package/src/{view-list.tsx → dataviews-layouts/list/index.tsx} +30 -17
  248. package/src/dataviews-layouts/list/style.scss +192 -0
  249. package/src/dataviews-layouts/table/column-header-menu.tsx +268 -0
  250. package/src/dataviews-layouts/table/index.tsx +471 -0
  251. package/src/dataviews-layouts/table/style.scss +201 -0
  252. package/src/field-types/index.tsx +45 -0
  253. package/src/field-types/integer.tsx +103 -0
  254. package/src/field-types/text.tsx +95 -0
  255. package/src/filter-and-sort-data-view.ts +1 -15
  256. package/src/index.ts +4 -3
  257. package/src/normalize-fields.ts +45 -4
  258. package/src/style.scss +14 -907
  259. package/src/test/filter-and-sort-data-view.js +47 -4
  260. package/src/test/validation.ts +131 -0
  261. package/src/types.ts +88 -17
  262. package/src/validation.ts +18 -0
  263. package/tsconfig.json +2 -1
  264. package/tsconfig.tsbuildinfo +1 -1
  265. package/build/add-filter.js.map +0 -1
  266. package/build/bulk-actions-toolbar.js.map +0 -1
  267. package/build/bulk-actions.js.map +0 -1
  268. package/build/dataform.js +0 -78
  269. package/build/dataform.js.map +0 -1
  270. package/build/dataviews.js +0 -125
  271. package/build/dataviews.js.map +0 -1
  272. package/build/filter-summary.js.map +0 -1
  273. package/build/filters.js +0 -102
  274. package/build/filters.js.map +0 -1
  275. package/build/item-actions.js.map +0 -1
  276. package/build/layouts.js +0 -38
  277. package/build/layouts.js.map +0 -1
  278. package/build/pagination.js.map +0 -1
  279. package/build/reset-filters.js.map +0 -1
  280. package/build/search-widget.js.map +0 -1
  281. package/build/search.js.map +0 -1
  282. package/build/single-selection-checkbox.js.map +0 -1
  283. package/build/view-actions.js +0 -260
  284. package/build/view-actions.js.map +0 -1
  285. package/build/view-grid.js.map +0 -1
  286. package/build/view-list.js.map +0 -1
  287. package/build/view-table.js +0 -400
  288. package/build/view-table.js.map +0 -1
  289. package/build-module/add-filter.js.map +0 -1
  290. package/build-module/bulk-actions-toolbar.js.map +0 -1
  291. package/build-module/bulk-actions.js.map +0 -1
  292. package/build-module/dataform.js +0 -72
  293. package/build-module/dataform.js.map +0 -1
  294. package/build-module/dataviews.js +0 -116
  295. package/build-module/dataviews.js.map +0 -1
  296. package/build-module/filter-summary.js.map +0 -1
  297. package/build-module/filters.js +0 -94
  298. package/build-module/filters.js.map +0 -1
  299. package/build-module/item-actions.js.map +0 -1
  300. package/build-module/layouts.js +0 -30
  301. package/build-module/layouts.js.map +0 -1
  302. package/build-module/pagination.js.map +0 -1
  303. package/build-module/reset-filters.js.map +0 -1
  304. package/build-module/search-widget.js.map +0 -1
  305. package/build-module/search.js.map +0 -1
  306. package/build-module/single-selection-checkbox.js.map +0 -1
  307. package/build-module/view-actions.js +0 -255
  308. package/build-module/view-actions.js.map +0 -1
  309. package/build-module/view-grid.js.map +0 -1
  310. package/build-module/view-list.js.map +0 -1
  311. package/build-module/view-table.js +0 -393
  312. package/build-module/view-table.js.map +0 -1
  313. package/build-types/add-filter.d.ts.map +0 -1
  314. package/build-types/bulk-actions-toolbar.d.ts +0 -13
  315. package/build-types/bulk-actions-toolbar.d.ts.map +0 -1
  316. package/build-types/bulk-actions.d.ts +0 -15
  317. package/build-types/bulk-actions.d.ts.map +0 -1
  318. package/build-types/dataform.d.ts +0 -17
  319. package/build-types/dataform.d.ts.map +0 -1
  320. package/build-types/dataviews.d.ts.map +0 -1
  321. package/build-types/filter-summary.d.ts.map +0 -1
  322. package/build-types/filters.d.ts +0 -13
  323. package/build-types/filters.d.ts.map +0 -1
  324. package/build-types/item-actions.d.ts.map +0 -1
  325. package/build-types/layouts.d.ts.map +0 -1
  326. package/build-types/pagination.d.ts +0 -16
  327. package/build-types/pagination.d.ts.map +0 -1
  328. package/build-types/reset-filters.d.ts.map +0 -1
  329. package/build-types/search-widget.d.ts.map +0 -1
  330. package/build-types/search.d.ts +0 -13
  331. package/build-types/search.d.ts.map +0 -1
  332. package/build-types/single-selection-checkbox.d.ts +0 -17
  333. package/build-types/single-selection-checkbox.d.ts.map +0 -1
  334. package/build-types/stories/fixtures.d.ts.map +0 -1
  335. package/build-types/stories/index.story.d.ts +0 -29
  336. package/build-types/stories/index.story.d.ts.map +0 -1
  337. package/build-types/view-actions.d.ts +0 -12
  338. package/build-types/view-actions.d.ts.map +0 -1
  339. package/build-types/view-grid.d.ts +0 -4
  340. package/build-types/view-grid.d.ts.map +0 -1
  341. package/build-types/view-list.d.ts +0 -4
  342. package/build-types/view-list.d.ts.map +0 -1
  343. package/build-types/view-table.d.ts +0 -5
  344. package/build-types/view-table.d.ts.map +0 -1
  345. package/src/dataform.tsx +0 -106
  346. package/src/dataviews.tsx +0 -183
  347. package/src/filters.tsx +0 -125
  348. package/src/layouts.ts +0 -39
  349. package/src/view-actions.tsx +0 -350
  350. package/src/view-table.tsx +0 -592
  351. /package/build/{reset-filters.js → components/dataviews-filters/reset-filters.js} +0 -0
  352. /package/build-module/{reset-filters.js → components/dataviews-filters/reset-filters.js} +0 -0
@@ -35,8 +35,14 @@ import {
35
35
  OPERATOR_IS_NONE,
36
36
  OPERATOR_IS_ALL,
37
37
  OPERATOR_IS_NOT_ALL,
38
- } from './constants';
39
- import type { Filter, NormalizedFilter, Operator, Option, View } from './types';
38
+ } from '../../constants';
39
+ import type {
40
+ Filter,
41
+ NormalizedFilter,
42
+ Operator,
43
+ Option,
44
+ View,
45
+ } from '../../types';
40
46
 
41
47
  interface FilterTextProps {
42
48
  activeElements: Option[];
@@ -65,8 +71,10 @@ const FilterText = ( {
65
71
  }
66
72
 
67
73
  const filterTextWrappers = {
68
- Name: <span className="dataviews-filter-summary__filter-text-name" />,
69
- Value: <span className="dataviews-filter-summary__filter-text-value" />,
74
+ Name: <span className="dataviews-filters__summary-filter-text-name" />,
75
+ Value: (
76
+ <span className="dataviews-filters__summary-filter-text-value" />
77
+ ),
70
78
  };
71
79
 
72
80
  if ( filterInView?.operator === OPERATOR_IS_ANY ) {
@@ -166,9 +174,9 @@ function OperatorSelector( {
166
174
  <HStack
167
175
  spacing={ 2 }
168
176
  justify="flex-start"
169
- className="dataviews-filter-summary__operators-container"
177
+ className="dataviews-filters__summary-operators-container"
170
178
  >
171
- <FlexItem className="dataviews-filter-summary__operators-filter-name">
179
+ <FlexItem className="dataviews-filters__summary-operators-filter-name">
172
180
  { filter.name }
173
181
  </FlexItem>
174
182
 
@@ -239,13 +247,13 @@ export default function FilterSummary( {
239
247
  return (
240
248
  <Dropdown
241
249
  defaultOpen={ openedFilter === filter.field }
242
- contentClassName="dataviews-filter-summary__popover"
250
+ contentClassName="dataviews-filters__summary-popover"
243
251
  popoverProps={ { placement: 'bottom-start', role: 'dialog' } }
244
252
  onClose={ () => {
245
253
  toggleRef.current?.focus();
246
254
  } }
247
255
  renderToggle={ ( { isOpen, onToggle } ) => (
248
- <div className="dataviews-filter-summary__chip-container">
256
+ <div className="dataviews-filters__summary-chip-container">
249
257
  <Tooltip
250
258
  text={ sprintf(
251
259
  /* translators: 1: Filter name. */
@@ -256,7 +264,7 @@ export default function FilterSummary( {
256
264
  >
257
265
  <div
258
266
  className={ clsx(
259
- 'dataviews-filter-summary__chip',
267
+ 'dataviews-filters__summary-chip',
260
268
  {
261
269
  'has-reset': canResetOrRemove,
262
270
  'has-values': hasValues,
@@ -289,7 +297,7 @@ export default function FilterSummary( {
289
297
  >
290
298
  <button
291
299
  className={ clsx(
292
- 'dataviews-filter-summary__chip-remove',
300
+ 'dataviews-filters__summary-chip-remove',
293
301
  { 'has-values': hasValues }
294
302
  ) }
295
303
  onClick={ () => {
@@ -0,0 +1,199 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ memo,
6
+ useContext,
7
+ useRef,
8
+ useMemo,
9
+ useCallback,
10
+ } from '@wordpress/element';
11
+ import { __experimentalHStack as HStack, Button } from '@wordpress/components';
12
+ import { funnel } from '@wordpress/icons';
13
+ import { __ } from '@wordpress/i18n';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import FilterSummary from './filter-summary';
19
+ import { default as AddFilter, AddFilterDropdownMenu } from './add-filter';
20
+ import ResetFilters from './reset-filters';
21
+ import DataViewsContext from '../dataviews-context';
22
+ import { sanitizeOperators } from '../../utils';
23
+ import { ALL_OPERATORS, OPERATOR_IS, OPERATOR_IS_NOT } from '../../constants';
24
+ import type { NormalizedFilter, NormalizedField, View } from '../../types';
25
+
26
+ export function useFilters( fields: NormalizedField< any >[], view: View ) {
27
+ return useMemo( () => {
28
+ const filters: NormalizedFilter[] = [];
29
+ fields.forEach( ( field ) => {
30
+ if ( ! field.elements?.length ) {
31
+ return;
32
+ }
33
+
34
+ const operators = sanitizeOperators( field );
35
+ if ( operators.length === 0 ) {
36
+ return;
37
+ }
38
+
39
+ const isPrimary = !! field.filterBy?.isPrimary;
40
+ filters.push( {
41
+ field: field.id,
42
+ name: field.label,
43
+ elements: field.elements,
44
+ singleSelection: operators.some( ( op ) =>
45
+ [ OPERATOR_IS, OPERATOR_IS_NOT ].includes( op )
46
+ ),
47
+ operators,
48
+ isVisible:
49
+ isPrimary ||
50
+ !! view.filters?.some(
51
+ ( f ) =>
52
+ f.field === field.id &&
53
+ ALL_OPERATORS.includes( f.operator )
54
+ ),
55
+ isPrimary,
56
+ } );
57
+ } );
58
+ // Sort filters by primary property. We need the primary filters to be first.
59
+ // Then we sort by name.
60
+ filters.sort( ( a, b ) => {
61
+ if ( a.isPrimary && ! b.isPrimary ) {
62
+ return -1;
63
+ }
64
+ if ( ! a.isPrimary && b.isPrimary ) {
65
+ return 1;
66
+ }
67
+ return a.name.localeCompare( b.name );
68
+ } );
69
+ return filters;
70
+ }, [ fields, view ] );
71
+ }
72
+
73
+ export function FilterVisibilityToggle( {
74
+ filters,
75
+ view,
76
+ onChangeView,
77
+ setOpenedFilter,
78
+ isShowingFilter,
79
+ setIsShowingFilter,
80
+ }: {
81
+ filters: NormalizedFilter[];
82
+ view: View;
83
+ onChangeView: ( view: View ) => void;
84
+ setOpenedFilter: ( filter: string | null ) => void;
85
+ isShowingFilter: boolean;
86
+ setIsShowingFilter: React.Dispatch< React.SetStateAction< boolean > >;
87
+ } ) {
88
+ const onChangeViewWithFilterVisibility = useCallback(
89
+ ( _view: View ) => {
90
+ onChangeView( _view );
91
+ setIsShowingFilter( true );
92
+ },
93
+ [ onChangeView, setIsShowingFilter ]
94
+ );
95
+ const visibleFilters = filters.filter( ( filter ) => filter.isVisible );
96
+
97
+ const hasVisibleFilters = !! visibleFilters.length;
98
+ if ( ! hasVisibleFilters ) {
99
+ return (
100
+ <AddFilterDropdownMenu
101
+ filters={ filters }
102
+ view={ view }
103
+ onChangeView={ onChangeViewWithFilterVisibility }
104
+ setOpenedFilter={ setOpenedFilter }
105
+ trigger={
106
+ <Button
107
+ className="dataviews-filters__visibility-toggle"
108
+ size="compact"
109
+ icon={ funnel }
110
+ label={ __( 'Add filter' ) }
111
+ isPressed={ false }
112
+ aria-expanded={ false }
113
+ />
114
+ }
115
+ />
116
+ );
117
+ }
118
+ return (
119
+ <div className="dataviews-filters__container-visibility-toggle">
120
+ <Button
121
+ className="dataviews-filters__visibility-toggle"
122
+ size="compact"
123
+ icon={ funnel }
124
+ label={ __( 'Toggle filter display' ) }
125
+ onClick={ () => {
126
+ if ( ! isShowingFilter ) {
127
+ setOpenedFilter( null );
128
+ }
129
+ setIsShowingFilter( ! isShowingFilter );
130
+ } }
131
+ isPressed={ isShowingFilter }
132
+ aria-expanded={ isShowingFilter }
133
+ />
134
+ { hasVisibleFilters && !! view.filters?.length && (
135
+ <span className="dataviews-filters-toggle__count">
136
+ { view.filters?.length }
137
+ </span>
138
+ ) }
139
+ </div>
140
+ );
141
+ }
142
+
143
+ function Filters() {
144
+ const { fields, view, onChangeView, openedFilter, setOpenedFilter } =
145
+ useContext( DataViewsContext );
146
+ const addFilterRef = useRef< HTMLButtonElement >( null );
147
+ const filters = useFilters( fields, view );
148
+ const addFilter = (
149
+ <AddFilter
150
+ key="add-filter"
151
+ filters={ filters }
152
+ view={ view }
153
+ onChangeView={ onChangeView }
154
+ ref={ addFilterRef }
155
+ setOpenedFilter={ setOpenedFilter }
156
+ />
157
+ );
158
+ const visibleFilters = filters.filter( ( filter ) => filter.isVisible );
159
+ if ( visibleFilters.length === 0 ) {
160
+ return null;
161
+ }
162
+ const filterComponents = [
163
+ ...visibleFilters.map( ( filter ) => {
164
+ return (
165
+ <FilterSummary
166
+ key={ filter.field }
167
+ filter={ filter }
168
+ view={ view }
169
+ onChangeView={ onChangeView }
170
+ addFilterRef={ addFilterRef }
171
+ openedFilter={ openedFilter }
172
+ />
173
+ );
174
+ } ),
175
+ addFilter,
176
+ ];
177
+
178
+ filterComponents.push(
179
+ <ResetFilters
180
+ key="reset-filters"
181
+ filters={ filters }
182
+ view={ view }
183
+ onChangeView={ onChangeView }
184
+ />
185
+ );
186
+
187
+ return (
188
+ <HStack
189
+ justify="flex-start"
190
+ style={ { width: 'fit-content' } }
191
+ className="dataviews-filters__container"
192
+ wrap
193
+ >
194
+ { filterComponents }
195
+ </HStack>
196
+ );
197
+ }
198
+
199
+ export default memo( Filters );
@@ -7,7 +7,7 @@ import { __ } from '@wordpress/i18n';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import type { NormalizedFilter, View } from './types';
10
+ import type { NormalizedFilter, View } from '../../types';
11
11
 
12
12
  interface ResetFilterProps {
13
13
  filters: NormalizedFilter[];
@@ -21,8 +21,8 @@ import { SVG, Circle } from '@wordpress/primitives';
21
21
  /**
22
22
  * Internal dependencies
23
23
  */
24
- import { unlock } from './lock-unlock';
25
- import type { Filter, NormalizedFilter, View } from './types';
24
+ import { unlock } from '../../lock-unlock';
25
+ import type { Filter, NormalizedFilter, View } from '../../types';
26
26
 
27
27
  const {
28
28
  CompositeV2: Composite,
@@ -101,7 +101,7 @@ function ListBox( { view, filter, onChangeView }: SearchWidgetProps ) {
101
101
  <Composite
102
102
  store={ compositeStore }
103
103
  role="listbox"
104
- className="dataviews-search-widget-listbox"
104
+ className="dataviews-filters__search-widget-listbox"
105
105
  aria-label={ sprintf(
106
106
  /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */
107
107
  __( 'List of: %1$s' ),
@@ -124,7 +124,7 @@ function ListBox( { view, filter, onChangeView }: SearchWidgetProps ) {
124
124
  <div
125
125
  aria-label={ element.label }
126
126
  role="option"
127
- className="dataviews-search-widget-listitem"
127
+ className="dataviews-filters__search-widget-listitem"
128
128
  />
129
129
  }
130
130
  onClick={ () => {
@@ -174,7 +174,7 @@ function ListBox( { view, filter, onChangeView }: SearchWidgetProps ) {
174
174
  />
175
175
  }
176
176
  >
177
- <span className="dataviews-search-widget-listitem-check">
177
+ <span className="dataviews-filters__search-widget-listitem-check">
178
178
  { filter.singleSelection &&
179
179
  currentValue === element.value && (
180
180
  <Icon icon={ radioCheck } />
@@ -187,7 +187,7 @@ function ListBox( { view, filter, onChangeView }: SearchWidgetProps ) {
187
187
  <span>
188
188
  { element.label }
189
189
  { !! element.description && (
190
- <span className="dataviews-search-widget-listitem-description">
190
+ <span className="dataviews-filters__search-widget-listitem-description">
191
191
  { element.description }
192
192
  </span>
193
193
  ) }
@@ -247,7 +247,7 @@ function ComboboxList( { view, filter, onChangeView }: SearchWidgetProps ) {
247
247
  } }
248
248
  setValue={ setSearchValue }
249
249
  >
250
- <div className="dataviews-search-widget-filter-combobox__wrapper">
250
+ <div className="dataviews-filters__search-widget-filter-combobox__wrapper">
251
251
  <Ariakit.ComboboxLabel
252
252
  render={
253
253
  <VisuallyHidden>
@@ -260,14 +260,14 @@ function ComboboxList( { view, filter, onChangeView }: SearchWidgetProps ) {
260
260
  <Ariakit.Combobox
261
261
  autoSelect="always"
262
262
  placeholder={ __( 'Search' ) }
263
- className="dataviews-search-widget-filter-combobox__input"
263
+ className="dataviews-filters__search-widget-filter-combobox__input"
264
264
  />
265
- <div className="dataviews-search-widget-filter-combobox__icon">
265
+ <div className="dataviews-filters__search-widget-filter-combobox__icon">
266
266
  <Icon icon={ search } />
267
267
  </div>
268
268
  </div>
269
269
  <Ariakit.ComboboxList
270
- className="dataviews-search-widget-filter-combobox-list"
270
+ className="dataviews-filters__search-widget-filter-combobox-list"
271
271
  alwaysVisible
272
272
  >
273
273
  { matches.map( ( element ) => {
@@ -275,12 +275,12 @@ function ComboboxList( { view, filter, onChangeView }: SearchWidgetProps ) {
275
275
  <Ariakit.ComboboxItem
276
276
  key={ element.value }
277
277
  value={ element.value }
278
- className="dataviews-search-widget-listitem"
278
+ className="dataviews-filters__search-widget-listitem"
279
279
  hideOnClick={ false }
280
280
  setValueOnClick={ false }
281
281
  focusOnHover
282
282
  >
283
- <span className="dataviews-search-widget-listitem-check">
283
+ <span className="dataviews-filters__search-widget-listitem-check">
284
284
  { filter.singleSelection &&
285
285
  currentValue === element.value && (
286
286
  <Icon icon={ radioCheck } />
@@ -292,11 +292,11 @@ function ComboboxList( { view, filter, onChangeView }: SearchWidgetProps ) {
292
292
  </span>
293
293
  <span>
294
294
  <Ariakit.ComboboxItemValue
295
- className="dataviews-search-widget-filter-combobox-item-value"
295
+ className="dataviews-filters__search-widget-filter-combobox-item-value"
296
296
  value={ element.label }
297
297
  />
298
298
  { !! element.description && (
299
- <span className="dataviews-search-widget-listitem-description">
299
+ <span className="dataviews-filters__search-widget-listitem-description">
300
300
  { element.description }
301
301
  </span>
302
302
  ) }
@@ -0,0 +1,282 @@
1
+ .dataviews-filters__button {
2
+ position: relative;
3
+ }
4
+
5
+ .dataviews-filters__container {
6
+ padding-top: 0;
7
+ }
8
+
9
+ .dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled="true"] {
10
+ &,
11
+ &:hover {
12
+ opacity: 0;
13
+ }
14
+
15
+ &:focus {
16
+ opacity: 1;
17
+ }
18
+ }
19
+
20
+ .dataviews-filters__summary-popover {
21
+ .components-popover__content {
22
+ width: 230px;
23
+ padding: 0;
24
+ border-radius: $grid-unit-05;
25
+ }
26
+ }
27
+
28
+ .dataviews-filters__summary-operators-container {
29
+ padding: $grid-unit-10 $grid-unit-10 0;
30
+
31
+ &:has(+ .dataviews-filters__search-widget-listbox) {
32
+ border-bottom: 1px solid $gray-200;
33
+ padding-bottom: $grid-unit-10;
34
+ }
35
+
36
+ &:empty {
37
+ display: none;
38
+ }
39
+
40
+ .dataviews-filters__summary-operators-filter-name {
41
+ color: $gray-700;
42
+ }
43
+ }
44
+
45
+ .dataviews-filters__summary-chip-container {
46
+ position: relative;
47
+ white-space: pre-wrap;
48
+
49
+ .dataviews-filters__summary-chip {
50
+ border-radius: $grid-unit-20;
51
+ border: 1px solid transparent;
52
+ cursor: pointer;
53
+ padding: $grid-unit-05 $grid-unit-15;
54
+ min-height: $grid-unit-40;
55
+ background: $gray-100;
56
+ color: $gray-800;
57
+ position: relative;
58
+ display: flex;
59
+ align-items: center;
60
+
61
+ &.has-reset {
62
+ padding-inline-end: $button-size-small + $grid-unit-05;
63
+ }
64
+
65
+ &:hover,
66
+ &:focus-visible,
67
+ &[aria-expanded="true"] {
68
+ background: $gray-200;
69
+ color: $gray-900;
70
+ }
71
+
72
+ &.has-values {
73
+ color: var(--wp-admin-theme-color);
74
+ background: rgba(var(--wp-admin-theme-color--rgb), 0.04);
75
+
76
+ &:hover,
77
+ &[aria-expanded="true"] {
78
+ background: rgba(var(--wp-admin-theme-color--rgb), 0.12);
79
+ }
80
+ }
81
+
82
+ &:focus-visible {
83
+ outline: none;
84
+ box-shadow:
85
+ 0 0 0 var(--wp-admin-border-width-focus)
86
+ var(--wp-admin-theme-color);
87
+ }
88
+
89
+ .dataviews-filters-__summary-filter-text-name {
90
+ font-weight: 500;
91
+ }
92
+ }
93
+
94
+ .dataviews-filters__summary-chip-remove {
95
+ width: $icon-size;
96
+ height: $icon-size;
97
+ border-radius: 50%;
98
+ border: 0;
99
+ padding: 0;
100
+ position: absolute;
101
+ right: $grid-unit-05;
102
+ top: 50%;
103
+ transform: translateY(-50%);
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ background: transparent;
108
+ cursor: pointer;
109
+
110
+ svg {
111
+ fill: $gray-700;
112
+ }
113
+
114
+ &:hover,
115
+ &:focus {
116
+ background: $gray-200;
117
+ svg {
118
+ fill: $gray-900;
119
+ }
120
+ }
121
+
122
+ &.has-values {
123
+ svg {
124
+ fill: var(--wp-admin-theme-color);
125
+ }
126
+ &:hover {
127
+ background: rgba(var(--wp-admin-theme-color--rgb), 0.08);
128
+ }
129
+ }
130
+
131
+ &:focus-visible {
132
+ outline: none;
133
+ box-shadow:
134
+ 0 0 0 var(--wp-admin-border-width-focus)
135
+ var(--wp-admin-theme-color);
136
+ }
137
+ }
138
+ }
139
+
140
+ .dataviews-filters__search-widget-filter-combobox-list {
141
+ max-height: $grid-unit * 23;
142
+ padding: $grid-unit-05;
143
+ overflow: auto;
144
+ border-top: 1px solid $gray-200;
145
+
146
+ .dataviews-filters__search-widget-filter-combobox-item-value {
147
+ [data-user-value] {
148
+ font-weight: 600;
149
+ }
150
+ }
151
+ }
152
+
153
+ .dataviews-filters__search-widget-listbox {
154
+ max-height: $grid-unit * 23;
155
+ padding: $grid-unit-05;
156
+ overflow: auto;
157
+ }
158
+
159
+ .dataviews-filters__search-widget-listitem {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: $grid-unit-10;
163
+ border-radius: $radius-block-ui;
164
+ box-sizing: border-box;
165
+ padding: $grid-unit-10 $grid-unit-15;
166
+ cursor: default;
167
+ margin-block-end: 2px;
168
+
169
+ &:last-child {
170
+ margin-block-end: 0;
171
+ }
172
+
173
+ &:hover,
174
+ &[data-active-item],
175
+ &:focus {
176
+ background-color: var(--wp-admin-theme-color);
177
+ color: $white;
178
+
179
+ .dataviews-filters__search-widget-listitem-check {
180
+ fill: $white;
181
+ }
182
+
183
+ .dataviews-filters__search-widget-listitem-description {
184
+ color: $white;
185
+ }
186
+ }
187
+
188
+ .dataviews-filters__search-widget-listitem-check {
189
+ width: 24px;
190
+ height: 24px;
191
+ flex-shrink: 0;
192
+ }
193
+
194
+ .dataviews-filters__search-widget-listitem-description {
195
+ display: block;
196
+ overflow: hidden;
197
+ text-overflow: ellipsis;
198
+ font-size: $helptext-font-size;
199
+ line-height: 16px;
200
+ color: $gray-700;
201
+ }
202
+ }
203
+
204
+ .dataviews-filters__search-widget-filter-combobox__wrapper {
205
+ position: relative;
206
+ padding: $grid-unit-10;
207
+
208
+ .dataviews-filters__search-widget-filter-combobox__input {
209
+ @include input-control;
210
+ display: block;
211
+ padding: 0 $grid-unit-40 0 $grid-unit-10;
212
+ background: $gray-100;
213
+ border: none;
214
+ width: 100%;
215
+ height: $grid-unit-40;
216
+
217
+ // Unset inherited values.
218
+ margin-left: 0;
219
+ margin-right: 0;
220
+
221
+ /* Fonts smaller than 16px causes mobile safari to zoom. */
222
+ font-size: $mobile-text-min-font-size;
223
+ @include break-small {
224
+ font-size: $default-font-size;
225
+ }
226
+
227
+ &:focus {
228
+ background: $white;
229
+ box-shadow:
230
+ inset 0 0 0 var(--wp-admin-border-width-focus)
231
+ var(--wp-admin-theme-color);
232
+ }
233
+
234
+ &::placeholder {
235
+ color: $gray-700;
236
+ }
237
+
238
+ &::-webkit-search-decoration,
239
+ &::-webkit-search-cancel-button,
240
+ &::-webkit-search-results-button,
241
+ &::-webkit-search-results-decoration {
242
+ -webkit-appearance: none;
243
+ }
244
+ }
245
+
246
+ .dataviews-filters__search-widget-filter-combobox__icon {
247
+ position: absolute;
248
+ right: $grid-unit-15;
249
+ top: 50%;
250
+ transform: translateY(-50%);
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: center;
254
+ width: $icon-size;
255
+ }
256
+ }
257
+
258
+ .dataviews-filters__container-visibility-toggle {
259
+ position: relative;
260
+ flex-shrink: 0;
261
+ }
262
+
263
+ .dataviews-filters-toggle__count {
264
+ position: absolute;
265
+ top: 0;
266
+ right: 0;
267
+ transform: translate(50%, -50%);
268
+ background: var(--wp-admin-theme-color, #3858e9);
269
+ height: $grid-unit-20;
270
+ min-width: $grid-unit-20;
271
+ line-height: $grid-unit-20;
272
+ padding: 0 $grid-unit-05;
273
+ text-align: center;
274
+ border-radius: $grid-unit-10;
275
+ font-size: 11px;
276
+ outline: var(--wp-admin-border-width-focus) solid $white;
277
+ color: $white;
278
+ }
279
+
280
+ .dataviews-search {
281
+ width: fit-content;
282
+ }
@@ -20,8 +20,8 @@ import { useRegistry } from '@wordpress/data';
20
20
  /**
21
21
  * Internal dependencies
22
22
  */
23
- import { unlock } from './lock-unlock';
24
- import type { Action, ActionModal as ActionModalType } from './types';
23
+ import { unlock } from '../../lock-unlock';
24
+ import type { Action, ActionModal as ActionModalType } from '../../types';
25
25
 
26
26
  const {
27
27
  DropdownMenuV2: DropdownMenu,
@@ -0,0 +1,3 @@
1
+ .dataviews-action-modal {
2
+ z-index: z-index(".dataviews-action-modal");
3
+ }