newspack-components 2.0.3 → 2.2.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 (315) hide show
  1. package/copy-styles.js +1 -1
  2. package/dist/cjs/accordion/index.js +46 -0
  3. package/dist/cjs/accordion/style.scss +27 -0
  4. package/dist/cjs/action-card/index.js +72 -40
  5. package/dist/cjs/action-card/style.scss +143 -41
  6. package/dist/cjs/autocomplete-tokenfield/index.js +13 -41
  7. package/dist/cjs/autocomplete-tokenfield/style.scss +6 -6
  8. package/dist/cjs/autocomplete-with-suggestions/index.js +33 -53
  9. package/dist/cjs/autocomplete-with-suggestions/style.scss +27 -27
  10. package/dist/cjs/button/index.js +1 -20
  11. package/dist/cjs/button/style.scss +3 -344
  12. package/dist/cjs/button-card/index.js +11 -15
  13. package/dist/cjs/button-card/style.scss +65 -35
  14. package/dist/cjs/card/index.js +4 -9
  15. package/dist/cjs/card/style.scss +47 -63
  16. package/dist/cjs/category-autocomplete/index.js +66 -47
  17. package/dist/cjs/category-autocomplete/style.scss +20 -24
  18. package/dist/cjs/color-picker/index.js +16 -48
  19. package/dist/cjs/color-picker/style.scss +20 -163
  20. package/dist/cjs/consts.js +5 -3
  21. package/dist/cjs/custom-select-control/index.js +1 -9
  22. package/dist/cjs/custom-select-control/style.scss +14 -45
  23. package/dist/cjs/date-range-picker/index.js +1 -10
  24. package/dist/cjs/date-range-picker/style.scss +12 -12
  25. package/dist/cjs/footer/index.js +24 -22
  26. package/dist/cjs/footer/style.scss +13 -14
  27. package/dist/cjs/form-token-field/index.js +3 -11
  28. package/dist/cjs/form-token-field/style.scss +9 -105
  29. package/dist/cjs/global-notices/index.js +3 -9
  30. package/dist/cjs/grid/index.js +1 -8
  31. package/dist/cjs/grid/style.scss +19 -6
  32. package/dist/cjs/handoff/index.js +15 -24
  33. package/dist/cjs/handoff-message/index.js +50 -0
  34. package/dist/cjs/hooks/index.js +1 -7
  35. package/dist/cjs/hooks/useObjectState.js +7 -13
  36. package/dist/cjs/hooks/useObjectState.test.js +0 -14
  37. package/dist/cjs/hooks/useOnClickOutside.js +3 -6
  38. package/dist/cjs/hooks/usePrompt.js +1 -13
  39. package/dist/cjs/image-upload/index.js +22 -20
  40. package/dist/cjs/image-upload/index.test.js +0 -5
  41. package/dist/cjs/image-upload/style.scss +12 -17
  42. package/dist/cjs/index.js +31 -93
  43. package/dist/cjs/info-button/index.js +3 -11
  44. package/dist/cjs/info-button/style.scss +1 -3
  45. package/dist/cjs/modal/index.js +1 -12
  46. package/dist/cjs/modal/style.scss +20 -132
  47. package/dist/cjs/newspack-icon/index.js +5 -11
  48. package/dist/cjs/newspack-icon/style.scss +17 -2
  49. package/dist/cjs/newspack-logo/index.js +1 -9
  50. package/dist/cjs/newspack-logo/style.scss +3 -3
  51. package/dist/cjs/notice/index.js +8 -16
  52. package/dist/cjs/notice/style.scss +60 -19
  53. package/dist/cjs/patrons-logo/index.js +3 -11
  54. package/dist/cjs/plugin-installer/index.js +37 -37
  55. package/dist/cjs/plugin-installer/style.scss +5 -5
  56. package/dist/cjs/plugin-settings/SettingsSection.js +71 -59
  57. package/dist/cjs/plugin-settings/index.js +71 -50
  58. package/dist/cjs/plugin-settings/style.scss +7 -0
  59. package/dist/cjs/plugin-toggle/index.js +60 -32
  60. package/dist/cjs/plugin-toggle/style.scss +2 -2
  61. package/dist/cjs/popover/index.js +1 -11
  62. package/dist/cjs/popover/style.scss +20 -17
  63. package/dist/cjs/position-control/index.js +113 -0
  64. package/dist/cjs/position-control/style.scss +66 -0
  65. package/dist/cjs/progress-bar/index.js +2 -9
  66. package/dist/cjs/progress-bar/index.test.js +2 -7
  67. package/dist/cjs/progress-bar/style.scss +4 -4
  68. package/dist/cjs/proxied-imports/router.js +0 -3
  69. package/dist/cjs/radio-control/index.js +1 -11
  70. package/dist/cjs/radio-control/style.scss +10 -11
  71. package/dist/cjs/section-header/index.js +47 -19
  72. package/dist/cjs/section-header/style.scss +22 -1
  73. package/dist/cjs/select-control/ButtonGroupControl.js +11 -20
  74. package/dist/cjs/select-control/GroupedSelectControl.js +42 -45
  75. package/dist/cjs/select-control/index.js +6 -14
  76. package/dist/cjs/select-control/style.scss +47 -88
  77. package/dist/cjs/settings/MinMaxSetting.js +6 -8
  78. package/dist/cjs/settings/SettingsCard.js +9 -8
  79. package/dist/cjs/settings/SettingsSection.js +5 -8
  80. package/dist/cjs/settings/index.js +0 -6
  81. package/dist/cjs/settings/style.scss +32 -4
  82. package/dist/cjs/steps-list/index.js +52 -0
  83. package/dist/cjs/steps-list/style.scss +11 -0
  84. package/dist/cjs/steps-list-item/index.js +56 -0
  85. package/dist/cjs/steps-list-item/style.scss +47 -0
  86. package/dist/cjs/style-card/index.js +15 -18
  87. package/dist/cjs/style-card/style.scss +19 -18
  88. package/dist/cjs/style.scss +43 -0
  89. package/dist/cjs/tabbed-navigation/index.js +27 -31
  90. package/dist/cjs/tabbed-navigation/style.scss +58 -37
  91. package/dist/cjs/text-control/index.js +6 -19
  92. package/dist/cjs/text-control/style.scss +0 -126
  93. package/dist/cjs/utils/index.js +10 -5
  94. package/dist/cjs/waiting/index.js +9 -33
  95. package/dist/cjs/waiting/style.scss +9 -20
  96. package/dist/cjs/web-preview/index.js +30 -57
  97. package/dist/cjs/web-preview/style.scss +41 -34
  98. package/dist/cjs/with-wizard/index.js +55 -33
  99. package/dist/cjs/with-wizard/style.scss +77 -124
  100. package/dist/cjs/with-wizard-screen/index.js +28 -38
  101. package/dist/cjs/with-wizard-screen/style.scss +75 -125
  102. package/dist/cjs/wizard/components/WizardError.js +74 -0
  103. package/dist/cjs/wizard/index.js +131 -0
  104. package/dist/cjs/wizard/store/index.js +165 -0
  105. package/dist/cjs/wizard/store/utils.js +26 -0
  106. package/dist/cjs/wizard/style.scss +148 -0
  107. package/dist/esm/accordion/index.js +38 -0
  108. package/dist/esm/accordion/style.scss +27 -0
  109. package/dist/esm/action-card/index.js +75 -37
  110. package/dist/esm/action-card/style.scss +143 -41
  111. package/dist/esm/autocomplete-tokenfield/index.js +14 -37
  112. package/dist/esm/autocomplete-tokenfield/style.scss +6 -6
  113. package/dist/esm/autocomplete-with-suggestions/index.js +31 -43
  114. package/dist/esm/autocomplete-with-suggestions/style.scss +27 -27
  115. package/dist/esm/button/index.js +2 -14
  116. package/dist/esm/button/style.scss +3 -344
  117. package/dist/esm/button-card/index.js +12 -11
  118. package/dist/esm/button-card/style.scss +65 -35
  119. package/dist/esm/card/index.js +5 -6
  120. package/dist/esm/card/style.scss +47 -63
  121. package/dist/esm/category-autocomplete/index.js +68 -41
  122. package/dist/esm/category-autocomplete/style.scss +20 -24
  123. package/dist/esm/color-picker/index.js +17 -38
  124. package/dist/esm/color-picker/style.scss +20 -163
  125. package/dist/esm/consts.js +3 -2
  126. package/dist/esm/custom-select-control/index.js +2 -5
  127. package/dist/esm/custom-select-control/style.scss +14 -45
  128. package/dist/esm/date-range-picker/index.js +1 -3
  129. package/dist/esm/date-range-picker/style.scss +12 -12
  130. package/dist/esm/footer/index.js +22 -16
  131. package/dist/esm/footer/style.scss +13 -14
  132. package/dist/esm/form-token-field/index.js +4 -7
  133. package/dist/esm/form-token-field/style.scss +9 -105
  134. package/dist/esm/global-notices/index.js +3 -7
  135. package/dist/esm/grid/index.js +2 -5
  136. package/dist/esm/grid/style.scss +19 -6
  137. package/dist/esm/handoff/index.js +10 -21
  138. package/dist/esm/handoff-message/index.js +45 -0
  139. package/dist/esm/hooks/index.js +0 -2
  140. package/dist/esm/hooks/useObjectState.js +3 -8
  141. package/dist/esm/hooks/useObjectState.test.js +0 -3
  142. package/dist/esm/hooks/useOnClickOutside.js +2 -5
  143. package/dist/esm/hooks/usePrompt.js +1 -8
  144. package/dist/esm/image-upload/index.js +18 -17
  145. package/dist/esm/image-upload/style.scss +12 -17
  146. package/dist/esm/index.js +7 -8
  147. package/dist/esm/info-button/index.js +4 -6
  148. package/dist/esm/info-button/style.scss +1 -3
  149. package/dist/esm/modal/index.js +2 -8
  150. package/dist/esm/modal/style.scss +20 -132
  151. package/dist/esm/newspack-icon/index.js +6 -7
  152. package/dist/esm/newspack-icon/style.scss +17 -2
  153. package/dist/esm/newspack-logo/index.js +2 -5
  154. package/dist/esm/newspack-logo/style.scss +3 -3
  155. package/dist/esm/notice/index.js +11 -10
  156. package/dist/esm/notice/style.scss +60 -19
  157. package/dist/esm/patrons-logo/index.js +3 -5
  158. package/dist/esm/plugin-installer/index.js +37 -40
  159. package/dist/esm/plugin-installer/style.scss +5 -5
  160. package/dist/esm/plugin-settings/SettingsSection.js +71 -56
  161. package/dist/esm/plugin-settings/index.js +70 -52
  162. package/dist/esm/plugin-settings/style.scss +7 -0
  163. package/dist/esm/plugin-toggle/index.js +59 -34
  164. package/dist/esm/plugin-toggle/style.scss +2 -2
  165. package/dist/esm/popover/index.js +3 -6
  166. package/dist/esm/popover/style.scss +20 -17
  167. package/dist/esm/position-control/index.js +109 -0
  168. package/dist/esm/position-control/style.scss +66 -0
  169. package/dist/esm/progress-bar/index.js +2 -7
  170. package/dist/esm/progress-bar/index.test.js +2 -1
  171. package/dist/esm/progress-bar/style.scss +4 -4
  172. package/dist/esm/proxied-imports/router.js +1 -0
  173. package/dist/esm/radio-control/index.js +3 -6
  174. package/dist/esm/radio-control/style.scss +10 -11
  175. package/dist/esm/section-header/index.js +47 -16
  176. package/dist/esm/section-header/style.scss +22 -1
  177. package/dist/esm/select-control/ButtonGroupControl.js +12 -14
  178. package/dist/esm/select-control/GroupedSelectControl.js +38 -36
  179. package/dist/esm/select-control/index.js +7 -8
  180. package/dist/esm/select-control/style.scss +47 -88
  181. package/dist/esm/settings/MinMaxSetting.js +4 -5
  182. package/dist/esm/settings/SettingsCard.js +9 -5
  183. package/dist/esm/settings/SettingsSection.js +5 -7
  184. package/dist/esm/settings/style.scss +32 -4
  185. package/dist/esm/steps-list/index.js +43 -0
  186. package/dist/esm/steps-list/style.scss +11 -0
  187. package/dist/esm/steps-list-item/index.js +48 -0
  188. package/dist/esm/steps-list-item/style.scss +47 -0
  189. package/dist/esm/style-card/index.js +13 -13
  190. package/dist/esm/style-card/style.scss +19 -18
  191. package/dist/esm/style.scss +43 -0
  192. package/dist/esm/tabbed-navigation/index.js +30 -28
  193. package/dist/esm/tabbed-navigation/style.scss +58 -37
  194. package/dist/esm/text-control/index.js +2 -12
  195. package/dist/esm/text-control/style.scss +0 -126
  196. package/dist/esm/utils/index.js +9 -3
  197. package/dist/esm/waiting/index.js +11 -27
  198. package/dist/esm/waiting/style.scss +9 -20
  199. package/dist/esm/web-preview/index.js +21 -49
  200. package/dist/esm/web-preview/style.scss +41 -34
  201. package/dist/esm/with-wizard/index.js +53 -36
  202. package/dist/esm/with-wizard/style.scss +77 -124
  203. package/dist/esm/with-wizard-screen/index.js +26 -32
  204. package/dist/esm/with-wizard-screen/style.scss +75 -125
  205. package/dist/esm/wizard/components/WizardError.js +69 -0
  206. package/dist/esm/wizard/index.js +126 -0
  207. package/dist/esm/wizard/store/index.js +155 -0
  208. package/dist/esm/wizard/store/utils.js +17 -0
  209. package/dist/esm/wizard/style.scss +148 -0
  210. package/package.json +4 -4
  211. package/src/accordion/index.js +32 -0
  212. package/src/accordion/style.scss +27 -0
  213. package/src/action-card/index.js +70 -25
  214. package/src/action-card/style.scss +143 -41
  215. package/src/autocomplete-tokenfield/index.js +1 -1
  216. package/src/autocomplete-tokenfield/style.scss +6 -6
  217. package/src/autocomplete-with-suggestions/index.js +4 -2
  218. package/src/autocomplete-with-suggestions/style.scss +27 -27
  219. package/src/button/index.js +2 -9
  220. package/src/button/style.scss +3 -344
  221. package/src/button-card/index.js +19 -5
  222. package/src/button-card/style.scss +65 -35
  223. package/src/card/index.js +4 -0
  224. package/src/card/style.scss +47 -63
  225. package/src/category-autocomplete/index.js +53 -18
  226. package/src/category-autocomplete/style.scss +20 -24
  227. package/src/color-picker/index.js +16 -22
  228. package/src/color-picker/style.scss +20 -163
  229. package/src/consts.js +2 -1
  230. package/src/custom-select-control/style.scss +14 -45
  231. package/src/date-range-picker/style.scss +12 -12
  232. package/src/footer/index.js +20 -9
  233. package/src/footer/style.scss +13 -14
  234. package/src/form-token-field/index.js +3 -8
  235. package/src/form-token-field/style.scss +9 -105
  236. package/src/global-notices/index.js +1 -1
  237. package/src/grid/style.scss +19 -6
  238. package/src/handoff/index.js +10 -15
  239. package/src/handoff-message/index.js +39 -0
  240. package/src/hooks/useObjectState.js +2 -1
  241. package/src/image-upload/index.js +9 -3
  242. package/src/image-upload/style.scss +12 -17
  243. package/src/index.js +7 -7
  244. package/src/info-button/style.scss +1 -3
  245. package/src/modal/index.js +2 -5
  246. package/src/modal/style.scss +20 -132
  247. package/src/newspack-icon/index.js +7 -2
  248. package/src/newspack-icon/style.scss +17 -2
  249. package/src/newspack-logo/style.scss +3 -3
  250. package/src/notice/index.js +9 -1
  251. package/src/notice/style.scss +60 -19
  252. package/src/plugin-installer/index.js +17 -4
  253. package/src/plugin-installer/style.scss +5 -5
  254. package/src/plugin-settings/SettingsSection.js +59 -27
  255. package/src/plugin-settings/index.js +29 -8
  256. package/src/plugin-settings/style.scss +7 -0
  257. package/src/plugin-toggle/index.js +37 -12
  258. package/src/plugin-toggle/style.scss +2 -2
  259. package/src/popover/style.scss +20 -17
  260. package/src/position-control/index.js +122 -0
  261. package/src/position-control/style.scss +66 -0
  262. package/src/progress-bar/style.scss +4 -4
  263. package/src/radio-control/style.scss +10 -11
  264. package/src/section-header/index.js +41 -5
  265. package/src/section-header/style.scss +22 -1
  266. package/src/select-control/ButtonGroupControl.js +15 -5
  267. package/src/select-control/GroupedSelectControl.js +28 -25
  268. package/src/select-control/index.js +6 -3
  269. package/src/select-control/style.scss +47 -88
  270. package/src/settings/MinMaxSetting.js +2 -1
  271. package/src/settings/SettingsCard.js +9 -7
  272. package/src/settings/SettingsSection.js +4 -4
  273. package/src/settings/style.scss +32 -4
  274. package/src/steps-list/index.js +39 -0
  275. package/src/steps-list/style.scss +11 -0
  276. package/src/steps-list-item/index.js +40 -0
  277. package/src/steps-list-item/style.scss +47 -0
  278. package/src/style-card/index.js +16 -27
  279. package/src/style-card/style.scss +19 -18
  280. package/src/style.scss +43 -0
  281. package/src/tabbed-navigation/index.js +20 -24
  282. package/src/tabbed-navigation/style.scss +58 -37
  283. package/src/text-control/index.js +1 -2
  284. package/src/text-control/style.scss +0 -126
  285. package/src/utils/index.js +9 -0
  286. package/src/waiting/index.js +7 -18
  287. package/src/waiting/style.scss +9 -20
  288. package/src/web-preview/index.js +13 -34
  289. package/src/web-preview/style.scss +41 -34
  290. package/src/with-wizard/index.js +7 -5
  291. package/src/with-wizard/style.scss +77 -124
  292. package/src/with-wizard-screen/index.js +17 -17
  293. package/src/with-wizard-screen/style.scss +75 -125
  294. package/src/wizard/components/WizardError.js +57 -0
  295. package/src/wizard/index.js +145 -0
  296. package/src/wizard/store/index.js +132 -0
  297. package/src/wizard/store/utils.js +16 -0
  298. package/dist/cjs/wizard-pagination/index.js +0 -71
  299. package/dist/cjs/wizard-pagination/style.scss +0 -74
  300. package/dist/esm/wizard-pagination/index.js +0 -57
  301. package/dist/esm/wizard-pagination/style.scss +0 -74
  302. package/src/button-group/index.js +0 -35
  303. package/src/button-group/style.scss +0 -73
  304. package/src/checkbox-control/index.js +0 -38
  305. package/src/checkbox-control/style.scss +0 -78
  306. package/src/preview-box/index.js +0 -18
  307. package/src/preview-box/style.scss +0 -18
  308. package/src/textarea-control/index.js +0 -32
  309. package/src/textarea-control/style.scss +0 -76
  310. package/src/toggle-control/index.js +0 -38
  311. package/src/toggle-control/style.scss +0 -74
  312. package/src/toggle-group/index.js +0 -43
  313. package/src/toggle-group/style.scss +0 -28
  314. package/src/wizard-pagination/index.js +0 -59
  315. package/src/wizard-pagination/style.scss +0 -74
