newspack-components 2.1.0 → 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 (293) hide show
  1. package/dist/cjs/accordion/index.js +46 -0
  2. package/dist/cjs/accordion/style.scss +27 -0
  3. package/dist/cjs/action-card/index.js +48 -25
  4. package/dist/cjs/action-card/style.scss +100 -23
  5. package/dist/cjs/autocomplete-tokenfield/index.js +13 -41
  6. package/dist/cjs/autocomplete-tokenfield/style.scss +2 -2
  7. package/dist/cjs/autocomplete-with-suggestions/index.js +30 -51
  8. package/dist/cjs/autocomplete-with-suggestions/style.scss +16 -15
  9. package/dist/cjs/button/index.js +5 -13
  10. package/dist/cjs/button-card/index.js +1 -10
  11. package/dist/cjs/button-card/style.scss +13 -13
  12. package/dist/cjs/button-group/index.js +57 -0
  13. package/dist/cjs/button-group/style.scss +73 -0
  14. package/dist/cjs/card/index.js +1 -8
  15. package/dist/cjs/card/style.scss +25 -8
  16. package/dist/cjs/category-autocomplete/index.js +18 -38
  17. package/dist/cjs/category-autocomplete/style.scss +0 -2
  18. package/dist/cjs/checkbox-control/index.js +63 -0
  19. package/dist/cjs/checkbox-control/style.scss +78 -0
  20. package/dist/cjs/color-picker/index.js +1 -15
  21. package/dist/cjs/color-picker/style.scss +0 -3
  22. package/dist/cjs/consts.js +5 -3
  23. package/dist/cjs/custom-select-control/index.js +1 -9
  24. package/dist/cjs/custom-select-control/style.scss +6 -7
  25. package/dist/cjs/date-range-picker/index.js +1 -10
  26. package/dist/cjs/date-range-picker/style.scss +12 -12
  27. package/dist/cjs/footer/index.js +5 -17
  28. package/dist/cjs/footer/style.scss +5 -5
  29. package/dist/cjs/form-token-field/index.js +1 -9
  30. package/dist/cjs/form-token-field/style.scss +2 -3
  31. package/dist/cjs/global-notices/index.js +1 -8
  32. package/dist/cjs/grid/index.js +1 -8
  33. package/dist/cjs/grid/style.scss +5 -5
  34. package/dist/cjs/handoff/index.js +8 -17
  35. package/dist/cjs/handoff-message/index.js +50 -0
  36. package/dist/cjs/hooks/index.js +1 -7
  37. package/dist/cjs/hooks/useObjectState.js +7 -13
  38. package/dist/cjs/hooks/useObjectState.test.js +0 -14
  39. package/dist/cjs/hooks/useOnClickOutside.js +3 -6
  40. package/dist/cjs/hooks/usePrompt.js +1 -13
  41. package/dist/cjs/image-upload/index.js +21 -19
  42. package/dist/cjs/image-upload/index.test.js +0 -5
  43. package/dist/cjs/image-upload/style.scss +5 -9
  44. package/dist/cjs/index.js +28 -44
  45. package/dist/cjs/info-button/index.js +3 -11
  46. package/dist/cjs/info-button/style.scss +1 -3
  47. package/dist/cjs/modal/index.js +1 -9
  48. package/dist/cjs/modal/style.scss +8 -8
  49. package/dist/cjs/newspack-icon/index.js +1 -9
  50. package/dist/cjs/newspack-icon/style.scss +4 -4
  51. package/dist/cjs/newspack-logo/index.js +1 -9
  52. package/dist/cjs/newspack-logo/style.scss +3 -3
  53. package/dist/cjs/notice/index.js +8 -15
  54. package/dist/cjs/notice/style.scss +28 -15
  55. package/dist/cjs/patrons-logo/index.js +3 -11
  56. package/dist/cjs/plugin-installer/index.js +36 -36
  57. package/dist/cjs/plugin-installer/style.scss +5 -5
  58. package/dist/cjs/plugin-settings/SettingsSection.js +9 -28
  59. package/dist/cjs/plugin-settings/index.js +39 -22
  60. package/dist/cjs/plugin-toggle/index.js +40 -33
  61. package/dist/cjs/plugin-toggle/style.scss +2 -2
  62. package/dist/cjs/popover/index.js +1 -11
  63. package/dist/cjs/popover/style.scss +19 -16
  64. package/dist/cjs/position-control/index.js +113 -0
  65. package/dist/cjs/position-control/style.scss +66 -0
  66. package/dist/cjs/preview-box/index.js +36 -0
  67. package/dist/cjs/preview-box/style.scss +18 -0
  68. package/dist/cjs/progress-bar/index.js +2 -9
  69. package/dist/cjs/progress-bar/index.test.js +2 -7
  70. package/dist/cjs/progress-bar/style.scss +4 -4
  71. package/dist/cjs/proxied-imports/router.js +0 -3
  72. package/dist/cjs/radio-control/index.js +1 -11
  73. package/dist/cjs/radio-control/style.scss +9 -9
  74. package/dist/cjs/section-header/index.js +44 -29
  75. package/dist/cjs/section-header/style.scss +2 -2
  76. package/dist/cjs/select-control/ButtonGroupControl.js +4 -13
  77. package/dist/cjs/select-control/GroupedSelectControl.js +9 -15
  78. package/dist/cjs/select-control/index.js +5 -12
  79. package/dist/cjs/select-control/style.scss +2 -2
  80. package/dist/cjs/settings/MinMaxSetting.js +3 -7
  81. package/dist/cjs/settings/SettingsCard.js +3 -7
  82. package/dist/cjs/settings/SettingsSection.js +1 -4
  83. package/dist/cjs/settings/index.js +0 -6
  84. package/dist/cjs/settings/style.scss +1 -1
  85. package/dist/cjs/steps-list/index.js +52 -0
  86. package/dist/cjs/steps-list/style.scss +11 -0
  87. package/dist/cjs/steps-list-item/index.js +56 -0
  88. package/dist/cjs/steps-list-item/style.scss +47 -0
  89. package/dist/cjs/style-card/index.js +6 -13
  90. package/dist/cjs/style-card/style.scss +9 -12
  91. package/dist/cjs/style.scss +5 -6
  92. package/dist/cjs/tabbed-navigation/index.js +19 -16
  93. package/dist/cjs/tabbed-navigation/style.scss +3 -4
  94. package/dist/cjs/text-control/index.js +6 -16
  95. package/dist/cjs/textarea-control/index.js +54 -0
  96. package/dist/cjs/textarea-control/style.scss +76 -0
  97. package/dist/cjs/toggle-control/index.js +58 -0
  98. package/dist/cjs/toggle-control/style.scss +74 -0
  99. package/dist/cjs/toggle-group/index.js +71 -0
  100. package/dist/cjs/toggle-group/style.scss +28 -0
  101. package/dist/cjs/utils/index.js +10 -5
  102. package/dist/cjs/waiting/index.js +1 -9
  103. package/dist/cjs/web-preview/index.js +13 -28
  104. package/dist/cjs/web-preview/style.scss +14 -14
  105. package/dist/cjs/with-wizard/index.js +51 -31
  106. package/dist/cjs/with-wizard/style.scss +35 -37
  107. package/dist/cjs/with-wizard-screen/index.js +11 -17
  108. package/dist/cjs/with-wizard-screen/style.scss +14 -17
  109. package/dist/cjs/wizard/components/WizardError.js +3 -15
  110. package/dist/cjs/wizard/index.js +10 -24
  111. package/dist/cjs/wizard/store/index.js +42 -55
  112. package/dist/cjs/wizard/store/utils.js +1 -6
  113. package/dist/cjs/wizard/style.scss +148 -0
  114. package/dist/esm/accordion/index.js +38 -0
  115. package/dist/esm/accordion/style.scss +27 -0
  116. package/dist/esm/action-card/index.js +50 -21
  117. package/dist/esm/action-card/style.scss +100 -23
  118. package/dist/esm/autocomplete-tokenfield/index.js +14 -37
  119. package/dist/esm/autocomplete-tokenfield/style.scss +2 -2
  120. package/dist/esm/autocomplete-with-suggestions/index.js +28 -41
  121. package/dist/esm/autocomplete-with-suggestions/style.scss +16 -15
  122. package/dist/esm/button/index.js +5 -7
  123. package/dist/esm/button-card/index.js +2 -5
  124. package/dist/esm/button-card/style.scss +13 -13
  125. package/dist/esm/button-group/index.js +43 -0
  126. package/dist/esm/button-group/style.scss +73 -0
  127. package/dist/esm/card/index.js +2 -5
  128. package/dist/esm/card/style.scss +25 -8
  129. package/dist/esm/category-autocomplete/index.js +17 -30
  130. package/dist/esm/category-autocomplete/style.scss +0 -2
  131. package/dist/esm/checkbox-control/index.js +49 -0
  132. package/dist/esm/checkbox-control/style.scss +78 -0
  133. package/dist/esm/color-picker/index.js +2 -4
  134. package/dist/esm/color-picker/style.scss +0 -3
  135. package/dist/esm/consts.js +3 -2
  136. package/dist/esm/custom-select-control/index.js +2 -5
  137. package/dist/esm/custom-select-control/style.scss +6 -7
  138. package/dist/esm/date-range-picker/index.js +1 -3
  139. package/dist/esm/date-range-picker/style.scss +12 -12
  140. package/dist/esm/footer/index.js +3 -11
  141. package/dist/esm/footer/style.scss +5 -5
  142. package/dist/esm/form-token-field/index.js +2 -5
  143. package/dist/esm/form-token-field/style.scss +2 -3
  144. package/dist/esm/global-notices/index.js +1 -6
  145. package/dist/esm/grid/index.js +2 -5
  146. package/dist/esm/grid/style.scss +5 -5
  147. package/dist/esm/handoff/index.js +3 -14
  148. package/dist/esm/handoff-message/index.js +45 -0
  149. package/dist/esm/hooks/index.js +0 -2
  150. package/dist/esm/hooks/useObjectState.js +3 -8
  151. package/dist/esm/hooks/useObjectState.test.js +0 -3
  152. package/dist/esm/hooks/useOnClickOutside.js +2 -5
  153. package/dist/esm/hooks/usePrompt.js +1 -8
  154. package/dist/esm/image-upload/index.js +17 -16
  155. package/dist/esm/image-upload/style.scss +5 -9
  156. package/dist/esm/index.js +4 -0
  157. package/dist/esm/info-button/index.js +4 -6
  158. package/dist/esm/info-button/style.scss +1 -3
  159. package/dist/esm/modal/index.js +2 -5
  160. package/dist/esm/modal/style.scss +8 -8
  161. package/dist/esm/newspack-icon/index.js +2 -5
  162. package/dist/esm/newspack-icon/style.scss +4 -4
  163. package/dist/esm/newspack-logo/index.js +2 -5
  164. package/dist/esm/newspack-logo/style.scss +3 -3
  165. package/dist/esm/notice/index.js +4 -8
  166. package/dist/esm/notice/style.scss +28 -15
  167. package/dist/esm/patrons-logo/index.js +3 -5
  168. package/dist/esm/plugin-installer/index.js +35 -39
  169. package/dist/esm/plugin-installer/style.scss +5 -5
  170. package/dist/esm/plugin-settings/SettingsSection.js +8 -21
  171. package/dist/esm/plugin-settings/index.js +38 -24
  172. package/dist/esm/plugin-toggle/index.js +39 -36
  173. package/dist/esm/plugin-toggle/style.scss +2 -2
  174. package/dist/esm/popover/index.js +3 -6
  175. package/dist/esm/popover/style.scss +19 -16
  176. package/dist/esm/position-control/index.js +109 -0
  177. package/dist/esm/position-control/style.scss +66 -0
  178. package/dist/esm/preview-box/index.js +30 -0
  179. package/dist/esm/preview-box/style.scss +18 -0
  180. package/dist/esm/progress-bar/index.js +2 -7
  181. package/dist/esm/progress-bar/index.test.js +2 -1
  182. package/dist/esm/progress-bar/style.scss +4 -4
  183. package/dist/esm/proxied-imports/router.js +1 -0
  184. package/dist/esm/radio-control/index.js +3 -6
  185. package/dist/esm/radio-control/style.scss +9 -9
  186. package/dist/esm/section-header/index.js +44 -25
  187. package/dist/esm/section-header/style.scss +2 -2
  188. package/dist/esm/select-control/ButtonGroupControl.js +5 -7
  189. package/dist/esm/select-control/GroupedSelectControl.js +5 -6
  190. package/dist/esm/select-control/index.js +6 -6
  191. package/dist/esm/select-control/style.scss +2 -2
  192. package/dist/esm/settings/MinMaxSetting.js +1 -3
  193. package/dist/esm/settings/SettingsCard.js +3 -4
  194. package/dist/esm/settings/SettingsSection.js +0 -2
  195. package/dist/esm/settings/style.scss +1 -1
  196. package/dist/esm/steps-list/index.js +43 -0
  197. package/dist/esm/steps-list/style.scss +11 -0
  198. package/dist/esm/steps-list-item/index.js +48 -0
  199. package/dist/esm/steps-list-item/style.scss +47 -0
  200. package/dist/esm/style-card/index.js +2 -5
  201. package/dist/esm/style-card/style.scss +9 -12
  202. package/dist/esm/style.scss +5 -6
  203. package/dist/esm/tabbed-navigation/index.js +20 -10
  204. package/dist/esm/tabbed-navigation/style.scss +3 -4
  205. package/dist/esm/text-control/index.js +2 -9
  206. package/dist/esm/textarea-control/index.js +40 -0
  207. package/dist/esm/textarea-control/style.scss +76 -0
  208. package/dist/esm/toggle-control/index.js +44 -0
  209. package/dist/esm/toggle-control/style.scss +74 -0
  210. package/dist/esm/toggle-group/index.js +58 -0
  211. package/dist/esm/toggle-group/style.scss +28 -0
  212. package/dist/esm/utils/index.js +9 -3
  213. package/dist/esm/waiting/index.js +2 -5
  214. package/dist/esm/web-preview/index.js +9 -24
  215. package/dist/esm/web-preview/style.scss +14 -14
  216. package/dist/esm/with-wizard/index.js +49 -34
  217. package/dist/esm/with-wizard/style.scss +35 -37
  218. package/dist/esm/with-wizard-screen/index.js +9 -11
  219. package/dist/esm/with-wizard-screen/style.scss +14 -17
  220. package/dist/esm/wizard/components/WizardError.js +1 -10
  221. package/dist/esm/wizard/index.js +10 -12
  222. package/dist/esm/wizard/store/index.js +40 -46
  223. package/dist/esm/wizard/store/utils.js +1 -1
  224. package/dist/esm/wizard/style.scss +148 -0
  225. package/package.json +4 -4
  226. package/shared/scss/_colors.scss +0 -15
  227. package/src/accordion/index.js +32 -0
  228. package/src/accordion/style.scss +27 -0
  229. package/src/action-card/index.js +43 -8
  230. package/src/action-card/style.scss +100 -23
  231. package/src/autocomplete-tokenfield/index.js +1 -1
  232. package/src/autocomplete-tokenfield/style.scss +2 -2
  233. package/src/autocomplete-with-suggestions/style.scss +16 -15
  234. package/src/button-card/style.scss +13 -13
  235. package/src/card/style.scss +25 -8
  236. package/src/category-autocomplete/index.js +3 -1
  237. package/src/category-autocomplete/style.scss +0 -2
  238. package/src/color-picker/style.scss +0 -3
  239. package/src/consts.js +2 -1
  240. package/src/custom-select-control/style.scss +6 -7
  241. package/src/date-range-picker/style.scss +12 -12
  242. package/src/footer/index.js +2 -2
  243. package/src/footer/style.scss +5 -5
  244. package/src/form-token-field/index.js +2 -7
  245. package/src/form-token-field/style.scss +2 -3
  246. package/src/grid/style.scss +5 -5
  247. package/src/handoff/index.js +3 -8
  248. package/src/handoff-message/index.js +39 -0
  249. package/src/hooks/useObjectState.js +2 -1
  250. package/src/image-upload/index.js +9 -3
  251. package/src/image-upload/style.scss +5 -9
  252. package/src/index.js +4 -0
  253. package/src/info-button/style.scss +1 -3
  254. package/src/modal/style.scss +8 -8
  255. package/src/newspack-icon/style.scss +4 -4
  256. package/src/newspack-logo/style.scss +3 -3
  257. package/src/notice/index.js +2 -0
  258. package/src/notice/style.scss +28 -15
  259. package/src/plugin-installer/index.js +15 -2
  260. package/src/plugin-installer/style.scss +5 -5
  261. package/src/plugin-settings/SettingsSection.js +7 -13
  262. package/src/plugin-settings/index.js +7 -2
  263. package/src/plugin-toggle/index.js +2 -3
  264. package/src/plugin-toggle/style.scss +2 -2
  265. package/src/popover/style.scss +19 -16
  266. package/src/position-control/index.js +122 -0
  267. package/src/position-control/style.scss +66 -0
  268. package/src/progress-bar/style.scss +4 -4
  269. package/src/radio-control/style.scss +9 -9
  270. package/src/section-header/index.js +32 -15
  271. package/src/section-header/style.scss +2 -2
  272. package/src/select-control/ButtonGroupControl.js +3 -0
  273. package/src/select-control/GroupedSelectControl.js +2 -1
  274. package/src/select-control/index.js +6 -2
  275. package/src/select-control/style.scss +2 -2
  276. package/src/settings/style.scss +1 -1
  277. package/src/steps-list/index.js +39 -0
  278. package/src/steps-list/style.scss +11 -0
  279. package/src/steps-list-item/index.js +40 -0
  280. package/src/steps-list-item/style.scss +47 -0
  281. package/src/style-card/index.js +2 -11
  282. package/src/style-card/style.scss +9 -12
  283. package/src/style.scss +5 -6
  284. package/src/tabbed-navigation/index.js +12 -4
  285. package/src/tabbed-navigation/style.scss +3 -4
  286. package/src/utils/index.js +9 -0
  287. package/src/web-preview/index.js +1 -1
  288. package/src/web-preview/style.scss +14 -14
  289. package/src/with-wizard/style.scss +35 -37
  290. package/src/with-wizard-screen/index.js +4 -1
  291. package/src/with-wizard-screen/style.scss +14 -17
  292. package/src/wizard/index.js +15 -3
  293. package/src/wizard/store/index.js +8 -2
