@wordpress/dataviews 16.0.0 → 17.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 (123) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/README.md +2 -2
  3. package/build/components/dataform-layouts/panel/dropdown.cjs +2 -2
  4. package/build/components/dataform-layouts/panel/dropdown.cjs.map +2 -2
  5. package/build/components/dataform-layouts/panel/modal.cjs +1 -1
  6. package/build/components/dataform-layouts/panel/modal.cjs.map +2 -2
  7. package/build/components/dataform-layouts/panel/summary-button.cjs +7 -6
  8. package/build/components/dataform-layouts/panel/summary-button.cjs.map +2 -2
  9. package/build/components/dataform-layouts/panel/utils/get-label-content.cjs.map +2 -2
  10. package/build/components/dataviews-filters/filter.cjs.map +2 -2
  11. package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
  12. package/build/components/dataviews-layouts/index.cjs +9 -0
  13. package/build/components/dataviews-layouts/index.cjs.map +3 -3
  14. package/build/components/dataviews-layouts/list/index.cjs.map +1 -1
  15. package/build/components/dataviews-layouts/picker-activity/index.cjs +304 -0
  16. package/build/components/dataviews-layouts/picker-activity/index.cjs.map +7 -0
  17. package/build/components/dataviews-layouts/table/column-primary.cjs +2 -2
  18. package/build/components/dataviews-layouts/table/column-primary.cjs.map +2 -2
  19. package/build/components/dataviews-pagination/index.cjs.map +1 -1
  20. package/build/components/dataviews-picker-footer/index.cjs +72 -33
  21. package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
  22. package/build/components/dataviews-view-config/index.cjs +1 -0
  23. package/build/components/dataviews-view-config/index.cjs.map +2 -2
  24. package/build/constants.cjs +4 -1
  25. package/build/constants.cjs.map +2 -2
  26. package/build/dataviews-picker/index.cjs +2 -1
  27. package/build/dataviews-picker/index.cjs.map +2 -2
  28. package/build/field-types/password.cjs +1 -1
  29. package/build/field-types/password.cjs.map +2 -2
  30. package/build/hooks/use-form-validity.cjs +2 -2
  31. package/build/hooks/use-form-validity.cjs.map +2 -2
  32. package/build/types/dataviews.cjs.map +1 -1
  33. package/build-module/components/dataform-layouts/panel/dropdown.mjs +2 -2
  34. package/build-module/components/dataform-layouts/panel/dropdown.mjs.map +2 -2
  35. package/build-module/components/dataform-layouts/panel/modal.mjs +1 -1
  36. package/build-module/components/dataform-layouts/panel/modal.mjs.map +2 -2
  37. package/build-module/components/dataform-layouts/panel/summary-button.mjs +7 -6
  38. package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
  39. package/build-module/components/dataform-layouts/panel/utils/get-label-content.mjs.map +2 -2
  40. package/build-module/components/dataviews-filters/filter.mjs.map +2 -2
  41. package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
  42. package/build-module/components/dataviews-layouts/index.mjs +11 -1
  43. package/build-module/components/dataviews-layouts/index.mjs.map +2 -2
  44. package/build-module/components/dataviews-layouts/list/index.mjs.map +1 -1
  45. package/build-module/components/dataviews-layouts/picker-activity/index.mjs +273 -0
  46. package/build-module/components/dataviews-layouts/picker-activity/index.mjs.map +7 -0
  47. package/build-module/components/dataviews-layouts/table/column-primary.mjs +2 -2
  48. package/build-module/components/dataviews-layouts/table/column-primary.mjs.map +2 -2
  49. package/build-module/components/dataviews-pagination/index.mjs.map +1 -1
  50. package/build-module/components/dataviews-picker-footer/index.mjs +71 -33
  51. package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
  52. package/build-module/components/dataviews-view-config/index.mjs +1 -0
  53. package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
  54. package/build-module/constants.mjs +3 -1
  55. package/build-module/constants.mjs.map +2 -2
  56. package/build-module/dataviews-picker/index.mjs +6 -2
  57. package/build-module/dataviews-picker/index.mjs.map +2 -2
  58. package/build-module/field-types/password.mjs +1 -1
  59. package/build-module/field-types/password.mjs.map +2 -2
  60. package/build-module/hooks/use-form-validity.mjs +2 -2
  61. package/build-module/hooks/use-form-validity.mjs.map +2 -2
  62. package/build-style/style-rtl.css +372 -201
  63. package/build-style/style.css +372 -201
  64. package/build-types/components/dataform-layouts/panel/summary-button.d.ts +2 -2
  65. package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
  66. package/build-types/components/dataform-layouts/panel/utils/get-label-content.d.ts.map +1 -1
  67. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
  68. package/build-types/components/dataviews-layouts/grid/composite-grid.d.ts.map +1 -1
  69. package/build-types/components/dataviews-layouts/index.d.ts +8 -0
  70. package/build-types/components/dataviews-layouts/index.d.ts.map +1 -1
  71. package/build-types/components/dataviews-layouts/picker-activity/index.d.ts +3 -0
  72. package/build-types/components/dataviews-layouts/picker-activity/index.d.ts.map +1 -0
  73. package/build-types/components/dataviews-picker-footer/index.d.ts +3 -2
  74. package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
  75. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  76. package/build-types/constants.d.ts +1 -0
  77. package/build-types/constants.d.ts.map +1 -1
  78. package/build-types/dataform/stories/index.story.d.ts +1 -0
  79. package/build-types/dataform/stories/index.story.d.ts.map +1 -1
  80. package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
  81. package/build-types/dataviews-picker/index.d.ts +3 -2
  82. package/build-types/dataviews-picker/index.d.ts.map +1 -1
  83. package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
  84. package/build-types/types/dataviews.d.ts +16 -2
  85. package/build-types/types/dataviews.d.ts.map +1 -1
  86. package/build-wp/index.js +1426 -1102
  87. package/package.json +31 -23
  88. package/src/components/dataform-controls/style.scss +1 -1
  89. package/src/components/dataform-layouts/card/style.scss +1 -1
  90. package/src/components/dataform-layouts/details/style.scss +1 -1
  91. package/src/components/dataform-layouts/panel/dropdown.tsx +1 -1
  92. package/src/components/dataform-layouts/panel/modal.tsx +1 -1
  93. package/src/components/dataform-layouts/panel/style.scss +18 -34
  94. package/src/components/dataform-layouts/panel/summary-button.tsx +17 -8
  95. package/src/components/dataform-layouts/panel/utils/get-label-content.tsx +0 -1
  96. package/src/components/dataform-layouts/regular/style.scss +4 -4
  97. package/src/components/dataviews-bulk-actions/style.scss +2 -2
  98. package/src/components/dataviews-filters/filter.tsx +0 -1
  99. package/src/components/dataviews-filters/style.scss +45 -46
  100. package/src/components/dataviews-layouts/activity/style.scss +19 -19
  101. package/src/components/dataviews-layouts/grid/composite-grid.tsx +0 -1
  102. package/src/components/dataviews-layouts/grid/style.scss +19 -13
  103. package/src/components/dataviews-layouts/index.ts +10 -0
  104. package/src/components/dataviews-layouts/list/style.scss +35 -27
  105. package/src/components/dataviews-layouts/picker-activity/index.tsx +359 -0
  106. package/src/components/dataviews-layouts/picker-activity/style.scss +227 -0
  107. package/src/components/dataviews-layouts/picker-grid/style.scss +18 -12
  108. package/src/components/dataviews-layouts/picker-table/style.scss +7 -5
  109. package/src/components/dataviews-layouts/table/style.scss +17 -17
  110. package/src/components/dataviews-picker-footer/index.tsx +94 -31
  111. package/src/components/dataviews-picker-footer/style.scss +1 -1
  112. package/src/components/dataviews-view-config/index.tsx +1 -0
  113. package/src/components/dataviews-view-config/style.scss +1 -1
  114. package/src/constants.ts +1 -0
  115. package/src/dataform/stories/content.story.tsx +1 -1
  116. package/src/dataform/stories/index.story.tsx +1 -0
  117. package/src/dataviews/stories/index.story.tsx +1 -0
  118. package/src/dataviews/style.scss +9 -9
  119. package/src/dataviews-picker/index.tsx +9 -3
  120. package/src/dataviews-picker/stories/index.story.tsx +6 -0
  121. package/src/dataviews-picker/test/dataviews-picker.tsx +5 -0
  122. package/src/style.scss +1 -0
  123. package/src/types/dataviews.ts +21 -1