@@ -1,20 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _element = require("@wordpress/element");
11
-
12
9
  require("./style.scss");
13
-
14
10
  var _classnames = _interopRequireDefault(require("classnames"));
15
-
16
11
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
17
-
18
12
  /**
19
13
  * Card
20
14
  */
@@ -30,6 +24,7 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
30
24
  /**
31
25
  * External dependencies
32
26
  */
27
+
33
28
  class Card extends _element.Component {
34
29
  /**
35
30
  * Render
@@ -39,19 +34,19 @@ class Card extends _element.Component {
39
34
  buttonsCard,
40
35
  className,
41
36
  headerActions,
37
+ isNarrow,
42
38
  isMedium,
43
39
  isSmall,
40
+ isWhite,
44
41
  noBorder,
45
42
  ...otherProps
46
43
  } = this.props;
47
- const classes = (0, _classnames.default)('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');
44
+ const classes = (0, _classnames.default)('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');
48
45
  return (0, _jsxRuntime.jsx)("div", {
49
46
  className: classes,
50
47
  ...otherProps
51
48
  });
52
49
  }
53
-
54
50
  }
55
-
56
51
  var _default = Card;
57
52
  exports.default = _default;
@@ -2,13 +2,12 @@
2
2
  * Card
3
3
  */
4
4
 
5
- @import '../../../shared/scss/colors';
6
- @import '~@wordpress/base-styles/colors';
5
+ @use '~@wordpress/base-styles/colors' as wp-colors;
7
6
 
8
7
  .newspack-card {
9
- border-radius: 3px;
10
- border: 1px solid $gray-300;
11
- color: $gray-700;
8
+ border-radius: 2px;
9
+ border: 1px solid wp-colors.$gray-300;
10
+ color: wp-colors.$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
@@ -34,6 +30,7 @@
34
30
  align-items: center;
35
31
  display: flex;
36
32
  flex-wrap: wrap;
33
+ gap: 8px;
37
34
  justify-content: space-between;
38
35
  margin-bottom: -16px;
39
36
 
@@ -41,6 +38,23 @@
41
38
  margin-bottom: 0 !important;
42
39
  margin-top: 0 !important;
43
40
  }
41
+
42
+ .newspack-select-control {
43
+ .components-base-control__field {
44
+ margin-bottom: 0;
45
+ }
46
+ }
47
+ }
48
+
49
+ // Is Narrow
50
+
51
+ &__is-narrow {
52
+ margin-left: auto;
53
+ margin-right: auto;
54
+
55
+ @media screen and ( min-width: 608px ) {
56
+ max-width: 576px;
57
+ }
44
58
  }
