newspack-components 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/copy-styles.js +1 -1
  2. package/dist/cjs/action-card/index.js +32 -22
  3. package/dist/cjs/action-card/style.scss +52 -27
  4. package/dist/cjs/autocomplete-tokenfield/style.scss +4 -4
  5. package/dist/cjs/autocomplete-with-suggestions/index.js +3 -2
  6. package/dist/cjs/autocomplete-with-suggestions/style.scss +19 -20
  7. package/dist/cjs/button/index.js +2 -13
  8. package/dist/cjs/button/style.scss +3 -344
  9. package/dist/cjs/button-card/index.js +11 -6
  10. package/dist/cjs/button-card/style.scss +69 -35
  11. package/dist/cjs/card/index.js +3 -1
  12. package/dist/cjs/card/style.scss +34 -61
  13. package/dist/cjs/category-autocomplete/index.js +52 -13
  14. package/dist/cjs/category-autocomplete/style.scss +19 -15
  15. package/dist/cjs/color-picker/index.js +17 -35
  16. package/dist/cjs/color-picker/style.scss +20 -160
  17. package/dist/cjs/custom-select-control/style.scss +12 -42
  18. package/dist/cjs/footer/index.js +21 -7
  19. package/dist/cjs/footer/style.scss +9 -10
  20. package/dist/cjs/form-token-field/index.js +2 -2
  21. package/dist/cjs/form-token-field/style.scss +8 -103
  22. package/dist/cjs/global-notices/index.js +2 -1
  23. package/dist/cjs/grid/index.js +1 -1
  24. package/dist/cjs/grid/style.scss +29 -1
  25. package/dist/cjs/handoff/index.js +7 -7
  26. package/dist/cjs/image-upload/index.js +1 -1
  27. package/dist/cjs/image-upload/style.scss +10 -11
  28. package/dist/cjs/index.js +7 -53
  29. package/dist/cjs/modal/index.js +0 -3
  30. package/dist/cjs/modal/style.scss +19 -131
  31. package/dist/cjs/newspack-icon/index.js +4 -2
  32. package/dist/cjs/newspack-icon/style.scss +15 -0
  33. package/dist/cjs/notice/index.js +8 -9
  34. package/dist/cjs/notice/style.scss +38 -10
  35. package/dist/cjs/plugin-installer/index.js +4 -2
  36. package/dist/cjs/plugin-settings/SettingsSection.js +76 -45
  37. package/dist/cjs/plugin-settings/index.js +49 -34
  38. package/dist/cjs/plugin-settings/style.scss +7 -0
  39. package/dist/cjs/plugin-toggle/index.js +22 -1
  40. package/dist/cjs/popover/style.scss +2 -2
  41. package/dist/cjs/radio-control/style.scss +1 -2
  42. package/dist/cjs/section-header/index.js +18 -5
  43. package/dist/cjs/section-header/style.scss +26 -1
  44. package/dist/cjs/select-control/ButtonGroupControl.js +8 -8
  45. package/dist/cjs/select-control/GroupedSelectControl.js +33 -30
  46. package/dist/cjs/select-control/index.js +1 -2
  47. package/dist/cjs/select-control/style.scss +46 -87
  48. package/dist/cjs/settings/MinMaxSetting.js +4 -2
  49. package/dist/cjs/settings/SettingsCard.js +6 -1
  50. package/dist/cjs/settings/SettingsSection.js +4 -4
  51. package/dist/cjs/settings/style.scss +32 -4
  52. package/dist/cjs/style-card/index.js +10 -6
  53. package/dist/cjs/style-card/style.scss +12 -8
  54. package/dist/cjs/style.scss +44 -0
  55. package/dist/cjs/tabbed-navigation/index.js +13 -20
  56. package/dist/cjs/tabbed-navigation/style.scss +56 -34
  57. package/dist/cjs/text-control/index.js +0 -3
  58. package/dist/cjs/text-control/style.scss +0 -126
  59. package/dist/cjs/waiting/index.js +9 -25
  60. package/dist/cjs/waiting/style.scss +9 -20
  61. package/dist/cjs/web-preview/index.js +18 -30
  62. package/dist/cjs/web-preview/style.scss +33 -26
  63. package/dist/cjs/with-wizard/index.js +4 -2
  64. package/dist/cjs/with-wizard/style.scss +77 -89
  65. package/dist/cjs/with-wizard-screen/index.js +17 -21
  66. package/dist/cjs/with-wizard-screen/style.scss +74 -121
  67. package/dist/cjs/wizard/components/WizardError.js +86 -0
  68. package/dist/cjs/wizard/index.js +145 -0
  69. package/dist/cjs/wizard/store/index.js +178 -0
  70. package/dist/cjs/wizard/store/utils.js +31 -0
  71. package/dist/esm/action-card/index.js +33 -23
  72. package/dist/esm/action-card/style.scss +52 -27
  73. package/dist/esm/autocomplete-tokenfield/style.scss +4 -4
  74. package/dist/esm/autocomplete-with-suggestions/index.js +3 -2
  75. package/dist/esm/autocomplete-with-suggestions/style.scss +19 -20
  76. package/dist/esm/button/index.js +2 -12
  77. package/dist/esm/button/style.scss +3 -344
  78. package/dist/esm/button-card/index.js +10 -6
  79. package/dist/esm/button-card/style.scss +69 -35
  80. package/dist/esm/card/index.js +3 -1
  81. package/dist/esm/card/style.scss +34 -61
  82. package/dist/esm/category-autocomplete/index.js +54 -14
  83. package/dist/esm/category-autocomplete/style.scss +19 -15
  84. package/dist/esm/color-picker/index.js +15 -34
  85. package/dist/esm/color-picker/style.scss +20 -160
  86. package/dist/esm/custom-select-control/style.scss +12 -42
  87. package/dist/esm/footer/index.js +21 -7
  88. package/dist/esm/footer/style.scss +9 -10
  89. package/dist/esm/form-token-field/index.js +2 -2
  90. package/dist/esm/form-token-field/style.scss +8 -103
  91. package/dist/esm/global-notices/index.js +2 -1
  92. package/dist/esm/grid/index.js +1 -1
  93. package/dist/esm/grid/style.scss +29 -1
  94. package/dist/esm/handoff/index.js +7 -7
  95. package/dist/esm/image-upload/index.js +1 -1
  96. package/dist/esm/image-upload/style.scss +10 -11
  97. package/dist/esm/index.js +3 -8
  98. package/dist/esm/modal/index.js +0 -3
  99. package/dist/esm/modal/style.scss +19 -131
  100. package/dist/esm/newspack-icon/index.js +4 -2
  101. package/dist/esm/newspack-icon/style.scss +15 -0
  102. package/dist/esm/notice/index.js +8 -3
  103. package/dist/esm/notice/style.scss +38 -10
  104. package/dist/esm/plugin-installer/index.js +5 -2
  105. package/dist/esm/plugin-settings/SettingsSection.js +74 -46
  106. package/dist/esm/plugin-settings/index.js +48 -34
  107. package/dist/esm/plugin-settings/style.scss +7 -0
  108. package/dist/esm/plugin-toggle/index.js +23 -1
  109. package/dist/esm/popover/style.scss +2 -2
  110. package/dist/esm/radio-control/style.scss +1 -2
  111. package/dist/esm/section-header/index.js +17 -5
  112. package/dist/esm/section-header/style.scss +26 -1
  113. package/dist/esm/select-control/ButtonGroupControl.js +8 -8
  114. package/dist/esm/select-control/GroupedSelectControl.js +33 -30
  115. package/dist/esm/select-control/index.js +1 -2
  116. package/dist/esm/select-control/style.scss +46 -87
  117. package/dist/esm/settings/MinMaxSetting.js +3 -2
  118. package/dist/esm/settings/SettingsCard.js +6 -1
  119. package/dist/esm/settings/SettingsSection.js +5 -5
  120. package/dist/esm/settings/style.scss +32 -4
  121. package/dist/esm/style-card/index.js +11 -8
  122. package/dist/esm/style-card/style.scss +12 -8
  123. package/dist/esm/style.scss +44 -0
  124. package/dist/esm/tabbed-navigation/index.js +14 -22
  125. package/dist/esm/tabbed-navigation/style.scss +56 -34
  126. package/dist/esm/text-control/index.js +0 -3
  127. package/dist/esm/text-control/style.scss +0 -126
  128. package/dist/esm/waiting/index.js +9 -22
  129. package/dist/esm/waiting/style.scss +9 -20
  130. package/dist/esm/web-preview/index.js +12 -25
  131. package/dist/esm/web-preview/style.scss +33 -26
  132. package/dist/esm/with-wizard/index.js +4 -2
  133. package/dist/esm/with-wizard/style.scss +77 -89
  134. package/dist/esm/with-wizard-screen/index.js +18 -22
  135. package/dist/esm/with-wizard-screen/style.scss +74 -121
  136. package/dist/esm/wizard/components/WizardError.js +78 -0
  137. package/dist/esm/wizard/index.js +128 -0
  138. package/dist/esm/wizard/store/index.js +161 -0
  139. package/dist/esm/wizard/store/utils.js +17 -0
  140. package/package.json +2 -1
  141. package/shared/scss/_colors.scss +15 -0
  142. package/src/action-card/index.js +31 -19
  143. package/src/action-card/style.scss +52 -27
  144. package/src/autocomplete-tokenfield/style.scss +4 -4
  145. package/src/autocomplete-with-suggestions/index.js +4 -2
  146. package/src/autocomplete-with-suggestions/style.scss +19 -20
  147. package/src/button/index.js +2 -9
  148. package/src/button/style.scss +3 -344
  149. package/src/button-card/index.js +19 -5
  150. package/src/button-card/style.scss +69 -35
  151. package/src/card/index.js +4 -0
  152. package/src/card/style.scss +34 -61
  153. package/src/category-autocomplete/index.js +51 -18
  154. package/src/category-autocomplete/style.scss +19 -15
  155. package/src/color-picker/index.js +16 -22
  156. package/src/color-picker/style.scss +20 -160
  157. package/src/custom-select-control/style.scss +12 -42
  158. package/src/footer/index.js +19 -8
  159. package/src/footer/style.scss +9 -10
  160. package/src/form-token-field/index.js +1 -1
  161. package/src/form-token-field/style.scss +8 -103
  162. package/src/global-notices/index.js +1 -1
  163. package/src/grid/index.js +1 -1
  164. package/src/grid/style.scss +29 -1
  165. package/src/handoff/index.js +7 -7
  166. package/src/image-upload/style.scss +10 -11
  167. package/src/index.js +3 -7
  168. package/src/modal/index.js +2 -5
  169. package/src/modal/style.scss +19 -131
  170. package/src/newspack-icon/index.js +7 -2
  171. package/src/newspack-icon/style.scss +15 -0
  172. package/src/notice/index.js +7 -1
  173. package/src/notice/style.scss +38 -10
  174. package/src/plugin-installer/index.js +4 -2
  175. package/src/plugin-settings/SettingsSection.js +65 -27
  176. package/src/plugin-settings/index.js +45 -18
  177. package/src/plugin-settings/style.scss +7 -0
  178. package/src/plugin-toggle/index.js +35 -9
  179. package/src/popover/style.scss +2 -2
  180. package/src/radio-control/style.scss +1 -2
  181. package/src/section-header/index.js +25 -6
  182. package/src/section-header/style.scss +26 -1
  183. package/src/select-control/ButtonGroupControl.js +13 -6
  184. package/src/select-control/GroupedSelectControl.js +26 -24
  185. package/src/select-control/index.js +1 -2
  186. package/src/select-control/style.scss +46 -87
  187. package/src/settings/MinMaxSetting.js +2 -1
  188. package/src/settings/SettingsCard.js +9 -7
  189. package/src/settings/SettingsSection.js +4 -4
  190. package/src/settings/style.scss +32 -4
  191. package/src/style-card/index.js +14 -16
  192. package/src/style-card/style.scss +12 -8
  193. package/src/style.scss +44 -0
  194. package/src/tabbed-navigation/index.js +12 -24
  195. package/src/tabbed-navigation/style.scss +56 -34
  196. package/src/text-control/index.js +1 -2
  197. package/src/text-control/style.scss +0 -126
  198. package/src/waiting/index.js +7 -18
  199. package/src/waiting/style.scss +9 -20
  200. package/src/web-preview/index.js +12 -33
  201. package/src/web-preview/style.scss +33 -26
  202. package/src/with-wizard/index.js +7 -5
  203. package/src/with-wizard/style.scss +77 -89
  204. package/src/with-wizard-screen/index.js +14 -17
  205. package/src/with-wizard-screen/style.scss +74 -121
  206. package/src/wizard/components/WizardError.js +57 -0
  207. package/src/wizard/index.js +133 -0
  208. package/src/wizard/store/index.js +126 -0
  209. package/src/wizard/store/utils.js +16 -0
  210. package/dist/cjs/button-group/index.js +0 -57
  211. package/dist/cjs/button-group/style.scss +0 -68
  212. package/dist/cjs/checkbox-control/index.js +0 -63
  213. package/dist/cjs/checkbox-control/style.scss +0 -78
  214. package/dist/cjs/preview-box/index.js +0 -36
  215. package/dist/cjs/preview-box/style.scss +0 -18
  216. package/dist/cjs/textarea-control/index.js +0 -54
  217. package/dist/cjs/textarea-control/style.scss +0 -76
  218. package/dist/cjs/toggle-control/index.js +0 -58
  219. package/dist/cjs/toggle-control/style.scss +0 -74
  220. package/dist/cjs/toggle-group/index.js +0 -71
  221. package/dist/cjs/toggle-group/style.scss +0 -28
  222. package/dist/cjs/wizard-pagination/index.js +0 -71
  223. package/dist/cjs/wizard-pagination/style.scss +0 -74
  224. package/dist/esm/button-group/index.js +0 -43
  225. package/dist/esm/button-group/style.scss +0 -68
  226. package/dist/esm/checkbox-control/index.js +0 -49
  227. package/dist/esm/checkbox-control/style.scss +0 -78
  228. package/dist/esm/preview-box/index.js +0 -30
  229. package/dist/esm/preview-box/style.scss +0 -18
  230. package/dist/esm/textarea-control/index.js +0 -40
  231. package/dist/esm/textarea-control/style.scss +0 -76
  232. package/dist/esm/toggle-control/index.js +0 -44
  233. package/dist/esm/toggle-control/style.scss +0 -74
  234. package/dist/esm/toggle-group/index.js +0 -58
  235. package/dist/esm/toggle-group/style.scss +0 -28
  236. package/dist/esm/wizard-pagination/index.js +0 -57
  237. package/dist/esm/wizard-pagination/style.scss +0 -74
  238. package/src/button-group/index.js +0 -35
  239. package/src/button-group/style.scss +0 -68
  240. package/src/checkbox-control/index.js +0 -38
  241. package/src/checkbox-control/style.scss +0 -78
  242. package/src/preview-box/index.js +0 -18
  243. package/src/preview-box/style.scss +0 -18
  244. package/src/textarea-control/index.js +0 -32
  245. package/src/textarea-control/style.scss +0 -76
  246. package/src/toggle-control/index.js +0 -38
  247. package/src/toggle-control/style.scss +0 -74
  248. package/src/toggle-group/index.js +0 -43
  249. package/src/toggle-group/style.scss +0 -28
  250. package/src/wizard-pagination/index.js +0 -59
  251. package/src/wizard-pagination/style.scss +0 -74
