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
@@ -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,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
3
2
  /**
4
3
  * Category Autocomplete
5
4
  */
@@ -8,55 +7,85 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
7
  * WordPress dependencies.
9
8
  */
10
9
  import apiFetch from '@wordpress/api-fetch';
10
+ import { Spinner } from '@wordpress/components';
11
11
  import { Component } from '@wordpress/element';
12
12
  import { addQueryArgs } from '@wordpress/url';
13
+
13
14
  /**
14
15
  * Internal dependencies.
15
16
  */
16
-
17
17
  import { FormTokenField } from '../';
18
18
  import './style.scss';
19
+
19
20
  /**
20
21
  * External dependencies
21
22
  */
22
-
23
- import { debounce, find } from 'lodash';
23
+ import debounce from 'lodash/debounce';
24
+ import find from 'lodash/find';
25
+ import filter from 'lodash/filter';
24
26
  import classnames from 'classnames';
27
+
25
28
  /**
26
29
  * Category autocomplete field component.
27
30
  */
28
-
29
31
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
30
-
32
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
31
33
  class CategoryAutocomplete extends Component {
32
34
  /**
33
35
  * Class constructor.
34
36
  */
35
37
  constructor(props) {
36
38
  super(props);
37
-
38
39
  _defineProperty(this, "state", {
39
40
  suggestions: {},
40
- allCategories: {}
41
+ allCategories: {},
42
+ isLoading: false
41
43
  });
42
-
44
+ /**
45
+ * Prepare categories data for the API endpoint, call the change handler.
46
+ *
47
+ * @param {Array} tokens An array of category tokens.
48
+ */
43
49
  _defineProperty(this, "handleOnChange", tokens => {
44
50
  const {
45
51
  onChange
46
52
  } = this.props;
47
53
  const {
48
54
  suggestions
49
- } = this.state; // Categories that are already will be objects, while new additions will be strings (the name).
55
+ } = this.state;
56
+ // Categories that are already will be objects, while new additions will be strings (the name).
50
57
  // allValues nomalizes the array so that they are all objects.
51
-
52
- const allValues = tokens.map(token => typeof token === 'string' ? suggestions[token] : token);
58
+ const allValues = tokens.filter(token => 'undefined' !== typeof token) // Ensure each token is a valid value.
59
+ .map(token => 'string' === typeof token ? suggestions[token] : token).filter(Boolean);
53
60
  onChange(allValues);
54
61
  });
55
-
62
+ _defineProperty(this, "getAvailableSuggestions", () => {
63
+ const {
64
+ value
65
+ } = this.props;
66
+ const {
67
+ suggestions
68
+ } = this.state;
69
+ const selectedIds = value.reduce((acc, item) => {
70
+ if (item?.id) {
71
+ acc.push(item.id);
72
+ }
73
+ return acc;
74
+ }, []);
75
+ const availableSuggestions = filter(suggestions, _ref => {
76
+ let {
77
+ id
78
+ } = _ref;
79
+ return selectedIds.indexOf(id) === -1;
80
+ });
81
+ return availableSuggestions.map(v => v.name);
82
+ });
56
83
  this.debouncedUpdateSuggestions = debounce(this.updateSuggestions, 100);
57
84
  }
