newspack-components 2.1.0 → 2.2.1

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 (268) 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/card/index.js +1 -8
  13. package/dist/cjs/card/style.scss +25 -8
  14. package/dist/cjs/category-autocomplete/index.js +18 -38
  15. package/dist/cjs/category-autocomplete/style.scss +0 -2
  16. package/dist/cjs/color-picker/index.js +1 -15
  17. package/dist/cjs/color-picker/style.scss +0 -3
  18. package/dist/cjs/consts.js +5 -3
  19. package/dist/cjs/custom-select-control/index.js +1 -9
  20. package/dist/cjs/custom-select-control/style.scss +6 -7
  21. package/dist/cjs/date-range-picker/index.js +1 -10
  22. package/dist/cjs/date-range-picker/style.scss +12 -12
  23. package/dist/cjs/footer/index.js +5 -17
  24. package/dist/cjs/footer/style.scss +5 -5
  25. package/dist/cjs/form-token-field/index.js +1 -9
  26. package/dist/cjs/form-token-field/style.scss +2 -3
  27. package/dist/cjs/global-notices/index.js +1 -8
  28. package/dist/cjs/grid/index.js +1 -8
  29. package/dist/cjs/grid/style.scss +5 -5
  30. package/dist/cjs/handoff/index.js +8 -17
  31. package/dist/cjs/handoff-message/index.js +50 -0
  32. package/dist/cjs/hooks/index.js +1 -7
  33. package/dist/cjs/hooks/useObjectState.js +7 -13
  34. package/dist/cjs/hooks/useObjectState.test.js +0 -14
  35. package/dist/cjs/hooks/useOnClickOutside.js +3 -6
  36. package/dist/cjs/hooks/usePrompt.js +1 -13
  37. package/dist/cjs/image-upload/index.js +21 -19
  38. package/dist/cjs/image-upload/index.test.js +0 -5
  39. package/dist/cjs/image-upload/style.scss +5 -9
  40. package/dist/cjs/index.js +28 -44
  41. package/dist/cjs/info-button/index.js +3 -11
  42. package/dist/cjs/info-button/style.scss +1 -3
  43. package/dist/cjs/modal/index.js +1 -9
  44. package/dist/cjs/modal/style.scss +8 -8
  45. package/dist/cjs/newspack-icon/index.js +1 -9
  46. package/dist/cjs/newspack-icon/style.scss +4 -4
  47. package/dist/cjs/newspack-logo/index.js +1 -9
  48. package/dist/cjs/newspack-logo/style.scss +3 -3
  49. package/dist/cjs/notice/index.js +8 -15
  50. package/dist/cjs/notice/style.scss +28 -15
  51. package/dist/cjs/patrons-logo/index.js +3 -11
  52. package/dist/cjs/plugin-installer/index.js +36 -36
  53. package/dist/cjs/plugin-installer/style.scss +5 -5
  54. package/dist/cjs/plugin-settings/SettingsSection.js +9 -28
  55. package/dist/cjs/plugin-settings/index.js +39 -22
  56. package/dist/cjs/plugin-toggle/index.js +40 -33
  57. package/dist/cjs/plugin-toggle/style.scss +2 -2
  58. package/dist/cjs/popover/index.js +1 -11
  59. package/dist/cjs/popover/style.scss +19 -16
  60. package/dist/cjs/position-control/index.js +113 -0
  61. package/dist/cjs/position-control/style.scss +66 -0
  62. package/dist/cjs/progress-bar/index.js +2 -9
  63. package/dist/cjs/progress-bar/index.test.js +2 -7
  64. package/dist/cjs/progress-bar/style.scss +4 -4
  65. package/dist/cjs/proxied-imports/router.js +0 -3
  66. package/dist/cjs/radio-control/index.js +1 -11
  67. package/dist/cjs/radio-control/style.scss +9 -9
  68. package/dist/cjs/section-header/index.js +44 -29
  69. package/dist/cjs/section-header/style.scss +2 -2
  70. package/dist/cjs/select-control/ButtonGroupControl.js +4 -13
  71. package/dist/cjs/select-control/GroupedSelectControl.js +9 -15
  72. package/dist/cjs/select-control/index.js +5 -12
  73. package/dist/cjs/select-control/style.scss +2 -2
  74. package/dist/cjs/settings/MinMaxSetting.js +3 -7
  75. package/dist/cjs/settings/SettingsCard.js +3 -7
  76. package/dist/cjs/settings/SettingsSection.js +1 -4
  77. package/dist/cjs/settings/index.js +0 -6
  78. package/dist/cjs/settings/style.scss +1 -1
  79. package/dist/cjs/steps-list/index.js +52 -0
  80. package/dist/cjs/steps-list/style.scss +11 -0
  81. package/dist/cjs/steps-list-item/index.js +56 -0
  82. package/dist/cjs/steps-list-item/style.scss +47 -0
  83. package/dist/cjs/style-card/index.js +6 -13
  84. package/dist/cjs/style-card/style.scss +9 -12
  85. package/dist/cjs/style.scss +5 -6
  86. package/dist/cjs/tabbed-navigation/index.js +19 -16
  87. package/dist/cjs/tabbed-navigation/style.scss +3 -4
  88. package/dist/cjs/text-control/index.js +6 -16
  89. package/dist/cjs/utils/index.js +10 -5
  90. package/dist/cjs/waiting/index.js +1 -9
  91. package/dist/cjs/web-preview/index.js +13 -28
  92. package/dist/cjs/web-preview/style.scss +14 -14
  93. package/dist/cjs/with-wizard/index.js +51 -31
  94. package/dist/cjs/with-wizard/style.scss +35 -37
  95. package/dist/cjs/with-wizard-screen/index.js +11 -17
  96. package/dist/cjs/with-wizard-screen/style.scss +14 -17
  97. package/dist/cjs/wizard/components/WizardError.js +3 -15
  98. package/dist/cjs/wizard/index.js +10 -24
  99. package/dist/cjs/wizard/store/index.js +42 -55
  100. package/dist/cjs/wizard/store/utils.js +1 -6
  101. package/dist/esm/accordion/index.js +38 -0
  102. package/dist/esm/accordion/style.scss +27 -0
  103. package/dist/esm/action-card/index.js +50 -21
  104. package/dist/esm/action-card/style.scss +100 -23
  105. package/dist/esm/autocomplete-tokenfield/index.js +14 -37
  106. package/dist/esm/autocomplete-tokenfield/style.scss +2 -2
  107. package/dist/esm/autocomplete-with-suggestions/index.js +28 -41
  108. package/dist/esm/autocomplete-with-suggestions/style.scss +16 -15
  109. package/dist/esm/button/index.js +5 -7
  110. package/dist/esm/button-card/index.js +2 -5
  111. package/dist/esm/button-card/style.scss +13 -13
  112. package/dist/esm/card/index.js +2 -5
  113. package/dist/esm/card/style.scss +25 -8
  114. package/dist/esm/category-autocomplete/index.js +17 -30
  115. package/dist/esm/category-autocomplete/style.scss +0 -2
  116. package/dist/esm/color-picker/index.js +2 -4
  117. package/dist/esm/color-picker/style.scss +0 -3
  118. package/dist/esm/consts.js +3 -2
  119. package/dist/esm/custom-select-control/index.js +2 -5
  120. package/dist/esm/custom-select-control/style.scss +6 -7
  121. package/dist/esm/date-range-picker/index.js +1 -3
  122. package/dist/esm/date-range-picker/style.scss +12 -12
  123. package/dist/esm/footer/index.js +3 -11
  124. package/dist/esm/footer/style.scss +5 -5
  125. package/dist/esm/form-token-field/index.js +2 -5
  126. package/dist/esm/form-token-field/style.scss +2 -3
  127. package/dist/esm/global-notices/index.js +1 -6
  128. package/dist/esm/grid/index.js +2 -5
  129. package/dist/esm/grid/style.scss +5 -5
  130. package/dist/esm/handoff/index.js +3 -14
  131. package/dist/esm/handoff-message/index.js +45 -0
  132. package/dist/esm/hooks/index.js +0 -2
  133. package/dist/esm/hooks/useObjectState.js +3 -8
  134. package/dist/esm/hooks/useObjectState.test.js +0 -3
  135. package/dist/esm/hooks/useOnClickOutside.js +2 -5
  136. package/dist/esm/hooks/usePrompt.js +1 -8
  137. package/dist/esm/image-upload/index.js +17 -16
  138. package/dist/esm/image-upload/style.scss +5 -9
  139. package/dist/esm/index.js +4 -0
  140. package/dist/esm/info-button/index.js +4 -6
  141. package/dist/esm/info-button/style.scss +1 -3
  142. package/dist/esm/modal/index.js +2 -5
  143. package/dist/esm/modal/style.scss +8 -8
  144. package/dist/esm/newspack-icon/index.js +2 -5
  145. package/dist/esm/newspack-icon/style.scss +4 -4
  146. package/dist/esm/newspack-logo/index.js +2 -5
  147. package/dist/esm/newspack-logo/style.scss +3 -3
  148. package/dist/esm/notice/index.js +4 -8
  149. package/dist/esm/notice/style.scss +28 -15
  150. package/dist/esm/patrons-logo/index.js +3 -5
  151. package/dist/esm/plugin-installer/index.js +35 -39
  152. package/dist/esm/plugin-installer/style.scss +5 -5
  153. package/dist/esm/plugin-settings/SettingsSection.js +8 -21
  154. package/dist/esm/plugin-settings/index.js +38 -24
  155. package/dist/esm/plugin-toggle/index.js +39 -36
  156. package/dist/esm/plugin-toggle/style.scss +2 -2
  157. package/dist/esm/popover/index.js +3 -6
  158. package/dist/esm/popover/style.scss +19 -16
  159. package/dist/esm/position-control/index.js +109 -0
  160. package/dist/esm/position-control/style.scss +66 -0
  161. package/dist/esm/progress-bar/index.js +2 -7
  162. package/dist/esm/progress-bar/index.test.js +2 -1
  163. package/dist/esm/progress-bar/style.scss +4 -4
  164. package/dist/esm/proxied-imports/router.js +1 -0
  165. package/dist/esm/radio-control/index.js +3 -6
  166. package/dist/esm/radio-control/style.scss +9 -9
  167. package/dist/esm/section-header/index.js +44 -25
  168. package/dist/esm/section-header/style.scss +2 -2
  169. package/dist/esm/select-control/ButtonGroupControl.js +5 -7
  170. package/dist/esm/select-control/GroupedSelectControl.js +5 -6
  171. package/dist/esm/select-control/index.js +6 -6
  172. package/dist/esm/select-control/style.scss +2 -2
  173. package/dist/esm/settings/MinMaxSetting.js +1 -3
  174. package/dist/esm/settings/SettingsCard.js +3 -4
  175. package/dist/esm/settings/SettingsSection.js +0 -2
  176. package/dist/esm/settings/style.scss +1 -1
  177. package/dist/esm/steps-list/index.js +43 -0
  178. package/dist/esm/steps-list/style.scss +11 -0
  179. package/dist/esm/steps-list-item/index.js +48 -0
  180. package/dist/esm/steps-list-item/style.scss +47 -0
  181. package/dist/esm/style-card/index.js +2 -5
  182. package/dist/esm/style-card/style.scss +9 -12
  183. package/dist/esm/style.scss +5 -6
  184. package/dist/esm/tabbed-navigation/index.js +20 -10
  185. package/dist/esm/tabbed-navigation/style.scss +3 -4
  186. package/dist/esm/text-control/index.js +2 -9
  187. package/dist/esm/utils/index.js +9 -3
  188. package/dist/esm/waiting/index.js +2 -5
  189. package/dist/esm/web-preview/index.js +9 -24
  190. package/dist/esm/web-preview/style.scss +14 -14
  191. package/dist/esm/with-wizard/index.js +49 -34
  192. package/dist/esm/with-wizard/style.scss +35 -37
  193. package/dist/esm/with-wizard-screen/index.js +9 -11
  194. package/dist/esm/with-wizard-screen/style.scss +14 -17
  195. package/dist/esm/wizard/components/WizardError.js +1 -10
  196. package/dist/esm/wizard/index.js +10 -12
  197. package/dist/esm/wizard/store/index.js +40 -46
  198. package/dist/esm/wizard/store/utils.js +1 -1
  199. package/package.json +4 -4
  200. package/shared/js/button-props.js +3 -1
  201. package/shared/scss/_mixins.scss +12 -0
  202. package/src/accordion/index.js +32 -0
  203. package/src/accordion/style.scss +27 -0
  204. package/src/action-card/index.js +43 -8
  205. package/src/action-card/style.scss +100 -23
  206. package/src/autocomplete-tokenfield/index.js +1 -1
  207. package/src/autocomplete-tokenfield/style.scss +2 -2
  208. package/src/autocomplete-with-suggestions/style.scss +16 -15
  209. package/src/button-card/style.scss +13 -13
  210. package/src/card/style.scss +25 -8
  211. package/src/category-autocomplete/index.js +3 -1
  212. package/src/category-autocomplete/style.scss +0 -2
  213. package/src/color-picker/style.scss +0 -3
  214. package/src/consts.js +2 -1
  215. package/src/custom-select-control/style.scss +6 -7
  216. package/src/date-range-picker/style.scss +12 -12
  217. package/src/footer/index.js +2 -2
  218. package/src/footer/style.scss +5 -5
  219. package/src/form-token-field/index.js +2 -7
  220. package/src/form-token-field/style.scss +2 -3
  221. package/src/grid/style.scss +5 -5
  222. package/src/handoff/index.js +3 -8
  223. package/src/handoff-message/index.js +39 -0
  224. package/src/hooks/useObjectState.js +2 -1
  225. package/src/image-upload/index.js +9 -3
  226. package/src/image-upload/style.scss +5 -9
  227. package/src/index.js +4 -0
  228. package/src/info-button/style.scss +1 -3
  229. package/src/modal/style.scss +8 -8
  230. package/src/newspack-icon/style.scss +4 -4
  231. package/src/newspack-logo/style.scss +3 -3
  232. package/src/notice/index.js +2 -0
  233. package/src/notice/style.scss +28 -15
  234. package/src/plugin-installer/index.js +15 -2
  235. package/src/plugin-installer/style.scss +5 -5
  236. package/src/plugin-settings/SettingsSection.js +7 -13
  237. package/src/plugin-settings/index.js +7 -2
  238. package/src/plugin-toggle/index.js +2 -3
  239. package/src/plugin-toggle/style.scss +2 -2
  240. package/src/popover/style.scss +19 -16
  241. package/src/position-control/index.js +122 -0
  242. package/src/position-control/style.scss +66 -0
  243. package/src/progress-bar/style.scss +4 -4
  244. package/src/radio-control/style.scss +9 -9
  245. package/src/section-header/index.js +32 -15
  246. package/src/section-header/style.scss +2 -2
  247. package/src/select-control/ButtonGroupControl.js +3 -0
  248. package/src/select-control/GroupedSelectControl.js +2 -1
  249. package/src/select-control/index.js +6 -2
  250. package/src/select-control/style.scss +2 -2
  251. package/src/settings/style.scss +1 -1
  252. package/src/steps-list/index.js +39 -0
  253. package/src/steps-list/style.scss +11 -0
  254. package/src/steps-list-item/index.js +40 -0
  255. package/src/steps-list-item/style.scss +47 -0
  256. package/src/style-card/index.js +2 -11
  257. package/src/style-card/style.scss +9 -12
  258. package/src/style.scss +5 -6
  259. package/src/tabbed-navigation/index.js +12 -4
  260. package/src/tabbed-navigation/style.scss +3 -4
  261. package/src/utils/index.js +9 -0
  262. package/src/web-preview/index.js +1 -1
  263. package/src/web-preview/style.scss +14 -14
  264. package/src/with-wizard/style.scss +35 -37
  265. package/src/with-wizard-screen/index.js +4 -1
  266. package/src/with-wizard-screen/style.scss +14 -17
  267. package/src/wizard/index.js +15 -3
  268. package/src/wizard/store/index.js +8 -2