@@ -6,6 +6,43 @@
6
6
  @import '../../../shared/scss/colors';
7
7
 
8
8
  .newspack-wizard {
9
+ // Color
10
+ --wp-admin-theme-color: #{$primary-500};
11
+ --wp-admin-theme-color--rgb: #{$primary-500--rgb};
12
+ --wp-admin-theme-color-darker-10: #{$primary-600};
13
+ --wp-admin-theme-color-darker-10--rgb: #{$primary-600--rgb};
14
+ --wp-admin-theme-color-darker-20: #{$primary-700};
15
+ --wp-admin-theme-color-darker-20--rgb: #{$primary-700--rgb};
16
+
17
+ color: $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
  }
@@ -15,12 +52,25 @@
15
52
  border-bottom: 1px solid $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: $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 {
@@ -35,15 +85,17 @@
35
85
  &:not( .newspack-icon ) {
36
86
  background: $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,26 @@
51
103
  opacity: 1;
52
104
  }
53
105
  }
54
- }
55
-
56
- a:focus-visible {
57
- outline: none !important;
58
106
 
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;
107
+ &:focus-visible {
108
+ outline: none !important;
109
+
110
+ &::before {
111
+ border: 2px solid white;
112
+ border-radius: 2px;
113
+ bottom: 5px;
114
+ content: '';
115
+ display: block;
116
+ left: 6px;
117
+ position: absolute;
118
+ right: 6px;
119
+ top: 6px;
120
+ }
69
121
  }
70
122
  }