@@ -1,37 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _classnames = _interopRequireDefault(require("classnames"));
13
-
14
10
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
15
-
16
11
  var _element = require("@wordpress/element");
17
-
18
12
  var _i18n = require("@wordpress/i18n");
19
-
20
13
  var _ = require("../");
21
-
22
14
  var _SettingsSection = _interopRequireDefault(require("./SettingsSection"));
23
-
24
15
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
25
-
26
16
  /**
27
17
  * External dependencies
28
18
  */
29
-
30
19
  /**
31
20
  * WordPress dependencies.
32
21
  */
22
+ /**
23
+ * Internal dependencies.
24
+ */
33
25
  const __ = _i18n.__;
34
-
35
26
  class PluginSettings extends _element.Component {
36
27
  constructor() {
37
28
  super(...arguments);
@@ -51,7 +42,6 @@ class PluginSettings extends _element.Component {
51
42
  settings,
52
43
  error: null
53
44
  });
54
-
55
45
  if ('function' === typeof afterFetch) {
56
46
  afterFetch(settings);
57
47
  }
@@ -79,7 +69,8 @@ class PluginSettings extends _element.Component {
79
69
  }
80
70
  });
81
71
  this.setState({
82
- settings: { ...this.state.settings,
72
+ settings: {
73
+ ...this.state.settings,
83
74
  [sectionKey]: sectionSettings
84
75
  }
85
76
  });
@@ -102,10 +93,12 @@ class PluginSettings extends _element.Component {
102
93
  }
103
94
  }).then(settings => {
104
95
  this.setState({
105
- settings,
96
+ settings: {
97
+ ...this.state.settings,
98
+ [sectionKey]: settings[sectionKey]
99
+ },
106
100
  error: null
107
101
  });
108
-
109
102
  if ('function' === typeof afterUpdate) {
110
103
  afterUpdate(settings);
111
104
  }
@@ -119,27 +112,55 @@ class PluginSettings extends _element.Component {
119
112
  });
120
113
  });
