@wordpress/dataviews 4.4.6 → 4.6.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 (108) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -0
  3. package/build/components/dataform-combined-edit/index.js +67 -0
  4. package/build/components/dataform-combined-edit/index.js.map +1 -0
  5. package/build/components/dataviews-bulk-actions/index.js +2 -2
  6. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  7. package/build/components/dataviews-filters/filter-summary.js +8 -8
  8. package/build/components/dataviews-filters/filter-summary.js.map +1 -1
  9. package/build/components/dataviews-filters/index.js +1 -1
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/search-widget.js +1 -1
  12. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  13. package/build/components/dataviews-item-actions/index.js.map +1 -1
  14. package/build/components/dataviews-selection-checkbox/index.js +1 -1
  15. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  16. package/build/components/dataviews-view-config/index.js +54 -43
  17. package/build/components/dataviews-view-config/index.js.map +1 -1
  18. package/build/dataforms-layouts/get-visible-fields.js +21 -0
  19. package/build/dataforms-layouts/get-visible-fields.js.map +1 -0
  20. package/build/dataforms-layouts/panel/index.js +2 -6
  21. package/build/dataforms-layouts/panel/index.js.map +1 -1
  22. package/build/dataforms-layouts/regular/index.js +2 -6
  23. package/build/dataforms-layouts/regular/index.js.map +1 -1
  24. package/build/dataviews-layouts/grid/index.js.map +1 -1
  25. package/build/dataviews-layouts/list/index.js +70 -75
  26. package/build/dataviews-layouts/list/index.js.map +1 -1
  27. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  28. package/build/normalize-fields.js +21 -0
  29. package/build/normalize-fields.js.map +1 -1
  30. package/build/types.js.map +1 -1
  31. package/build/validation.js.map +1 -1
  32. package/build-module/components/dataform-combined-edit/index.js +60 -0
  33. package/build-module/components/dataform-combined-edit/index.js.map +1 -0
  34. package/build-module/components/dataviews/index.js +1 -2
  35. package/build-module/components/dataviews/index.js.map +1 -1
  36. package/build-module/components/dataviews-bulk-actions/index.js +3 -4
  37. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  38. package/build-module/components/dataviews-filters/filter-summary.js +9 -10
  39. package/build-module/components/dataviews-filters/filter-summary.js.map +1 -1
  40. package/build-module/components/dataviews-filters/index.js +2 -3
  41. package/build-module/components/dataviews-filters/index.js.map +1 -1
  42. package/build-module/components/dataviews-filters/search-widget.js +2 -3
  43. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  44. package/build-module/components/dataviews-footer/index.js +1 -2
  45. package/build-module/components/dataviews-footer/index.js.map +1 -1
  46. package/build-module/components/dataviews-item-actions/index.js +1 -3
  47. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  48. package/build-module/components/dataviews-pagination/index.js +1 -2
  49. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  50. package/build-module/components/dataviews-selection-checkbox/index.js +1 -1
  51. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  52. package/build-module/components/dataviews-view-config/index.js +56 -47
  53. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  54. package/build-module/dataform-controls/datetime.js +1 -2
  55. package/build-module/dataform-controls/datetime.js.map +1 -1
  56. package/build-module/dataforms-layouts/get-visible-fields.js +14 -0
  57. package/build-module/dataforms-layouts/get-visible-fields.js.map +1 -0
  58. package/build-module/dataforms-layouts/panel/index.js +3 -9
  59. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  60. package/build-module/dataforms-layouts/regular/index.js +2 -6
  61. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  62. package/build-module/dataviews-layouts/grid/index.js +1 -3
  63. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  64. package/build-module/dataviews-layouts/list/index.js +71 -77
  65. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  66. package/build-module/dataviews-layouts/table/column-header-menu.js +1 -2
  67. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  68. package/build-module/dataviews-layouts/table/index.js +1 -3
  69. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  70. package/build-module/normalize-fields.js +20 -0
  71. package/build-module/normalize-fields.js.map +1 -1
  72. package/build-module/types.js.map +1 -1
  73. package/build-module/validation.js.map +1 -1
  74. package/build-style/style-rtl.css +50 -37
  75. package/build-style/style.css +50 -37
  76. package/build-types/components/dataform/stories/index.story.d.ts +23 -0
  77. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  78. package/build-types/components/dataform-combined-edit/index.d.ts +7 -0
  79. package/build-types/components/dataform-combined-edit/index.d.ts.map +1 -0
  80. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  81. package/build-types/dataforms-layouts/get-visible-fields.d.ts +3 -0
  82. package/build-types/dataforms-layouts/get-visible-fields.d.ts.map +1 -0
  83. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  84. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  85. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  86. package/build-types/normalize-fields.d.ts +9 -1
  87. package/build-types/normalize-fields.d.ts.map +1 -1
  88. package/build-types/types.d.ts +27 -8
  89. package/build-types/types.d.ts.map +1 -1
  90. package/build-types/validation.d.ts +1 -1
  91. package/build-types/validation.d.ts.map +1 -1
  92. package/package.json +12 -12
  93. package/src/components/dataform/stories/index.story.tsx +65 -0
  94. package/src/components/dataform-combined-edit/index.tsx +66 -0
  95. package/src/components/dataform-combined-edit/style.scss +12 -0
  96. package/src/components/dataviews-filters/style.scss +0 -1
  97. package/src/components/dataviews-view-config/index.tsx +53 -41
  98. package/src/components/dataviews-view-config/style.scss +5 -8
  99. package/src/dataforms-layouts/get-visible-fields.ts +29 -0
  100. package/src/dataforms-layouts/panel/index.tsx +8 -7
  101. package/src/dataforms-layouts/regular/index.tsx +8 -7
  102. package/src/dataviews-layouts/list/index.tsx +81 -100
  103. package/src/dataviews-layouts/list/style.scss +32 -43
  104. package/src/normalize-fields.ts +33 -1
  105. package/src/style.scss +1 -0
  106. package/src/types.ts +29 -9
  107. package/src/validation.ts +1 -1
  108. package/tsconfig.tsbuildinfo +1 -1
