newspack-components 2.0.3 → 2.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 (248) hide show
  1. package/copy-styles.js +1 -1
  2. package/dist/cjs/action-card/index.js +29 -20
  3. package/dist/cjs/action-card/style.scss +52 -27
  4. package/dist/cjs/autocomplete-tokenfield/style.scss +4 -4
  5. package/dist/cjs/autocomplete-with-suggestions/index.js +3 -2
  6. package/dist/cjs/autocomplete-with-suggestions/style.scss +19 -20
  7. package/dist/cjs/button/index.js +2 -13
  8. package/dist/cjs/button/style.scss +3 -344
  9. package/dist/cjs/button-card/index.js +11 -6
  10. package/dist/cjs/button-card/style.scss +60 -30
  11. package/dist/cjs/card/index.js +3 -1
  12. package/dist/cjs/card/style.scss +29 -62
  13. package/dist/cjs/category-autocomplete/index.js +52 -13
  14. package/dist/cjs/category-autocomplete/style.scss +20 -22
  15. package/dist/cjs/color-picker/index.js +17 -35
  16. package/dist/cjs/color-picker/style.scss +20 -160
  17. package/dist/cjs/custom-select-control/style.scss +12 -42
  18. package/dist/cjs/footer/index.js +21 -7
  19. package/dist/cjs/footer/style.scss +9 -10
  20. package/dist/cjs/form-token-field/index.js +2 -2
  21. package/dist/cjs/form-token-field/style.scss +8 -103
  22. package/dist/cjs/global-notices/index.js +2 -1
  23. package/dist/cjs/grid/style.scss +14 -1
  24. package/dist/cjs/handoff/index.js +7 -7
  25. package/dist/cjs/image-upload/index.js +1 -1
  26. package/dist/cjs/image-upload/style.scss +10 -11
  27. package/dist/cjs/index.js +7 -53
  28. package/dist/cjs/modal/index.js +0 -3
  29. package/dist/cjs/modal/style.scss +19 -131
  30. package/dist/cjs/newspack-icon/index.js +4 -2
  31. package/dist/cjs/newspack-icon/style.scss +15 -0
  32. package/dist/cjs/notice/index.js +8 -9
  33. package/dist/cjs/notice/style.scss +38 -10
  34. package/dist/cjs/plugin-installer/index.js +1 -1
  35. package/dist/cjs/plugin-settings/SettingsSection.js +74 -43
  36. package/dist/cjs/plugin-settings/index.js +34 -30
  37. package/dist/cjs/plugin-settings/style.scss +7 -0
  38. package/dist/cjs/plugin-toggle/index.js +22 -1
  39. package/dist/cjs/popover/style.scss +2 -2
  40. package/dist/cjs/radio-control/style.scss +1 -2
  41. package/dist/cjs/section-header/index.js +18 -5
  42. package/dist/cjs/section-header/style.scss +22 -1
  43. package/dist/cjs/select-control/ButtonGroupControl.js +8 -8
  44. package/dist/cjs/select-control/GroupedSelectControl.js +33 -30
  45. package/dist/cjs/select-control/index.js +1 -2
  46. package/dist/cjs/select-control/style.scss +46 -87
  47. package/dist/cjs/settings/MinMaxSetting.js +4 -2
  48. package/dist/cjs/settings/SettingsCard.js +6 -1
  49. package/dist/cjs/settings/SettingsSection.js +4 -4
  50. package/dist/cjs/settings/style.scss +32 -4
  51. package/dist/cjs/style-card/index.js +10 -6
  52. package/dist/cjs/style-card/style.scss +12 -8
  53. package/dist/cjs/style.scss +44 -0
  54. package/dist/cjs/tabbed-navigation/index.js +13 -20
  55. package/dist/cjs/tabbed-navigation/style.scss +56 -34
  56. package/dist/cjs/text-control/index.js +0 -3
  57. package/dist/cjs/text-control/style.scss +0 -126
  58. package/dist/cjs/waiting/index.js +9 -25
  59. package/dist/cjs/waiting/style.scss +9 -20
  60. package/dist/cjs/web-preview/index.js +18 -30
  61. package/dist/cjs/web-preview/style.scss +33 -26
  62. package/dist/cjs/with-wizard/index.js +4 -2
  63. package/dist/cjs/with-wizard/style.scss +44 -89
  64. package/dist/cjs/with-wizard-screen/index.js +17 -21
  65. package/dist/cjs/with-wizard-screen/style.scss +74 -121
  66. package/dist/cjs/wizard/components/WizardError.js +86 -0
  67. package/dist/cjs/wizard/index.js +145 -0
  68. package/dist/cjs/wizard/store/index.js +178 -0
  69. package/dist/cjs/wizard/store/utils.js +31 -0
  70. package/dist/esm/action-card/index.js +30 -21
  71. package/dist/esm/action-card/style.scss +52 -27
  72. package/dist/esm/autocomplete-tokenfield/style.scss +4 -4
  73. package/dist/esm/autocomplete-with-suggestions/index.js +3 -2
  74. package/dist/esm/autocomplete-with-suggestions/style.scss +19 -20
  75. package/dist/esm/button/index.js +2 -12
  76. package/dist/esm/button/style.scss +3 -344
  77. package/dist/esm/button-card/index.js +10 -6
  78. package/dist/esm/button-card/style.scss +60 -30
  79. package/dist/esm/card/index.js +3 -1
  80. package/dist/esm/card/style.scss +29 -62
  81. package/dist/esm/category-autocomplete/index.js +54 -14
  82. package/dist/esm/category-autocomplete/style.scss +20 -22
  83. package/dist/esm/color-picker/index.js +15 -34
  84. package/dist/esm/color-picker/style.scss +20 -160
  85. package/dist/esm/custom-select-control/style.scss +12 -42
  86. package/dist/esm/footer/index.js +21 -7
  87. package/dist/esm/footer/style.scss +9 -10
  88. package/dist/esm/form-token-field/index.js +2 -2
  89. package/dist/esm/form-token-field/style.scss +8 -103
  90. package/dist/esm/global-notices/index.js +2 -1
  91. package/dist/esm/grid/style.scss +14 -1
  92. package/dist/esm/handoff/index.js +7 -7
  93. package/dist/esm/image-upload/index.js +1 -1
  94. package/dist/esm/image-upload/style.scss +10 -11
  95. package/dist/esm/index.js +3 -8
  96. package/dist/esm/modal/index.js +0 -3
  97. package/dist/esm/modal/style.scss +19 -131
  98. package/dist/esm/newspack-icon/index.js +4 -2
  99. package/dist/esm/newspack-icon/style.scss +15 -0
  100. package/dist/esm/notice/index.js +8 -3
  101. package/dist/esm/notice/style.scss +38 -10
  102. package/dist/esm/plugin-installer/index.js +2 -1
  103. package/dist/esm/plugin-settings/SettingsSection.js +72 -44
  104. package/dist/esm/plugin-settings/index.js +34 -30
  105. package/dist/esm/plugin-settings/style.scss +7 -0
  106. package/dist/esm/plugin-toggle/index.js +23 -1
  107. package/dist/esm/popover/style.scss +2 -2
  108. package/dist/esm/radio-control/style.scss +1 -2
  109. package/dist/esm/section-header/index.js +17 -5
  110. package/dist/esm/section-header/style.scss +22 -1
  111. package/dist/esm/select-control/ButtonGroupControl.js +8 -8
  112. package/dist/esm/select-control/GroupedSelectControl.js +33 -30
  113. package/dist/esm/select-control/index.js +1 -2
  114. package/dist/esm/select-control/style.scss +46 -87
  115. package/dist/esm/settings/MinMaxSetting.js +3 -2
  116. package/dist/esm/settings/SettingsCard.js +6 -1
  117. package/dist/esm/settings/SettingsSection.js +5 -5
  118. package/dist/esm/settings/style.scss +32 -4
  119. package/dist/esm/style-card/index.js +11 -8
  120. package/dist/esm/style-card/style.scss +12 -8
  121. package/dist/esm/style.scss +44 -0
  122. package/dist/esm/tabbed-navigation/index.js +14 -22
  123. package/dist/esm/tabbed-navigation/style.scss +56 -34
  124. package/dist/esm/text-control/index.js +0 -3
  125. package/dist/esm/text-control/style.scss +0 -126
  126. package/dist/esm/waiting/index.js +9 -22
  127. package/dist/esm/waiting/style.scss +9 -20
  128. package/dist/esm/web-preview/index.js +12 -25
  129. package/dist/esm/web-preview/style.scss +33 -26
  130. package/dist/esm/with-wizard/index.js +4 -2
  131. package/dist/esm/with-wizard/style.scss +44 -89
  132. package/dist/esm/with-wizard-screen/index.js +18 -22
  133. package/dist/esm/with-wizard-screen/style.scss +74 -121
  134. package/dist/esm/wizard/components/WizardError.js +78 -0
  135. package/dist/esm/wizard/index.js +128 -0
  136. package/dist/esm/wizard/store/index.js +161 -0
  137. package/dist/esm/wizard/store/utils.js +17 -0
  138. package/package.json +1 -1
  139. package/shared/scss/_colors.scss +15 -0
  140. package/src/action-card/index.js +28 -18
  141. package/src/action-card/style.scss +52 -27
  142. package/src/autocomplete-tokenfield/style.scss +4 -4
  143. package/src/autocomplete-with-suggestions/index.js +4 -2
  144. package/src/autocomplete-with-suggestions/style.scss +19 -20
  145. package/src/button/index.js +2 -9
  146. package/src/button/style.scss +3 -344
  147. package/src/button-card/index.js +19 -5
  148. package/src/button-card/style.scss +60 -30
  149. package/src/card/index.js +4 -0
  150. package/src/card/style.scss +29 -62
  151. package/src/category-autocomplete/index.js +51 -18
  152. package/src/category-autocomplete/style.scss +20 -22
  153. package/src/color-picker/index.js +16 -22
  154. package/src/color-picker/style.scss +20 -160
  155. package/src/custom-select-control/style.scss +12 -42
  156. package/src/footer/index.js +19 -8
  157. package/src/footer/style.scss +9 -10
  158. package/src/form-token-field/index.js +1 -1
  159. package/src/form-token-field/style.scss +8 -103
  160. package/src/global-notices/index.js +1 -1
  161. package/src/grid/style.scss +14 -1
  162. package/src/handoff/index.js +7 -7
  163. package/src/image-upload/style.scss +10 -11
  164. package/src/index.js +3 -7
  165. package/src/modal/index.js +2 -5
  166. package/src/modal/style.scss +19 -131
  167. package/src/newspack-icon/index.js +7 -2
  168. package/src/newspack-icon/style.scss +15 -0
  169. package/src/notice/index.js +7 -1
  170. package/src/notice/style.scss +38 -10
  171. package/src/plugin-installer/index.js +2 -2
  172. package/src/plugin-settings/SettingsSection.js +64 -26
  173. package/src/plugin-settings/index.js +23 -7
  174. package/src/plugin-settings/style.scss +7 -0
  175. package/src/plugin-toggle/index.js +35 -9
  176. package/src/popover/style.scss +2 -2
  177. package/src/radio-control/style.scss +1 -2
  178. package/src/section-header/index.js +25 -6
  179. package/src/section-header/style.scss +22 -1
  180. package/src/select-control/ButtonGroupControl.js +13 -6
  181. package/src/select-control/GroupedSelectControl.js +26 -24
  182. package/src/select-control/index.js +1 -2
  183. package/src/select-control/style.scss +46 -87
  184. package/src/settings/MinMaxSetting.js +2 -1
  185. package/src/settings/SettingsCard.js +9 -7
  186. package/src/settings/SettingsSection.js +4 -4
  187. package/src/settings/style.scss +32 -4
  188. package/src/style-card/index.js +14 -16
  189. package/src/style-card/style.scss +12 -8
  190. package/src/style.scss +44 -0
  191. package/src/tabbed-navigation/index.js +12 -24
  192. package/src/tabbed-navigation/style.scss +56 -34
  193. package/src/text-control/index.js +1 -2
  194. package/src/text-control/style.scss +0 -126
  195. package/src/waiting/index.js +7 -18
  196. package/src/waiting/style.scss +9 -20
  197. package/src/web-preview/index.js +12 -33
  198. package/src/web-preview/style.scss +33 -26
  199. package/src/with-wizard/index.js +7 -5
  200. package/src/with-wizard/style.scss +44 -89
  201. package/src/with-wizard-screen/index.js +14 -17
  202. package/src/with-wizard-screen/style.scss +74 -121
  203. package/src/wizard/components/WizardError.js +57 -0
  204. package/src/wizard/index.js +133 -0
  205. package/src/wizard/store/index.js +126 -0
  206. package/src/wizard/store/utils.js +16 -0
  207. package/dist/cjs/button-group/index.js +0 -57
  208. package/dist/cjs/button-group/style.scss +0 -73
  209. package/dist/cjs/checkbox-control/index.js +0 -63
  210. package/dist/cjs/checkbox-control/style.scss +0 -78
  211. package/dist/cjs/preview-box/index.js +0 -36
  212. package/dist/cjs/preview-box/style.scss +0 -18
  213. package/dist/cjs/textarea-control/index.js +0 -54
  214. package/dist/cjs/textarea-control/style.scss +0 -76
  215. package/dist/cjs/toggle-control/index.js +0 -58
  216. package/dist/cjs/toggle-control/style.scss +0 -74
  217. package/dist/cjs/toggle-group/index.js +0 -71
  218. package/dist/cjs/toggle-group/style.scss +0 -28
  219. package/dist/cjs/wizard-pagination/index.js +0 -71
  220. package/dist/cjs/wizard-pagination/style.scss +0 -74
  221. package/dist/esm/button-group/index.js +0 -43
  222. package/dist/esm/button-group/style.scss +0 -73
  223. package/dist/esm/checkbox-control/index.js +0 -49
  224. package/dist/esm/checkbox-control/style.scss +0 -78
  225. package/dist/esm/preview-box/index.js +0 -30
  226. package/dist/esm/preview-box/style.scss +0 -18
  227. package/dist/esm/textarea-control/index.js +0 -40
  228. package/dist/esm/textarea-control/style.scss +0 -76
  229. package/dist/esm/toggle-control/index.js +0 -44
  230. package/dist/esm/toggle-control/style.scss +0 -74
  231. package/dist/esm/toggle-group/index.js +0 -58
  232. package/dist/esm/toggle-group/style.scss +0 -28
  233. package/dist/esm/wizard-pagination/index.js +0 -57
  234. package/dist/esm/wizard-pagination/style.scss +0 -74
  235. package/src/button-group/index.js +0 -35
  236. package/src/button-group/style.scss +0 -73
  237. package/src/checkbox-control/index.js +0 -38
  238. package/src/checkbox-control/style.scss +0 -78
  239. package/src/preview-box/index.js +0 -18
  240. package/src/preview-box/style.scss +0 -18
  241. package/src/textarea-control/index.js +0 -32
  242. package/src/textarea-control/style.scss +0 -76
  243. package/src/toggle-control/index.js +0 -38
  244. package/src/toggle-control/style.scss +0 -74
  245. package/src/toggle-group/index.js +0 -43
  246. package/src/toggle-group/style.scss +0 -28
  247. package/src/wizard-pagination/index.js +0 -59
  248. package/src/wizard-pagination/style.scss +0 -74