121
114
  });
115
+ /**
116
+ * Get the section setting containing section information.
117
+ *
118
+ * @param {string} sectionKey The section name.
119
+ * @return {Object} The section setting.
120
+ */
122
121
  (0, _defineProperty2.default)(this, "getSectionInfo", sectionKey => {
123
122
  return this.state.settings[sectionKey]?.find(setting => !setting.key || setting.key === 'active');
124
123
  });
124
+ /**
125
+ * Get the section title.
126
+ *
127
+ * @param {string} sectionKey The section name.
128
+ * @return {string} The section title.
129
+ */
125
130
  (0, _defineProperty2.default)(this, "getSectionTitle", sectionKey => {
126
131
  return this.getSectionInfo(sectionKey)?.description;
127
132
  });
133
+ /**
134
+ * Get the section description.
135
+ *
136
+ * @param {string} sectionKey The section name.
137
+ * @return {string} The section description.
138
+ */
128
139
  (0, _defineProperty2.default)(this, "getSectionDescription", sectionKey => {
129
140
  return this.getSectionInfo(sectionKey)?.help;
130
141
  });
142
+ /**
143
+ * Get whether a section is active.
144
+ *
145
+ * @param {string} sectionKey The section name.
146
+ * @return {?boolean} Whether the section is active or not. Null if the section is not found or does not support activation.
147
+ */
131
148
  (0, _defineProperty2.default)(this, "isSectionActive", sectionKey => {
132
149
  const {
133
150
  settings
134
151
  } = this.state;
135
152
  const activation = settings[sectionKey]?.find(setting => setting.key === 'active');
136
-
137
153
  if (!activation) {
138
154
  return null;
139
155
  }
140
-
141
156
  return activation.value;
142
157
  });