58
-
59
85
  componentDidMount() {
86
+ this.setState({
87
+ isLoading: true
88
+ });
60
89
  apiFetch({
61
90
  path: addQueryArgs(`/wp/v2/${this.props.taxonomy}`, {
62
91
  per_page: -1,
@@ -64,24 +93,27 @@ class CategoryAutocomplete extends Component {
64
93
  })
65
94
  }).then(categories => this.setState({
66
95
  allCategories: categories
96
+ })).finally(() => this.setState({
97
+ isLoading: false
67
98
  }));
68
99
  }
100
+
69
101
  /**
70
102
  * Clean up debounced suggestions method.
71
103
  */
72
-
73
-
74
104
  componentWillUnmount() {
75
105
  this.debouncedUpdateSuggestions.cancel();
76
106
  }
107
+
77
108
  /**
78
109
  * Refresh the autocomplete UI based on text that was typed.
79
110
  *
80
111
  * @param {string} search The typed text to search for.
81
112
  */
82
-
83
-
84
113
  updateSuggestions(search) {
114
+ this.setState({
115
+ isLoading: true
116
+ });
85
117
  apiFetch({
86
118
  path: addQueryArgs(`/wp/v2/${this.props.taxonomy}`, {
87
119
  search,
@@ -92,19 +124,15 @@ class CategoryAutocomplete extends Component {
92
124
  })
93
125
  }).then(categories => {
94
126
  this.setState({
95
- suggestions: categories.reduce((accumulator, category) => ({ ...accumulator,
127
+ suggestions: categories.reduce((accumulator, category) => ({
128
+ ...accumulator,
96
129
  [category.name]: category
97
130
  }), {})
98
131
  });
99
- });
132
+ }).finally(() => this.setState({
133
+ isLoading: false
134
+ }));
100
135
  }
101
- /**
102
- * Prepare categories data for the API endpoint, call the change handler.
103
- *
104
- * @param {Array} tokens An array of category tokens.
105
- */
106
-
107
-
108
136
  /**
109
137
  * Render the component.
110
138
  */
@@ -119,39 +147,38 @@ class CategoryAutocomplete extends Component {
119
147
  value
120
148
  } = this.props;
121
149
  const {
122
- suggestions,
123
- allCategories
150
+ allCategories,
151
+ isLoading
124
152
  } = this.state;
125
153
  const classes = classnames('newspack-category-autocomplete', className);
126
- return _jsx("div", {
154
+ return _jsxs("div", {
127
155
  className: classes,
128
- children: _jsx(FormTokenField, {
156
+ children: [_jsx(FormTokenField, {
129
157
  onInputChange: input => this.debouncedUpdateSuggestions(input),
130
158
  value: value.reduce((acc, item) => {
131
- const category = typeof item === 'number' ? find(allCategories, ['id', item]) : item;
132
-
133
- if (category) {
159
+ const categoryOrItem = typeof item === 'number' ? find(allCategories, ['id', item]) : item;
160
+ if (categoryOrItem) {
134
161
  acc.push({
135
- id: category.term_id || category.id,
136
- value: category.name
162
+ id: categoryOrItem.term_id || categoryOrItem.id,
163
+ value: categoryOrItem.value || categoryOrItem.name
137
164
  });
138
165
  }
139
-
140
166
  return acc;
141
167
  }, []),
142
- suggestions: Object.keys(suggestions),
168
+ suggestions: this.getAvailableSuggestions(),
143
169
  onChange: this.handleOnChange,
144
170
  label: label,
145
171
  disabled: disabled,
146
172
  description: description,
147
173
  hideHelpFromVision: hideHelpFromVision,
148
174
  hideLabelFromVision: hideLabelFromVision
149
- })
175
+ }), isLoading ? _jsx("span", {
176
+ className: "newspack-category-autocomplete__suggestions-spinner",
177
+ children: _jsx(Spinner, {})
178
+ }) : null]
150
179
  });
151
180
  }
152
-
153
181
  }
154
-
155
182
  CategoryAutocomplete.defaultProps = {
156
183
  taxonomy: 'categories'
157
184
  };
@@ -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
  }
@@ -3,25 +3,26 @@
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';
6
+
7
7
  /**
8
8
  * External dependencies.
9
9
  */
10
-
11
10
  import classnames from 'classnames';
11
+ import { colord, extend } from 'colord';
12
+ import a11yPlugin from 'colord/plugins/a11y';
13
+
12
14
  /**
13
15
  * Internal dependencies.
14
16
  */
15
-
16
17
  import hooks from '../hooks';
17
18
  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;
24
-
25
26
  const ColorPicker = _ref => {
26
27
  let {
27
28
  label,
@@ -31,52 +32,30 @@ const ColorPicker = _ref => {
31
32
  } = _ref;
32
33
  const [isExpanded, setIsExpanded] = useState(false);
33
34
  const ref = useRef();
35
+ const colordColor = colord(color);
34
36
  hooks.useOnClickOutside(ref, () => setIsExpanded(false));
35
37
  return _jsxs("div", {
36
38
  className: classnames('newspack-color-picker', className),
37
39
  children: [_jsx("div", {
38
40
  className: "newspack-color-picker__label",
39
41
  children: label
40
- }), _jsxs("div", {
42
+ }), _jsx(InteractiveDiv, {
43
+ className: 'newspack-color-picker__expander',
44
+ onClick: () => setIsExpanded(!isExpanded),
45
+ style: {
46
+ backgroundColor: color,
47
+ color: colordColor.contrast() > colordColor.contrast('#000') ? '#fff' : '#000'
48
+ },
49
+ children: color
50
+ }), _jsx("div", {
41
51
  className: "newspack-color-picker__main",
42
52
  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, {
53
+ children: isExpanded && _jsx(ColorPickerComponent, {
65
54
  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
55
  onChange: hex => onChange(hex),
76
56
  enableAlpha: false
77
- })]
57
+ })
78
58
  })]
79
59
  });
80
60
  };
81
-
82
61
  export default ColorPicker;