@@ -27,12 +27,14 @@ class Card extends Component {
27
27
  buttonsCard,
28
28
  className,
29
29
  headerActions,
30
+ isNarrow,
30
31
  isMedium,
31
32
  isSmall,
33
+ isWhite,
32
34
  noBorder,
33
35
  ...otherProps
34
36
  } = this.props;
35
- const classes = classNames('newspack-card', className, buttonsCard && 'newspack-card__buttons-card', headerActions && 'newspack-card__header-actions', isMedium && 'newspack-card__is-medium', isSmall && 'newspack-card__is-small', noBorder && 'newspack-card__no-border');
37
+ const classes = classNames('newspack-card', className, buttonsCard && 'newspack-card__buttons-card', headerActions && 'newspack-card__header-actions', isMedium && 'newspack-card__is-medium', isNarrow && 'newspack-card__is-narrow', isSmall && 'newspack-card__is-small', isWhite && 'newspack-card__is-white', noBorder && 'newspack-card__no-border');
36
38
  return _jsx("div", {
37
39
  className: classes,
38
40
  ...otherProps
@@ -2,13 +2,12 @@
2
2
  * Card
3
3
  */
4
4
 
5
- @import '../../../shared/scss/colors';
6
5
  @import '~@wordpress/base-styles/colors';
7
6
 
8
7
  .newspack-card {
9
- border-radius: 3px;
8
+ border-radius: 2px;
10
9
  border: 1px solid $gray-300;
11
- color: $gray-700;
10
+ color: $gray-900;
12
11
  margin: 32px 0;
13
12
  padding: 16px 48px;
14
13
 
@@ -21,11 +20,8 @@
21
20
  &__buttons-card {
22
21
  display: flex;
23
22
  flex-wrap: wrap;
24
- margin: 32px -8px 16px;
25
-
26
- .newspack-button {
27
- margin: 0 8px 16px;
28
- }
23
+ gap: 16px;
24
+ margin: 32px 0;
29
25
  }
30
26
 
31
27
  // Header Actions Card
@@ -43,6 +39,17 @@
43
39
  }
44
40
  }
45
41
 
42
+ // Is Narrow
43
+
44
+ &__is-narrow {
45
+ margin-left: auto;
46
+ margin-right: auto;
47
+
48
+ @media screen and ( min-width: 608px ) {
49
+ max-width: 576px;
50
+ }
51
+ }
52
+
46
53
  // Is Small
47
54
 
48
55
  &__is-small {
@@ -79,6 +86,13 @@
79
86
  }
80
87
  }