158
+ /**
159
+ * Get list of section field settings.
160
+ *
161
+ * @param {string} sectionKey The section name.
162
+ * @return {?Array} List of section fields.
163
+ */
143
164
  (0, _defineProperty2.default)(this, "getSectionFields", sectionKey => {
144
165
  return this.state.settings[sectionKey]?.filter(setting => setting.key && setting.key !== 'active');
145
166
  });
@@ -149,11 +170,9 @@ class PluginSettings extends _element.Component {
149
170
  error: null
150
171
  };
151
172
  }
152
-
153
173
  componentDidMount() {
154
174
  this.fetchSettings();
155
175
  }
156
-
157
176
  /**
158
177
  * Render.
159
178
  */
@@ -194,9 +213,7 @@ class PluginSettings extends _element.Component {
194
213
  })]
195
214
  });
196
215
  }
197
-
198
216
  }
199
-
200
217
  PluginSettings.defaultProps = {
201
218
  title: __('General Settings', 'newspack')
202
219
  };
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
13
-
14
10
  var _element = require("@wordpress/element");
15
-
16
11
  var _i18n = require("@wordpress/i18n");
17
-
18
12
  var _ = require("../");
19
-
20
13
  require("./style.scss");
21
-
22
14
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
23
-
24
15
  /**
25
16
  * WordPress dependencies.
26
17
  */