@@ -0,0 +1,227 @@
1
+ .dataviews-view-picker-activity {
2
+ margin: 0;
3
+ padding: 0;
4
+ // Fill the wrapper height so the footer sits at the bottom.
5
+ flex-grow: 1;
6
+
7
+ &:focus-visible {
8
+ &[aria-activedescendant] {
9
+ outline: none;
10
+ }
11
+
12
+ .dataviews-view-picker-activity__item[data-active-item="true"] {
13
+ outline: 2px solid var(--wpds-color-stroke-focus);
14
+ outline-offset: -2px;
15
+ }
16
+ }
17
+
18
+ .dataviews-view-picker-activity__item {
19
+ cursor: var(--wpds-cursor-control);
20
+ border-radius: var(--wpds-border-radius-sm);
21
+ // Inset content to the toolbar/footer padding so the timeline aligns with the chrome.
22
+ padding-inline: var(--wpds-dimension-padding-2xl);
23
+ transition: background-color 0.1s ease;
24
+
25
+ // Selected and hovered rows share the same tint (like the table picker),
26
+ // keeping selection legible even for bullet-only items.
27
+ &.is-selected,
28
+ &:hover {
29
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
30
+ }
31
+
32
+ // Selection outline only renders in Windows High Contrast mode.
33
+ &.is-selected {
34
+ outline: 3px solid transparent;
35
+ outline-offset: -2px;
36
+ }
37
+
38
+ &.is-compact {
39
+ .dataviews-view-picker-activity__item-type {
40
+ width: var(--wpds-dimension-padding-md);
41
+
42
+ &::before {
43
+ height: var(--wpds-dimension-size-3xs);
44
+ }
45
+ }
46
+ .dataviews-view-picker-activity__item-type-icon {
47
+ width: calc(var(--wpds-dimension-size-3xs) - 1px);
48
+ height: calc(var(--wpds-dimension-size-3xs) - 1px);
49
+ }
50
+ .dataviews-view-picker-activity__item-content {
51
+ margin: var(--wpds-dimension-gap-md) 0;
52
+ }
53
+ }
54
+
55
+ &.is-balanced {
56
+ .dataviews-view-picker-activity__item-type {
57
+ width: var(--wpds-dimension-size-sm);
58
+
59
+ &::before {
60
+ height: var(--wpds-dimension-size-3xs);
61
+ }
62
+ }
63
+ .dataviews-view-picker-activity__item-type-icon {
64
+ width: calc(var(--wpds-dimension-size-sm) + 1px);
65
+ height: calc(var(--wpds-dimension-size-sm) + 1px);
66
+ }
67
+ .dataviews-view-picker-activity__item-content {
68
+ margin: var(--wpds-dimension-gap-md) 0;
69
+ padding-top: var(--wpds-dimension-padding-sm);
70
+ }
71
+ }
72
+
73
+ &.is-comfortable {
74
+ .dataviews-view-picker-activity__item-type {
75
+ width: var(--wpds-dimension-size-md);
76
+
77
+ &::before {
78
+ height: var(--wpds-dimension-size-4xs);
79
+ }
80
+ }
81
+ .dataviews-view-picker-activity__item-type-icon {
82
+ width: calc(var(--wpds-dimension-size-md) + 1px);
83
+ height: calc(var(--wpds-dimension-size-md) + 1px);
84
+ }
85
+ .dataviews-view-picker-activity__item-content {
86
+ margin: var(--wpds-dimension-gap-sm) 0 var(--wpds-dimension-gap-lg);
87
+ padding-top: var(--wpds-dimension-padding-md);
88
+ }
89
+ }
90
+
91
+ &.is-comfortable,
92
+ &.is-balanced {
93
+ .dataviews-view-picker-activity__item-bullet {
94
+ width: calc(var(--wpds-dimension-size-4xs) + 1px);
95
+ height: calc(var(--wpds-dimension-size-4xs) + 1px);
96
+ position: relative;
97
+ top: 50%;
98
+ transform: translateY(-50%);
99
+ }
100
+ }
101
+ }
102
+
103
+ .dataviews-view-picker-activity__item-content {
104
+ flex-grow: 1;
105
+
106
+ .dataviews-view-picker-activity__item-title,
107
+ .dataviews-view-picker-activity__item-description,
108
+ .dataviews-view-picker-activity__item-fields {
109
+ min-height: var(--wpds-dimension-size-2xs);
110
+ }
111
+
112
+ .dataviews-view-picker-activity__item-title {
113
+ position: relative;
114
+ display: flex;
115
+ align-items: center;
116
+ flex: 1;
117
+ overflow: hidden;
118
+ }
119
+
120
+ .dataviews-view-picker-activity__item-description {
121
+ &:empty {
122
+ display: none;
123
+ }
124
+ }
125
+
126
+ .dataviews-view-picker-activity__item-fields {
127
+ color: var(--wpds-color-foreground-content-neutral-weak);
128
+ display: flex;
129
+ gap: var(--wpds-dimension-gap-md);
130
+ row-gap: var(--wpds-dimension-gap-xs);
131
+ flex-wrap: wrap;
132
+
133
+ &:empty {
134
+ display: none;
135
+ }
136
+
137
+ .dataviews-view-picker-activity__item-field {
138
+ &:has(.dataviews-view-picker-activity__item-field-value:empty) {
139
+ display: none;
140
+ }
141
+ }
142
+
143
+ .dataviews-view-picker-activity__item-field-value {
144
+ display: flex;
145
+ align-items: center;
146
+ }
147
+ }
148
+ }
149
+
150
+ // Timeline connector line
151
+ .dataviews-view-picker-activity__item-type {
152
+ align-self: stretch;
153
+ flex-shrink: 0;
154
+
155
+ &::after {
156
+ content: "";
157
+ flex: 1 1 auto;
158
+ width: 1px;
159
+ margin: 0 auto;
160
+ background-color: var(--wpds-color-stroke-surface-neutral);
161
+ }
162
+
163
+ &::before {
164
+ content: "";
165
+ flex: 0 0 auto;
166
+ width: 1px;
167
+ margin: 0 auto;
168
+ background-color: var(--wpds-color-stroke-surface-neutral);
169
+ }
170
+ }
171
+
172
+ // First and last item timeline lines
173
+ .dataviews-view-picker-activity__item:first-child {
174
+ .dataviews-view-picker-activity__item-type {
175
+ &::before {
176
+ visibility: hidden;
177
+ }
178
+ }
179
+ }
180
+
181
+ .dataviews-view-picker-activity-group:last-of-type > .dataviews-view-picker-activity__item:last-of-type,
182
+ & > .dataviews-view-picker-activity__item:last-child {
183
+ .dataviews-view-picker-activity__item-type {
184
+ &::after {
185
+ background: linear-gradient(to bottom, var(--wpds-color-stroke-surface-neutral) 0%, color-mix(in srgb, var(--wpds-color-stroke-surface-neutral) 20%, transparent) 60%, transparent 100%);
186
+ }
187
+ }
188
+ }
189
+
190
+ .dataviews-view-picker-activity-group__header {
191
+ font-size: var(--wpds-typography-font-size-lg);
192
+ font-weight: var(--wpds-typography-font-weight-medium);
193
+ color: var(--wpds-color-foreground-content-neutral-weak);
194
+ margin: 0 0 var(--wpds-dimension-gap-sm) 0;
195
+ padding: 0;
196
+ padding-inline-start: var(--wpds-dimension-padding-2xl);
197
+ }
198
+
199
+ // Bullet/icon styling
200
+ .dataviews-view-picker-activity__item-type-icon {
201
+ overflow: hidden;
202
+ flex-shrink: 0;
203
+ // Transparent so the row tint shows through the corners around the round media.
204
+ background-color: transparent;
205
+
206
+ img,
207
+ svg,
208
+ .dataviews-view-picker-activity__item-bullet {
209
+ display: block;
210
+ width: 100%;
211
+ height: 100%;
212
+ margin: 0 auto;
213
+ object-fit: cover;
214
+ border-radius: 50%;
215
+ box-sizing: border-box;
216
+ box-shadow: inset 0 0 0 var(--wpds-border-width-xs) var(--wpds-color-stroke-surface-neutral);
217
+ }
218
+
219
+ svg {
220
+ padding: var(--wpds-dimension-padding-xs);
221
+ }
222
+
223
+ .dataviews-view-picker-activity__item-bullet {
224
+ background-color: var(--wpds-color-stroke-surface-neutral);
225
+ }
226
+ }
227
+ }
@@ -22,7 +22,7 @@
22
22
  }