81
88
 
89
+ // Is White
90
+
91
+ &__is-white {
92
+ background: white;
93
+ border: 0;
94
+ }
95
+
82
96
  // No Border
83
97
 
84
98
  &__no-border {
@@ -89,49 +103,15 @@
89
103
 
90
104
  // Typography
91
105
 
92
- h2,
93
- h3,
94
- p {
95
- line-height: 24px;
96
- margin: 32px 0;
97
- padding: 0;
98
- }
99
-
100
- h2 {
101
- color: $gray-900;
102
- font-size: 17px;
103
- font-weight: bold;
104
- }
105
-
106
- h3 {
107
- color: $gray-900;
108
- font-size: 14px;
109
- font-weight: bold;
110
- }
111
-
112
- p {
113
- font-size: 14px;
114
-
115
- &.is-dark {
116
- color: $gray-900;
117
- }
118
- }
119
-
120
- strong {
121
- font-weight: bold;
122
- }
123
-
124
106
  small {
125
107
  font-size: 12px;
126
- line-height: 16px;
108
+ line-height: 1.4;
127
109
  }
128
110
 
129
111
  code {
130
112
  background: $gray-100;
131
- color: $gray-700;
132
- font-size: 12px;
133
- line-height: 16px;
134
- padding: 4px 8px;
113
+ color: $gray-900;
114
+ padding: 0 0.5em;
135
115
  }
136
116
 
137
117
  // Thematic Break
@@ -158,27 +138,14 @@
158
138
 
159
139
  &__inline {
160
140
  display: inline-block;
161
- line-height: 24px;
141
+ line-height: 1.5;
162
142
  vertical-align: middle;
163
143
  }
164
144
  }
