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,25 +2,75 @@
2
2
  * With Wizard Screen
3
3
  */
4
4
 
5
- @import '~@wordpress/base-styles/colors';
6
- @import '../../../shared/scss/colors';
5
+ @use '~@wordpress/base-styles/colors' as wp-colors;
6
+ @use '../../../shared/scss/colors';
7
7
 
8
8
  .newspack-wizard {
9
+ // Color
10
+ --wp-admin-theme-color: #{colors.$primary-500};
11
+ --wp-admin-theme-color--rgb: #{colors.$primary-500--rgb};
12
+ --wp-admin-theme-color-darker-10: #{colors.$primary-600};
13
+ --wp-admin-theme-color-darker-10--rgb: #{colors.$primary-600--rgb};
14
+ --wp-admin-theme-color-darker-20: #{colors.$primary-700};
15
+ --wp-admin-theme-color-darker-20--rgb: #{colors.$primary-700--rgb};
16
+
17
+ color: wp-colors.$gray-900;
18
+
19
+ // Headings
20
+ h1,
21
+ h2,
22
+ h3 {
23
+ color: inherit;
24
+ }
25
+
26
+ h1 {
27
+ line-height: 1.4;
28
+ }
29
+
30
+ // Links
31
+ a {
32
+ color: var( --wp-admin-theme-color );
33
+
34
+ &:active,
35
+ &:focus,
36
+ &:hover {
37
+ color: var( --wp-admin-theme-color-darker-10 );
38
+ }
39
+
40
+ &:focus {
41
+ box-shadow: 0 0 0 var( --wp-admin-border-width-focus ) var( --wp-admin-theme-color );
42
+ outline: 3px solid transparent;
43
+ }
44
+ }
45
+
9
46
  &__header {
10
47
  background: white;
11
48
  }
12
49
 
13
50
  &__title {
14
51
  align-items: center;
15
- border-bottom: 1px solid $gray-300;
52
+ border-bottom: 1px solid wp-colors.$gray-300;
16
53
  display: flex;
17
54
 
18
- h1 {
19
- color: $gray-900;
20
- font-size: 21px;
21
- line-height: 30px;
55
+ h2 {
22
56
  margin: 0;
57
+ padding: 0;
58
+ }
59
+
60
+ > div {
61
+ align-items: baseline;
62
+ display: flex;
23
63
  padding: 0 24px;
64
+
65
+ span {
66
+ color: wp-colors.$gray-700;
67
+ display: none;
68
+ margin-left: 8px;
69
+
70
+ @media screen and ( min-width: 744px ) {
71
+ display: block;
72
+ }
73
+ }
24
74
  }
25
75
 
26
76
  svg {
@@ -33,17 +83,19 @@
33
83
  }
34
84
 
35
85
  &:not( .newspack-icon ) {
36
- background: $primary-500;
86
+ background: colors.$primary-500;
37
87
  left: 50%;
38
- margin: -18px 0 0 -18px !important;
88
+ margin: -28px 0 0 -28px !important;
39
89
  opacity: 0;
90
+ padding: 10px;
40
91
  position: absolute;
41
92
  top: 50%;
42
93
  transition: opacity 125ms ease-in-out;
43
94
  }
44
95
  }
45
96
 
46
- a {
97
+ .components-button.has-icon {
98
+ padding: 0;
47
99
  position: relative;
48
100
 
49
101
  &:hover {
@@ -51,29 +103,23 @@
51
103
  opacity: 1;
52
104
  }
53
105
  }
54
- }
55
106
 
56
- a:focus-visible {
57
- outline: none !important;
107
+ &:focus-visible {
108
+ outline: none !important;
58
109
 
59
- &::before {
60
- border: 2px solid white;
61
- border-radius: 3px;
62
- bottom: 5px;
63
- content: '';
64
- display: block;
65
- left: 6px;
66
- position: absolute;
67
- right: 6px;
68
- top: 6px;
110
+ &::before {
111
+ border: 2px solid white;
112
+ border-radius: 2px;
113
+ content: '';
114
+ display: block;
115
+ inset: 6px 6px 5px;
116
+ position: absolute;
117
+ }
69
118
  }
70
119
  }
71
120
  }
72
121
 
73
122
  &__content {
74
- color: $gray-700;
75
- font-size: 14px;
76
- line-height: 24px;
77
123
  margin: 0 auto;
78
124
  max-width: 1208px;
79
125
  padding: 0 16px;
@@ -84,55 +130,19 @@
84
130
 
85
131
  // Typography
86
132
 
87
- h1,
88
- h2,
89
- h3,
90
- p {
91
- line-height: 24px;
92
- margin: 32px 0;
93
- padding: 0;
94
- }
95
-
96
- h1 {
97
- color: $gray-900;
98
- font-size: 21px;
99
- font-weight: bold;
100
- line-height: 32px;
101
- }
102
-
103
- h2 {
104
- color: $gray-900;
105
- font-size: 17px;
106
- font-weight: bold;
107
- }
108
-
109
- h3 {
110
- color: $gray-900;
111
- font-size: 14px;
112
- font-weight: bold;
113
- }
114
-
115
- p {
116
- font-size: 14px;
117
-
118
- &.is-dark {
119
- color: $gray-900;
120
- }
121
- }
122
-
123
133
  strong {
124
134
  font-weight: bold;
125
135
  }
126
136
 
127
137
  small {
128
138
  font-size: 12px;
129
- line-height: 16px;
139
+ line-height: 1.4;
130
140
  }
131
141
 
132
142
  // Thematic Break
133
143
 
134
144
  hr {
135
- background: $gray-300;
145
+ background: wp-colors.$gray-300;
136
146
  border: 0;
137
147
  height: 1px;
138
148
  margin: 48px 0;
@@ -141,70 +151,10 @@
141
151
  margin: 64px 0;
142
152
  }
143
153
  }
144
-
145
- // Links
146
-
147
- a {
148
- color: $primary-500;
149
-
150
- &:active,
151
- &:focus,
152
- &:hover {
153
- color: $primary-600;
154
- text-decoration: none;
155
- }
156
-
157
- &:focus {
158
- box-shadow: none;
159
- outline: 2px solid $primary-500;
160
- outline-offset: 2px;
161
- }
162
- }
163
154
  }
164
155
 
165
156
  &__above-header {
157
+ border-radius: 0;
166
158
  margin: 0;
167
159
  }
168
160
  }