@@ -0,0 +1,46 @@
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 = void 0;
8
+ var _element = require("@wordpress/element");
9
+ var _icons = require("@wordpress/icons");
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ require("./style.scss");
12
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
13
+ /**
14
+ * WordPress dependencies
15
+ */
16
+
17
+ /**
18
+ * External dependencies
19
+ */
20
+
21
+ /**
22
+ * Internal dependencies
23
+ */
24
+
25
+ const Accordion = _ref => {
26
+ let {
27
+ children,
28
+ title
29
+ } = _ref;
30
+ const [isOpen, setIsOpen] = (0, _element.useState)(false);
31
+ return (0, _jsxRuntime.jsxs)("details", {
32
+ className: (0, _classnames.default)('newspack-accordion', {
33
+ 'newspack-accordion--is-open': isOpen
34
+ }),
35
+ children: [(0, _jsxRuntime.jsxs)("summary", {
36
+ onClick: () => setIsOpen(!isOpen),
37
+ children: [title, (0, _jsxRuntime.jsx)(_icons.Icon, {
38
+ className: "newspack-accordion__icon",
39
+ icon: _icons.chevronRight,
40
+ size: 24
41
+ })]
42
+ }), children]
43
+ });
44
+ };
45
+ var _default = Accordion;
46
+ exports.default = _default;
@@ -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,28 +1,18 @@
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 _element = require("@wordpress/element");
13
-
14
10
  var _components = require("@wordpress/components");