23
23
 
24
24
  .dataviews-view-picker-grid__title-field {
25
- min-height: calc(var(--wpds-dimension-base) * 6); // TODO: use size token when available. Preserve layout when there is no ellipsis button
25
+ min-height: var(--wpds-dimension-size-sm); // TODO: Preserve layout when there is no ellipsis button
26
26
  overflow: hidden;
27
27
  align-content: center;
28
28
  text-align: start;
@@ -35,16 +35,16 @@
35
35
 
36
36
  &.is-selected {
37
37
  .dataviews-view-picker-grid__fields .dataviews-view-picker-grid__field .dataviews-view-picker-grid__field-value {
38
- color: var(--wpds-color-fg-content-neutral);
38
+ color: var(--wpds-color-foreground-content-neutral);
39
39
  }
40
40
  }
41
41
  &.is-selected .dataviews-view-picker-grid__media::after {
42
42
  box-shadow:
43
43
  inset 0 0 0 var(--wpds-border-width-xs) var(--wpds-color-stroke-interactive-brand),
44
- inset 0 0 0 var(--wpds-border-width-sm) var(--wpds-color-bg-surface-neutral-strong);
44
+ inset 0 0 0 var(--wpds-border-width-sm) var(--wpds-color-background-surface-neutral-strong);
45
45
  }
46
46
  .dataviews-view-picker-grid__media:focus::after {
47
- box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wpds-color-stroke-focus-brand);
47
+ box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wpds-color-stroke-focus);
48
48
  }