169
-
170
- // Buttons Card
171
-
172
- .newspack-buttons-card {
173
- display: flex;
174
- flex-direction: row-reverse;
175
- justify-content: flex-start;
176
- align-items: center;
177
- margin: 64px 0 32px;
178
-
179
- &:empty {
180
- display: none;
181
- }
182
-
183
- .newspack-button {
184
- margin-left: 16px;
185
- }
186
- }
187
-
188
- // Checkbox Icon
189
-
190
- .newspack-checkbox-icon {
191
- background: white;
192
- border-radius: 50%;
193
- box-shadow: inset 0 0 0 1px $gray-300;
194
- display: block;
195
- height: 24px;
196
- width: 24px;
197
-
198
- svg {
199
- fill: $gray-700;
200
- }
201
-
202
- &--checked {
203
- background: $alert-green;
204
- box-shadow: none;
205
-
206
- svg {
207
- fill: white;
208
- }
209
- }
210
- }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import { __ as alias__ } from '@wordpress/i18n';
5
+ const __ = alias__;
6
+ import { useSelect } from '@wordpress/data';
7
+
8
+ /**
9
+ * Internal dependencies.
10
+ */
11
+ import { Button, Card, Modal, Notice } from '../..';
12
+ import { WIZARD_STORE_NAMESPACE } from '../store';
13
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
14
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
15
+ const parseError = _ref => {
16
+ let {
17
+ data,
18
+ message,
19
+ code
20
+ } = _ref;
21
+ let level = 'fatal';
22
+ if (!!data && 'level' in data) {
23
+ level = data.level;
24
+ } else if ('rest_invalid_param' === code) {
25
+ level = 'notice';
26
+ }
27
+ return {
28
+ message,
29
+ level
30
+ };
31
+ };
32
+ const WizardError = () => {
33
+ const error = useSelect(select => select(WIZARD_STORE_NAMESPACE).getError());
34
+ if (!error) {
35
+ return null;
36
+ }
37
+ const {
38
+ level,
39
+ message
40
+ } = parseError(error);
41
+ if ('fatal' === level) {
42
+ const fallbackURL = typeof newspack_urls !== 'undefined' && newspack_urls.dashboard;
43
+ return _jsxs(Modal, {
44
+ title: __('Unrecoverable error'),
45
+ onRequestClose: fallbackURL ? () => window.location = fallbackURL : undefined,
46
+ children: [_jsx(Notice, {
47
+ noticeText: message,
48
+ isError: true,
49
+ rawHTML: true
50
+ }), fallbackURL && _jsx(Card, {
51
+ buttonsCard: true,
52
+ noBorder: true,
53
+ className: "justify-end",
54
+ children: _jsx(Button, {
55
+ isPrimary: true,
56
+ href: fallbackURL,
57
+ children: __('Return to Dashboard', 'newspack')
58
+ })
59
+ })]
60
+ });
61
+ }
62
+ return _jsx(Notice, {
63
+ isError: true,
64
+ className: "newspack-wizard__above-header",
65
+ noticeText: message,
66
+ rawHTML: true
67
+ });
68
+ };
69
+ export default WizardError;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import classnames from 'classnames';
5
+
6
+ /**
7
+ * WordPress dependencies.
8
+ */
9
+ import { useSelect } from '@wordpress/data';
10
+ import { useState } from '@wordpress/element';
11
+ import { __ as alias__ } from '@wordpress/i18n';
12
+ const __ = alias__;
13
+ import { category } from '@wordpress/icons';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import { Footer, Notice, Button, NewspackIcon, TabbedNavigation, PluginInstaller, HandoffMessage } from '../';
19
+ import Router from '../proxied-imports/router';
20
+ import registerStore, { WIZARD_STORE_NAMESPACE } from './store';
21
+ import { useWizardData } from './store/utils';
22
+ import WizardError from './components/WizardError';
23
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
24
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
25
+ import { Fragment as _Fragment } from "@emotion/react/jsx-runtime";
26
+ registerStore();
27
+ const {
28
+ HashRouter,
29
+ Redirect,
30
+ Route,
31
+ Switch
32
+ } = Router;
33
+ const Wizard = _ref => {
34
+ let {
35
+ sections = [],
36
+ apiSlug,
37
+ headerText,
38
+ subHeaderText,
39
+ hasSimpleFooter,
40
+ className,
41
+ renderAboveSections,
42
+ requiredPlugins = []
43
+ } = _ref;
44
+ const isLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isLoading());
45
+ const isQuietLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isQuietLoading());
46
+
47
+ // Trigger initial data fetch. Some sections might not use the wizard data,
48
+ // but for consistency, fetching is triggered regardless of the section.
49
+ useSelect(select => select(WIZARD_STORE_NAMESPACE).getWizardAPIData(apiSlug));
50
+ let displayedSections = sections.filter(section => !section.isHidden);
51
+ const [pluginRequirementsSatisfied, setPluginRequirementsSatisfied] = useState(requiredPlugins.length === 0);
52
+ if (!pluginRequirementsSatisfied) {
53
+ headerText = requiredPlugins.length > 1 ? __('Required plugins', 'newspack') : __('Required plugin', 'newspack');
54
+ displayedSections = [{
55
+ path: '/',
56
+ render: () => _jsx(PluginInstaller, {
57
+ plugins: requiredPlugins,
58
+ onStatus: _ref2 => {
59
+ let {
60
+ complete
61
+ } = _ref2;
62
+ return setPluginRequirementsSatisfied(complete);
63
+ }
64
+ })
65
+ }];
66
+ }
67
+ return _jsxs(_Fragment, {
68
+ children: [_jsx("div", {
69
+ className: classnames(isLoading ? 'newspack-wizard__is-loading' : 'newspack-wizard__is-loaded', {
70
+ 'newspack-wizard__is-loading-quiet': isQuietLoading
71
+ }),
72
+ children: _jsxs(HashRouter, {
73
+ hashType: "slash",
74
+ children: [newspack_aux_data.is_debug_mode && _jsx(Notice, {
75
+ debugMode: true
76
+ }), _jsx("div", {
77
+ className: "bg-white",
78
+ children: _jsx("div", {
79
+ className: "newspack-wizard__header__inner",
80
+ children: _jsxs("div", {
81
+ className: "newspack-wizard__title",
82
+ children: [_jsx(Button, {
83
+ isLink: true,
84
+ href: newspack_urls.dashboard,
85
+ label: __('Return to Dashboard', 'newspack'),
86
+ showTooltip: true,
87
+ icon: category,
88
+ iconSize: 36,
89
+ children: _jsx(NewspackIcon, {
90
+ size: 36
91
+ })
92
+ }), _jsxs("div", {
93
+ children: [headerText && _jsx("h2", {
94
+ children: headerText
95
+ }), subHeaderText && _jsx("span", {
96
+ children: subHeaderText
97
+ })]
98
+ })]
99
+ })
100
+ })
101
+ }), displayedSections.length > 1 && _jsx(TabbedNavigation, {
102
+ items: displayedSections,
103
+ children: _jsx(WizardError, {})
104
+ }), _jsx(HandoffMessage, {}), _jsxs(Switch, {
105
+ children: [displayedSections.map((section, index) => {
106
+ const SectionComponent = section.render;
107
+ return _jsx(Route, {
108
+ path: section.path,
109
+ children: _jsxs("div", {
110
+ className: classnames('newspack-wizard newspack-wizard__content', className),
111
+ children: ['function' === typeof renderAboveSections ? renderAboveSections() : null, _jsx(SectionComponent, {})]
112
+ })
113
+ }, index);
114
+ }), _jsx(Redirect, {
115
+ to: displayedSections[0].path
116
+ })]
117
+ })]
118
+ })
119
+ }), !isLoading && _jsx(Footer, {
120
+ simple: hasSimpleFooter
121
+ })]
122
+ });
123
+ };
124
+ Wizard.useWizardData = useWizardData;
125
+ Wizard.STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
126
+ export default Wizard;
@@ -0,0 +1,155 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import set from 'lodash/set';
5
+ import get from 'lodash/get';
6
+ import isEmpty from 'lodash/isEmpty';
7
+
8
+ /**
9
+ * WordPress dependencies.
10
+ */
11
+ import apiFetch from '@wordpress/api-fetch';
12
+ import { createReduxStore, register, dispatch, select } from '@wordpress/data';
13
+ import { createAction } from './utils.js';
14
+ export const WIZARD_STORE_NAMESPACE = 'newspack/wizards';
15
+ const DEFAULT_STATE = {
16
+ isLoading: true,
17
+ isQuietLoading: false,
18
+ apiData: {},
19
+ error: null
20
+ };
21
+
22
+ /**
23
+ * wordpress/data does not trigger a component re-render
24
+ * on deep state change (via lodash's set function)
25
+ * unless the state was cloned first.
26
+ */
27
+ const clone = objectToClone => JSON.parse(JSON.stringify(objectToClone));
28
+ const reducer = function () {
29
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
30
+ let {
31
+ type,
32
+ payload = {}
33
+ } = arguments.length > 1 ? arguments[1] : undefined;
34
+ switch (type) {
35
+ case 'START_LOADING_DATA':
36
+ if (payload.isQuietLoading) {
37
+ return {
38
+ ...state,
39
+ isQuietLoading: true
40
+ };
41
+ }
42
+ return {
43
+ ...state,
44
+ isLoading: true
45
+ };
46
+ case 'FINISH_LOADING_DATA':
47
+ return {
48
+ ...state,
49
+ isLoading: false,
50
+ isQuietLoading: false
51
+ };
52
+ case 'SET_API_DATA':
53
+ return set(clone(state), ['apiData', payload.slug], payload.data);
54
+ case 'UPDATE_WIZARD_SETTINGS':
55
+ return set(clone(state), ['apiData', payload.slug, ...payload.path], payload.value);
56
+ case 'SET_ERROR':
57
+ return {
58
+ ...state,
59
+ error: payload
60
+ };
61
+ default:
62
+ return state;
63
+ }
64
+ };
65
+ const actions = {
66
+ // Regular actions.
67
+ startLoadingData: createAction('START_LOADING_DATA'),
68
+ finishLoadingData: createAction('FINISH_LOADING_DATA'),
69
+ fetchFromAPI: createAction('FETCH_FROM_API'),
70
+ setAPIDataForWizard: createAction('SET_API_DATA'),
71
+ updateWizardSettings: createAction('UPDATE_WIZARD_SETTINGS'),
72
+ setError: createAction('SET_ERROR'),
73
+ // Async actions. These will not show up in Redux devtools.
74
+ saveWizardSettings(_ref) {
75
+ let {
76
+ slug,
77
+ section = '',
78
+ payloadPath = false,
79
+ updatePayload = null
80
+ } = _ref;
81
+ return function* () {
82
+ // Optionally data can be updated before saving - an immediate update case
83
+ // (without an explicit "save" action).
84
+ if (updatePayload) {
85
+ yield actions.updateWizardSettings({
86
+ slug,
87
+ ...updatePayload
88
+ });
89
+ }
90
+ const wizardState = select(WIZARD_STORE_NAMESPACE).getWizardAPIData(slug);
91
+ const updatedData = yield actions.fetchFromAPI({
92
+ path: `/newspack/v1/wizard/${slug}/${section}`,
93
+ method: 'POST',
94
+ data: payloadPath ? get(wizardState, payloadPath) : wizardState,
95
+ isQuietFetch: true
96
+ });
97
+ if (!isEmpty(updatedData) && !updatedData.error) {
98
+ return actions.setAPIDataForWizard({
99
+ slug,
100
+ data: updatedData
101
+ });
102
+ }
103
+ }();
104
+ },
105
+ *wizardApiFetch(fetchConfig) {
106
+ // Just a proxy to fetchFromAPI, but it has to be a generator.
107
+ const result = yield actions.fetchFromAPI(fetchConfig);
108
+ return result;
109
+ }
110
+ };
111
+ const selectors = {
112
+ isLoading: state => state.isLoading,
113
+ isQuietLoading: state => state.isQuietLoading,
114
+ getWizardAPIData: (state, slug) => state.apiData[slug] || {},
115
+ getError: state => state.error
116
+ };
117
+ const store = createReduxStore(WIZARD_STORE_NAMESPACE, {
118
+ reducer,
119
+ actions,
120
+ selectors,
121
+ controls: {
122
+ FETCH_FROM_API: action => {
123
+ dispatch(WIZARD_STORE_NAMESPACE).startLoadingData({
124
+ isQuietLoading: Boolean(action.payload.isQuietFetch)
125
+ });
126
+ return apiFetch(action.payload).then(data => {
127
+ dispatch(WIZARD_STORE_NAMESPACE).setError(null);
128
+ return data;
129
+ }).catch(error => {
130
+ dispatch(WIZARD_STORE_NAMESPACE).setError(error);
131
+ return {
132
+ error
133
+ };
134
+ }).finally(result => {
135
+ dispatch(WIZARD_STORE_NAMESPACE).finishLoadingData();
136
+ return result;
137
+ });
138
+ }
139
+ },
140
+ resolvers: {
141
+ *getWizardAPIData(slug) {
142
+ if (slug) {
143
+ const data = yield actions.fetchFromAPI({
144
+ path: `/newspack/v1/wizard/${slug}`
145
+ });
146
+ return actions.setAPIDataForWizard({
147
+ slug,
148
+ data
149
+ });
150
+ }
151
+ return actions.finishLoadingData();
152
+ }
153
+ }
154
+ });
155
+ export default (() => register(store));
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { WIZARD_STORE_NAMESPACE } from '.';
10
+ export const createAction = type => payload => ({
11
+ type,
12
+ payload
13
+ });
14
+ export const useWizardData = function (wizardName) {
15
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
16
+ return useSelect(select => select(WIZARD_STORE_NAMESPACE).getWizardAPIData(`newspack-${wizardName}-wizard`)) || defaultValue;
17
+ };