15
-
16
11
  var _icons = require("@wordpress/icons");
17
-
18
12
  var _ = require("../");
19
-
20
13
  require("./style.scss");
21
-
22
14
  var _classnames = _interopRequireDefault(require("classnames"));
23
-
24
15
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
25
-
26
16
  /**
27
17
  * Action Card
28
18
  */
@@ -38,18 +28,27 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
38
28
  /**
39
29
  * External dependencies
40
30
  */
31
+
41
32
  class ActionCard extends _element.Component {
42
33
  constructor() {
43
34
  super(...arguments);
44
- (0, _defineProperty2.default)(this, "backgroundImageStyles", url => {
45
- return url ? {
46
- backgroundImage: `url(${url})`
47
- } : {};
35
+ (0, _defineProperty2.default)(this, "state", {
36
+ expanded: false
48
37
  });
49
38
  }
39
+ /**
40
+ * When the collapse prop is updated to true, collapse the card if already expanded.
41
+ */
42
+ componentDidUpdate(prevProps) {
43
+ if (!prevProps.collapse && this.props.collapse && this.state.expanded) {
44
+ this.setState({
45
+ expanded: false
46
+ });
47
+ }
48
+ }
50
49
 
51
50
  /**
52
- * Render
51
+ * Render.
53
52
  */
54
53
  render() {
55
54
  const {
@@ -83,10 +82,20 @@ class ActionCard extends _element.Component {
83
82
  toggleChecked,
84
83
  toggleOnChange,
85
84
  hasGreyHeader,
86
- isPending
85
+ hasWhiteHeader,
86
+ isPending,
87
+ expandable = false
87
88
  } = this.props;
89
+ const {
90
+ expanded
91
+ } = this.state;
88
92
  const hasChildren = notification || children;
89
- const classes = (0, _classnames.default)('newspack-action-card', simple && 'newspack-card--is-clickable', hasGreyHeader && 'newspack-card--has-grey-header', hasChildren && 'newspack-card--has-children', indent && 'newspack-card--indent', isSmall && 'is-small', isMedium && 'is-medium', className);
93
+ const classes = (0, _classnames.default)('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);
94
+ const backgroundImageStyles = url => {
95
+ return url ? {
96
+ backgroundImage: `url(${url})`
97
+ } : {};
98
+ };
90
99
  const titleProps = toggleOnChange && !titleLink && !disabled ? {
91
100
  onClick: () => toggleOnChange(!toggleChecked),
92
101
  tabIndex: '0'
@@ -109,7 +118,7 @@ class ActionCard extends _element.Component {
109
118
  href: imageLink,
110
119
  children: (0, _jsxRuntime.jsx)("div", {
111
120
  className: "newspack-action-card__image",
112
- style: this.backgroundImageStyles(image)
121
+ style: backgroundImageStyles(image)
113
122
  })
114
123
  })
115
124
  }), checkbox && !toggleOnChange && (0, _jsxRuntime.jsx)("div", {
@@ -127,13 +136,19 @@ class ActionCard extends _element.Component {
127
136
  gutter: 8,
128
137
  noMargin: true,
129
138
  children: [(0, _jsxRuntime.jsxs)("h2", {
130
- children: [(0, _jsxRuntime.jsx)("span", {
139
+ children: [(0, _jsxRuntime.jsxs)("span", {
131
140
  className: "newspack-action-card__title",
132
141
  ...titleProps,
133
- children: titleLink ? (0, _jsxRuntime.jsx)("a", {
142
+ children: [titleLink && (0, _jsxRuntime.jsx)("a", {
134
143
  href: titleLink,
135
144
  children: title
136
- }) : title
145
+ }), !titleLink && expandable && (0, _jsxRuntime.jsx)(_.Button, {
146
+ isLink: true,
147
+ onClick: () => this.setState({
148
+ expanded: !expanded
149
+ }),
150
+ children: title
151
+ }), !titleLink && !expandable && title]
137
152
  }), badges?.length && badges.map((badgeText, i) => (0, _jsxRuntime.jsx)("span", {
138
153
  className: "newspack-action-card__badge",
139
154
  children: badgeText
@@ -142,7 +157,7 @@ class ActionCard extends _element.Component {
142
157
  children: [typeof description === 'string' && description, typeof description === 'function' && description()]
143
158
  })]
144
159
  })
145
- }), (actionText || isDisplayingSecondaryAction || actionContent) && (0, _jsxRuntime.jsxs)("div", {
160
+ }), !expandable && (actionText || isDisplayingSecondaryAction || actionContent) && (0, _jsxRuntime.jsxs)("div", {
146
161
  className: "newspack-action-card__region newspack-action-card__region-right",
147
162
  children: [actionContent && actionContent, actionText && (handoff ? (0, _jsxRuntime.jsx)(_.Handoff, {
148
163
  plugin: handoff,
@@ -151,6 +166,7 @@ class ActionCard extends _element.Component {
151
166
  isLink: true,
152
167
  children: actionText
153
168
  }) : onClick || hasInternalLink ? (0, _jsxRuntime.jsx)(_.Button, {
169
+ disabled: disabled,
154
170
  isLink: true,
155
171
  href: href,
156
172
  onClick: onClick,
@@ -172,6 +188,15 @@ class ActionCard extends _element.Component {
172
188
  isDestructive: secondaryDestructive,
173
189
  children: secondaryActionText
174
190
  })]
191
+ }), expandable && (0, _jsxRuntime.jsx)(_.Button, {
192
+ onClick: () => this.setState({
193
+ expanded: !expanded
194
+ }),
195
+ children: (0, _jsxRuntime.jsx)(_icons.Icon, {
196
+ icon: expanded ? _icons.chevronUp : _icons.chevronDown,
197
+ height: 24,
198
+ width: 24
199
+ })
175
200
  })]
176
201
  }), notification && (0, _jsxRuntime.jsxs)("div", {
177
202
  className: "newspack-action-card__notification newspack-action-card__region-children",
@@ -191,15 +216,13 @@ class ActionCard extends _element.Component {
191
216
  isWarning: true,
192
217
  rawHTML: notificationHTML
193
218
  })]
194
- }), children && (0, _jsxRuntime.jsx)("div", {
219
+ }), children && (expandable && expanded || !expandable) && (0, _jsxRuntime.jsx)("div", {
195
220
  className: "newspack-action-card__region-children",
196
221
  children: children
197
222
  })]
198
223
  });
199
224
  }
200
-
201
225
  }
202
-
203
226
  ActionCard.defaultProps = {
204
227
  toggleChecked: false
205
228
  };
@@ -2,11 +2,12 @@
2
2
  * Action Card
3
3
  */
4
4
 
5
- @import '~@wordpress/base-styles/colors';
5
+ @use 'sass:color';
6
+ @use '~@wordpress/base-styles/colors' as wp-colors;
6
7
 
7
8
  .newspack-card.newspack-action-card {
8
9
  padding: 0;
9
- border-color: $gray-300;
10
+ border-color: wp-colors.$gray-300;
10
11
 
11
12
  // Clickable
12
13
 
@@ -25,7 +26,7 @@
25
26
  &.newspack-card__is-secondary,
26
27
  &.newspack-card__is-supported,
27
28
  &.newspack-card__is-unsupported {
28
- box-shadow: inset 4px 0 0 $gray-100;
29
+ box-shadow: inset 4px 0 0 wp-colors.$gray-100;
29
30
 
30
31
  .newspack-action-card__region-top {
31
32
  padding-left: 28px;
@@ -37,15 +38,15 @@
37
38
  }
38
39
 
39
40
  &.newspack-card__is-secondary {
40
- box-shadow: inset 4px 0 0 $alert-yellow;
41
+ box-shadow: inset 4px 0 0 wp-colors.$alert-yellow;
41
42
  }
42
43
 
43
44
  &.newspack-card__is-supported {
44
- box-shadow: inset 4px 0 0 $alert-green;
45
+ box-shadow: inset 4px 0 0 wp-colors.$alert-green;
45
46
  }
46
47
 
47
48
  &.newspack-card__is-unsupported {
48
- box-shadow: inset 4px 0 0 $alert-red;
49
+ box-shadow: inset 4px 0 0 wp-colors.$alert-red;
49
50
  }
50
51
 
51
52
  // Small
@@ -83,18 +84,18 @@
83
84
  }
84
85
 
85
86
  &.mv0 {
86
- border-left-color: $gray-300;
87
+ border-left-color: wp-colors.$gray-300;
87
88
  border-radius: 0;
88
- border-right-color: $gray-300;
89
+ border-right-color: wp-colors.$gray-300;
89
90
 
90
91
  &:first-of-type {
91
- border-top-color: $gray-300;
92
+ border-top-color: wp-colors.$gray-300;
92
93
  border-top-left-radius: 3px;
93
94
  border-top-right-radius: 3px;
94
95
  }
95
96
 
96
97
  &:last-of-type {
97
- border-bottom-color: $gray-300;
98
+ border-bottom-color: wp-colors.$gray-300;
98
99
  border-bottom-left-radius: 3px;
99
100
  border-bottom-right-radius: 3px;
100
101
  }
@@ -141,7 +142,25 @@
141
142
  }
142
143
 
143
144
  .newspack-action-card__region-children {
144
- padding: 0 32px 32px 32px;
145
+ padding: 0 32px 32px;
146
+ }
147
+ }
148
+
149
+ // Nested children
150
+
151
+ &.newspack-card--has-children {
152
+ .newspack-action-card {
153
+ &:first-child {
154
+ margin-top: 32px;
155
+ }
156
+
157
+ + .newspack-action-card {
158
+ margin-top: 16px !important;
159
+ }
160
+
161
+ &:last-child {
162
+ margin-bottom: 0;
163
+ }
145
164
  }
146
165
  }
147
166
 
@@ -152,7 +171,12 @@
152
171
 
153
172
  &.newspack-card--has-children {
154
173
  .newspack-action-card__region-top {
155
- border-bottom: 1px solid $gray-300;
174
+ border-bottom: 1px solid wp-colors.$gray-300;
175
+ }
176
+
177
+ .is-small > .newspack-action-card__region-top {
178
+ padding-bottom: 8px;
179
+ padding-top: 8px;
156
180
  }
157
181
  }
158
182
 
@@ -162,11 +186,18 @@
162
186
 
163
187
  .newspack-action-card__region-center {
164
188
  p {
165
- color: darken( $gray-700, 0.75% );
189
+ color: color.adjust( wp-colors.$gray-700, $lightness: -0.75% );
166
190
  }
167
191
  }
168
192
  }
169
193
 
194
+ &.newspack-card--has-white-header {
195
+ .newspack-action-card__region-top {
196
+ background-color: transparent;
197
+ border: none !important;
198
+ }
199
+ }
200
+
170
201
  // Indent
171
202
 
172
203
  &.newspack-card--indent {
@@ -174,17 +205,14 @@
174
205
  position: relative;
175
206
 
176
207
  &::before {
177
- border: 0 solid $gray-300;
208
+ border: 0 solid wp-colors.$gray-300;
178
209
  border-left-width: 1px;
179
210
  border-bottom-width: 1px;
180
211
  border-radius: 0 0 0 2px;
181
- bottom: 50%;
182
212
  content: '';
183
213
  display: block;
184
- left: -28px;
185
214
  position: absolute;
186
- right: 100%;
187
- top: -17px;
215
+ inset: -17px 100% 50% -28px;
188
216
  }
189
217
  }
190
218
 
@@ -258,7 +286,7 @@
258
286
  }
259
287
 
260
288
  .newspack-action-card__region-children {
261
- padding: 0 24px 24px 24px;
289
+ padding: 0 24px 24px;
262
290
 
263
291
  &__inner {
264
292
  padding-top: 32px;
@@ -304,7 +332,7 @@
304
332
  }
305
333
 
306
334
  p {
307
- color: $gray-700;
335
+ color: wp-colors.$gray-700;
308
336
  }
309
337
  }
310
338
 
@@ -347,6 +375,12 @@
347
375
  margin-top: 0;
348
376
  }
349
377
  }
