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
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.WIZARD_STORE_NAMESPACE = void 0;
8
+ var _set = _interopRequireDefault(require("lodash/set"));
9
+ var _get = _interopRequireDefault(require("lodash/get"));
10
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
11
+ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
12
+ var _data = require("@wordpress/data");
13
+ var _utils = require("./utils.js");
14
+ /**
15
+ * External dependencies.
16
+ */
17
+
18
+ /**
19
+ * WordPress dependencies.
20
+ */
21
+
22
+ const WIZARD_STORE_NAMESPACE = 'newspack/wizards';
23
+ exports.WIZARD_STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
24
+ const DEFAULT_STATE = {
25
+ isLoading: true,
26
+ isQuietLoading: false,
27
+ apiData: {},
28
+ error: null
29
+ };
30
+
31
+ /**
32
+ * wordpress/data does not trigger a component re-render
33
+ * on deep state change (via lodash's set function)
34
+ * unless the state was cloned first.
35
+ */
36
+ const clone = objectToClone => JSON.parse(JSON.stringify(objectToClone));
37
+ const reducer = function () {
38
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
39
+ let {
40
+ type,
41
+ payload = {}
42
+ } = arguments.length > 1 ? arguments[1] : undefined;
43
+ switch (type) {
44
+ case 'START_LOADING_DATA':
45
+ if (payload.isQuietLoading) {
46
+ return {
47
+ ...state,
48
+ isQuietLoading: true
49
+ };
50
+ }
51
+ return {
52
+ ...state,
53
+ isLoading: true
54
+ };
55
+ case 'FINISH_LOADING_DATA':
56
+ return {
57
+ ...state,
58
+ isLoading: false,
59
+ isQuietLoading: false
60
+ };
61
+ case 'SET_API_DATA':
62
+ return (0, _set.default)(clone(state), ['apiData', payload.slug], payload.data);
63
+ case 'UPDATE_WIZARD_SETTINGS':
64
+ return (0, _set.default)(clone(state), ['apiData', payload.slug, ...payload.path], payload.value);
65
+ case 'SET_ERROR':
66
+ return {
67
+ ...state,
68
+ error: payload
69
+ };
70
+ default:
71
+ return state;
72
+ }
73
+ };
74
+ const actions = {
75
+ // Regular actions.
76
+ startLoadingData: (0, _utils.createAction)('START_LOADING_DATA'),
77
+ finishLoadingData: (0, _utils.createAction)('FINISH_LOADING_DATA'),
78
+ fetchFromAPI: (0, _utils.createAction)('FETCH_FROM_API'),
79
+ setAPIDataForWizard: (0, _utils.createAction)('SET_API_DATA'),
80
+ updateWizardSettings: (0, _utils.createAction)('UPDATE_WIZARD_SETTINGS'),
81
+ setError: (0, _utils.createAction)('SET_ERROR'),
82
+ // Async actions. These will not show up in Redux devtools.
83
+ saveWizardSettings(_ref) {
84
+ let {
85
+ slug,
86
+ section = '',
87
+ payloadPath = false,
88
+ updatePayload = null
89
+ } = _ref;
90
+ return function* () {
91
+ // Optionally data can be updated before saving - an immediate update case
92
+ // (without an explicit "save" action).
93
+ if (updatePayload) {
94
+ yield actions.updateWizardSettings({
95
+ slug,
96
+ ...updatePayload
97
+ });
98
+ }
99
+ const wizardState = (0, _data.select)(WIZARD_STORE_NAMESPACE).getWizardAPIData(slug);
100
+ const updatedData = yield actions.fetchFromAPI({
101
+ path: `/newspack/v1/wizard/${slug}/${section}`,
102
+ method: 'POST',
103
+ data: payloadPath ? (0, _get.default)(wizardState, payloadPath) : wizardState,
104
+ isQuietFetch: true
105
+ });
106
+ if (!(0, _isEmpty.default)(updatedData) && !updatedData.error) {
107
+ return actions.setAPIDataForWizard({
108
+ slug,
109
+ data: updatedData
110
+ });
111
+ }
112
+ }();
113
+ },
114
+ *wizardApiFetch(fetchConfig) {
115
+ // Just a proxy to fetchFromAPI, but it has to be a generator.
116
+ const result = yield actions.fetchFromAPI(fetchConfig);
117
+ return result;
118
+ }
119
+ };
120
+ const selectors = {
121
+ isLoading: state => state.isLoading,
122
+ isQuietLoading: state => state.isQuietLoading,
123
+ getWizardAPIData: (state, slug) => state.apiData[slug] || {},
124
+ getError: state => state.error
125
+ };
126
+ const store = (0, _data.createReduxStore)(WIZARD_STORE_NAMESPACE, {
127
+ reducer,
128
+ actions,
129
+ selectors,
130
+ controls: {
131
+ FETCH_FROM_API: action => {
132
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).startLoadingData({
133
+ isQuietLoading: Boolean(action.payload.isQuietFetch)
134
+ });
135
+ return (0, _apiFetch.default)(action.payload).then(data => {
136
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).setError(null);
137
+ return data;
138
+ }).catch(error => {
139
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).setError(error);
140
+ return {
141
+ error
142
+ };
143
+ }).finally(result => {
144
+ (0, _data.dispatch)(WIZARD_STORE_NAMESPACE).finishLoadingData();
145
+ return result;
146
+ });
147
+ }
148
+ },
149
+ resolvers: {
150
+ *getWizardAPIData(slug) {
151
+ if (slug) {
152
+ const data = yield actions.fetchFromAPI({
153
+ path: `/newspack/v1/wizard/${slug}`
154
+ });
155
+ return actions.setAPIDataForWizard({
156
+ slug,
157
+ data
158
+ });
159
+ }
160
+ return actions.finishLoadingData();
161
+ }
162
+ }
163
+ });
164
+ var _default = () => (0, _data.register)(store);
165
+ exports.default = _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useWizardData = exports.createAction = void 0;
7
+ var _data = require("@wordpress/data");
8
+ var _ = require(".");
9
+ /**
10
+ * WordPress dependencies.
11
+ */
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+
17
+ const createAction = type => payload => ({
18
+ type,
19
+ payload
20
+ });
21
+ exports.createAction = createAction;
22
+ const useWizardData = function (wizardName) {
23
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
24
+ return (0, _data.useSelect)(select => select(_.WIZARD_STORE_NAMESPACE).getWizardAPIData(`newspack-${wizardName}-wizard`)) || defaultValue;
25
+ };
26
+ exports.useWizardData = useWizardData;
@@ -0,0 +1,148 @@
1
+ @import '~@wordpress/base-styles/colors';
2
+ @import '../../../shared/scss/colors';
3
+
4
+ .newspack-wizard {
5
+ &__title {
6
+ align-items: center;
7
+ border-bottom: 1px solid $gray-300;
8
+ display: flex;
9
+
10
+ h1 {
11
+ color: $gray-900;
12
+ font-size: 21px;
13
+ line-height: 30px;
14
+ margin: 0;
15
+ padding: 0 24px;
16
+ }
17
+
18
+ svg {
19
+ fill: white;
20
+ margin: 0 !important;
21
+
22
+ &.newspack-icon {
23
+ flex: 0 0 36px;
24
+ margin-bottom: -1px !important;
25
+ }
26
+
27
+ &:not( .newspack-icon ) {
28
+ background: $primary-500;
29
+ left: 50%;
30
+ margin: -18px 0 0 -18px !important;
31
+ opacity: 0;
32
+ position: absolute;
33
+ top: 50%;
34
+ transition: opacity 125ms ease-in-out;
35
+ }
36
+ }
37
+
38
+ a {
39
+ position: relative;
40
+
41
+ &:hover {
42
+ svg {
43
+ opacity: 1;
44
+ }
45
+ }
46
+ }
47
+
48
+ a:focus-visible {
49
+ outline: none !important;
50
+
51
+ &::before {
52
+ border: 2px solid white;
53
+ border-radius: 3px;
54
+ bottom: 5px;
55
+ content: '';
56
+ display: block;
57
+ left: 6px;
58
+ position: absolute;
59
+ right: 6px;
60
+ top: 6px;
61
+ }
62
+ }
63
+ }
64
+
65
+ &__content {
66
+ color: $gray-700;
67
+ font-size: 14px;
68
+ line-height: 24px;
69
+ margin: 0 auto;
70
+ max-width: 1208px;
71
+ padding: 0 16px;
72
+
73
+ @media screen and ( min-width: 744px ) {
74
+ padding: 32px 84px;
75
+ }
76
+
77
+ // Typography
78
+
79
+ h1,
80
+ h2,
81
+ h3,
82
+ p {
83
+ line-height: 24px;
84
+ margin: 32px 0;
85
+ padding: 0;
86
+ }
87
+
88
+ h1 {
89
+ color: $gray-900;
90
+ font-size: 21px;
91
+ font-weight: bold;
92
+ line-height: 32px;
93
+ }
94
+
95
+ h2 {
96
+ color: $gray-900;
97
+ font-size: 17px;
98
+ font-weight: bold;
99
+ }
100
+
101
+ h3 {
102
+ color: $gray-900;
103
+ font-size: 14px;
104
+ font-weight: bold;
105
+ }
106
+
107
+ p {
108
+ font-size: 14px;
109
+
110
+ &.is-dark {
111
+ color: $gray-900;
112
+ }
113
+ }
114
+
115
+ strong {
116
+ font-weight: bold;
117
+ }
118
+
119
+ small {
120
+ font-size: 12px;
121
+ line-height: 16px;
122
+ }
123
+
124
+ // Links
125
+
126
+ a {
127
+ color: $primary-500;
128
+
129
+ &:active,
130
+ &:focus,
131
+ &:hover {
132
+ color: $primary-600;
133
+ text-decoration: none;
134
+ }
135
+
136
+ &:focus {
137
+ box-shadow: none;
138
+ outline: 2px solid $primary-500;
139
+ outline-offset: 2px;
140
+ }
141
+ }
142
+ }
143
+
144
+ &__above-header {
145
+ border-radius: 0;
146
+ margin: 0;
147
+ }
148
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useState } from '@wordpress/element';
5
+ import { Icon, chevronRight } from '@wordpress/icons';
6
+
7
+ /**
8
+ * External dependencies
9
+ */
10
+ import classNames from 'classnames';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import './style.scss';
16
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
17
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
18
+ const Accordion = _ref => {
19
+ let {
20
+ children,
21
+ title
22
+ } = _ref;
23
+ const [isOpen, setIsOpen] = useState(false);
24
+ return _jsxs("details", {
25
+ className: classNames('newspack-accordion', {
26
+ 'newspack-accordion--is-open': isOpen
27
+ }),
28
+ children: [_jsxs("summary", {
29
+ onClick: () => setIsOpen(!isOpen),
30
+ children: [title, _jsx(Icon, {
31
+ className: "newspack-accordion__icon",
32
+ icon: chevronRight,
33
+ size: 24
34
+ })]
35
+ }), children]
36
+ });
37
+ };
38
+ export default Accordion;
@@ -0,0 +1,27 @@
1
+ @use '~@wordpress/base-styles/colors' as wp-colors;
2
+
3
+ .newspack-accordion {
4
+ border: 1px solid wp-colors.$gray-300;
5
+
6
+ &__icon {
7
+ transition: transform 200ms ease-out;
8
+ transform: rotate( 90deg );
9
+ }
10
+
11
+ &--is-open {
12
+ .newspack-accordion {
13
+ &__icon {
14
+ transform: rotate( -90deg );
15
+ }
16
+ }
17
+ }
18
+ summary {
19
+ padding: 16px 32px;
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: space-between;
23
+ cursor: pointer;
24
+ font-size: 14px;
25
+ font-weight: bold;
26
+ }
27
+ }
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
3
2
  /**
4
3
  * Action Card
5
4
  */