49
49
  }
50
50
 
@@ -56,7 +56,7 @@
56
56
  }
57
57
 
58
58
  [data-active-item="true"] {
59
- outline: 2px solid var(--wpds-color-stroke-focus-brand);
59
+ outline: 2px solid var(--wpds-color-stroke-focus);
60
60
  }
61
61
  }
62
62
 
@@ -75,7 +75,7 @@
75
75
  width: 100%;
76
76
  aspect-ratio: 1/1;
77
77
  min-height: 0;
78
- background-color: var(--wpds-color-bg-surface-neutral-strong);
78
+ background-color: var(--wpds-color-background-surface-neutral-strong);
79
79
  border-radius: var(--wpds-border-radius-md);
80
80
  position: relative;
81
81
 
@@ -108,18 +108,24 @@
108
108
  }
109
109
 
110
110
  .dataviews-view-picker-grid__field-value:not(:empty) {
111
- min-height: calc(var(--wpds-dimension-base) * 6); // TODO: use size token when available
111
+ min-height: var(--wpds-dimension-size-sm);
112
112
  line-height: var(--wpds-typography-line-height-sm);
113
- padding-top: calc(var(--wpds-dimension-base) / 2);
113
+ // Top half of the slack between the row height and the line box,
114
+ // optically centering a single line within the row.
115
+ padding-top:
116
+ calc((
117
+ var(--wpds-dimension-size-sm) -
118
+ var(--wpds-typography-line-height-sm)
119
+ ) / 2);
114
120
  }