@@ -7,63 +7,40 @@ ul.dataviews-view-list {
7
7
 
8
8
  li {
9
9
  margin: 0;
10
- cursor: pointer;
11
10
  border-top: 1px solid $gray-100;
12
11
 
13
12
  .dataviews-view-list__item-wrapper {
14
13
  position: relative;
15
- border-radius: $grid-unit-05;
16
-
17
- > * {
18
- width: 100%;
19
- }
14
+ padding: $grid-unit-20 $grid-unit-30;
20
15
  }
21
16
 
22
17
  .dataviews-view-list__item-actions {
23
- position: absolute;
24
- top: $grid-unit-20;
25
- right: 0;
26
-
18
+ flex: 0;
19
+ overflow: hidden;
27
20
 
28
21
  > div {
29
22
  height: $button-size-small;
30
23
  }
31
24
 
32
25
  .components-button {
26
+ position: relative;
27
+ z-index: 1;
33
28
  opacity: 0;
34
29
  }
35
30
  }
36
31
 
37
- &:has(.dataviews-view-list__fields:empty) {
38
- .dataviews-view-list__item-actions {
39
- top: 50%;
40
- transform: translateY(-50%);
41
- }
42
- }
43
-
44
- &.is-selected,
45
- &.is-hovered,
46
- &:focus-within {
32
+ &:where(.is-selected, .is-hovered, :focus-within) {
47
33
  .dataviews-view-list__item-actions {
48
- background: #f8f8f8;
49
- padding-left: $grid-unit-10;
50
- margin-right: $grid-unit-30;
51
- box-shadow: -12px 0 8px 0 #f8f8f8;
34
+ flex-basis: min-content;
35
+ overflow: unset;
36
+ margin-inline: $grid-unit-10 0;
52
37
 
53
38
  .components-button {
54
39
  opacity: 1;
55
- position: static;
56
40
  }
57
41
  }
58
42
  }
59
43
 
60
- &.is-selected {
61
- .dataviews-view-list__item-actions {
62
- background-color: rgb(247 248 255);
63
- box-shadow: -12px 0 8px 0 rgb(247 248 255);
64
- }
65
- }
66
-
67
44
  &.is-selected.is-selected {
68
45
  border-top: 1px solid rgba(var(--wp-admin-theme-color--rgb), 0.12);
69
46
 
@@ -105,27 +82,38 @@ ul.dataviews-view-list {
105
82
  }
106
83
 
107
84
  .dataviews-view-list__item {
108
- box-sizing: border-box;
109
- padding: $grid-unit-20 $grid-unit-30;
110
- width: 100%;
85
+ position: absolute;
86
+ z-index: 1;
87
+ inset: 0;
111
88
  scroll-margin: $grid-unit-10 0;
89
+ appearance: none;
90
+ border: none;
91
+ background: none;
92
+ padding: 0;
93
+ cursor: pointer;
112
94
 
113
95
  &:focus-visible {
96
+ outline: none;
97
+
114
98
  &::before {
115
99
  position: absolute;
116
100
  content: "";
117
- top: var(--wp-admin-border-width-focus);
118
- right: var(--wp-admin-border-width-focus);
119
- bottom: var(--wp-admin-border-width-focus);
120
- left: var(--wp-admin-border-width-focus);
101
+ inset: var(--wp-admin-border-width-focus);
121
102
  box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
122
103
  border-radius: $radius-small;
104
+ // Windows High Contrast mode will show this outline, but not the box-shadow.
105
+ outline: 2px solid transparent;
123
106
  }
124
107
  }
125
- .dataviews-view-list__primary-field {
126
- min-height: $grid-unit-30;
127
- line-height: $grid-unit-30;
128
- overflow: hidden;
108
+ }
109
+ .dataviews-view-list__primary-field {
110
+ flex: 1;
111
+ min-height: $grid-unit-30;
112
+ line-height: $grid-unit-30;
113
+ overflow: hidden;
114
+ // The field should be in front of the main button in case it has a link/button.
115
+ &:has(a, button) {
116
+ z-index: 1;
129
117
  }
130
118
  }
131
119
 
@@ -164,6 +152,7 @@ ul.dataviews-view-list {
164
152
 
165
153
  .dataviews-view-list__field-wrapper {
166
154
  min-height: $grid-unit-05 * 13; // Ensures title is centrally aligned when all fields are hidden
155
+ flex-grow: 1;
167
156
  }
168
157
 
169
158
  .dataviews-view-list__fields {
@@ -2,8 +2,14 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import getFieldTypeDefinition from './field-types';
5
- import type { Field, NormalizedField } from './types';
5
+ import type {
6
+ CombinedFormField,
7
+ Field,
8
+ NormalizedField,
9
+ NormalizedCombinedFormField,
10
+ } from './types';
6
11
  import { getControl } from './dataform-controls';
12
+ import DataFormCombinedEdit from './components/dataform-combined-edit';
7
13
 
8
14
  /**
9
15
  * Apply default values and normalize the fields config.
@@ -66,3 +72,29 @@ export function normalizeFields< Item >(
66
72
  };
67
73
  } );
68
74
  }
75
+
76
+ /**
77
+ * Apply default values and normalize the fields config.
78
+ *
79
+ * @param combinedFields combined field list.
80
+ * @param fields Fields config.
81
+ * @return Normalized fields config.
82
+ */
83
+ export function normalizeCombinedFields< Item >(
84
+ combinedFields: CombinedFormField< Item >[],
85
+ fields: Field< Item >[]
86
+ ): NormalizedCombinedFormField< Item >[] {
87
+ return combinedFields.map( ( combinedField ) => {
88
+ return {
89
+ ...combinedField,
90
+ Edit: DataFormCombinedEdit,
91
+ fields: normalizeFields(
92
+ combinedField.children
93
+ .map( ( fieldId ) =>
94
+ fields.find( ( { id } ) => id === fieldId )
95
+ )
96
+ .filter( ( field ): field is Field< Item > => !! field )
97
+ ),
98
+ };
99
+ } );
100
+ }
package/src/style.scss CHANGED
@@ -6,6 +6,7 @@
6
6
  @import "./components/dataviews-item-actions/style.scss";
7
7
  @import "./components/dataviews-selection-checkbox/style.scss";
8
8
  @import "./components/dataviews-view-config/style.scss";
9
+ @import "./components/dataform-combined-edit/style.scss";
9
10
 
10
11
  @import "./dataviews-layouts/grid/style.scss";
11
12
  @import "./dataviews-layouts/list/style.scss";
package/src/types.ts CHANGED
@@ -174,14 +174,6 @@ export type Fields< Item > = Field< Item >[];
174
174
 
175
175
  export type Data< Item > = Item[];
176
176
 
177
- /**
178
- * The form configuration.
179
- */
180
- export type Form = {
181
- type?: 'regular' | 'panel';
182
- fields?: string[];
183
- };
184
-
185
177
  export type DataFormControlProps< Item > = {
186
178
  data: Item;
187
179
  field: NormalizedField< Item >;
@@ -524,9 +516,37 @@ export interface SupportedLayouts {
524
516
  table?: Omit< ViewTable, 'type' >;
525
517
  }
526
518
 
519
+ export interface CombinedFormField< Item > extends CombinedField {
520
+ render?: ComponentType< { item: Item } >;
521
+ }
522
+
523
+ export interface DataFormCombinedEditProps< Item > {
524
+ field: NormalizedCombinedFormField< Item >;
525
+ data: Item;
526
+ onChange: ( value: Record< string, any > ) => void;
527
+ hideLabelFromVision?: boolean;
528
+ }
529
+
530
+ export type NormalizedCombinedFormField< Item > = CombinedFormField< Item > & {
531
+ fields: NormalizedField< Item >[];
532
+ Edit?: ComponentType< DataFormCombinedEditProps< Item > >;
533
+ };
534
+
535
+ /**
536
+ * The form configuration.
537
+ */
538
+ export type Form< Item > = {
539
+ type?: 'regular' | 'panel';
540
+ fields?: string[];
541
+ /**
542
+ * The fields to combine.
543
+ */
544
+ combinedFields?: CombinedFormField< Item >[];
545
+ };
546
+
527
547
  export interface DataFormProps< Item > {
528
548
  data: Item;
529
549
  fields: Field< Item >[];
530
- form: Form;
550
+ form: Form< Item >;
531
551
  onChange: ( value: Record< string, any > ) => void;
532
552
  }
package/src/validation.ts CHANGED
@@ -7,7 +7,7 @@ import type { Field, Form } from './types';
7
7
  export function isItemValid< Item >(
8
8
  item: Item,
9
9
  fields: Field< Item >[],
10
- form: Form
10
+ form: Form< Item >
11
11
  ): boolean {
12
12
  const _fields = normalizeFields(
13
13
  fields.filter( ( { id } ) => !! form.fields?.includes( id ) )