378
+
379
+ &.newspack-action-card__region-children {
380
+ .newspack-notice {
381
+ margin-top: 32px;
382
+ }
383
+ }
350
384
  }
351
385
 
352
386
  // Image
@@ -369,9 +403,9 @@
369
403
  // Badge
370
404
 
371
405
  .newspack-action-card__badge {
372
- background: $gray-100;
406
+ background: wp-colors.$gray-100;
373
407
  border-radius: 2px;
374
- color: $gray-900;
408
+ color: wp-colors.$gray-900;
375
409
  display: block;
376
410
  flex: 0 0 auto;
377
411
  font-size: 10px;
@@ -392,6 +426,49 @@
392
426
  font-style: italic;
393
427
  }
394
428
 
429
+ // Expandable card children
430
+
431
+ &.is-expandable {
432
+ .newspack-action-card__title .components-button.is-link {
433
+ color: inherit;
434
+ font-size: inherit;
435
+ font-weight: inherit;
436
+ text-decoration: inherit;
437
+ }
438
+
439
+ .newspack-action-card__region-children {
440
+ border-top: 1px solid wp-colors.$gray-100;
441
+ padding-top: 24px;
442
+ }
443
+
444
+ &.is-medium .newspack-action-card__region-children {
445
+ padding-top: 32px;
446
+ }
447
+
448
+ &.has-checkbox {
449
+ .newspack-action-card__region-children {
450
+ padding-left: 72px;
451
+ }
452
+
453
+ &.is-small .newspack-action-card__region-children {
454
+ padding-left: 64px;
455
+ }
456
+
457
+ &.is-medium .newspack-action-card__region-children {
458
+ padding-left: 56px;
459
+ }
460
+ }
461
+ }
462
+
463
+ // Action content with multiple buttons
464
+ &.has-action-content .newspack-action-card__region-right {
465
+ flex-direction: row;
466
+
467
+ .components-button + .components-button {
468
+ margin-left: 8px;
469
+ }
470
+ }
471
+
395
472
  // Multiple Cards
