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,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _i18n = require("@wordpress/i18n");
9
+
10
+ var _data = require("@wordpress/data");
11
+
12
+ var _ = require("../..");
13
+
14
+ var _store = require("../store");
15
+
16
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
17
+
18
+ /**
19
+ * WordPress dependencies.
20
+ */
21
+ const __ = _i18n.__;
22
+
23
+ const parseError = _ref => {
24
+ let {
25
+ data,
26
+ message,
27
+ code
28
+ } = _ref;
29
+ let level = 'fatal';
30
+
31
+ if (!!data && 'level' in data) {
32
+ level = data.level;
33
+ } else if ('rest_invalid_param' === code) {
34
+ level = 'notice';
35
+ }
36
+
37
+ return {
38
+ message,
39
+ level
40
+ };
41
+ };
42
+
43
+ const WizardError = () => {
44
+ const error = (0, _data.useSelect)(select => select(_store.WIZARD_STORE_NAMESPACE).getError());
45
+
46
+ if (!error) {
47
+ return null;
48
+ }
49
+
50
+ const {
51
+ level,
52
+ message
53
+ } = parseError(error);
54
+
55
+ if ('fatal' === level) {
56
+ const fallbackURL = typeof newspack_urls !== 'undefined' && newspack_urls.dashboard;
57
+ return (0, _jsxRuntime.jsxs)(_.Modal, {
58
+ title: __('Unrecoverable error'),
59
+ onRequestClose: fallbackURL ? () => window.location = fallbackURL : undefined,
60
+ children: [(0, _jsxRuntime.jsx)(_.Notice, {
61
+ noticeText: message,
62
+ isError: true,
63
+ rawHTML: true
64
+ }), fallbackURL && (0, _jsxRuntime.jsx)(_.Card, {
65
+ buttonsCard: true,
66
+ noBorder: true,
67
+ className: "justify-end",
68
+ children: (0, _jsxRuntime.jsx)(_.Button, {
69
+ isPrimary: true,
70
+ href: fallbackURL,
71
+ children: __('Return to Dashboard', 'newspack')
72
+ })
73
+ })]
74
+ });
75
+ }
76
+
77
+ return (0, _jsxRuntime.jsx)(_.Notice, {
78
+ isError: true,
79
+ className: "newspack-wizard__above-header",
80
+ noticeText: message,
81
+ rawHTML: true
82
+ });
83
+ };
84
+
85
+ var _default = WizardError;
86
+ exports.default = _default;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+
14
+ var _data = require("@wordpress/data");
15
+
16
+ var _element = require("@wordpress/element");
17
+
18
+ var _i18n = require("@wordpress/i18n");
19
+
20
+ var _icons = require("@wordpress/icons");
21
+
22
+ var _ = require("../");
23
+
24
+ var _router = _interopRequireDefault(require("../proxied-imports/router"));
25
+
26
+ var _store = _interopRequireWildcard(require("./store"));
27
+
28
+ var _utils = require("./store/utils");
29
+
30
+ var _WizardError = _interopRequireDefault(require("./components/WizardError"));
31
+
32
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
33
+
34
+ /**
35
+ * External dependencies.
36
+ */
37
+
38
+ /**
39
+ * WordPress dependencies.
40
+ */
41
+ const __ = _i18n.__;
42
+ (0, _store.default)();
43
+ const {
44
+ HashRouter,
45
+ Redirect,
46
+ Route,
47
+ Switch
48
+ } = _router.default;
49
+
50
+ const Wizard = _ref => {
51
+ let {
52
+ sections = [],
53
+ apiSlug,
54
+ headerText,
55
+ subHeaderText,
56
+ hasSimpleFooter,
57
+ className,
58
+ renderAboveSections,
59
+ requiredPlugins = []
60
+ } = _ref;
61
+ const isLoading = (0, _data.useSelect)(select => select(_store.WIZARD_STORE_NAMESPACE).isLoading());
62
+ const isQuietLoading = (0, _data.useSelect)(select => select(_store.WIZARD_STORE_NAMESPACE).isQuietLoading()); // Trigger initial data fetch. Some sections might not use the wizard data,
63
+ // but for consistency, fetching is triggered regardless of the section.
64
+
65
+ (0, _data.useSelect)(select => select(_store.WIZARD_STORE_NAMESPACE).getWizardAPIData(apiSlug));
66
+ let displayedSections = sections.filter(section => !section.isHidden);
67
+ const [pluginRequirementsSatisfied, setPluginRequirementsSatisfied] = (0, _element.useState)(requiredPlugins.length === 0);
68
+
69
+ if (!pluginRequirementsSatisfied) {
70
+ headerText = requiredPlugins.length > 1 ? __('Required plugins', 'newspack') : __('Required plugin', 'newspack');
71
+ displayedSections = [{
72
+ path: '/',
73
+ render: () => (0, _jsxRuntime.jsx)(_.PluginInstaller, {
74
+ plugins: requiredPlugins,
75
+ onStatus: _ref2 => {
76
+ let {
77
+ complete
78
+ } = _ref2;
79
+ return setPluginRequirementsSatisfied(complete);
80
+ }
81
+ })
82
+ }];
83
+ }
84
+
85
+ return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
86
+ children: [(0, _jsxRuntime.jsx)(_WizardError.default, {}), (0, _jsxRuntime.jsx)("div", {
87
+ className: (0, _classnames.default)(isLoading ? 'newspack-wizard__is-loading' : 'newspack-wizard__is-loaded', {
88
+ 'newspack-wizard__is-loading-quiet': isQuietLoading
89
+ }),
90
+ children: (0, _jsxRuntime.jsxs)(HashRouter, {
91
+ hashType: "slash",
92
+ children: [newspack_aux_data.is_debug_mode && (0, _jsxRuntime.jsx)(_.Notice, {
93
+ debugMode: true
94
+ }), (0, _jsxRuntime.jsx)("div", {
95
+ className: "bg-white",
96
+ children: (0, _jsxRuntime.jsx)("div", {
97
+ className: "newspack-wizard__header__inner",
98
+ children: (0, _jsxRuntime.jsxs)("div", {
99
+ className: "newspack-wizard__title",
100
+ children: [(0, _jsxRuntime.jsx)(_.Button, {
101
+ isLink: true,
102
+ href: newspack_urls.dashboard,
103
+ label: __('Return to Dashboard', 'newspack'),
104
+ showTooltip: true,
105
+ icon: _icons.category,
106
+ iconSize: 36,
107
+ children: (0, _jsxRuntime.jsx)(_.NewspackIcon, {
108
+ size: 36
109
+ })
110
+ }), (0, _jsxRuntime.jsxs)("div", {
111
+ children: [headerText && (0, _jsxRuntime.jsx)("h2", {
112
+ children: headerText
113
+ }), subHeaderText && (0, _jsxRuntime.jsx)("span", {
114
+ children: subHeaderText
115
+ })]
116
+ })]
117
+ })
118
+ })
119
+ }), displayedSections.length > 1 && (0, _jsxRuntime.jsx)(_.TabbedNavigation, {
120
+ items: displayedSections
121
+ }), (0, _jsxRuntime.jsxs)(Switch, {
122
+ children: [displayedSections.map((section, index) => {
123
+ const SectionComponent = section.render;
124
+ return (0, _jsxRuntime.jsx)(Route, {
125
+ path: section.path,
126
+ children: (0, _jsxRuntime.jsxs)("div", {
127
+ className: (0, _classnames.default)('newspack-wizard newspack-wizard__content', className),
128
+ children: ['function' === typeof renderAboveSections ? renderAboveSections() : null, (0, _jsxRuntime.jsx)(SectionComponent, {})]
129
+ })
130
+ }, index);
131
+ }), (0, _jsxRuntime.jsx)(Redirect, {
132
+ to: displayedSections[0].path
133
+ })]
134
+ })]
135
+ })
136
+ }), !isLoading && (0, _jsxRuntime.jsx)(_.Footer, {
137
+ simple: hasSimpleFooter
138
+ })]
139
+ });
140
+ };
141
+
142
+ Wizard.useWizardData = _utils.useWizardData;
143
+ Wizard.STORE_NAMESPACE = _store.WIZARD_STORE_NAMESPACE;
144
+ var _default = Wizard;
145
+ exports.default = _default;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.WIZARD_STORE_NAMESPACE = void 0;
9
+
10
+ var _lodash = require("lodash");
11
+
12
+ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
13
+
14
+ var _data = require("@wordpress/data");
15
+
16
+ var _utils = require("./utils.js");
17
+
18
+ /**
19
+ * External dependencies.
20
+ */
21
+
22
+ /**
23
+ * WordPress dependencies.
24
+ */
25
+ const WIZARD_STORE_NAMESPACE = 'newspack/wizards';
26
+ exports.WIZARD_STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
27
+ const DEFAULT_STATE = {
28
+ isLoading: true,
29
+ isQuietLoading: false,
30
+ apiData: {},
31
+ error: null
32
+ };
33
+ /**
34
+ * wordpress/data does not trigger a component re-render
35
+ * on deep state change (via lodash's set function)
36
+ * unless the state was cloned first.
37
+ */
38
+
39
+ const clone = objectToClone => JSON.parse(JSON.stringify(objectToClone));
40
+
41
+ const reducer = function () {
42
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
43
+ let {
44
+ type,
45
+ payload = {}
46
+ } = arguments.length > 1 ? arguments[1] : undefined;
47
+
48
+ switch (type) {
49
+ case 'START_LOADING_DATA':
50
+ if (payload.isQuietLoading) {
51
+ return { ...state,
52
+ isQuietLoading: true
53
+ };
54
+ }
55
+
56
+ return { ...state,
57
+ isLoading: true
58
+ };
59
+
60
+ case 'FINISH_LOADING_DATA':
61
+ return { ...state,
62
+ isLoading: false,
63
+ isQuietLoading: false
64
+ };
65
+
66
+ case 'SET_API_DATA':
67
+ return (0, _lodash.set)(clone(state), ['apiData', payload.slug], payload.data);
68
+
69
+ case 'UPDATE_WIZARD_SETTINGS':
70
+ return (0, _lodash.set)(clone(state), ['apiData', payload.slug, ...payload.path], payload.value);
71
+
72
+ case 'SET_ERROR':
73
+ return { ...state,
74
+ error: payload
75
+ };
76
+
77
+ default:
78
+ return state;
79
+ }
80
+ };
81
+
82
+ const actions = {
83
+ // Regular actions.
84
+ startLoadingData: (0, _utils.createAction)('START_LOADING_DATA'),
85
+ finishLoadingData: (0, _utils.createAction)('FINISH_LOADING_DATA'),
86
+ fetchFromAPI: (0, _utils.createAction)('FETCH_FROM_API'),
87
+ setAPIDataForWizard: (0, _utils.createAction)('SET_API_DATA'),
88
+ updateWizardSettings: (0, _utils.createAction)('UPDATE_WIZARD_SETTINGS'),
89
+ setError: (0, _utils.createAction)('SET_ERROR'),
90
+
91
+ // Async actions. These will not show up in Redux devtools.
92
+ *saveWizardSettings(_ref) {
93
+ let {
94
+ slug,
95
+ section = '',
96
+ payloadPath = false,
97
+ updatePayload = null
98
+ } = _ref;
99
+
100
+ // Optionally data can be updated before saving - an immediate update case
101
+ // (without an explicit "save" action).
102
+ if (updatePayload) {
103
+ yield actions.updateWizardSettings({
104
+ slug,
105
+ ...updatePayload
106
+ });
107
+ }
108
+
109
+ const wizardState = (0, _data.select)(WIZARD_STORE_NAMESPACE).getWizardAPIData(slug);
110
+ const updatedData = yield actions.fetchFromAPI({
111
+ path: `/newspack/v1/wizard/${slug}/${section}`,
112
+ method: 'POST',
113
+ data: payloadPath ? (0, _lodash.get)(wizardState, payloadPath) : wizardState,
114
+ isQuietFetch: true
115
+ });
116
+
117
+ if (!(0, _lodash.isEmpty)(updatedData)) {
118
+ return actions.setAPIDataForWizard({
119
+ slug,
120
+ data: updatedData
121
+ });
122
+ }
123
+ },
124
+
125
+ *wizardApiFetch(fetchConfig) {
126
+ // Just a proxy to fetchFromAPI, but it has to be a generator.
127
+ const result = yield actions.fetchFromAPI(fetchConfig);
128
+ return result;
129
+ }
130
+
131
+ };
132
+ const selectors = {
133
+ isLoading: state => state.isLoading,
134
+ isQuietLoading: state => state.isQuietLoading,
135
+ getWizardAPIData: (state, slug) => state.apiData[slug] || {},
136
+ getError: state => state.error
137
+ };
138
+ const store = (0, _data.createReduxStore)(WIZARD_STORE_NAMESPACE, {
139
+ reducer,
140
+ actions,
141
+ selectors,
142
+ controls: {
143
+ FETCH_FROM_API: action => {
144
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).startLoadingData({
145
+ isQuietLoading: Boolean(action.payload.isQuietFetch)
146
+ });
147
+ return (0, _apiFetch.default)(action.payload).catch(error => {
148
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).setError(error);
149
+ return {
150
+ error
151
+ };
152
+ }).finally(result => {
153
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).finishLoadingData();
154
+ return result;
155
+ });
156
+ }
157
+ },
158
+ resolvers: {
159
+ *getWizardAPIData(slug) {
160
+ if (slug) {
161
+ const data = yield actions.fetchFromAPI({
162
+ path: `/newspack/v1/wizard/${slug}`
163
+ });
164
+ return actions.setAPIDataForWizard({
165
+ slug,
166
+ data
167
+ });
168
+ }
169
+
170
+ return actions.finishLoadingData();
171
+ }
172
+
173
+ }
174
+ });
175
+
176
+ var _default = () => (0, _data.register)(store);
177
+
178
+ exports.default = _default;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useWizardData = exports.createAction = void 0;
7
+
8
+ var _data = require("@wordpress/data");
9
+
10
+ var _ = require(".");
11
+
12
+ /**
13
+ * WordPress dependencies.
14
+ */
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ const createAction = type => payload => ({
20
+ type,
21
+ payload
22
+ });
23
+
24
+ exports.createAction = createAction;
25
+
26
+ const useWizardData = function (wizardName) {
27
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
28
+ return (0, _data.useSelect)(select => select(_.WIZARD_STORE_NAMESPACE).getWizardAPIData(`newspack-${wizardName}-wizard`)) || defaultValue;
29
+ };
30
+
31
+ exports.useWizardData = useWizardData;