newspack-components 3.0.0-alpha.1 → 3.0.0-alpha.2

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 (278) hide show
  1. package/babel.config.js +25 -0
  2. package/copy-styles.js +2 -10
  3. package/dist/accordion/index.js +50 -0
  4. package/dist/accordion/style.scss +31 -0
  5. package/dist/{cjs/action-card → action-card}/index.js +38 -41
  6. package/dist/{cjs/action-card → action-card}/style.scss +9 -9
  7. package/dist/{cjs/autocomplete-tokenfield → autocomplete-tokenfield}/index.js +19 -18
  8. package/dist/{esm/autocomplete-tokenfield → autocomplete-tokenfield}/style.scss +3 -3
  9. package/dist/{cjs/autocomplete-with-suggestions → autocomplete-with-suggestions}/index.js +29 -29
  10. package/dist/{cjs/autocomplete-with-suggestions → autocomplete-with-suggestions}/style.scss +8 -8
  11. package/dist/button/index.js +51 -0
  12. package/dist/button/index.tsx +48 -0
  13. package/dist/{cjs/button → button}/style.scss +1 -1
  14. package/dist/{cjs/button-card → button-card}/index.js +8 -8
  15. package/dist/{cjs/button-card → button-card}/style.scss +19 -13
  16. package/dist/{cjs/card → card}/index.js +3 -3
  17. package/dist/{esm/card → card}/style.scss +1 -1
  18. package/dist/{cjs/category-autocomplete → category-autocomplete}/index.js +50 -48
  19. package/dist/{cjs/category-autocomplete → category-autocomplete}/style.scss +2 -2
  20. package/dist/{cjs/color-picker → color-picker}/index.js +7 -7
  21. package/dist/{cjs/color-picker → color-picker}/style.scss +3 -3
  22. package/dist/{cjs/custom-select-control → custom-select-control}/index.js +3 -3
  23. package/dist/{esm/custom-select-control → custom-select-control}/style.scss +11 -10
  24. package/dist/date-range-picker/index.js +39 -0
  25. package/dist/date-range-picker/style.scss +148 -0
  26. package/dist/{cjs/footer → footer}/index.js +19 -17
  27. package/dist/{cjs/footer → footer}/style.scss +1 -1
  28. package/dist/{cjs/form-token-field → form-token-field}/index.js +5 -5
  29. package/dist/{esm/form-token-field → form-token-field}/style.scss +1 -1
  30. package/dist/{cjs/global-notices → global-notices}/index.js +3 -3
  31. package/dist/grid/index.js +44 -0
  32. package/dist/grid/index.tsx +34 -0
  33. package/dist/{esm/grid → grid}/style.scss +9 -9
  34. package/dist/{cjs/handoff → handoff}/index.js +72 -69
  35. package/dist/{cjs/handoff-message → handoff-message}/index.js +5 -3
  36. package/dist/hooks/index.js +29 -0
  37. package/dist/hooks/index.ts +15 -0
  38. package/dist/{cjs/hooks → hooks}/useObjectState.js +1 -1
  39. package/dist/{cjs/hooks → hooks}/useObjectState.test.js +9 -9
  40. package/dist/hooks/usePrompt.js +47 -0
  41. package/dist/hooks/usePrompt.ts +46 -0
  42. package/dist/image-upload/index.js +148 -0
  43. package/dist/{cjs/image-upload → image-upload}/index.test.js +13 -6
  44. package/dist/{cjs/image-upload → image-upload}/style.scss +5 -5
  45. package/dist/{cjs/index.js → index.js} +15 -1
  46. package/dist/{cjs/info-button → info-button}/index.js +5 -5
  47. package/dist/{cjs/modal → modal}/index.js +3 -3
  48. package/dist/{cjs/modal → modal}/style.scss +5 -5
  49. package/dist/{cjs/newspack-icon → newspack-icon}/index.js +4 -4
  50. package/dist/{cjs/newspack-icon → newspack-icon}/style.scss +1 -1
  51. package/dist/{cjs/newspack-logo → newspack-logo}/index.js +4 -4
  52. package/dist/{cjs/newspack-logo → newspack-logo}/style.scss +1 -1
  53. package/dist/{cjs/notice → notice}/index.js +11 -8
  54. package/dist/{cjs/notice → notice}/style.scss +11 -11
  55. package/dist/patrons-logo/index.js +77 -0
  56. package/dist/plugin-installer/index.js +297 -0
  57. package/dist/{esm/plugin-installer → plugin-installer}/style.scss +1 -1
  58. package/dist/{cjs/plugin-settings → plugin-settings}/SettingsSection.js +11 -9
  59. package/dist/plugin-settings/index.js +228 -0
  60. package/dist/{cjs/plugin-settings → plugin-settings}/style.scss +1 -1
  61. package/dist/plugin-toggle/README.md +53 -0
  62. package/dist/plugin-toggle/index.js +222 -0
  63. package/dist/{esm/plugin-toggle → plugin-toggle}/style.scss +1 -1
  64. package/dist/{cjs/popover → popover}/index.js +3 -3
  65. package/dist/{esm/popover → popover}/style.scss +7 -7
  66. package/dist/{cjs/position-control → position-control}/index.js +24 -22
  67. package/dist/{cjs/position-control → position-control}/style.scss +8 -8
  68. package/dist/{cjs/progress-bar → progress-bar}/index.js +8 -8
  69. package/dist/{cjs/progress-bar → progress-bar}/index.test.js +12 -11
  70. package/dist/{esm/progress-bar → progress-bar}/style.scss +2 -2
  71. package/dist/proxied-imports/router.js +15 -0
  72. package/dist/{cjs/radio-control → radio-control}/index.js +3 -3
  73. package/dist/{esm/radio-control → radio-control}/style.scss +3 -3
  74. package/dist/{cjs/section-header → section-header}/index.js +8 -8
  75. package/dist/{cjs/section-header → section-header}/style.scss +1 -1
  76. package/dist/{cjs/select-control → select-control}/ButtonGroupControl.js +7 -7
  77. package/dist/{cjs/select-control → select-control}/GroupedSelectControl.js +15 -14
  78. package/dist/{cjs/select-control → select-control}/index.js +6 -6
  79. package/dist/{esm/select-control → select-control}/style.scss +4 -4
  80. package/dist/{cjs/settings → settings}/MinMaxSetting.js +12 -11
  81. package/dist/{cjs/settings → settings}/SettingsCard.js +4 -4
  82. package/dist/{cjs/settings → settings}/SettingsSection.js +6 -6
  83. package/dist/{cjs/settings → settings}/index.js +1 -1
  84. package/dist/{cjs/settings → settings}/style.scss +1 -1
  85. package/dist/{cjs/sortable-newsletter-list-control → sortable-newsletter-list-control}/index.js +25 -24
  86. package/dist/{cjs/steps-list → steps-list}/index.js +4 -4
  87. package/dist/{esm/steps-list → steps-list}/style.scss +2 -2
  88. package/dist/{cjs/steps-list-item → steps-list-item}/index.js +5 -5
  89. package/dist/{cjs/steps-list-item → steps-list-item}/style.scss +5 -5
  90. package/dist/{cjs/style-card → style-card}/index.js +20 -17
  91. package/dist/{cjs/style-card → style-card}/style.scss +4 -4
  92. package/dist/{esm/style.scss → style.scss} +1 -1
  93. package/dist/{cjs/tabbed-navigation → tabbed-navigation}/index.js +7 -7
  94. package/dist/{cjs/tabbed-navigation → tabbed-navigation}/style.scss +4 -4
  95. package/dist/text-control/index.js +76 -0
  96. package/dist/text-control/index.tsx +71 -0
  97. package/dist/{cjs/utils → utils}/index.js +2 -2
  98. package/dist/{cjs/waiting → waiting}/index.js +3 -3
  99. package/dist/web-preview/index.js +191 -0
  100. package/dist/{esm/web-preview → web-preview}/style.scss +5 -5
  101. package/dist/with-wizard/index.js +328 -0
  102. package/dist/{cjs/with-wizard → with-wizard}/style.scss +44 -22
  103. package/dist/{cjs/with-wizard-screen → with-wizard-screen}/index.js +24 -23
  104. package/dist/{esm/with-wizard-screen → with-wizard-screen}/style.scss +7 -7
  105. package/dist/{cjs/wizard → wizard}/components/WizardError.js +10 -9
  106. package/dist/{cjs/wizard → wizard}/index.js +30 -27
  107. package/dist/{cjs/wizard → wizard}/store/index.js +1 -1
  108. package/package.json +18 -15
  109. package/shared/scss/_mixins.scss +2 -2
  110. package/src/accordion/index.js +35 -0
  111. package/src/accordion/style.scss +31 -0
  112. package/src/action-card/style.scss +9 -9
  113. package/src/autocomplete-tokenfield/style.scss +3 -3
  114. package/src/autocomplete-with-suggestions/index.js +46 -44
  115. package/src/autocomplete-with-suggestions/style.scss +8 -8
  116. package/src/button/style.scss +1 -1
  117. package/src/button-card/style.scss +19 -13
  118. package/src/card/style.scss +1 -1
  119. package/src/category-autocomplete/style.scss +2 -2
  120. package/src/color-picker/style.scss +3 -3
  121. package/src/custom-select-control/style.scss +11 -10
  122. package/src/date-range-picker/index.js +31 -0
  123. package/src/date-range-picker/style.scss +148 -0
  124. package/src/footer/style.scss +1 -1
  125. package/src/form-token-field/style.scss +1 -1
  126. package/src/grid/style.scss +9 -9
  127. package/src/handoff-message/index.js +3 -1
  128. package/src/image-upload/index.js +1 -1
  129. package/src/image-upload/index.test.js +6 -1
  130. package/src/image-upload/style.scss +5 -5
  131. package/src/index.js +2 -0
  132. package/src/modal/style.scss +5 -5
  133. package/src/newspack-icon/style.scss +1 -1
  134. package/src/newspack-logo/style.scss +1 -1
  135. package/src/notice/style.scss +11 -11
  136. package/src/plugin-installer/style.scss +1 -1
  137. package/src/plugin-settings/style.scss +1 -1
  138. package/src/plugin-toggle/index.js +6 -7
  139. package/src/plugin-toggle/style.scss +1 -1
  140. package/src/popover/style.scss +7 -7
  141. package/src/position-control/index.js +62 -63
  142. package/src/position-control/style.scss +8 -8
  143. package/src/progress-bar/style.scss +2 -2
  144. package/src/radio-control/style.scss +3 -3
  145. package/src/section-header/style.scss +1 -1
  146. package/src/select-control/style.scss +4 -4
  147. package/src/settings/style.scss +1 -1
  148. package/src/steps-list/style.scss +2 -2
  149. package/src/steps-list-item/style.scss +5 -5
  150. package/src/style-card/style.scss +4 -4
  151. package/src/style.scss +1 -1
  152. package/src/tabbed-navigation/index.js +1 -1
  153. package/src/tabbed-navigation/style.scss +4 -4
  154. package/src/web-preview/style.scss +5 -5
  155. package/src/with-wizard/style.scss +44 -22
  156. package/src/with-wizard-screen/style.scss +7 -7
  157. package/dist/cjs/autocomplete-tokenfield/style.scss +0 -49
  158. package/dist/cjs/button/index.js +0 -56
  159. package/dist/cjs/card/style.scss +0 -168
  160. package/dist/cjs/custom-select-control/style.scss +0 -92
  161. package/dist/cjs/form-token-field/style.scss +0 -37
  162. package/dist/cjs/grid/index.js +0 -37
  163. package/dist/cjs/grid/style.scss +0 -166
  164. package/dist/cjs/hooks/index.js +0 -25
  165. package/dist/cjs/hooks/usePrompt.js +0 -49
  166. package/dist/cjs/image-upload/index.js +0 -143
  167. package/dist/cjs/patrons-logo/index.js +0 -81
  168. package/dist/cjs/plugin-installer/index.js +0 -295
  169. package/dist/cjs/plugin-installer/style.scss +0 -72
  170. package/dist/cjs/plugin-settings/index.js +0 -221
  171. package/dist/cjs/plugin-toggle/index.js +0 -218
  172. package/dist/cjs/plugin-toggle/style.scss +0 -20
  173. package/dist/cjs/popover/style.scss +0 -161
  174. package/dist/cjs/progress-bar/style.scss +0 -42
  175. package/dist/cjs/proxied-imports/router.js +0 -14
  176. package/dist/cjs/radio-control/style.scss +0 -92
  177. package/dist/cjs/select-control/style.scss +0 -108
  178. package/dist/cjs/steps-list/style.scss +0 -11
  179. package/dist/cjs/style.scss +0 -55
  180. package/dist/cjs/text-control/index.js +0 -61
  181. package/dist/cjs/web-preview/index.js +0 -188
  182. package/dist/cjs/web-preview/style.scss +0 -155
  183. package/dist/cjs/with-wizard/index.js +0 -317
  184. package/dist/cjs/with-wizard-screen/style.scss +0 -160
  185. package/dist/esm/action-card/index.js +0 -221
  186. package/dist/esm/action-card/style.scss +0 -483
  187. package/dist/esm/autocomplete-tokenfield/index.js +0 -260
  188. package/dist/esm/autocomplete-with-suggestions/index.js +0 -276
  189. package/dist/esm/autocomplete-with-suggestions/style.scss +0 -163
  190. package/dist/esm/button/index.js +0 -48
  191. package/dist/esm/button/style.scss +0 -11
  192. package/dist/esm/button-card/index.js +0 -64
  193. package/dist/esm/button-card/style.scss +0 -174
  194. package/dist/esm/card/index.js +0 -43
  195. package/dist/esm/category-autocomplete/index.js +0 -181
  196. package/dist/esm/category-autocomplete/style.scss +0 -34
  197. package/dist/esm/color-picker/index.js +0 -59
  198. package/dist/esm/color-picker/style.scss +0 -37
  199. package/dist/esm/consts.js +0 -1
  200. package/dist/esm/custom-select-control/index.js +0 -37
  201. package/dist/esm/footer/index.js +0 -100
  202. package/dist/esm/footer/style.scss +0 -82
  203. package/dist/esm/form-token-field/index.js +0 -49
  204. package/dist/esm/global-notices/index.js +0 -30
  205. package/dist/esm/grid/index.js +0 -29
  206. package/dist/esm/handoff/index.js +0 -176
  207. package/dist/esm/handoff-message/index.js +0 -45
  208. package/dist/esm/hooks/index.js +0 -17
  209. package/dist/esm/hooks/useObjectState.js +0 -30
  210. package/dist/esm/hooks/useObjectState.test.js +0 -82
  211. package/dist/esm/hooks/useOnClickOutside.js +0 -31
  212. package/dist/esm/hooks/usePrompt.js +0 -40
  213. package/dist/esm/image-upload/index.js +0 -139
  214. package/dist/esm/image-upload/index.test.js +0 -28
  215. package/dist/esm/image-upload/style.scss +0 -103
  216. package/dist/esm/index.js +0 -45
  217. package/dist/esm/info-button/index.js +0 -42
  218. package/dist/esm/info-button/style.scss +0 -18
  219. package/dist/esm/modal/index.js +0 -39
  220. package/dist/esm/modal/style.scss +0 -56
  221. package/dist/esm/newspack-icon/index.js +0 -50
  222. package/dist/esm/newspack-icon/style.scss +0 -26
  223. package/dist/esm/newspack-logo/index.js +0 -46
  224. package/dist/esm/newspack-logo/style.scss +0 -30
  225. package/dist/esm/notice/index.js +0 -66
  226. package/dist/esm/notice/style.scss +0 -111
  227. package/dist/esm/patrons-logo/index.js +0 -75
  228. package/dist/esm/plugin-installer/index.js +0 -290
  229. package/dist/esm/plugin-settings/SettingsSection.js +0 -134
  230. package/dist/esm/plugin-settings/index.js +0 -216
  231. package/dist/esm/plugin-settings/style.scss +0 -7
  232. package/dist/esm/plugin-toggle/index.js +0 -213
  233. package/dist/esm/popover/index.js +0 -41
  234. package/dist/esm/position-control/index.js +0 -107
  235. package/dist/esm/position-control/style.scss +0 -66
  236. package/dist/esm/progress-bar/index.js +0 -68
  237. package/dist/esm/progress-bar/index.test.js +0 -109
  238. package/dist/esm/proxied-imports/router.js +0 -8
  239. package/dist/esm/radio-control/index.js +0 -37
  240. package/dist/esm/section-header/index.js +0 -67
  241. package/dist/esm/section-header/style.scss +0 -45
  242. package/dist/esm/select-control/ButtonGroupControl.js +0 -53
  243. package/dist/esm/select-control/GroupedSelectControl.js +0 -79
  244. package/dist/esm/select-control/index.js +0 -51
  245. package/dist/esm/settings/MinMaxSetting.js +0 -54
  246. package/dist/esm/settings/SettingsCard.js +0 -38
  247. package/dist/esm/settings/SettingsSection.js +0 -26
  248. package/dist/esm/settings/index.js +0 -9
  249. package/dist/esm/settings/style.scss +0 -119
  250. package/dist/esm/sortable-newsletter-list-control/index.js +0 -128
  251. package/dist/esm/sortable-newsletter-list-control/style.scss +0 -45
  252. package/dist/esm/steps-list/index.js +0 -43
  253. package/dist/esm/steps-list-item/index.js +0 -47
  254. package/dist/esm/steps-list-item/style.scss +0 -47
  255. package/dist/esm/style-card/index.js +0 -75
  256. package/dist/esm/style-card/style.scss +0 -94
  257. package/dist/esm/tabbed-navigation/index.js +0 -53
  258. package/dist/esm/tabbed-navigation/style.scss +0 -86
  259. package/dist/esm/text-control/index.js +0 -57
  260. package/dist/esm/text-control/style.scss +0 -32
  261. package/dist/esm/utils/index.js +0 -29
  262. package/dist/esm/waiting/index.js +0 -44
  263. package/dist/esm/waiting/style.scss +0 -27
  264. package/dist/esm/web-preview/index.js +0 -183
  265. package/dist/esm/with-wizard/index.js +0 -311
  266. package/dist/esm/with-wizard/style.scss +0 -260
  267. package/dist/esm/with-wizard-screen/index.js +0 -110
  268. package/dist/esm/wizard/components/WizardError.js +0 -67
  269. package/dist/esm/wizard/index.js +0 -120
  270. package/dist/esm/wizard/store/index.js +0 -155
  271. package/dist/esm/wizard/store/utils.js +0 -14
  272. /package/dist/{cjs/consts.js → consts.js} +0 -0
  273. /package/dist/{cjs/hooks → hooks}/useOnClickOutside.js +0 -0
  274. /package/dist/{cjs/info-button → info-button}/style.scss +0 -0
  275. /package/dist/{cjs/sortable-newsletter-list-control → sortable-newsletter-list-control}/style.scss +0 -0
  276. /package/dist/{cjs/text-control → text-control}/style.scss +0 -0
  277. /package/dist/{cjs/waiting → waiting}/style.scss +0 -0
  278. /package/dist/{cjs/wizard → wizard}/store/utils.js +0 -0