115
121
 
116
122
  .dataviews-view-picker-grid__field {
117
- min-height: calc(var(--wpds-dimension-base) * 6); // TODO: use size token when available
123
+ min-height: var(--wpds-dimension-size-sm);
118
124
  align-items: center;
119
125
 
120
126
  .dataviews-view-picker-grid__field-name {
121
127
  width: 35%;
122
- color: var(--wpds-color-fg-content-neutral-weak);
128
+ color: var(--wpds-color-foreground-content-neutral-weak);
123
129
  overflow: hidden;
124
130
  text-overflow: ellipsis;
125
131
  white-space: nowrap;
@@ -176,7 +182,7 @@
176
182
  .dataviews-view-picker-grid-group__header {
177
183
  font-size: var(--wpds-typography-font-size-lg);
178
184
  font-weight: var(--wpds-typography-font-weight-medium);
179
- color: var(--wpds-color-fg-content-neutral);
185
+ color: var(--wpds-color-foreground-content-neutral);
180
186
  margin: 0 0 var(--wpds-dimension-gap-sm) 0;
181
- padding: 0 calc(var(--wpds-dimension-base) * 12);
187
+ padding: 0 48px;
182
188
  }
@@ -7,7 +7,9 @@
7
7
 
8
8
  // Constrain checkbox column to fixed width while other columns share remaining space.
9
9
  .dataviews-view-table__checkbox-column {
10
- width: calc(var(--wpds-dimension-base) * 12);
10
+ // TODO: Replace with a `--wpds-dimension-size-*` token if 48px is added
11
+ // to the WPDS element size scale.
12
+ width: 48px;
11
13
  }
12
14
 
13
15
  tbody:focus-visible {
@@ -18,7 +20,7 @@
18
20
  }
19
21
 
20
22
  [data-active-item="true"] {
21
- outline: 2px solid var(--wpds-color-stroke-focus-brand);
23
+ outline: 2px solid var(--wpds-color-stroke-focus);
22
24
  }
23
25
  }
24
26
 
@@ -37,15 +39,15 @@
37
39
  cursor: var(--wpds-cursor-control);
38
40
 
39
41
  &.is-selected {
40
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
42
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
41
43
  }
42
44
 
43
45
  &.is-hovered {
44
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
46
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
45
47
  }
46
48
 
47
49
  &.is-selected.is-hovered {
48
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
50
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
49
51
  }
50
52
  }