71
123
  }
72
124
 
73
125
  &__content {
74
- color: $gray-700;
75
- font-size: 14px;
76
- line-height: 24px;
77
126
  margin: 0 auto;
78
127
  max-width: 1208px;
79
128
  padding: 0 16px;
@@ -84,49 +133,13 @@
84
133
 
85
134
  // Typography
86
135
 
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
136
  strong {
124
137
  font-weight: bold;
125
138
  }
126
139
 
127
140
  small {
128
141
  font-size: 12px;
129
- line-height: 16px;
142
+ line-height: 1.4;
130
143
  }
131
144
 
132
145
  // Thematic Break
@@ -141,70 +154,10 @@
141
154
  margin: 64px 0;
142
155
  }
143
156
  }
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
157
  }
164
158
 
165
159
  &__above-header {
160
+ border-radius: 0;
166
161
  margin: 0;
167
162
  }
168
163
  }
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,78 @@
1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import { __ as alias__ } from '@wordpress/i18n';
5
+ const __ = alias__;
6
+ import { useSelect } from '@wordpress/data';
7
+ /**
8
+ * Internal dependencies.
9
+ */
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
+
16
+ const parseError = _ref => {
17
+ let {
18
+ data,
19
+ message,
20
+ code
21
+ } = _ref;
22
+ let level = 'fatal';
23
+
24
+ if (!!data && 'level' in data) {
25
+ level = data.level;
26
+ } else if ('rest_invalid_param' === code) {
27
+ level = 'notice';
28
+ }
29
+
30
+ return {
31
+ message,
32
+ level
33
+ };
34
+ };
35
+
36
+ const WizardError = () => {
37
+ const error = useSelect(select => select(WIZARD_STORE_NAMESPACE).getError());
38
+
39
+ if (!error) {
40
+ return null;
41
+ }
42
+
43
+ const {
44
+ level,
45
+ message
46
+ } = parseError(error);
47
+
48
+ if ('fatal' === level) {
49
+ const fallbackURL = typeof newspack_urls !== 'undefined' && newspack_urls.dashboard;
50
+ return _jsxs(Modal, {
51
+ title: __('Unrecoverable error'),
52
+ onRequestClose: fallbackURL ? () => window.location = fallbackURL : undefined,
53
+ children: [_jsx(Notice, {
54
+ noticeText: message,
55
+ isError: true,
56
+ rawHTML: true
57
+ }), fallbackURL && _jsx(Card, {
58
+ buttonsCard: true,
59
+ noBorder: true,
60
+ className: "justify-end",
61
+ children: _jsx(Button, {
62
+ isPrimary: true,
63
+ href: fallbackURL,
64
+ children: __('Return to Dashboard', 'newspack')
65
+ })
66
+ })]
67
+ });
68
+ }
69
+
70
+ return _jsx(Notice, {
71
+ isError: true,
72
+ className: "newspack-wizard__above-header",
73
+ noticeText: message,
74
+ rawHTML: true
75
+ });
76
+ };
77
+
78
+ export default WizardError;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import classnames from 'classnames';
5
+ /**
6
+ * WordPress dependencies.
7
+ */
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
+ * Internal dependencies
16
+ */
17
+
18
+ import { Footer, Notice, Button, NewspackIcon, TabbedNavigation, PluginInstaller } 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
+
34
+ const Wizard = _ref => {
35
+ let {
36
+ sections = [],
37
+ apiSlug,
38
+ headerText,
39
+ subHeaderText,
40
+ hasSimpleFooter,
41
+ className,
42
+ renderAboveSections,
43
+ requiredPlugins = []
44
+ } = _ref;
45
+ const isLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isLoading());
46
+ const isQuietLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isQuietLoading()); // Trigger initial data fetch. Some sections might not use the wizard data,
47
+ // but for consistency, fetching is triggered regardless of the section.
48
+
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
+
53
+ if (!pluginRequirementsSatisfied) {
54
+ headerText = requiredPlugins.length > 1 ? __('Required plugins', 'newspack') : __('Required plugin', 'newspack');
55
+ displayedSections = [{
56
+ path: '/',
57
+ render: () => _jsx(PluginInstaller, {
58
+ plugins: requiredPlugins,
59
+ onStatus: _ref2 => {
60
+ let {
61
+ complete
62
+ } = _ref2;
63
+ return setPluginRequirementsSatisfied(complete);
64
+ }
65
+ })
66
+ }];
67
+ }
68
+
69
+ return _jsxs(_Fragment, {
70
+ children: [_jsx(WizardError, {}), _jsx("div", {
71
+ className: classnames(isLoading ? 'newspack-wizard__is-loading' : 'newspack-wizard__is-loaded', {
72
+ 'newspack-wizard__is-loading-quiet': isQuietLoading
73
+ }),
74
+ children: _jsxs(HashRouter, {
75
+ hashType: "slash",
76
+ children: [newspack_aux_data.is_debug_mode && _jsx(Notice, {
77
+ debugMode: true
78
+ }), _jsx("div", {
79
+ className: "bg-white",
80
+ children: _jsx("div", {
81
+ className: "newspack-wizard__header__inner",
82
+ children: _jsxs("div", {
83
+ className: "newspack-wizard__title",
84
+ children: [_jsx(Button, {
85
+ isLink: true,
86
+ href: newspack_urls.dashboard,
87
+ label: __('Return to Dashboard', 'newspack'),
88
+ showTooltip: true,
89
+ icon: category,
90
+ iconSize: 36,
91
+ children: _jsx(NewspackIcon, {
92
+ size: 36
93
+ })
94
+ }), _jsxs("div", {
95
+ children: [headerText && _jsx("h2", {
96
+ children: headerText
97
+ }), subHeaderText && _jsx("span", {
98
+ children: subHeaderText
99
+ })]
100
+ })]
101
+ })
102
+ })
103
+ }), displayedSections.length > 1 && _jsx(TabbedNavigation, {
104
+ items: displayedSections
105
+ }), _jsxs(Switch, {
106
+ children: [displayedSections.map((section, index) => {
107
+ const SectionComponent = section.render;
108
+ return _jsx(Route, {
109
+ path: section.path,
110
+ children: _jsxs("div", {
111
+ className: classnames('newspack-wizard newspack-wizard__content', className),
112
+ children: ['function' === typeof renderAboveSections ? renderAboveSections() : null, _jsx(SectionComponent, {})]
113
+ })
114
+ }, index);
115
+ }), _jsx(Redirect, {
116
+ to: displayedSections[0].path
117
+ })]
118
+ })]
119
+ })
120
+ }), !isLoading && _jsx(Footer, {
121
+ simple: hasSimpleFooter
122
+ })]
123
+ });
124
+ };
125
+
126
+ Wizard.useWizardData = useWizardData;
127
+ Wizard.STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
128
+ export default Wizard;
@@ -0,0 +1,161 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import { set, get, isEmpty } from 'lodash';
5
+ /**
6
+ * WordPress dependencies.
7
+ */
8
+
9
+ import apiFetch from '@wordpress/api-fetch';
10
+ import { createReduxStore, register, dispatch, select } from '@wordpress/data';
11
+ import { createAction } from './utils.js';
12
+ export const WIZARD_STORE_NAMESPACE = 'newspack/wizards';
13
+ const DEFAULT_STATE = {
14
+ isLoading: true,
15
+ isQuietLoading: false,
16
+ apiData: {},
17
+ error: null
18
+ };
19
+ /**
20
+ * wordpress/data does not trigger a component re-render
21
+ * on deep state change (via lodash's set function)
22
+ * unless the state was cloned first.
23
+ */
24
+
25
+ const clone = objectToClone => JSON.parse(JSON.stringify(objectToClone));
26
+
27
+ const reducer = function () {
28
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
29
+ let {
30
+ type,
31
+ payload = {}
32
+ } = arguments.length > 1 ? arguments[1] : undefined;
33
+
34
+ switch (type) {
35
+ case 'START_LOADING_DATA':
36
+ if (payload.isQuietLoading) {
37
+ return { ...state,
38
+ isQuietLoading: true
39
+ };
40
+ }
41
+
42
+ return { ...state,
43
+ isLoading: true
44
+ };
45
+
46
+ case 'FINISH_LOADING_DATA':
47
+ return { ...state,
48
+ isLoading: false,
49
+ isQuietLoading: false
50
+ };
51
+
52
+ case 'SET_API_DATA':
53
+ return set(clone(state), ['apiData', payload.slug], payload.data);
54
+
55
+ case 'UPDATE_WIZARD_SETTINGS':
56
+ return set(clone(state), ['apiData', payload.slug, ...payload.path], payload.value);
57
+
58
+ case 'SET_ERROR':
59
+ return { ...state,
60
+ error: payload
61
+ };
62
+
63
+ default:
64
+ return state;
65
+ }
66
+ };
67
+
68
+ const actions = {
69
+ // Regular actions.
70
+ startLoadingData: createAction('START_LOADING_DATA'),
71
+ finishLoadingData: createAction('FINISH_LOADING_DATA'),
72
+ fetchFromAPI: createAction('FETCH_FROM_API'),
73
+ setAPIDataForWizard: createAction('SET_API_DATA'),
74
+ updateWizardSettings: createAction('UPDATE_WIZARD_SETTINGS'),
75
+ setError: createAction('SET_ERROR'),
76
+
77
+ // Async actions. These will not show up in Redux devtools.
78
+ *saveWizardSettings(_ref) {
79
+ let {
80
+ slug,
81
+ section = '',
82
+ payloadPath = false,
83
+ updatePayload = null
84
+ } = _ref;
85
+
86
+ // Optionally data can be updated before saving - an immediate update case
87
+ // (without an explicit "save" action).
88
+ if (updatePayload) {
89
+ yield actions.updateWizardSettings({
90
+ slug,
91
+ ...updatePayload
92
+ });
93
+ }
94
+
95
+ const wizardState = select(WIZARD_STORE_NAMESPACE).getWizardAPIData(slug);
96
+ const updatedData = yield actions.fetchFromAPI({
97
+ path: `/newspack/v1/wizard/${slug}/${section}`,
98
+ method: 'POST',
99
+ data: payloadPath ? get(wizardState, payloadPath) : wizardState,
100
+ isQuietFetch: true
101
+ });
102
+
103
+ if (!isEmpty(updatedData)) {
104
+ return actions.setAPIDataForWizard({
105
+ slug,
106
+ data: updatedData
107
+ });
108
+ }
109
+ },
110
+
111
+ *wizardApiFetch(fetchConfig) {
112
+ // Just a proxy to fetchFromAPI, but it has to be a generator.
113
+ const result = yield actions.fetchFromAPI(fetchConfig);
114
+ return result;
115
+ }
116
+
117
+ };
118
+ const selectors = {
119
+ isLoading: state => state.isLoading,
120
+ isQuietLoading: state => state.isQuietLoading,
121
+ getWizardAPIData: (state, slug) => state.apiData[slug] || {},
122
+ getError: state => state.error
123
+ };
124
+ const store = createReduxStore(WIZARD_STORE_NAMESPACE, {
125
+ reducer,
126
+ actions,
127
+ selectors,
128
+ controls: {
129
+ FETCH_FROM_API: action => {
130
+ dispatch(WIZARD_STORE_NAMESPACE).startLoadingData({
131
+ isQuietLoading: Boolean(action.payload.isQuietFetch)
132
+ });
133
+ return apiFetch(action.payload).catch(error => {
134
+ dispatch(WIZARD_STORE_NAMESPACE).setError(error);
135
+ return {
136
+ error
137
+ };
138
+ }).finally(result => {
139
+ dispatch(WIZARD_STORE_NAMESPACE).finishLoadingData();
140
+ return result;
141
+ });
142
+ }
143
+ },
144
+ resolvers: {
145
+ *getWizardAPIData(slug) {
146
+ if (slug) {
147
+ const data = yield actions.fetchFromAPI({
148
+ path: `/newspack/v1/wizard/${slug}`
149
+ });
150
+ return actions.setAPIDataForWizard({
151
+ slug,
152
+ data
153
+ });
154
+ }
155
+
156
+ return actions.finishLoadingData();
157
+ }
158
+
159
+ }
160
+ });
161
+ export default (() => register(store));
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ /**
6
+ * Internal dependencies
7
+ */
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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "newspack-components",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Newspack design system components",
5
5
  "author": "Automattic",