45
59
 
46
60
  // Is Small
@@ -79,65 +93,48 @@
79
93
  }
80
94
  }
81
95
 
82
- // No Border
96
+ // Is White
83
97
 
84
- &__no-border {
85
- border-radius: 0;
98
+ &__is-white {
99
+ background: white;
86
100
  border: 0;
87
- padding: 0;
88
101
  }
89
102
 
90
- // Typography
103
+ // No Border
91
104
 
92
- h2,
93
- h3,
94
- p {
95
- line-height: 24px;
96
- margin: 32px 0;
105
+ &__no-border {
106
+ border-radius: 0;
107
+ border: 0;
97
108
  padding: 0;
98
109
  }
99
110
 
100
- h2 {
101
- color: $gray-900;
102
- font-size: 17px;
103
- font-weight: bold;
104
- }
111
+ // Margin
105
112
 
106
- h3 {
107
- color: $gray-900;
108
- font-size: 14px;
109
- font-weight: bold;
113
+ &.mt64 {
114
+ margin-top: 64px;
110
115
  }
111
116
 
112
- p {
113
- font-size: 14px;
114
-
115
- &.is-dark {
116
- color: $gray-900;
117
- }
117
+ &.mt16 {
118
+ margin-top: 16px;
118
119
  }
119
120
 
120
- strong {
121
- font-weight: bold;
122
- }
121
+ // Typography
123
122
 
124
123
  small {
125
124
  font-size: 12px;
126
- line-height: 16px;
125
+ line-height: 1.4;
127
126
  }
128
127
 
129
128
  code {
130
- background: $gray-100;
131
- color: $gray-700;
132
- font-size: 12px;
133
- line-height: 16px;
134
- padding: 4px 8px;
129
+ background: wp-colors.$gray-100;
130
+ color: wp-colors.$gray-900;
131
+ padding: 0 0.5em;
135
132
  }
136
133
 
137
134
  // Thematic Break
138
135
 
139
136
  hr {
140
- background: $gray-300;
137
+ background: wp-colors.$gray-300;
141
138
  border: 0;
142
139
  height: 1px;
143
140
  margin: 48px 0;
@@ -150,7 +147,7 @@
150
147
  // Separator
151
148
 
152
149
  .sep {
153
- background: $gray-300;
150
+ background: wp-colors.$gray-300;
154
151
  height: 1px;
155
152
  margin-left: 8px;
156
153
  margin-right: 8px;
@@ -158,27 +155,14 @@
158
155
 
159
156
  &__inline {
160
157
  display: inline-block;
161
- line-height: 24px;
158
+ line-height: 1.5;
162
159
  vertical-align: middle;
163
160
  }
164
161
  }
165
162
 
166
- // Links
167
-
168
- a {
169
- color: $primary-500;
163
+ // Error
170
164
 
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
- }
165
+ .newspack-error {
166
+ color: wp-colors.$alert-red;
183
167
  }
184
168
  }
@@ -1,30 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
13
-
10
+ var _components = require("@wordpress/components");
14
11
  var _element = require("@wordpress/element");
15
-
16
12
  var _url = require("@wordpress/url");
17
-
18
13
  var _ = require("../");
19
-
20
14
  require("./style.scss");
21
-
22
- var _lodash = require("lodash");
23
-
15
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
16
+ var _find = _interopRequireDefault(require("lodash/find"));
17
+ var _filter = _interopRequireDefault(require("lodash/filter"));
24
18
  var _classnames = _interopRequireDefault(require("classnames"));
25
-
26
19
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
27
-
28
20
  /**
29
21
  * Category Autocomplete
30
22
  */
@@ -43,8 +35,7 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
43
35
 
44
36
  /**
45
37
  * Category autocomplete field component.
46
- */
47
- class CategoryAutocomplete extends _element.Component {
38
+ */class CategoryAutocomplete extends _element.Component {
48
39
  /**
49
40
  * Class constructor.
50
41
  */
@@ -52,24 +43,54 @@ class CategoryAutocomplete extends _element.Component {
52
43
  super(props);
53
44
  (0, _defineProperty2.default)(this, "state", {
54
45
  suggestions: {},
55
- allCategories: {}
46
+ allCategories: {},
47
+ isLoading: false
56
48
  });
49
+ /**
50
+ * Prepare categories data for the API endpoint, call the change handler.
51
+ *
52
+ * @param {Array} tokens An array of category tokens.
53
+ */
57
54
  (0, _defineProperty2.default)(this, "handleOnChange", tokens => {
58
55
  const {
59
56
  onChange
60
57
  } = this.props;
61
58
  const {
62
59
  suggestions
63
- } = this.state; // Categories that are already will be objects, while new additions will be strings (the name).
60
+ } = this.state;
61
+ // Categories that are already will be objects, while new additions will be strings (the name).
64
62
  // allValues nomalizes the array so that they are all objects.
65
-
66
- const allValues = tokens.map(token => typeof token === 'string' ? suggestions[token] : token);
63
+ const allValues = tokens.filter(token => 'undefined' !== typeof token) // Ensure each token is a valid value.
64
+ .map(token => 'string' === typeof token ? suggestions[token] : token).filter(Boolean);
67
65
  onChange(allValues);
68
66
  });
69
- this.debouncedUpdateSuggestions = (0, _lodash.debounce)(this.updateSuggestions, 100);
67
+ (0, _defineProperty2.default)(this, "getAvailableSuggestions", () => {
68
+ const {
69
+ value
70
+ } = this.props;
71
+ const {
72
+ suggestions
73
+ } = this.state;
74
+ const selectedIds = value.reduce((acc, item) => {
75
+ if (item?.id) {
76
+ acc.push(item.id);
77
+ }
78
+ return acc;
79
+ }, []);
80
+ const availableSuggestions = (0, _filter.default)(suggestions, _ref => {
81
+ let {
82
+ id
83
+ } = _ref;
84
+ return selectedIds.indexOf(id) === -1;
85
+ });
86
+ return availableSuggestions.map(v => v.name);
87
+ });
88
+ this.debouncedUpdateSuggestions = (0, _debounce.default)(this.updateSuggestions, 100);
70
89
  }
71
-
72
90
  componentDidMount() {
91
+ this.setState({
92
+ isLoading: true
93
+ });
73
94
  (0, _apiFetch.default)({
74
95
  path: (0, _url.addQueryArgs)(`/wp/v2/${this.props.taxonomy}`, {
75
96
  per_page: -1,
@@ -77,24 +98,27 @@ class CategoryAutocomplete extends _element.Component {
77
98
  })
78
99
  }).then(categories => this.setState({
79
100
  allCategories: categories
101
+ })).finally(() => this.setState({
102
+ isLoading: false
80
103
  }));
81
104
  }
105
+
82
106
  /**
83
107
  * Clean up debounced suggestions method.
84
108
  */
85
-
86
-
87
109
  componentWillUnmount() {
88
110
  this.debouncedUpdateSuggestions.cancel();
89
111
  }
112
+
90
113
  /**
91
114
  * Refresh the autocomplete UI based on text that was typed.
92
115
  *
93
116
  * @param {string} search The typed text to search for.
94
117
  */
95
-
96
-
97
118
  updateSuggestions(search) {
119
+ this.setState({
120
+ isLoading: true
121
+ });
98
122
  (0, _apiFetch.default)({
99
123
  path: (0, _url.addQueryArgs)(`/wp/v2/${this.props.taxonomy}`, {
100
124
  search,
@@ -105,19 +129,15 @@ class CategoryAutocomplete extends _element.Component {
105
129
  })
106
130
  }).then(categories => {
107
131
  this.setState({
108
- suggestions: categories.reduce((accumulator, category) => ({ ...accumulator,
132
+ suggestions: categories.reduce((accumulator, category) => ({
133
+ ...accumulator,
109
134
  [category.name]: category
110
135
  }), {})
111
136
  });
112
- });
137
+ }).finally(() => this.setState({
138
+ isLoading: false
139
+ }));
113
140
  }
114
- /**
115
- * Prepare categories data for the API endpoint, call the change handler.
116
- *
117
- * @param {Array} tokens An array of category tokens.
118
- */
119
-
120
-
121
141
  /**
122
142
  * Render the component.
123
143
  */
@@ -132,39 +152,38 @@ class CategoryAutocomplete extends _element.Component {
132
152
  value
133
153
  } = this.props;
134
154
  const {
135
- suggestions,
136
- allCategories
155
+ allCategories,
156
+ isLoading
137
157
  } = this.state;
138
158
  const classes = (0, _classnames.default)('newspack-category-autocomplete', className);
139
- return (0, _jsxRuntime.jsx)("div", {
159
+ return (0, _jsxRuntime.jsxs)("div", {
140
160
  className: classes,
141
- children: (0, _jsxRuntime.jsx)(_.FormTokenField, {
161
+ children: [(0, _jsxRuntime.jsx)(_.FormTokenField, {
142
162
  onInputChange: input => this.debouncedUpdateSuggestions(input),
143
163
  value: value.reduce((acc, item) => {
144
- const category = typeof item === 'number' ? (0, _lodash.find)(allCategories, ['id', item]) : item;
145
-
146
- if (category) {
164
+ const categoryOrItem = typeof item === 'number' ? (0, _find.default)(allCategories, ['id', item]) : item;
165
+ if (categoryOrItem) {
147
166
  acc.push({
148
- id: category.term_id || category.id,
149
- value: category.name
167
+ id: categoryOrItem.term_id || categoryOrItem.id,
168
+ value: categoryOrItem.value || categoryOrItem.name
150
169
  });
151
170
  }
152
-
153
171
  return acc;
154
172
  }, []),
155
- suggestions: Object.keys(suggestions),
173
+ suggestions: this.getAvailableSuggestions(),
156
174
  onChange: this.handleOnChange,
157
175
  label: label,
158
176
  disabled: disabled,
159
177
  description: description,
160
178
  hideHelpFromVision: hideHelpFromVision,
161
179
  hideLabelFromVision: hideLabelFromVision
162
- })
180
+ }), isLoading ? (0, _jsxRuntime.jsx)("span", {
181
+ className: "newspack-category-autocomplete__suggestions-spinner",
182
+ children: (0, _jsxRuntime.jsx)(_components.Spinner, {})
183
+ }) : null]
163
184
  });
164
185
  }
165
-
166
186
  }
167
-
168
187
  CategoryAutocomplete.defaultProps = {
169
188
  taxonomy: 'categories'
170
189
  };
@@ -2,37 +2,33 @@
2
2
  * Category Autocomplete
3
3
  */
4
4
 
5
- @import '../../../shared/scss/colors';
6
-
7
5
  .newspack-category-autocomplete {
6
+ position: relative;
7
+
8
8
  .components-form-token-field__help {
9
9
  display: none;
10
10
  }
11
11
 
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
12
  // Within a Grid
34
13
 
35
- .newspack-grid & .newspack-form-token-field {
14
+ .newspack-grid & .newspack-form-token-field__input-container {
36
15
  margin: 0;
37
16
  }
17
+
18
+ // Loading state spinner
19
+ &__suggestions-spinner {
20
+ position: absolute;
21
+ right: 1px;
22
+ top: calc( 1.4em + 8px );
23
+ z-index: 2;
24
+
25
+ [class*='--label-hidden'] + & {
26
+ top: 0;
27
+ }
28
+
29
+ .components-spinner {
30
+ display: block;
31
+ margin: 7px;
32
+ }
33
+ }
38
34
  }
@@ -1,28 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _components = require("@wordpress/components");
11
-
12
9
  var _element = require("@wordpress/element");
13
-
14
- var _icons = require("@wordpress/icons");
15
-
16
10
  var _classnames = _interopRequireDefault(require("classnames"));
17
-
11
+ var _colord = require("colord");
12
+ var _a11y = _interopRequireDefault(require("colord/plugins/a11y"));
18
13
  var _hooks = _interopRequireDefault(require("../hooks"));
19
-
20
14
  var _utils = _interopRequireDefault(require("../utils"));
21
-
22
15
  require("./style.scss");
23
-
24
16
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
25
-
26
17
  /**
27
18
  * WordPress dependencies.
28
19
  */
@@ -34,10 +25,11 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
34
25
  /**
35
26
  * Internal dependencies.
36
27
  */
28
+
29
+ (0, _colord.extend)([_a11y.default]);
37
30
  const {
38
31
  InteractiveDiv
39
32
  } = _utils.default;
40
-
41
33
  const ColorPicker = _ref => {
42
34
  let {
43
35
  label,
@@ -47,55 +39,31 @@ const ColorPicker = _ref => {
47
39
  } = _ref;
48
40
  const [isExpanded, setIsExpanded] = (0, _element.useState)(false);
49
41
  const ref = (0, _element.useRef)();
50
-
42
+ const colordColor = (0, _colord.colord)(color);
51
43
  _hooks.default.useOnClickOutside(ref, () => setIsExpanded(false));
52
-
53
44
  return (0, _jsxRuntime.jsxs)("div", {
54
45
  className: (0, _classnames.default)('newspack-color-picker', className),
55
46
  children: [(0, _jsxRuntime.jsx)("div", {
56
47
  className: "newspack-color-picker__label",
57
48
  children: label
58
- }), (0, _jsxRuntime.jsxs)("div", {
49
+ }), (0, _jsxRuntime.jsx)(InteractiveDiv, {
50
+ className: 'newspack-color-picker__expander',
51
+ onClick: () => setIsExpanded(!isExpanded),
52
+ style: {
53
+ backgroundColor: color,
54
+ color: colordColor.contrast() > colordColor.contrast('#000') ? '#fff' : '#000'
55
+ },
56
+ children: color
57
+ }), (0, _jsxRuntime.jsx)("div", {
59
58
  className: "newspack-color-picker__main",
60
59
  ref: ref,
61
- children: [(0, _jsxRuntime.jsxs)(InteractiveDiv, {
62
- className: (0, _classnames.default)('newspack-color-picker__expander', {
63
- 'newspack-color-picker__expander--expanded': isExpanded
64
- }),
65
- onClick: () => setIsExpanded(!isExpanded),
66
- children: [(0, _jsxRuntime.jsxs)("div", {
67
- children: [(0, _jsxRuntime.jsx)("div", {
68
- className: "newspack-color-picker__indicator",
69
- style: {
70
- backgroundColor: color
71
- }
72
- }), (0, _jsxRuntime.jsx)("div", {
73
- children: color
74
- })]
75
- }), (0, _jsxRuntime.jsx)(_icons.Icon, {
76
- icon: _icons.chevronDown,
77
- size: 18,
78
- style: isExpanded ? {
79
- transform: 'rotate(180deg)'
80
- } : {}
81
- })]
82
- }), isExpanded && (0, _jsxRuntime.jsx)(_components.ColorPicker, {
60
+ children: isExpanded && (0, _jsxRuntime.jsx)(_components.ColorPicker, {
83
61
  color: color,
84
- onChangeComplete: _ref2 => {
85
- let {
86
- hex
87
- } = _ref2;
88
- return onChange(hex);
89
- } // Prop will be deprecated in favor of onChange, which expects a string hex value.
90
- ,
91
- disableAlpha: true // Prop will be deprecated in favor of enableAlpha, which behaves in the opposite manner.
92
- ,
93
62
  onChange: hex => onChange(hex),
94
63
  enableAlpha: false
95
- })]
64
+ })
96
65
  })]
97
66
  });
98
67
  };
99
-
100
68
  var _default = ColorPicker;
101
69
  exports.default = _default;