396
473
 
397
474
  & + & {
@@ -401,6 +478,6 @@
401
478
 
402
479
  .newspack-card {
403
480
  .newspack-card.newspack-action-card {
404
- border: 1px solid $gray-200;
481
+ border: 1px solid wp-colors.$gray-200;
405
482
  }
406
483
  }
@@ -1,24 +1,16 @@
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
- var _lodash = require("lodash");
13
-
9
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
14
10
  var _element = require("@wordpress/element");
15
-
16
11
  var _components = require("@wordpress/components");
17
-
18
12
  require("./style.scss");
19
-
20
13
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
21
-
22
14
  /**
23
15
  * External dependencies
24
16
  */
@@ -33,10 +25,12 @@ var _jsxRuntime = require("@emotion/react/jsx-runtime");
33
25
 
34
26
  /**
35
27
  * An multi-selecting, api-driven autocomplete input suitable for use in block attributes.
36
- */
37
- class AutocompleteTokenField extends _element.Component {
28
+ */class AutocompleteTokenField extends _element.Component {
38
29
  constructor(props) {
39
30
  super(props);
31
+ /**
32
+ * If the component has tokens passed in props, it should fetch info after it mounts.
33
+ */
40
34
  (0, _defineProperty2.default)(this, "isFetchingInfoOnLoad", () => {
41
35
  const {
42
36
  tokens,
@@ -49,13 +43,8 @@ class AutocompleteTokenField extends _element.Component {
49
43
  validValues: {},
50
44
  loading: this.isFetchingInfoOnLoad()
51
45
  };
52
- this.debouncedUpdateSuggestions = (0, _lodash.debounce)(this.updateSuggestions, 500);
46
+ this.debouncedUpdateSuggestions = (0, _debounce.default)(this.updateSuggestions, 500);
53
47
  }
54
- /**
55
- * If the component has tokens passed in props, it should fetch info after it mounts.
56
- */
57
-
58
-
59
48
  /**
60
49
  * When the component loads, fetch information about the tokens so we can populate
61
50
  * the tokens with the correct labels.
@@ -80,23 +69,21 @@ class AutocompleteTokenField extends _element.Component {
80
69
  });
81
70
  }
82
71
  }
72
+
83
73
  /**
84
74
  * Clean up any unfinished autocomplete api call requests.
85
75
  */
86
-
87
-
88
76
  componentWillUnmount() {
89
77
  delete this.suggestionsRequest;
90
78
  this.debouncedUpdateSuggestions.cancel();
91
79
  }
80
+
92
81
  /**
93
82
  * Get a list of labels for input values.
94
83
  *
95
84
  * @param {Array} values Array of values (ids, etc.).
96
85
  * @return {Array} array of valid labels corresponding to the values.
97
86
  */
98
-
99
-
100
87
  getLabelsForValues(values) {
101
88
  const {
102
89
  validValues
@@ -105,31 +92,26 @@ class AutocompleteTokenField extends _element.Component {
105
92
  if (!value) {
106
93
  return accumulator;
107
94
  }
108
-
109
95
  if (value.label) {
110
96
  return [...accumulator, value.label];
111
97
  }
112
-
113
98
  return validValues[value] ? [...accumulator, validValues[value]] : accumulator;
114
99
  }, []);
115
100
  }
101
+
116
102
  /**
117
103
  * Get a list of values for input labels.
118
104
  *
119
105
  * @param {Array} labels Array of labels from the tokens.
120
106
  * @return {Array} Array of valid values corresponding to the labels.
121
107
  */
122
-
123
-
124
108
  getValuesForLabels(labels) {
125
109
  const {
126
110
  returnFullObjects
127
111
  } = this.props; // If this prop is passed, return both the value and label. Otherwise, return just the label.
128
-
129
112
  const {
130
113
  validValues
131
114
  } = this.state;
132
-
133
115
  if (returnFullObjects) {
134
116
  return labels.reduce((acc, label) => {
135
117
  Object.keys(validValues).forEach(key => {
@@ -143,25 +125,21 @@ class AutocompleteTokenField extends _element.Component {
143
125
  return acc;
144
126
  }, []);
145
127
  }
146
-
147
128
  return labels.map(label => Object.keys(validValues).find(key => validValues[key] === label));
148
129
  }
130
+
149
131
  /**
150
132
  * Refresh the autocomplete dropdown.
151
133
  *
152
134
  * @param {string} input Input to fetch suggestions for
153
135
  */
154
-
155
-
156
136
  updateSuggestions(input) {
157
137
  const {
158
138
  fetchSuggestions
159
139
  } = this.props;
160
-
161
140
  if (!fetchSuggestions) {
162
141
  return;
163
142
  }
164
-
165
143
  this.setState({
166
144
  loading: true
167
145
  }, () => {
@@ -173,7 +151,6 @@ class AutocompleteTokenField extends _element.Component {
173
151
  if (this.suggestionsRequest !== request) {
174
152
  return;
175
153
  }
176
-
177
154
  const currentSuggestions = [...suggestions];
178
155
  const currentValidValues = {};
179
156
  suggestions.forEach(suggestion => {
@@ -194,37 +171,34 @@ class AutocompleteTokenField extends _element.Component {
194
171
  this.suggestionsRequest = request;
195
172
  });
196
173
  }
174
+
197
175
  /**
198
176
  * When a token is selected, we need to convert the string label into a recognized value suitable for saving as an attribute.
199
177
  *
200
178
  * @param {Array} tokenStrings An array of token label strings.
201
179
  */
202
-
203
-
204
180
  handleOnChange(tokenStrings) {
205
181
  const {
206
182
  onChange
207
183
  } = this.props;
208
184
  onChange(this.getValuesForLabels(tokenStrings));
209
185
  }
186
+
210
187
  /**
211
188
  * To populate the tokens, we need to convert the values into a human-readable label.
212
189
  *
213
190
  * @return {Array} An array of token label strings.
214
191
  */
215
-
216
-
217
192
  getTokens() {
218
193
  const {
219
194
  tokens
220
195
  } = this.props;
221
196
  return this.getLabelsForValues(tokens);
222
197
  }
198
+
223
199
  /**
224
200
  * Render.
225
201
  */
226
-
227
-
228
202
  render() {
229
203
  const {
230
204
  help,
@@ -250,8 +224,6 @@ class AutocompleteTokenField extends _element.Component {
250
224
  })]
251
225
  });
252
226
  }
253
-
254
227
  }
255
-
256
228
  var _default = AutocompleteTokenField;
257
229
  exports.default = _default;
@@ -2,7 +2,7 @@
2
2
  * Autocomplete Token Field
3
3
  */
4
4
 
5
- @import '~@wordpress/base-styles/colors';
5
+ @use '~@wordpress/base-styles/colors' as wp-colors;
6
6
 
7
7
  .newspack-autocomplete-tokenfield {
8
8
  position: relative;
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  .newspack-autocomplete-tokenfield__help {
30
- color: $gray-700;
30
+ color: wp-colors.$gray-700;
31
31
  font-size: inherit;
32
32
  margin-top: 0;
33
33
  }