165
145
 
166
- // Links
146
+ // Error
167
147
 
168
- a {
169
- color: $primary-500;
170
-
171
- &:active,
172
- &:focus,
173
- &:hover {
174
- color: $primary-600;
175
- text-decoration: none;
176
- }
177
-
178
- &:focus {
179
- box-shadow: none;
180
- outline: 2px solid $primary-500;
181
- outline-offset: 2px;
182
- }
148
+ .newspack-error {
149
+ color: $alert-red;
183
150
  }
184
151
  }
@@ -8,6 +8,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
8
  * WordPress dependencies.
9
9
  */
10
10
  import apiFetch from '@wordpress/api-fetch';
11
+ import { Spinner } from '@wordpress/components';
11
12
  import { Component } from '@wordpress/element';
12
13
  import { addQueryArgs } from '@wordpress/url';
13
14
  /**
@@ -20,13 +21,14 @@ import './style.scss';
20
21
  * External dependencies
21
22
  */
22
23
 
23
- import { debounce, find } from 'lodash';
24
+ import { debounce, find, filter } from 'lodash';
24
25
  import classnames from 'classnames';
25
26
  /**
26
27
  * Category autocomplete field component.
27
28
  */
28
29
 
29
30
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
31
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
30
32
 
31
33
  class CategoryAutocomplete extends Component {
32
34
  /**
@@ -37,7 +39,8 @@ class CategoryAutocomplete extends Component {
37
39
 
38
40
  _defineProperty(this, "state", {
39
41
  suggestions: {},
40
- allCategories: {}
42
+ allCategories: {},
43
+ isLoading: false
41
44
  });
42
45
 
43
46
  _defineProperty(this, "handleOnChange", tokens => {
@@ -49,14 +52,41 @@ class CategoryAutocomplete extends Component {
49
52
  } = this.state; // Categories that are already will be objects, while new additions will be strings (the name).
50
53
  // allValues nomalizes the array so that they are all objects.
51
54
 
52
- const allValues = tokens.map(token => typeof token === 'string' ? suggestions[token] : token);
55
+ const allValues = tokens.filter(token => 'undefined' !== typeof token) // Ensure each token is a valid value.
56
+ .map(token => 'string' === typeof token ? suggestions[token] : token).filter(Boolean);
53
57
  onChange(allValues);
54
58
  });
55
59
 
60
+ _defineProperty(this, "getAvailableSuggestions", () => {
61
+ const {
62
+ value
63
+ } = this.props;
64
+ const {
65
+ suggestions
66
+ } = this.state;
67
+ const selectedIds = value.reduce((acc, item) => {
68
+ if (item?.id) {
69
+ acc.push(item.id);
70
+ }
71
+
72
+ return acc;
73
+ }, []);
74
+ const availableSuggestions = filter(suggestions, _ref => {
75
+ let {
76
+ id
77
+ } = _ref;
78
+ return selectedIds.indexOf(id) === -1;
79
+ });
80
+ return availableSuggestions.map(v => v.name);
81
+ });
82
+
56
83
  this.debouncedUpdateSuggestions = debounce(this.updateSuggestions, 100);
57
84
  }
58
85
 
59
86
  componentDidMount() {
87
+ this.setState({
88
+ isLoading: true
89
+ });
60
90
  apiFetch({
61
91
  path: addQueryArgs(`/wp/v2/${this.props.taxonomy}`, {
62
92
  per_page: -1,
@@ -64,6 +94,8 @@ class CategoryAutocomplete extends Component {
64
94
  })
65
95
  }).then(categories => this.setState({
66
96
  allCategories: categories
97
+ })).finally(() => this.setState({
98
+ isLoading: false
67
99
  }));
68
100
  }
69
101
  /**
@@ -82,6 +114,9 @@ class CategoryAutocomplete extends Component {
82
114
 
83
115
 
84
116
  updateSuggestions(search) {
117
+ this.setState({
118
+ isLoading: true
119
+ });
85
120
  apiFetch({
86
121
  path: addQueryArgs(`/wp/v2/${this.props.taxonomy}`, {
87
122
  search,
@@ -96,7 +131,9 @@ class CategoryAutocomplete extends Component {
96
131
  [category.name]: category
97
132
  }), {})
98
133
  });
99
- });
134
+ }).finally(() => this.setState({
135
+ isLoading: false
136
+ }));
100
137
  }
101
138
  /**
102
139
  * Prepare categories data for the API endpoint, call the change handler.
@@ -119,34 +156,37 @@ class CategoryAutocomplete extends Component {
119
156
  value
120
157
  } = this.props;
121
158
  const {
122
- suggestions,
123
- allCategories
159
+ allCategories,
160
+ isLoading
124
161
  } = this.state;
125
162
  const classes = classnames('newspack-category-autocomplete', className);
126
- return _jsx("div", {
163
+ return _jsxs("div", {
127
164
  className: classes,
128
- children: _jsx(FormTokenField, {
165
+ children: [_jsx(FormTokenField, {
129
166
  onInputChange: input => this.debouncedUpdateSuggestions(input),
130
167
  value: value.reduce((acc, item) => {
131
- const category = typeof item === 'number' ? find(allCategories, ['id', item]) : item;
168
+ const categoryOrItem = typeof item === 'number' ? find(allCategories, ['id', item]) : item;
132
169
 
133
- if (category) {
170
+ if (categoryOrItem) {
134
171
  acc.push({
135
- id: category.term_id || category.id,
136
- value: category.name
172
+ id: categoryOrItem.term_id || categoryOrItem.id,
173
+ value: categoryOrItem.value || categoryOrItem.name
137
174
  });
138
175
  }
139
176
 
140
177
  return acc;
141
178
  }, []),
142
- suggestions: Object.keys(suggestions),
179
+ suggestions: this.getAvailableSuggestions(),
143
180
  onChange: this.handleOnChange,
144
181
  label: label,
145
182
  disabled: disabled,
146
183
  description: description,
147
184
  hideHelpFromVision: hideHelpFromVision,
148
185
  hideLabelFromVision: hideLabelFromVision
149
- })
186
+ }), isLoading ? _jsx("span", {
187
+ className: "newspack-category-autocomplete__suggestions-spinner",
188
+ children: _jsx(Spinner, {})
189
+ }) : null]
150
190
  });
151
191
  }
152
192
 
@@ -5,34 +5,32 @@
5
5
  @import '../../../shared/scss/colors';
6
6
 
7
7
  .newspack-category-autocomplete {
8
+ position: relative;
9
+
8
10
  .components-form-token-field__help {
9
11
  display: none;
10
12
  }
11
13
 
12
- .components-button:focus:not( :disabled ) {
13
- box-shadow: inset 0 0 0 2px $primary-500;
14
- }
15
-
16
- // Multiple Select Controls
17
-
18
- & + & {
19
- margin-bottom: 32px;
20
- margin-top: -16px;
21
- }
22
-
23
- // Multiple Controls
24
-
25
- + .newspack-select-control,
26
- + .newspack-text-control,
27
- + .newspack-textarea-control,
28
- + .newspack-toggle-control {
29
- margin-bottom: 32px;
30
- margin-top: -16px;
31
- }
32
-
33
14
  // Within a Grid
34
15
 
35
- .newspack-grid & .newspack-form-token-field {
16
+ .newspack-grid & .newspack-form-token-field__input-container {
36
17
  margin: 0;
37
18
  }
19
+
20
+ // Loading state spinner
21
+ &__suggestions-spinner {
22
+ position: absolute;
23
+ right: 1px;
24
+ top: calc( 1.4em + 8px );
25
+ z-index: 2;
26
+
27
+ [class*='--label-hidden'] + & {
28
+ top: 0;
29
+ }
30
+
31
+ .components-spinner {
32
+ display: block;
33
+ margin: 7px;
34
+ }
35
+ }
38
36
  }
@@ -3,12 +3,13 @@
3
3
  */
4
4
  import { ColorPicker as ColorPickerComponent } from '@wordpress/components';
5
5
  import { useState, useRef } from '@wordpress/element';
6
- import { Icon, chevronDown } from '@wordpress/icons';
7
6
  /**
8
7
  * External dependencies.
9
8
  */
10
9
 
11
10
  import classnames from 'classnames';
11
+ import { colord, extend } from 'colord';
12
+ import a11yPlugin from 'colord/plugins/a11y';
12
13
  /**
13
14
  * Internal dependencies.
14
15
  */
@@ -18,6 +19,7 @@ import utils from '../utils';
18
19
  import './style.scss';
19
20
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
20
21
  import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
22
+ extend([a11yPlugin]);
21
23
  const {
22
24
  InteractiveDiv
23
25
  } = utils;
@@ -31,50 +33,29 @@ const ColorPicker = _ref => {
31
33
  } = _ref;
32
34
  const [isExpanded, setIsExpanded] = useState(false);
33
35
  const ref = useRef();
36
+ const colordColor = colord(color);
34
37
  hooks.useOnClickOutside(ref, () => setIsExpanded(false));
35
38
  return _jsxs("div", {
36
39
  className: classnames('newspack-color-picker', className),
37
40
  children: [_jsx("div", {
38
41
  className: "newspack-color-picker__label",
39
42
  children: label
40
- }), _jsxs("div", {
43
+ }), _jsx(InteractiveDiv, {
44
+ className: 'newspack-color-picker__expander',
45
+ onClick: () => setIsExpanded(!isExpanded),
46
+ style: {
47
+ backgroundColor: color,
48
+ color: colordColor.contrast() > colordColor.contrast('#000') ? '#fff' : '#000'
49
+ },
50
+ children: color
51
+ }), _jsx("div", {
41
52
  className: "newspack-color-picker__main",
42
53
  ref: ref,
43
- children: [_jsxs(InteractiveDiv, {
44
- className: classnames('newspack-color-picker__expander', {
45
- 'newspack-color-picker__expander--expanded': isExpanded
46
- }),
47
- onClick: () => setIsExpanded(!isExpanded),
48
- children: [_jsxs("div", {
49
- children: [_jsx("div", {
50
- className: "newspack-color-picker__indicator",
51
- style: {
52
- backgroundColor: color
53
- }
54
- }), _jsx("div", {
55
- children: color
56
- })]
57
- }), _jsx(Icon, {
58
- icon: chevronDown,
59
- size: 18,
60
- style: isExpanded ? {
61
- transform: 'rotate(180deg)'
62
- } : {}
63
- })]
64
- }), isExpanded && _jsx(ColorPickerComponent, {
54
+ children: isExpanded && _jsx(ColorPickerComponent, {
65
55
  color: color,
66
- onChangeComplete: _ref2 => {
67
- let {
68
- hex
69
- } = _ref2;
70
- return onChange(hex);
71
- } // Prop will be deprecated in favor of onChange, which expects a string hex value.
72
- ,
73
- disableAlpha: true // Prop will be deprecated in favor of enableAlpha, which behaves in the opposite manner.
74
- ,
75
56
  onChange: hex => onChange(hex),
76
57
  enableAlpha: false
77
- })]
58
+ })
78
59
  })]
79
60
  });
80
61
  };