51
53
  }
@@ -7,13 +7,13 @@
7
7
  border-color: inherit;
8
8
  border-collapse: collapse;
9
9
  position: relative;
10
- color: var(--wpds-color-fg-content-neutral-weak);
10
+ color: var(--wpds-color-foreground-content-neutral-weak);
11
11
  margin-bottom: auto;
12
12
  background-color: inherit;
13
13
 
14
14
  th {
15
15
  text-align: left;
16
- color: var(--wpds-color-fg-content-neutral);
16
+ color: var(--wpds-color-foreground-content-neutral);
17
17
  font-weight: normal;
18
18
  font-size: var(--wpds-typography-font-size-md);
19
19
  }
@@ -28,7 +28,7 @@
28
28
  &.dataviews-view-table__actions-column--sticky {
29
29
  position: sticky;
30
30
  right: 0;
31
- background-color: var(--wp-dataviews-color-background, var(--wpds-color-bg-surface-neutral-strong));
31
+ background-color: var(--wp-dataviews-color-background, var(--wpds-color-background-surface-neutral-strong));
32
32
  }
33
33
 
34
34
  &.dataviews-view-table__actions-column--stuck {
@@ -40,7 +40,7 @@
40
40
  bottom: 0;
41
41
  left: 0;
42
42
  width: 1px;
43
- background-color: var(--wpds-color-bg-surface-neutral);
43
+ background-color: var(--wpds-color-background-surface-neutral);
44
44
  }
45
45
  }
46
46
 
@@ -83,8 +83,8 @@
83
83
  }
84
84
 
85
85
  &.is-selected {
86
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
87
- color: var(--wpds-color-fg-content-neutral);
86
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
87
+ color: var(--wpds-color-foreground-content-neutral);
88
88
 
89
89
  &,
90
90
  & + tr {
@@ -92,7 +92,7 @@
92
92
  }
93
93
 
94
94
  .dataviews-view-table__actions-column--sticky {
95
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
95
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
96
96
  }
97
97
  }
98
98
 
@@ -112,14 +112,14 @@
112
112
  &:focus-within,
113
113
  &:hover {
114
114
  .dataviews-view-table__actions-column--sticky {
115
- background-color: var(--wp-dataviews-color-background, var(--wpds-color-bg-surface-neutral-strong));
115
+ background-color: var(--wp-dataviews-color-background, var(--wpds-color-background-surface-neutral-strong));
116
116
  }
117
117
  }
118
118
 
119
119
  &.is-selected,
120
120
  &.is-selected:hover {
121
121
  .dataviews-view-table__actions-column--sticky {
122
- background-color: var(--wpds-color-bg-interactive-brand-weak-active);
122
+ background-color: var(--wpds-color-background-interactive-brand-weak-active);
123
123
  }
124
124
  }
125
125
  }
@@ -181,7 +181,7 @@
181
181
  vertical-align: top;
182
182
  }