@@ -1,483 +0,0 @@
1
- /**
2
- * Action Card
3
- */
4
-
5
- @use 'sass:color';
6
- @use '~@wordpress/base-styles/colors' as wp-colors;
7
-
8
- .newspack-card.newspack-action-card {
9
- padding: 0;
10
- border-color: wp-colors.$gray-300;
11
-
12
- // Clickable
13
-
14
- &.newspack-card--is-clickable {
15
- transition: box-shadow 125ms ease-in-out;
16
-
17
- &:hover {
18
- box-shadow: 0 4px 8px rgba( black, 0.08 );
19
- }
20
- }
21
-
22
- // Status
23
-
24
- &.newspack-card__is-disabled,
25
- &.newspack-card__is-primary,
26
- &.newspack-card__is-secondary,
27
- &.newspack-card__is-supported,
28
- &.newspack-card__is-unsupported {
29
- box-shadow: inset 4px 0 0 wp-colors.$gray-100;
30
-
31
- .newspack-action-card__region-top {
32
- padding-left: 28px;
33
- }
34
- }
35
-
36
- &.newspack-card__is-primary {
37
- box-shadow: inset 4px 0 0 var( --wp-admin-theme-color );
38
- }
39
-
40
- &.newspack-card__is-secondary {
41
- box-shadow: inset 4px 0 0 wp-colors.$alert-yellow;
42
- }
43
-
44
- &.newspack-card__is-supported {
45
- box-shadow: inset 4px 0 0 wp-colors.$alert-green;
46
- }
47
-
48
- &.newspack-card__is-unsupported {
49
- box-shadow: inset 4px 0 0 wp-colors.$alert-red;
50
- }
51
-
52
- // Small
53
- &.is-small {
54
- .newspack-action-card__region-top {
55
- padding: 8px 16px;
56
-
57
- .components-toggle-control {
58
- margin-bottom: 16px;
59
-
60
- @media screen and ( min-width: 744px ) {
61
- margin-bottom: 0;
62
- margin-right: 16px;
63
- }
64
- }
65
- }
66
-
67
- h2 {
68
- font-size: 14px;
69
- }
70
-
71
- p,
72
- .newspack-action-card__region-right,
73
- .newspack-action-card__primary_button {
74
- font-size: 12px;
75
- line-height: 16px;
76
- }
77
-
78
- code {
79
- padding: 0 4px;
80
- }
81
-
82
- & + & {
83
- margin-top: -16px;
84
- }
85
-
86
- &.mv0 {
87
- border-left-color: wp-colors.$gray-300;
88
- border-radius: 0;
89
- border-right-color: wp-colors.$gray-300;
90
-
91
- &:first-of-type {
92
- border-top-color: wp-colors.$gray-300;
93
- border-top-left-radius: 3px;
94
- border-top-right-radius: 3px;
95
- }
96
-
97
- &:last-of-type {
98
- border-bottom-color: wp-colors.$gray-300;
99
- border-bottom-left-radius: 3px;
100
- border-bottom-right-radius: 3px;
101
- }
102
-
103
- & + & {
104
- margin-top: -1px;
105
- }
106
- }
107
-
108
- &.newspack-card__is-disabled,
109
- &.newspack-card__is-primary,
110
- &.newspack-card__is-secondary,
111
- &.newspack-card__is-supported,
112
- &.newspack-card__is-unsupported {
113
- .newspack-action-card__region-top {
114
- padding-left: 20px;
115
- }
116
- }
117
- }
118
-
119
- // Medium
120
-
121
- &.is-medium {
122
- .newspack-action-card__region-top {
123
- padding: 16px;
124
-
125
- .components-toggle-control {
126
- margin-bottom: 16px;
127
-
128
- @media screen and ( min-width: 744px ) {
129
- margin-bottom: 0;
130
- margin-right: 16px;
131
- }
132
- }
133
- }
134
-
135
- .newspack-action-card__region-left {
136
- margin-bottom: 16px;
137
-
138
- @media screen and ( min-width: 744px ) {
139
- margin-bottom: 0;
140
- margin-right: 16px;
141
- }
142
- }
143
-
144
- .newspack-action-card__region-children {
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
- }
164
- }
165
- }
166
-
167
- // Has grey header
168
-
169
- &.newspack-card--has-grey-header {
170
- overflow: hidden;
171
-
172
- &.newspack-card--has-children {
173
- .newspack-action-card__region-top {
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;
180
- }
181
- }
182
-
183
- .newspack-action-card__region-top {
184
- background-color: rgba( black, 0.025 );
185
- }
186
-
187
- .newspack-action-card__region-center {
188
- p {
189
- color: color.adjust( wp-colors.$gray-700, $lightness: -0.75% );
190
- }
191
- }
192
- }
193
-
194
- &.newspack-card--has-white-header {
195
- .newspack-action-card__region-top {
196
- background-color: transparent;
197
- border: none !important;
198
- }
199
- }
200
-
201
- // Indent
202
-
203
- &.newspack-card--indent {
204
- margin-left: 56px;
205
- position: relative;
206
-
207
- &::before {
208
- border: 0 solid wp-colors.$gray-300;
209
- border-left-width: 1px;
210
- border-bottom-width: 1px;
211
- border-radius: 0 0 0 2px;
212
- content: '';
213
- display: block;
214
- position: absolute;
215
- inset: -17px 100% 50% -28px;
216
- }
217
- }
218
-
219
- // Typography
220
-
221
- h2,
222
- p:not( [class*='components-base-control'] ) {
223
- margin: 0;
224
- max-width: 100%;
225
- width: 100%;
226
- }
227
-
228
- h2 {
229
- align-items: center;
230
- display: flex;
231
- flex-wrap: wrap;
232
- margin-right: -8px;
233
-
234
- .newspack-action-card__title {
235
- margin-right: 8px;
236
- }
237
-
238
- a {
239
- color: inherit;
240
- text-decoration: none;
241
-
242
- &:active,
243
- &:focus,
244
- &:hover {
245
- color: var( --wp-admin-theme-color );
246
- }
247
- }
248
- }
249
-
250
- // Regions
251
-
252
- .newspack-action-card__region {
253
- align-items: center;
254
- display: flex;
255
- justify-content: space-between;
256
- margin: 0;
257
- }
258
-
259
- .newspack-action-card__region-top {
260
- padding: 24px;
261
- display: block;
262
-
263
- @media screen and ( min-width: 744px ) {
264
- display: flex;
265
- }
266
-
267
- // Toggle Control
268
- .components-toggle-control {
269
- margin-bottom: 24px;
270
- margin-top: 0;
271
-
272
- @media screen and ( min-width: 744px ) {
273
- margin-bottom: 0;
274
- margin-right: 24px;
275
- }
276
-
277
- .components-base-control__field {
278
- margin-bottom: 0;
279
- }
280
-
281
- .components-form-toggle {
282
- display: flex;
283
- margin: 0;
284
- }
285
- }
286
- }
287
-
288
- .newspack-action-card__region-children {
289
- padding: 0 24px 24px;
290
-
291
- &__inner {
292
- padding-top: 32px;
293
-
294
- > *:first-child {
295
- margin-top: 0 !important;
296
- }
297
-
298
- > *:last-child {
299
- margin-bottom: 0 !important;
300
- }
301
- }
302
-
303
- .newspack-section-header {
304
- margin: 32px 0 16px;
305
- }
306
-
307
- .newspack-card,
308
- .newspack-checkbox-control,
309
- .newspack-grid,
310
- .newspack-text-control,
311
- .newspack-toggle-control {
312
- margin: 16px 0;
313
- }
314
- }
315
-
316
- .newspack-action-card__region-left {
317
- margin-bottom: 24px;
318
-
319
- @media screen and ( min-width: 744px ) {
320
- margin-bottom: 0;
321
- margin-right: 24px;
322
- }
323
- }
324
-
325
- .newspack-action-card__region-center {
326
- align-items: flex-start;
327
- flex: 1 1 auto;
328
- flex-wrap: wrap;
329
-
330
- .newspack-grid {
331
- width: 100%;
332
- }
333
-
334
- p {
335
- color: wp-colors.$gray-700;
336
- }
337
- }
338
-
339
- .newspack-action-card__region-right {
340
- align-items: flex-start;
341
- flex: 0 0 auto;
342
- flex-direction: column;
343
- margin-top: 24px;
344
- text-align: right;
345
-
346
- @media screen and ( min-width: 744px ) {
347
- align-items: flex-end;
348
- flex-direction: column;
349
- margin-left: 24px;
350
- margin-top: 0;
351
- }
352
-
353
- > * {
354
- text-align: inherit;
355
- }
356
-
357
- .newspack-action-card__secondary_button {
358
- margin-top: 8px;
359
- }
360
- }
361
-
362
- // Waiting
363
-
364
- .newspack-action-card__container {
365
- display: flex;
366
- }
367
-
368
- // Notifications
369
-
370
- .newspack-action-card__notification {
371
- .newspack-notice {
372
- margin: 0;
373
-
374
- &__heading {
375
- margin-top: 0;
376
- }
377
- }
378
-
379
- &.newspack-action-card__region-children {
380
- .newspack-notice {
381
- margin-top: 32px;
382
- }
383
- }
384
- }
385
-
386
- // Image
387
-
388
- .newspack-action-card__image {
389
- background-position: center;
390
- background-repeat: no-repeat;
391
- background-size: cover;
392
- border-radius: 50%;
393
- height: 48px;
394
- width: 48px;
395
- }
396
-
397
- // Icon
398
-
399
- .newspack_plugin-installer__icon {
400
- margin: 0;
401
- }
402
-
403
- // Badge
404
-
405
- .newspack-action-card__badge {
406
- background: wp-colors.$gray-100;
407
- border-radius: 2px;
408
- color: wp-colors.$gray-900;
409
- display: block;
410
- flex: 0 0 auto;
411
- font-size: 10px;
412
- font-weight: bold;
413
- line-height: 1.4;
414
- margin: 0 8px 0 0;
415
- padding: 2px 8px;
416
- text-transform: uppercase;
417
-
418
- + .newspack-action-card__badge {
419
- margin-left: -4px;
420
- }
421
- }
422
-
423
- // Description Card
424
-
425
- &.newspack-description-card {
426
- font-style: italic;
427
- }
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
-
472
- // Multiple Cards
473
-
474
- & + & {
475
- margin-top: -16px;
476
- }
477
- }
478
-
479
- .newspack-card {
480
- .newspack-card.newspack-action-card {
481
- border: 1px solid wp-colors.$gray-200;
482
- }
483
- }
@@ -1,260 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- /**
3
- * External dependencies
4
- */
5
- import debounce from 'lodash/debounce';
6
-
7
- /**
8
- * WordPress dependencies
9
- */
10
- import { Component } from '@wordpress/element';
11
- import { FormTokenField, Spinner } from '@wordpress/components';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import './style.scss';
17
-
18
- /**
19
- * An multi-selecting, api-driven autocomplete input suitable for use in block attributes.
20
- */
21
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
22
- class AutocompleteTokenField extends Component {
23
- constructor(props) {
24
- super(props);
25
- /**
26
- * If the component has tokens passed in props, it should fetch info after it mounts.
27
- */
28
- _defineProperty(this, "isFetchingInfoOnLoad", () => {
29
- const {
30
- tokens,
31
- fetchSavedInfo
32
- } = this.props;
33
- return Boolean(tokens.length && fetchSavedInfo);
34
- });
35
- this.state = {
36
- suggestions: [],
37
- validValues: {},
38
- loading: this.isFetchingInfoOnLoad()
39
- };
40
- this.debouncedUpdateSuggestions = debounce(this.updateSuggestions, 500);
41
- }
42
- /**
43
- * When the component loads, fetch information about the tokens so we can populate
44
- * the tokens with the correct labels.
45
- */
46
- componentDidMount() {
47
- if (this.isFetchingInfoOnLoad()) {
48
- const {
49
- tokens,
50
- fetchSavedInfo
51
- } = this.props;
52
- fetchSavedInfo(tokens).then(results => {
53
- const {
54
- validValues
55
- } = this.state;
56
- results.forEach(suggestion => {
57
- validValues[suggestion.value] = suggestion.label;
58
- });
59
- this.setState({
60
- validValues,
61
- loading: false
62
- });
63
- });
64
- }
65
- }
66
-
67
- /**
68
- * When the component updates, fetch information about the tokens so we can populate
69
- * the tokens with the correct labels.
70
- */
71
- componentDidUpdate(prevProps) {
72
- const {
73
- tokens,
74
- fetchSavedInfo
75
- } = this.props;
76
- if (tokens !== prevProps.tokens && this.isFetchingInfoOnLoad()) {
77
- fetchSavedInfo(tokens).then(results => {
78
- const {
79
- validValues
80
- } = this.state;
81
- results.forEach(suggestion => {
82
- validValues[suggestion.value] = suggestion.label;
83
- });
84
- this.setState({
85
- validValues,
86
- loading: false
87
- });
88
- });
89
- }
90
- }
91
-
92
- /**
93
- * Clean up any unfinished autocomplete api call requests.
94
- */
95
- componentWillUnmount() {
96
- delete this.suggestionsRequest;
97
- this.debouncedUpdateSuggestions.cancel();
98
- }
99
-
100
- /**
101
- * Get a list of labels for input values.
102
- *
103
- * @param {Array} values Array of values (ids, etc.).
104
- * @return {Array} array of valid labels corresponding to the values.
105
- */
106
- getLabelsForValues(values) {
107
- const {
108
- validValues
109
- } = this.state;
110
- return values.reduce((accumulator, value) => {
111
- if (!value) {
112
- return accumulator;
113
- }
114
- if (value.label) {
115
- return [...accumulator, value.label];
116
- }
117
- return validValues[value] ? [...accumulator, validValues[value]] : accumulator;
118
- }, []);
119
- }
120
-
121
- /**
122
- * Get a list of values for input labels.
123
- *
124
- * @param {Array} labels Array of labels from the tokens.
125
- * @return {Array} Array of valid values corresponding to the labels.
126
- */
127
- getValuesForLabels(labels) {
128
- const {
129
- returnFullObjects
130
- } = this.props; // If this prop is passed, return both the value and label. Otherwise, return just the label.
131
- const {
132
- validValues
133
- } = this.state;
134
- if (returnFullObjects) {
135
- return labels.reduce((acc, label) => {
136
- Object.keys(validValues).forEach(key => {
137
- if (validValues[key] === label) {
138
- // Preserve numeric or string type of values. Object.keys will convert numbers to strings.
139
- const value = isNaN(parseInt(key)) ? key.toString() : parseInt(key);
140
- acc.push({
141
- value,
142
- label
143
- });
144
- }
145
- });
146
- return acc;
147
- }, []);
148
- }
149
- return labels.map(label => Object.keys(validValues).map(key => isNaN(parseInt(key)) ? key.toString() : parseInt(key)).find(key => validValues[key] === label));
150
- }
151
-
152
- /**
153
- * Refresh the autocomplete dropdown.
154
- *
155
- * @param {string} input Input to fetch suggestions for
156
- */
157
- updateSuggestions(input) {
158
- const {
159
- fetchSuggestions
160
- } = this.props;
161
- if (!fetchSuggestions) {
162
- return;
163
- }
164
- this.setState({
165
- loading: true
166
- }, () => {
167
- const request = fetchSuggestions(input);
168
- request.then(suggestions => {
169
- // A fetch Promise doesn't have an abort option. It's mimicked by
170
- // comparing the request reference in on the instance, which is
171
- // reset or deleted on subsequent requests or unmounting.
172
- if (this.suggestionsRequest !== request) {
173
- return;
174
- }
175
- const {
176
- validValues
177
- } = this.state;
178
- const currentSuggestions = [...suggestions];
179
- suggestions.forEach(suggestion => {
180
- validValues[suggestion.value] = suggestion.label;
181
- });
182
- this.setState({
183
- suggestions: currentSuggestions,
184
- validValues,
185
- loading: false
186
- });
187
- }).catch(() => {
188
- if (this.suggestionsRequest === request) {
189
- this.setState({
190
- loading: false
191
- });
192
- }
193
- });
194
- this.suggestionsRequest = request;
195
- });
196
- }
197
-
198
- /**
199
- * When a token is selected, we need to convert the string label into a recognized value suitable for saving as an attribute.
200
- *
201
- * @param {Array} tokenStrings An array of token label strings.
202
- */
203
- handleOnChange(tokenStrings) {
204
- const {
205
- onChange
206
- } = this.props;
207
- onChange(this.getValuesForLabels(tokenStrings));
208
- }
209
-
210
- /**
211
- * To populate the tokens, we need to convert the values into a human-readable label.
212
- *
213
- * @return {Array} An array of token label strings.
214
- */
215
- getTokens() {
216
- const {
217
- tokens
218
- } = this.props;
219
- return this.getLabelsForValues(tokens);
220
- }
221
-
222
- /**
223
- * Render.
224
- */
225
- render() {
226
- const {
227
- help,
228
- label = '',
229
- placeholder = '',
230
- maxLength
231
- } = this.props;
232
- const {
233
- suggestions,
234
- loading
235
- } = this.state;
236
- const classNames = ['newspack-autocomplete-tokenfield__input-container'];
237
- if (label) {
238
- classNames.push('has-label');
239
- }
240
- return _jsxs("div", {
241
- className: "newspack-autocomplete-tokenfield",
242
- children: [_jsxs("div", {
243
- className: classNames.join(' '),
244
- children: [_jsx(FormTokenField, {
245
- value: this.getTokens(),
246
- suggestions: suggestions.map(suggestion => suggestion.label),
247
- onChange: tokens => this.handleOnChange(tokens),
248
- onInputChange: input => this.debouncedUpdateSuggestions(input),
249
- label: label,
250
- maxLength: maxLength,
251
- placeholder: placeholder
252
- }), loading && _jsx(Spinner, {})]
253
- }), help && _jsx("p", {
254
- className: "newspack-autocomplete-tokenfield__help",
255
- children: help
256
- })]
257
- });
258
- }
259
- }
260
- export default AutocompleteTokenField;