6
6
  "license": "GPL-2.0-or-later",
@@ -30,6 +30,7 @@
30
30
  "@wordpress/icons": "^6.1.0",
31
31
  "classnames": "^2.3.1",
32
32
  "lodash": "^4.17.21",
33
+ "moment-range": "^3.1.1",
33
34
  "qs": "^6.10.1",
34
35
  "react-daterange-picker": "^2.0.1",
35
36
  "react-router-dom": "^5.3.0"
@@ -1,3 +1,4 @@
1
+ // HEX
1
2
  $primary-000: #f5fdff;
2
3
  $primary-050: #d6f6ff;
3
4
  $primary-100: #b4e4ff;
@@ -10,3 +11,17 @@ $primary-700: #1522af;
10
11
  $primary-800: #0b0b8d;
11
12
  $primary-900: #0d046e;
12
13
  $primary-950: #0e0052;
14
+
15
+ // RGB
16
+ $primary-000--rgb: 245, 253, 255;
17
+ $primary-050--rgb: 214, 246, 255;
18
+ $primary-100--rgb: 180, 228, 255;
19
+ $primary-200--rgb: 147, 204, 253;
20
+ $primary-300--rgb: 114, 175, 251;
21
+ $primary-400--rgb: 82, 141, 252;
22
+ $primary-500--rgb: 51, 102, 255;
23
+ $primary-600--rgb: 34, 64, 213;
24
+ $primary-700--rgb: 21, 34, 175;
25
+ $primary-800--rgb: 11, 11, 141;
26
+ $primary-900--rgb: 13, 4, 110;
27
+ $primary-950--rgb: 14, 0, 82;