@@ -7,174 +7,34 @@
7
7
 
8
8
  .newspack-color-picker {
9
9
  position: relative;
10
- margin: 32px 0;
11
10
 
12
- &__main {
13
- height: 48px;
14
- }
15
- &__expander {
16
- padding: 11px 3px;
17
- justify-content: space-between;
18
- &,
19
- > div {
20
- display: flex;
21
- align-items: center;
22
- }
23
- > div {
24
- margin: 0 4px;
25
- }
26
- div + div {
27
- margin-left: 8px;
28
- }
29
- &:focus {
30
- border-color: $primary-500;
31
- box-shadow: inset 0 0 0 2px $primary-500;
32
- }
33
- &--expanded:focus {
34
- border-bottom-color: white;
35
- box-shadow: inset 2px 2px 0 0 $primary-500, inset -2px 2px 0 0 $primary-500;
36
-
37
- + .components-color-picker {
38
- position: relative;
39
- border-bottom-color: $primary-500;
40
- border-left-color: $primary-500;
41
- border-right-color: $primary-500;
42
- box-shadow: inset 2px -2px 0 0 $primary-500, inset -2px -2px 0 0 $primary-500;
43
-
44
- &::before,
45
- &::after {
46
- background: $primary-500;
47
- display: block;
48
- content: '';
49
- height: 1px;
50
- left: -1px;
51
- position: absolute;
52
- top: -1px;
53
- width: 3px;
54
- }
55
-
56
- &::after {
57
- left: auto;
58
- right: -1px;
59
- }
60
- }
61
- }
62
- }
63
- &__indicator {
64
- border: 1px solid rgba( black, 0.125 );
65
- border-radius: 50%;
66
- height: 24px;
67
- overflow: hidden;
68
- width: 24px;
69
- }
70
11
  &__label {
71
- align-items: center;
72
- color: $gray-900;
73
- display: flex;
74
- font-weight: bold;
75
- }
76
-
77
- &__expander,
78
- .components-color-picker {
79
- background-color: white;
80
- border: 1px solid $gray-300;
81
- border-radius: 3px;
82
- &--expanded {
83
- border-bottom-color: white;
84
- border-bottom-left-radius: 0;
85
- border-bottom-right-radius: 0;
86
- }
87
- }
88
- .components-color-picker {
89
- padding: 8px;
90
- position: relative;
91
- z-index: 1;
92
- padding-top: 0;
93
- border-top: none;
94
- border-top-left-radius: 0;
95
- border-top-right-radius: 0;
12
+ margin-bottom: 8px;
96
13
  }
97
14
 
98
- // Overrides of @wordpress/components component
99
-
100
- // Inputs
101
-
102
- .components-color-picker__body {
103
- padding: 16px 0 0;
104
- }
105
-
106
- .components-color-picker__inputs-wrapper {
107
- margin: 0;
108
- }
109
-
110
- .components-color-picker__inputs-fields {
111
- margin-right: 8px;
112
- }
113
-
114
- .components-color-picker__inputs-field {
115
- color: $gray-700;
116
- font-size: 14px;
117
- line-height: 24px;
118
- margin: 0;
119
-
120
- + .components-color-picker__inputs-field {
121
- margin-left: 8px;
122
- }
123
-
124
- label {
125
- color: $gray-900;
126
- font-size: inherit;
127
- font-weight: bold;
128
- line-height: inherit;
129
- margin: 0;
130
- }
131
-
132
- input[type='number'],
133
- input[type='text'] {
134
- background: white;
135
- border: 1px solid $gray-300;
136
- border-radius: 3px;
137
- box-shadow: none;
138
- color: inherit;
139
- font-size: 16px;
140
- line-height: inherit;
141
- margin: 0;
142
- min-height: 48px;
143
- padding: 11px 8px;
144
- transition: border-color 125ms ease-in-out, box-shadow 125ms ease-in-out;
145
- width: 100%;
146
-
147
- @media screen and ( min-width: 768px ) {
148
- font-size: inherit;
149
- }
150
-
151
- &:focus {
152
- border-color: $primary-500;
153
- box-shadow: 0 0 0 2px $primary-500;
154
- }
155
- }
156
-
157
- // Reset
15
+ &__expander {
16
+ box-shadow: inset 0 0 0 1px rgb( 0 0 0 / 20% );
17
+ border-radius: 2px;
18
+ height: 64px;
19
+ padding: 12px;
20
+ text-align: right;
21
+ text-transform: uppercase;
158
22
 
159
- .components-base-control__field,
160
- .components-base-control__label {
161
- display: block;
162
- margin: 0;
23
+ &:focus-visible {
24
+ box-shadow: 0 0 0 var( --wp-admin-border-width-focus ) var( --wp-admin-theme-color );
25
+ border-color: white;
163
26
  }
164
27
  }
165
28
 
166
- .components-color-picker__inputs-toggle {
167
- height: 36px;
168
- margin-bottom: 6px;
169
-
170
- &:active,
171
- &:focus:not( :disabled ),
172
- &:hover {
173
- color: $primary-500;
174
- }
175
-
176
- &:focus:not( :disabled ) {
177
- box-shadow: 0 0 0 3px $primary-500;
29
+ &__main {
30
+ background: white;
31
+ box-shadow: 0 0 8px 4px rgba( black, 0.08 );
32
+ margin: 12px 0;
33
+ position: absolute;
34
+ z-index: 2;
35
+
36
+ &:empty {
37
+ display: none;
178
38
  }
179
39
  }
180
40
  }