183
183
  .dataviews-view-table__cell-content-wrapper {
184
- min-height: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
184
+ min-height: var(--wpds-dimension-size-md);
185
185
  display: flex;
186
186
  align-items: center;
187
187
  white-space: nowrap;
@@ -207,7 +207,7 @@
207
207
  font-weight: var(--wpds-typography-font-weight-medium);
208
208
 
209
209
  &:not(:hover) {
210
- color: var(--wpds-color-fg-interactive-neutral);
210
+ color: var(--wpds-color-foreground-interactive-neutral);
211
211
  }
212
212
 
213
213
  span {
@@ -276,17 +276,17 @@
276
276
 
277
277
  .dataviews-column-primary__media {
278
278
  max-width: 60px;
279
- min-width: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
280
- min-height: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
279
+ min-width: var(--wpds-dimension-size-md);
280
+ min-height: var(--wpds-dimension-size-md);
281
281
  overflow: hidden;
282
282
  position: relative;
283
283
  flex-shrink: 0;
284
- background-color: var(--wpds-color-bg-surface-neutral-strong);
284
+ background-color: var(--wpds-color-background-surface-neutral-strong);
285
285
  border-radius: var(--wpds-border-radius-md);
286
286
 
287
287
  img {
288
- width: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
289
- height: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
288
+ width: var(--wpds-dimension-size-md);
289
+ height: var(--wpds-dimension-size-md);
290
290
  object-fit: cover;
291
291
  }
292
292
 
@@ -314,7 +314,7 @@
314
314
  .dataviews-view-table__group-header-cell {
315
315
  font-weight: var(--wpds-typography-font-weight-medium);
316
316
  padding: var(--wpds-dimension-padding-md) var(--wpds-dimension-padding-2xl);
317
- color: var(--wpds-color-fg-content-neutral);
317
+ color: var(--wpds-color-foreground-content-neutral);
318
318
  }
319
319
  }
320
320
 
@@ -22,7 +22,10 @@ export function useIsMultiselectPicker< Item >(
22
22
  actions: Action< Item >[] | undefined
23
23
  ) {
24
24
  return useMemo( () => {
25
- return actions?.every( ( action ) => action.supportsBulk );
25
+ return (
26
+ !! actions?.length &&
27
+ actions?.every( ( action ) => action.supportsBulk )
28
+ );
26
29
  }, [ actions ] );
27
30
  }
28
31
 
@@ -145,7 +148,7 @@ function ActionButtons< Item >( {
145
148
  );
146
149
  }
147
150
 
148
- export function DataViewsPickerFooter() {
151
+ function PickerBulkSelectionInfo() {
149
152
  const {
150
153
  data,
151
154
  selection,
@@ -158,6 +161,17 @@ export function DataViewsPickerFooter() {
158
161
 
159
162
  const isMultiselect = useIsMultiselectPicker( actions );
160
163
 
164
+ const selectedItems = useMemo(
165
+ () =>
166
+ data.filter( ( item ) => selection.includes( getItemId( item ) ) ),
167
+ [ selection, getItemId, data ]
168
+ );
169
+
170
+ // The count and the selection checkbox belong with the actions, mirroring `DataViews`.
171
+ if ( ! actions.length ) {
172
+ return null;
173
+ }
174
+
161
175
  const message = getFooterMessage(
162
176
  selection.length,
163
177
  data.length,
@@ -165,12 +179,88 @@ export function DataViewsPickerFooter() {
165
179
  !! view.infiniteScrollEnabled
166
180
  );
167
181
 
182
+ return (
183
+ <Stack
184
+ direction="row"
185
+ className="dataviews-picker-footer__bulk-selection"
186
+ gap="md"
187
+ align="center"
188
+ >
189
+ { isMultiselect && (
190
+ <BulkSelectionCheckbox
191
+ selection={ selection }
192
+ selectedItems={ selectedItems }
193
+ onChangeSelection={ onChangeSelection }
194
+ data={ data }
195
+ getItemId={ getItemId }
196
+ disableSelectAll={ !! view.infiniteScrollEnabled }
197
+ />
198
+ ) }
199
+ <span className="dataviews-bulk-actions-footer__item-count">
200
+ { message }
201
+ </span>
202
+ </Stack>
203
+ );
204
+ }
205
+
206
+ function PickerActions() {
207
+ const {
208
+ data,
209
+ selection,
210
+ getItemId,
211
+ actions = EMPTY_ARRAY,
212
+ } = useContext( DataViewsContext );
213
+
168
214
  const selectedItems = useMemo(
169
215
  () =>
170
216
  data.filter( ( item ) => selection.includes( getItemId( item ) ) ),
171
217
  [ selection, getItemId, data ]
172
218
  );
173
219
 
220
+ if ( ! actions.length ) {
221
+ return null;
222
+ }
223
+
224
+ return (
225
+ <div className="dataviews-picker-footer__actions">
226
+ <ActionButtons
227
+ actions={ actions }
228
+ items={ selectedItems }
229
+ selection={ selection }
230
+ />
231
+ </div>
232
+ );
233
+ }
234
+
235
+ // The bulk-selection info and action buttons without pagination — the picker
236
+ // counterpart to `DataViews.BulkActionToolbar`, for free composition.
237
+ export function DataViewsPickerBulkActionToolbar() {
238
+ return (
239
+ <Stack direction="row" gap="md" align="center">
240
+ <PickerBulkSelectionInfo />
241
+ <PickerActions />
242
+ </Stack>
243
+ );
244
+ }
245
+
246
+ // The full picker footer: bulk-selection info, pagination, and actions — the
247
+ // picker counterpart to `DataViews.Footer`.
248
+ export function DataViewsPickerFooter() {
249
+ const {
250
+ actions = EMPTY_ARRAY,
251
+ paginationInfo,
252
+ view,
253
+ } = useContext( DataViewsContext );
254
+
255
+ const hasPagination =
256
+ ! view.infiniteScrollEnabled &&
257
+ !! paginationInfo.totalItems &&
258
+ paginationInfo.totalPages > 1;
259
+
260
+ if ( ! actions.length && ! hasPagination ) {
261
+ return null;
262
+ }
263
+
174
264
  return (
175
265
  <Stack
176
266
  direction="row"
@@ -179,36 +269,9 @@ export function DataViewsPickerFooter() {
179
269
  className="dataviews-footer"
180
270
  gap="sm"
181
271
  >
182
- <Stack
183
- direction="row"
184
- className="dataviews-picker-footer__bulk-selection"
185
- gap="md"
186
- align="center"
187
- >
188
- { isMultiselect && (
189
- <BulkSelectionCheckbox
190
- selection={ selection }
191
- selectedItems={ selectedItems }
192
- onChangeSelection={ onChangeSelection }
193
- data={ data }
194
- getItemId={ getItemId }
195
- disableSelectAll={ !! view.infiniteScrollEnabled }
196
- />
197
- ) }
198
- <span className="dataviews-bulk-actions-footer__item-count">
199
- { message }
200
- </span>
201
- </Stack>
272
+ <PickerBulkSelectionInfo />
202
273
  <DataViewsPagination />
203
- { Boolean( actions?.length ) && (
204
- <div className="dataviews-picker-footer__actions">
205
- <ActionButtons
206
- actions={ actions }
207
- items={ selectedItems }
208
- selection={ selection }
209
- />
210
- </div>
211
- ) }
274
+ <PickerActions />
212
275
  </Stack>
213
276
  );
214
277
  }
@@ -3,7 +3,7 @@
3
3
  // - align footer actions to the right.
4
4
  .dataviews-picker-footer__bulk-selection {
5
5
  align-self: flex-start;
6
- height: calc(var(--wpds-dimension-base) * 8); // TODO: use size token when available
6
+ height: var(--wpds-dimension-size-md);
7
7
  }
8
8
  .dataviews-picker-footer__actions {
9
9
  align-self: flex-end;
@@ -85,6 +85,7 @@ export function ViewTypeMenu() {
85
85
  case 'table':
86
86
  case 'pickerGrid':
87
87
  case 'pickerTable':
88
+ case 'pickerActivity':
88
89
  case 'activity':
89
90
  const viewWithoutLayout = { ...view };
90
91
  if ( 'layout' in viewWithoutLayout ) {
@@ -75,7 +75,7 @@
75
75
  right: var(--wpds-dimension-gap-xs);
76
76
  width: var(--wpds-dimension-gap-xs);
77
77
  height: var(--wpds-dimension-gap-xs);
78
- background: var(--wpds-color-bg-interactive-brand-strong);
78
+ background: var(--wpds-color-background-interactive-brand-strong);
79
79
  border-radius: 50%;
80
80
  pointer-events: none;
81
81
  }
package/src/constants.ts CHANGED
@@ -54,5 +54,6 @@ export const LAYOUT_ACTIVITY = 'activity';
54
54
  // Picker view layouts.
55
55
  export const LAYOUT_PICKER_GRID = 'pickerGrid';
56
56
  export const LAYOUT_PICKER_TABLE = 'pickerTable';
57
+ export const LAYOUT_PICKER_ACTIVITY = 'pickerActivity';
57
58
 
58
59
  export const DAYS_OF_WEEK: DayNumber[] = [ 0, 1, 2, 3, 4, 5, 6 ];
@@ -18,7 +18,7 @@ const meta: Meta< typeof DataForm > = {
18
18
  parameters: {
19
19
  controls: { disable: true },
20
20
  },
21
- tags: [ '!dev' /* Hide individual story pages from sidebar */ ],
21
+ tags: [ '!dev' /* Hide individual story pages from sidebar */, 'manifest' ],
22
22
  };
23
23
  export default meta;
24
24
 
@@ -13,6 +13,7 @@ import ValidationComponent from './validation';
13
13
  import VisibilityComponent from './visibility';
14
14
 
15
15
  const meta = {
16
+ tags: [ 'manifest' ],
16
17
  title: 'DataViews/DataForm',
17
18
  component: DataForm,
18
19
  };
@@ -21,6 +21,7 @@ import EmptyComponent from './empty';
21
21
  import './style.css';
22
22
 
23
23
  const meta = {
24
+ tags: [ 'manifest' ],
24
25
  title: 'DataViews/DataViews',
25
26
  component: DataViews,
26
27
  args: {