18
+ /**
19
+ * Internal dependencies.
20
+ */
27
21
  const __ = _i18n.__;
28
-
29
22
  /**
30
23
  * Plugin toggle group component.
31
24
  */
@@ -38,6 +31,9 @@ class PluginToggle extends _element.Component {
38
31
  (0, _defineProperty2.default)(this, "componentDidMount", () => {
39
32
  this.retrievePluginInfo();
40
33
  });
34
+ /**
35
+ * Retrieve complete data about Newspack plugins.
36
+ */
41
37
  (0, _defineProperty2.default)(this, "retrievePluginInfo", () => {
42
38
  return new Promise(() => {
43
39
  (0, _apiFetch.default)({
@@ -47,6 +43,9 @@ class PluginToggle extends _element.Component {
47
43
  }));
48
44
  });
49
45
  });
46
+ /**
47
+ * Install/activate or remove a plugin.
48
+ */
50
49
  (0, _defineProperty2.default)(this, "managePlugin", (plugin, value) => {
51
50
  const {
52
51
  plugins
@@ -60,8 +59,10 @@ class PluginToggle extends _element.Component {
60
59
  method: 'post'
61
60
  };
62
61
  this.setState({
63
- pluginInfo: { ...pluginInfo,
64
- [plugin]: { ...pluginInfo[plugin],
62
+ pluginInfo: {
63
+ ...pluginInfo,
64
+ [plugin]: {
65
+ ...pluginInfo[plugin],
65
66
  inFlight: action
66
67
  }
67
68
  }
@@ -75,15 +76,18 @@ class PluginToggle extends _element.Component {
75
76
  pluginInfo: currentPluginInfo
76
77
  } = _ref;
77
78
  return {
78
- pluginInfo: { ...currentPluginInfo,
79
+ pluginInfo: {
80
+ ...currentPluginInfo,
79
81
  [plugin]: response
80
82
  }
81
83
  };
82
84
  }, () => shouldRefreshAfterUpdate && location.reload());
83
85
  }).catch(e => {
84
86
  this.setState({
85
- pluginInfo: { ...pluginInfo,
86
- [plugin]: { ...pluginInfo[plugin],
87
+ pluginInfo: {
88
+ ...pluginInfo,
89
+ [plugin]: {
90
+ ...pluginInfo[plugin],
87
91
  error: e.message || __('There was an error managing this plugin.', 'newspack')
88
92
  }
89
93
  }
@@ -91,23 +95,31 @@ class PluginToggle extends _element.Component {
91
95
  });
92
96
  });
93
97
  });
94
- (0, _defineProperty2.default)(this, "prepareDataForRender", (pluginsFromProps, pluginsFromAPI) => Object.keys(pluginsFromProps).map(pluginSlug => pluginsFromAPI[pluginSlug] ? Object.keys(pluginsFromAPI[pluginSlug]).reduce((accumulator, key) => ({ ...accumulator,
98
+ /**
99
+ * Prepare plugins data for render. Change all keys to camelCase, merge API-fetched data with prop.
100
+ */
101
+ (0, _defineProperty2.default)(this, "prepareDataForRender", (pluginsFromProps, pluginsFromAPI) => Object.keys(pluginsFromProps).map(pluginSlug => pluginsFromAPI[pluginSlug] ? Object.keys(pluginsFromAPI[pluginSlug]).reduce((accumulator, key) => ({
102
+ ...accumulator,
95
103
  [key.charAt(0).toLowerCase() + key.slice(1)]: pluginsFromAPI[pluginSlug][key]
96
104
  }), {}) : {}).map(plugin => Object.assign(plugin, pluginsFromProps[plugin.slug])));
105
+ /**
106
+ * Generate a classname for the ActionCard based on plugin state. Applies 'in-flight' class if an API is underway and 'loading' if the plugin data is not yet available.
107
+ */
97
108
  (0, _defineProperty2.default)(this, "classNameForPlugin", plugin => {
98
109
  const {
99
110
  status,
100
111
  inFlight
101
112
  } = plugin;
102
-
103
113
  if (inFlight) {
104
114
  return 'in-flight';
105
115
  }
106
-
107
116
  if (!status) {
108
117
  return 'loading';
109
118
  }
110
119
  });
120
+ /**
121
+ * Generate the ActionCard action text for a plugin.
122
+ */
111
123
  (0, _defineProperty2.default)(this, "actionTextForPlugin", plugin => {
112
124
  const {
113
125
  actionText,
@@ -115,8 +127,8 @@ class PluginToggle extends _element.Component {
115
127
  href,
116
128
  inFlight,
117
129
  name
118
- } = plugin; // Show spinner when plugin data is unavailable, or when an API call is in flight.
119
-
130
+ } = plugin;
131
+ // Show spinner when plugin data is unavailable, or when an API call is in flight.
120
132
  if ('configure' === inFlight) {
121
133
  return (0, _jsxRuntime.jsxs)(_element.Fragment, {
122
134
  children: [__('Installing…', 'newspack'), " ", (0, _jsxRuntime.jsx)(_.Waiting, {
@@ -124,7 +136,6 @@ class PluginToggle extends _element.Component {
124
136
  })]
125
137
  });
126
138
  }
127
-
128
139
  if ('deactivate' === inFlight) {
129
140
  return (0, _jsxRuntime.jsxs)(_element.Fragment, {
130
141
  children: [__('Deactivating…', 'newspack'), " ", (0, _jsxRuntime.jsx)(_.Waiting, {
@@ -132,24 +143,24 @@ class PluginToggle extends _element.Component {
132
143
  })]
133
144
  });
134
145
  }
135
-
136
146
  if (!name) {
137
147
  return (0, _jsxRuntime.jsxs)(_element.Fragment, {
138
148
  children: [__('Loading…', 'newspack'), " ", (0, _jsxRuntime.jsx)(_.Waiting, {
139
149
  isRight: true
140
150
  })]
141
151
  });
142
- } // No action button at all if the plugin isn't installed and active.
143
-
144
-
152
+ }
153
+ // No action button at all if the plugin isn't installed and active.
145
154
  if (!this.isPluginInstalledAndActive(plugin)) {
146
155
  return null;
147
156
  }
148
-
149
157
  if (href || editPath) {
150
158
  return actionText ? actionText : __('Configure', 'newspack');
151
159
  }
152
160
  });
161
+ /**
162
+ * Get error message for this plugin.
163
+ */
153
164
  (0, _defineProperty2.default)(this, "errorForPlugin", plugin => {
154
165
  const {
155
166
  slug
@@ -159,6 +170,9 @@ class PluginToggle extends _element.Component {
159
170
  } = this.state;
160
171
  return pluginInfo[slug]?.error || null;
161
172
  });
173
+ /**
174
+ * Get installation/activation status for a plugin.
175
+ */
162
176
  (0, _defineProperty2.default)(this, "isPluginInstalledAndActive", plugin => {
163
177
  const {
164
178
  status
@@ -166,7 +180,6 @@ class PluginToggle extends _element.Component {
166
180
  return status === 'active';
167
181
  });
168
182
  }
169
-
170
183
  /**
171
184
  * Render.
172
185
  */
@@ -204,12 +217,6 @@ class PluginToggle extends _element.Component {
204
217
  }, index);
205
218
  });
206
219
  }
207
- /**
208
- * Prepare plugins data for render. Change all keys to camelCase, merge API-fetched data with prop.
209
- */
210
-
211
-
212
220
  }
213
-
214
221
  var _default = PluginToggle;
215
222
  exports.default = _default;
@@ -2,7 +2,7 @@
2
2
  * Plugin Toggle
3
3
  */
4
4
 
5
- @import '~@wordpress/base-styles/colors';
5
+ @use '~@wordpress/base-styles/colors' as wp-colors;
6
6
 
7
7
  .newspack-action-card {
8
8
  &.in-flight,
@@ -11,7 +11,7 @@
11
11
 
12
12
  .newspack-action-card__region-right {
13
13
  .newspack-button {
14
- color: $gray-700;
14
+ color: wp-colors.$gray-700;
15
15
  pointer-events: none;
16
16
  text-decoration: none;
17
17
  }
@@ -1,22 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _components = require("@wordpress/components");
11
-
12
9
  var _element = require("@wordpress/element");
13
-
14
10
  require("./style.scss");
15
-
16
11
  var _classnames = _interopRequireDefault(require("classnames"));
17
-
18
12
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
19
-
20
13
  /**
21
14
  * WordPress dependencies
22
15
  */
@@ -31,8 +24,7 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
31
24
 
32
25
  /**
33
26
  * Popover
34
- */
35
- class Popover extends _element.Component {
27
+ */class Popover extends _element.Component {
36
28
  /**
37
29
  * Render
38
30
  */
@@ -48,9 +40,7 @@ class Popover extends _element.Component {
48
40
  ...otherProps
49
41
  });
50
42
  }
51
-
52
43
  }
53
-
54
44
  Popover.defaultProps = {
55
45
  padding: false
56
46
  };
@@ -2,30 +2,29 @@
2
2
  * Popover
3
3
  */
4
4
 
5
- @import '../../../shared/scss/colors';
6
- @import '~@wordpress/base-styles/colors';
5
+ @use '../../../shared/scss/colors';
6
+ @use '~@wordpress/base-styles/colors' as wp-colors;
7
7
 
8
8
  .newspack-popover {
9
9
  .components-popover__content {
10
- border: 1px solid $gray-300;
11
- border-radius: 2px;
12
- box-shadow: 0 4px 8px rgba( black, 0.08 );
13
10
  min-width: 238px;
14
11
 
15
12
  .newspack-button {
16
- color: $gray-700;
13
+ color: wp-colors.$gray-700;
17
14
  display: flex;
18
15
  font-weight: normal;
19
16
  padding: 6px 8px;
20
17
 
21
18
  &:hover {
19
+ color: colors.$primary-500;
20
+
22
21
  .components-menu-items__item-icon {
23
- fill: currentColor;
22
+ fill: currentcolor;
24
23
  }
25
24
  }
26
25
 
27
26
  &:focus:not( :disabled ) {
28
- box-shadow: inset 0 0 0 2px $primary-500;
27
+ box-shadow: inset 0 0 0 2px colors.$primary-500;
29
28
  position: relative;
30
29
  z-index: 1;
31
30
  }
@@ -36,14 +35,14 @@
36
35
  text-decoration: none;
37
36
 
38
37
  &:not( .is-destructive ) {
39
- color: $gray-700;
38
+ color: wp-colors.$gray-700;
40
39
 
41
40
  &:active,
42
41
  &:active:enabled,
43
42
  &:focus,
44
43
  &:focus:enabled &:hover,
45
- &:not( :disabled ):not( [aria-disabled='true'] ):not( .is-default ):hover {
46
- color: $primary-500;
44
+ &:not( :disabled, [aria-disabled='true'], .is-default ):hover {
45
+ color: colors.$primary-500;
47
46
  }
48
47
  }
49
48
 
@@ -53,8 +52,12 @@
53
52
  }
54
53
  }
55
54
 
55
+ &.is-destructive:not( :focus ) {
56
+ box-shadow: none !important;
57
+ }
58
+
56
59
  .components-menu-items__item-icon {
57
- fill: $gray-900;
60
+ fill: wp-colors.$gray-900;
58
61
  }
59
62
 
60
63
  .components-menu-item__item {
@@ -64,7 +67,7 @@
64
67
  }
65
68
 
66
69
  .components-menu-group__label {
67
- color: $gray-900;
70
+ color: wp-colors.$gray-900;
68
71
  font-size: 12px;
69
72
  font-weight: bold;
70
73
  line-height: 16px;
@@ -86,8 +89,8 @@
86
89
  min-height: 36px;
87
90
 
88
91
  &:focus ~ div.components-input-control__backdrop {
89
- border-color: $primary-500;
90
- box-shadow: inset 0 0 0 1px $primary-500;
92
+ border-color: colors.$primary-500;
93
+ box-shadow: inset 0 0 0 1px colors.$primary-500;
91
94
  }
92
95
  }
93
96
 
@@ -129,7 +132,7 @@
129
132
  }
130
133
 
131
134
  &:not( .is-without-arrow )::before {
132
- border-color: $gray-300;
135
+ border-color: wp-colors.$gray-300;
133
136
  }
134
137
 
135
138
  &.is-from-bottom {
@@ -0,0 +1,113 @@
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 = PositionControl;
8
+ var _i18n = require("@wordpress/i18n");
9
+ var _components = require("@wordpress/components");
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ require("./style.scss");
12
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
13
+ /**
14
+ * WordPress dependencies
15
+ */
16
+ const __ = _i18n.__;
17
+ /**
18
+ * External dependencies
19
+ */
20
+ /**
21
+ * Internal dependencies
22
+ */
23
+ function PositionControl(_ref) {
24
+ let {
25
+ allowedPositions,
26
+ value,
27
+ label,
28
+ help,
29
+ onChange,
30
+ size,
31
+ ...props
32
+ } = _ref;
33
+ /**
34
+ * Set layout options
35
+ */
36
+ const options = size === 'full-width' ? [{
37
+ value: 'top',
38
+ /* translators: Overlay Position */
39
+ label: __('Top', 'newspack')
40
+ }, {
41
+ value: 'center',
42
+ /* translators: Overlay Position */
43
+ label: __('Center', 'newspack')
44
+ }, {
45
+ value: 'bottom',
46
+ /* translators: Overlay Position */
47
+ label: __('Bottom', 'newspack')
48
+ }] : [{
49
+ value: 'top_left',
50
+ /* translators: Overlay Position */
51
+ label: __('Top Left', 'newspack')
52
+ }, {
53
+ value: 'top',
54
+ /* translators: Overlay Position */
55
+ label: __('Top Center', 'newspack')
56
+ }, {
57
+ value: 'top_right',
58
+ /* translators: Overlay Position */
59
+ label: __('Top Right', 'newspack')
60
+ }, {
61
+ value: 'center_left',
62
+ /* translators: Overlay Position */
63
+ label: __('Center Left', 'newspack')
64
+ }, {
65
+ value: 'center',
66
+ /* translators: Overlay Position */
67
+ label: __('Center', 'newspack')
68
+ }, {
69
+ value: 'center_right',
70
+ /* translators: Overlay Position */
71
+ label: __('Center Right', 'newspack')
72
+ }, {
73
+ value: 'bottom_left',
74
+ /* translators: Overlay Position */
75
+ label: __('Bottom Left', 'newspack')
76
+ }, {
77
+ value: 'bottom',
78
+ /* translators: Overlay Position */
79
+ label: __('Bottom Center', 'newspack')
80
+ }, {
81
+ value: 'bottom_right',
82
+ /* translators: Overlay Position */
83
+ label: __('Bottom Right', 'newspack')
84
+ }];
85
+ return (0, _jsxRuntime.jsxs)("div", {
86
+ className: (0, _classnames.default)('newspack-position-placement-control', 'size-' + size),
87
+ children: [(0, _jsxRuntime.jsx)("p", {
88
+ className: "components-base-control__label",
89
+ children: label
90
+ }), (0, _jsxRuntime.jsx)(_components.ButtonGroup, {
91
+ "aria-label": __('Select Position', 'newspack'),
92
+ ...props,
93
+ children: options.map((option, index) => {
94
+ return (0, _jsxRuntime.jsx)("div", {
95
+ className: option.value === value ? 'is-selected' : null,
96
+ children: (0, _jsxRuntime.jsx)(_components.Button, {
97
+ isSmall: true,
98
+ title: option.label,
99
+ "aria-label": option.label,
100
+ isPrimary: option.value === value,
101
+ onClick: () => {
102
+ onChange(option.value);
103
+ },
104
+ disabled: allowedPositions?.length && !allowedPositions.includes(option.value)
105
+ })
106
+ }, `newspack-position-placement-item-${index}`);
107
+ })
108
+ }), (0, _jsxRuntime.jsx)("p", {
109
+ className: "components-base-control__help",
110
+ children: help
111
+ })]
112
+ });
113
+ }
@@ -0,0 +1,66 @@
1
+ @use '~@wordpress/base-styles/colors' as wp-colors;
2
+
3
+ .newspack-position-placement-control {
4
+ margin-bottom: 1em;
5
+
6
+ .components-base-control__label {
7
+ margin-bottom: 8px;
8
+ margin-top: 1em;
9
+ }
10
+
11
+ .components-button-group {
12
+ display: grid;
13
+ grid-template-columns: repeat( 3, 1fr );
14
+ grid-template-rows: repeat( 3, 1fr );
15
+
16
+ div {
17
+ padding: 1px;
18
+ }
19
+
20
+ .components-button {
21
+ border-radius: 0 !important;
22
+ height: 100%;
23
+ padding: 20px;
24
+ width: 100%;
25
+ }
26
+
27
+ div:nth-of-type( 1 ) .components-button {
28
+ border-radius: 4px 0 0 !important;
29
+ }
30
+
31
+ div:nth-of-type( 3 ) .components-button {
32
+ border-radius: 0 4px 0 0 !important;
33
+ }
34
+
35
+ div:nth-last-of-type( 1 ) .components-button {
36
+ border-radius: 0 0 4px !important;
37
+ }
38
+
39
+ div:nth-last-of-type( 3 ) .components-button {
40
+ border-radius: 0 0 0 4px !important;
41
+ }
42
+ }
43
+
44
+ &.size-full-width .components-button-group {
45
+ grid-template-columns: 1fr;
46
+
47
+ div:first-of-type .components-button {
48
+ border-radius: 4px 4px 0 0 !important;
49
+ }
50
+
51
+ div:nth-of-type( 2 ) .components-button {
52
+ border-radius: 0 !important;
53
+ }
54
+
55
+ div:last-of-type .components-button {
56
+ border-radius: 0 0 4px 4px !important;
57
+ }
58
+ }
59
+
60
+ .components-base-control__help {
61
+ color: wp-colors.$gray-700;
62
+ font-size: 12px;
63
+ font-style: normal;
64
+ margin-top: 8px;
65
+ }
66
+ }