@@ -8,35 +7,41 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
7
  * WordPress dependencies
9
8
  */
10
9
  import { Component } from '@wordpress/element';
11
- import { ExternalLink } from '@wordpress/components';
12
- import { Icon, check } from '@wordpress/icons';
10
+ import { ExternalLink, ToggleControl } from '@wordpress/components';
11
+ import { Icon, check, chevronDown, chevronUp } from '@wordpress/icons';
12
+
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
-
17
- import { Button, Card, Handoff, Notice, ToggleControl, Waiting } from '../';
16
+ import { Button, Card, Grid, Handoff, Notice, Waiting } from '../';
18
17
  import './style.scss';
18
+
19
19
  /**
20
20
  * External dependencies
21
21
  */
22
-
23
22
  import classnames from 'classnames';
24
23
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
25
24
  import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
26
-
27
25
  class ActionCard extends Component {
28
26
  constructor() {
29
27
  super(...arguments);
30
-
31
- _defineProperty(this, "backgroundImageStyles", url => {
32
- return url ? {
33
- backgroundImage: `url(${url})`
34
- } : {};
28
+ _defineProperty(this, "state", {
29
+ expanded: false
35
30
  });
36
31
  }
32
+ /**
33
+ * When the collapse prop is updated to true, collapse the card if already expanded.
34
+ */
35
+ componentDidUpdate(prevProps) {
36
+ if (!prevProps.collapse && this.props.collapse && this.state.expanded) {
37
+ this.setState({
38
+ expanded: false
39
+ });
40
+ }
41
+ }
37
42
 
38
43
  /**
39
- * Render
44
+ * Render.
40
45
  */
41
46
  render() {
42
47
  const {
@@ -56,8 +61,10 @@ class ActionCard extends Component {
56
61
  actionContent,
57
62
  actionText,
58
63
  secondaryActionText,
64
+ secondaryDestructive,
59
65
  image,
60
66
  imageLink,
67
+ indent,
61
68
  isSmall,
62
69
  isMedium,
63
70
  simple,
@@ -67,10 +74,21 @@ class ActionCard extends Component {
67
74
  titleLink,
68
75
  toggleChecked,
69
76
  toggleOnChange,
70
- hasGreyHeader
77
+ hasGreyHeader,
78
+ hasWhiteHeader,
79
+ isPending,
80
+ expandable = false
71
81
  } = this.props;
82
+ const {
83
+ expanded
84
+ } = this.state;
72
85
  const hasChildren = notification || children;
73
- const classes = classnames('newspack-action-card', simple && 'newspack-card--is-clickable', hasGreyHeader && 'newspack-card--has-grey-header', hasChildren && 'newspack-card--has-children', isSmall && 'is-small', isMedium && 'is-medium', className);
86
+ const classes = classnames('newspack-action-card', simple && 'newspack-card--is-clickable', hasGreyHeader && 'newspack-card--has-grey-header', hasWhiteHeader && 'newspack-card--has-white-header', hasChildren && 'newspack-card--has-children', indent && 'newspack-card--indent', isSmall && 'is-small', isMedium && 'is-medium', checkbox && 'has-checkbox', expandable && 'is-expandable', actionContent && 'has-action-content', className);
87
+ const backgroundImageStyles = url => {
88
+ return url ? {
89
+ backgroundImage: `url(${url})`
90
+ } : {};
91
+ };
74
92
  const titleProps = toggleOnChange && !titleLink && !disabled ? {
75
93
  onClick: () => toggleOnChange(!toggleChecked),
76
94
  tabIndex: '0'
@@ -93,35 +111,46 @@ class ActionCard extends Component {
93
111
  href: imageLink,
94
112
  children: _jsx("div", {
95
113
  className: "newspack-action-card__image",
96
- style: this.backgroundImageStyles(image)
114
+ style: backgroundImageStyles(image)
97
115
  })
98
116
  })
99
117
  }), checkbox && !toggleOnChange && _jsx("div", {
100
118
  className: "newspack-action-card__region newspack-action-card__region-left",
101
119
  children: _jsx("span", {
102
- className: classnames('newspack-checkbox-icon', 'is-primary', 'checked' === checkbox && 'newspack-checkbox-icon--checked'),
120
+ className: classnames('newspack-checkbox-icon', 'is-primary', 'checked' === checkbox && 'newspack-checkbox-icon--checked', isPending && 'newspack-checkbox-icon--pending'),
103
121
  children: 'checked' === checkbox && _jsx(Icon, {
104
122
  icon: check
105
123
  })
106
124
  })
107
- }), _jsxs("div", {
125
+ }), _jsx("div", {
108
126
  className: "newspack-action-card__region newspack-action-card__region-center",
109
- children: [_jsxs("h2", {
110
- children: [_jsx("span", {
111
- className: "newspack-action-card__title",
112
- ...titleProps,
113
- children: titleLink ? _jsx("a", {
114
- href: titleLink,
115
- children: title
116
- }) : title
117
- }), (badges === null || badges === void 0 ? void 0 : badges.length) && badges.map((badgeText, i) => _jsx("span", {
118
- className: "newspack-action-card__badge",
119
- children: badgeText
120
- }, `badge-${i}`))]
121
- }), _jsxs("p", {
122
- children: [typeof description === 'string' && description, typeof description === 'function' && description()]
123
- })]
124
- }), (actionText || isDisplayingSecondaryAction || actionContent) && _jsxs("div", {
127
+ children: _jsxs(Grid, {
128
+ columns: 1,
129
+ gutter: 8,
130
+ noMargin: true,
131
+ children: [_jsxs("h2", {
132
+ children: [_jsxs("span", {
133
+ className: "newspack-action-card__title",
134
+ ...titleProps,
135
+ children: [titleLink && _jsx("a", {
136
+ href: titleLink,
137
+ children: title
138
+ }), !titleLink && expandable && _jsx(Button, {
139
+ isLink: true,
140
+ onClick: () => this.setState({
141
+ expanded: !expanded
142
+ }),
143
+ children: title
144
+ }), !titleLink && !expandable && title]
145
+ }), badges?.length && badges.map((badgeText, i) => _jsx("span", {
146
+ className: "newspack-action-card__badge",
147
+ children: badgeText
148
+ }, `badge-${i}`))]
149
+ }), description && _jsxs("p", {
150
+ children: [typeof description === 'string' && description, typeof description === 'function' && description()]
151
+ })]
152
+ })
153
+ }), !expandable && (actionText || isDisplayingSecondaryAction || actionContent) && _jsxs("div", {
125
154
  className: "newspack-action-card__region newspack-action-card__region-right",
126
155
  children: [actionContent && actionContent, actionText && (handoff ? _jsx(Handoff, {
127
156
  plugin: handoff,
@@ -130,6 +159,7 @@ class ActionCard extends Component {
130
159
  isLink: true,
131
160
  children: actionText
132
161
  }) : onClick || hasInternalLink ? _jsx(Button, {
162
+ disabled: disabled,
133
163
  isLink: true,
134
164
  href: href,
135
165
  onClick: onClick,
@@ -148,8 +178,18 @@ class ActionCard extends Component {
148
178
  isLink: true,
149
179
  onClick: onSecondaryActionClick,
150
180
  className: "newspack-action-card__secondary_button",
181
+ isDestructive: secondaryDestructive,
151
182
  children: secondaryActionText
152
183
  })]
184
+ }), expandable && _jsx(Button, {
185
+ onClick: () => this.setState({
186
+ expanded: !expanded
187
+ }),
188
+ children: _jsx(Icon, {
189
+ icon: expanded ? chevronUp : chevronDown,
190
+ height: 24,
191
+ width: 24
192
+ })
153
193
  })]
154
194
  }), notification && _jsxs("div", {
155
195
  className: "newspack-action-card__notification newspack-action-card__region-children",
@@ -169,15 +209,13 @@ class ActionCard extends Component {
169
209
  isWarning: true,
170
210
  rawHTML: notificationHTML
171
211
  })]
172
- }), children && _jsx("div", {
212
+ }), children && (expandable && expanded || !expandable) && _jsx("div", {
173
213
  className: "newspack-action-card__region-children",
174
214
  children: children
175
215
  })]
176
216
  });
177
217
  }
178
-
179
218
  }
180
-
181
219
  ActionCard.defaultProps = {
182
220
  toggleChecked: false
183
221
  };