@automattic/onboarding 1.0.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 (383) hide show
  1. package/README.md +20 -0
  2. package/dist/cjs/action-buttons/index.js +50 -0
  3. package/dist/cjs/action-buttons/index.js.map +1 -0
  4. package/dist/cjs/action-buttons/style.scss +108 -0
  5. package/dist/cjs/cart/create-cart-manager-client.js +30 -0
  6. package/dist/cjs/cart/create-cart-manager-client.js.map +1 -0
  7. package/dist/cjs/cart/index.js +239 -0
  8. package/dist/cjs/cart/index.js.map +1 -0
  9. package/dist/cjs/confetti/index.js +8 -0
  10. package/dist/cjs/confetti/index.js.map +1 -0
  11. package/dist/cjs/feature-icon/index.js +19 -0
  12. package/dist/cjs/feature-icon/index.js.map +1 -0
  13. package/dist/cjs/flow-progress/index.js +14 -0
  14. package/dist/cjs/flow-progress/index.js.map +1 -0
  15. package/dist/cjs/flow-progress/style.scss +5 -0
  16. package/dist/cjs/flow-progress/use-flow-progress.js +92 -0
  17. package/dist/cjs/flow-progress/use-flow-progress.js.map +1 -0
  18. package/dist/cjs/hooray/index.js +12 -0
  19. package/dist/cjs/hooray/index.js.map +1 -0
  20. package/dist/cjs/hooray/style.scss +66 -0
  21. package/dist/cjs/index.js +54 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/intent-screen/index.js +11 -0
  24. package/dist/cjs/intent-screen/index.js.map +1 -0
  25. package/dist/cjs/mshots-image/index.js +234 -0
  26. package/dist/cjs/mshots-image/index.js.map +1 -0
  27. package/dist/cjs/mshots-image/style.scss +43 -0
  28. package/dist/cjs/navigator/hooks/index.js +6 -0
  29. package/dist/cjs/navigator/hooks/index.js.map +1 -0
  30. package/dist/cjs/navigator/hooks/use-navigator-listener.js +16 -0
  31. package/dist/cjs/navigator/hooks/use-navigator-listener.js.map +1 -0
  32. package/dist/cjs/navigator/index.js +18 -0
  33. package/dist/cjs/navigator/index.js.map +1 -0
  34. package/dist/cjs/navigator/navigator-buttons/index.js +23 -0
  35. package/dist/cjs/navigator/navigator-buttons/index.js.map +1 -0
  36. package/dist/cjs/navigator/navigator-buttons/style.scss +47 -0
  37. package/dist/cjs/navigator/navigator-header/index.js +13 -0
  38. package/dist/cjs/navigator/navigator-header/index.js.map +1 -0
  39. package/dist/cjs/navigator/navigator-header/style.scss +45 -0
  40. package/dist/cjs/navigator/navigator-item-group/index.js +10 -0
  41. package/dist/cjs/navigator/navigator-item-group/index.js.map +1 -0
  42. package/dist/cjs/navigator/navigator-item-group/style.scss +28 -0
  43. package/dist/cjs/navigator/navigator-listener/index.js +9 -0
  44. package/dist/cjs/navigator/navigator-listener/index.js.map +1 -0
  45. package/dist/cjs/navigator/navigator-screen/index.js +16 -0
  46. package/dist/cjs/navigator/navigator-screen/index.js.map +1 -0
  47. package/dist/cjs/navigator/navigator-screens/hooks/index.js +8 -0
  48. package/dist/cjs/navigator/navigator-screens/hooks/index.js.map +1 -0
  49. package/dist/cjs/navigator/navigator-screens/hooks/use-navigator-buttons.js +17 -0
  50. package/dist/cjs/navigator/navigator-screens/hooks/use-navigator-buttons.js.map +1 -0
  51. package/dist/cjs/navigator/navigator-screens/hooks/use-navigator-screens.js +14 -0
  52. package/dist/cjs/navigator/navigator-screens/hooks/use-navigator-screens.js.map +1 -0
  53. package/dist/cjs/navigator/navigator-screens/index.js +9 -0
  54. package/dist/cjs/navigator/navigator-screens/index.js.map +1 -0
  55. package/dist/cjs/navigator/navigator-screens/navigator-screens.js +18 -0
  56. package/dist/cjs/navigator/navigator-screens/navigator-screens.js.map +1 -0
  57. package/dist/cjs/navigator/navigator-screens/navigator-screens.scss +60 -0
  58. package/dist/cjs/navigator/navigator-screens/types.js +3 -0
  59. package/dist/cjs/navigator/navigator-screens/types.js.map +1 -0
  60. package/dist/cjs/notice/index.js +12 -0
  61. package/dist/cjs/notice/index.js.map +1 -0
  62. package/dist/cjs/notice/style.scss +19 -0
  63. package/dist/cjs/progress/index.js +11 -0
  64. package/dist/cjs/progress/index.js.map +1 -0
  65. package/dist/cjs/progress/style.scss +34 -0
  66. package/dist/cjs/select-card-checkbox/index.js +17 -0
  67. package/dist/cjs/select-card-checkbox/index.js.map +1 -0
  68. package/dist/cjs/select-card-checkbox/style.scss +30 -0
  69. package/dist/cjs/select-card-radio/index.js +21 -0
  70. package/dist/cjs/select-card-radio/index.js.map +1 -0
  71. package/dist/cjs/select-card-radio/style.scss +44 -0
  72. package/dist/cjs/select-items/index.js +13 -0
  73. package/dist/cjs/select-items/index.js.map +1 -0
  74. package/dist/cjs/select-items/style.scss +96 -0
  75. package/dist/cjs/select-items-alt/index.js +14 -0
  76. package/dist/cjs/select-items-alt/index.js.map +1 -0
  77. package/dist/cjs/select-items-alt/style.scss +72 -0
  78. package/dist/cjs/sensei-logo/index.js +8 -0
  79. package/dist/cjs/sensei-logo/index.js.map +1 -0
  80. package/dist/cjs/setup-tailored-site-after-creation.js +109 -0
  81. package/dist/cjs/setup-tailored-site-after-creation.js.map +1 -0
  82. package/dist/cjs/step-container/index.js +65 -0
  83. package/dist/cjs/step-container/index.js.map +1 -0
  84. package/dist/cjs/step-container/style.scss +304 -0
  85. package/dist/cjs/step-navigation-link/index.js +35 -0
  86. package/dist/cjs/step-navigation-link/index.js.map +1 -0
  87. package/dist/cjs/step-navigation-link/style.scss +42 -0
  88. package/dist/cjs/titles/index.js +13 -0
  89. package/dist/cjs/titles/index.js.map +1 -0
  90. package/dist/cjs/titles/styles.scss +29 -0
  91. package/dist/cjs/upload-and-set-site-logo.js +32 -0
  92. package/dist/cjs/upload-and-set-site-logo.js.map +1 -0
  93. package/dist/cjs/utils/contrastChecker.js +38 -0
  94. package/dist/cjs/utils/contrastChecker.js.map +1 -0
  95. package/dist/cjs/utils/domain-suggester.js +113 -0
  96. package/dist/cjs/utils/domain-suggester.js.map +1 -0
  97. package/dist/cjs/utils/flows.js +218 -0
  98. package/dist/cjs/utils/flows.js.map +1 -0
  99. package/dist/cjs/utils/index.js +13 -0
  100. package/dist/cjs/utils/index.js.map +1 -0
  101. package/dist/cjs/utils/is-domain.js +22 -0
  102. package/dist/cjs/utils/is-domain.js.map +1 -0
  103. package/dist/cjs/utils/use-data-loss-warning.js +20 -0
  104. package/dist/cjs/utils/use-data-loss-warning.js.map +1 -0
  105. package/dist/cjs/videopress-logo/index.js +8 -0
  106. package/dist/cjs/videopress-logo/index.js.map +1 -0
  107. package/dist/esm/action-buttons/index.js +42 -0
  108. package/dist/esm/action-buttons/index.js.map +1 -0
  109. package/dist/esm/action-buttons/style.scss +108 -0
  110. package/dist/esm/cart/create-cart-manager-client.js +27 -0
  111. package/dist/esm/cart/create-cart-manager-client.js.map +1 -0
  112. package/dist/esm/cart/index.js +229 -0
  113. package/dist/esm/cart/index.js.map +1 -0
  114. package/dist/esm/confetti/index.js +6 -0
  115. package/dist/esm/confetti/index.js.map +1 -0
  116. package/dist/esm/feature-icon/index.js +16 -0
  117. package/dist/esm/feature-icon/index.js.map +1 -0
  118. package/dist/esm/flow-progress/index.js +12 -0
  119. package/dist/esm/flow-progress/index.js.map +1 -0
  120. package/dist/esm/flow-progress/style.scss +5 -0
  121. package/dist/esm/flow-progress/use-flow-progress.js +88 -0
  122. package/dist/esm/flow-progress/use-flow-progress.js.map +1 -0
  123. package/dist/esm/hooray/index.js +9 -0
  124. package/dist/esm/hooray/index.js.map +1 -0
  125. package/dist/esm/hooray/style.scss +66 -0
  126. package/dist/esm/index.js +22 -0
  127. package/dist/esm/index.js.map +1 -0
  128. package/dist/esm/intent-screen/index.js +8 -0
  129. package/dist/esm/intent-screen/index.js.map +1 -0
  130. package/dist/esm/mshots-image/index.js +229 -0
  131. package/dist/esm/mshots-image/index.js.map +1 -0
  132. package/dist/esm/mshots-image/style.scss +43 -0
  133. package/dist/esm/navigator/hooks/index.js +2 -0
  134. package/dist/esm/navigator/hooks/index.js.map +1 -0
  135. package/dist/esm/navigator/hooks/use-navigator-listener.js +14 -0
  136. package/dist/esm/navigator/hooks/use-navigator-listener.js.map +1 -0
  137. package/dist/esm/navigator/index.js +8 -0
  138. package/dist/esm/navigator/index.js.map +1 -0
  139. package/dist/esm/navigator/navigator-buttons/index.js +17 -0
  140. package/dist/esm/navigator/navigator-buttons/index.js.map +1 -0
  141. package/dist/esm/navigator/navigator-buttons/style.scss +47 -0
  142. package/dist/esm/navigator/navigator-header/index.js +11 -0
  143. package/dist/esm/navigator/navigator-header/index.js.map +1 -0
  144. package/dist/esm/navigator/navigator-header/style.scss +45 -0
  145. package/dist/esm/navigator/navigator-item-group/index.js +8 -0
  146. package/dist/esm/navigator/navigator-item-group/index.js.map +1 -0
  147. package/dist/esm/navigator/navigator-item-group/style.scss +28 -0
  148. package/dist/esm/navigator/navigator-listener/index.js +7 -0
  149. package/dist/esm/navigator/navigator-listener/index.js.map +1 -0
  150. package/dist/esm/navigator/navigator-screen/index.js +14 -0
  151. package/dist/esm/navigator/navigator-screen/index.js.map +1 -0
  152. package/dist/esm/navigator/navigator-screens/hooks/index.js +3 -0
  153. package/dist/esm/navigator/navigator-screens/hooks/index.js.map +1 -0
  154. package/dist/esm/navigator/navigator-screens/hooks/use-navigator-buttons.js +14 -0
  155. package/dist/esm/navigator/navigator-screens/hooks/use-navigator-buttons.js.map +1 -0
  156. package/dist/esm/navigator/navigator-screens/hooks/use-navigator-screens.js +11 -0
  157. package/dist/esm/navigator/navigator-screens/hooks/use-navigator-screens.js.map +1 -0
  158. package/dist/esm/navigator/navigator-screens/index.js +4 -0
  159. package/dist/esm/navigator/navigator-screens/index.js.map +1 -0
  160. package/dist/esm/navigator/navigator-screens/navigator-screens.js +15 -0
  161. package/dist/esm/navigator/navigator-screens/navigator-screens.js.map +1 -0
  162. package/dist/esm/navigator/navigator-screens/navigator-screens.scss +60 -0
  163. package/dist/esm/navigator/navigator-screens/types.js +2 -0
  164. package/dist/esm/navigator/navigator-screens/types.js.map +1 -0
  165. package/dist/esm/notice/index.js +9 -0
  166. package/dist/esm/notice/index.js.map +1 -0
  167. package/dist/esm/notice/style.scss +19 -0
  168. package/dist/esm/progress/index.js +8 -0
  169. package/dist/esm/progress/index.js.map +1 -0
  170. package/dist/esm/progress/style.scss +34 -0
  171. package/dist/esm/select-card-checkbox/index.js +14 -0
  172. package/dist/esm/select-card-checkbox/index.js.map +1 -0
  173. package/dist/esm/select-card-checkbox/style.scss +30 -0
  174. package/dist/esm/select-card-radio/index.js +15 -0
  175. package/dist/esm/select-card-radio/index.js.map +1 -0
  176. package/dist/esm/select-card-radio/style.scss +44 -0
  177. package/dist/esm/select-items/index.js +10 -0
  178. package/dist/esm/select-items/index.js.map +1 -0
  179. package/dist/esm/select-items/style.scss +96 -0
  180. package/dist/esm/select-items-alt/index.js +11 -0
  181. package/dist/esm/select-items-alt/index.js.map +1 -0
  182. package/dist/esm/select-items-alt/style.scss +72 -0
  183. package/dist/esm/sensei-logo/index.js +6 -0
  184. package/dist/esm/sensei-logo/index.js.map +1 -0
  185. package/dist/esm/setup-tailored-site-after-creation.js +103 -0
  186. package/dist/esm/setup-tailored-site-after-creation.js.map +1 -0
  187. package/dist/esm/step-container/index.js +62 -0
  188. package/dist/esm/step-container/index.js.map +1 -0
  189. package/dist/esm/step-container/style.scss +304 -0
  190. package/dist/esm/step-navigation-link/index.js +32 -0
  191. package/dist/esm/step-navigation-link/index.js.map +1 -0
  192. package/dist/esm/step-navigation-link/style.scss +42 -0
  193. package/dist/esm/titles/index.js +7 -0
  194. package/dist/esm/titles/index.js.map +1 -0
  195. package/dist/esm/titles/styles.scss +29 -0
  196. package/dist/esm/upload-and-set-site-logo.js +27 -0
  197. package/dist/esm/upload-and-set-site-logo.js.map +1 -0
  198. package/dist/esm/utils/contrastChecker.js +33 -0
  199. package/dist/esm/utils/contrastChecker.js.map +1 -0
  200. package/dist/esm/utils/domain-suggester.js +108 -0
  201. package/dist/esm/utils/domain-suggester.js.map +1 -0
  202. package/dist/esm/utils/flows.js +179 -0
  203. package/dist/esm/utils/flows.js.map +1 -0
  204. package/dist/esm/utils/index.js +6 -0
  205. package/dist/esm/utils/index.js.map +1 -0
  206. package/dist/esm/utils/is-domain.js +18 -0
  207. package/dist/esm/utils/is-domain.js.map +1 -0
  208. package/dist/esm/utils/use-data-loss-warning.js +16 -0
  209. package/dist/esm/utils/use-data-loss-warning.js.map +1 -0
  210. package/dist/esm/videopress-logo/index.js +6 -0
  211. package/dist/esm/videopress-logo/index.js.map +1 -0
  212. package/dist/styles/base-styles.scss +7 -0
  213. package/dist/styles/mixins.scss +262 -0
  214. package/dist/styles/variables.scss +26 -0
  215. package/dist/styles/z-index.scss +41 -0
  216. package/dist/tsconfig-cjs.tsbuildinfo +1 -0
  217. package/dist/tsconfig.tsbuildinfo +1 -0
  218. package/dist/types/action-buttons/index.d.ts +17 -0
  219. package/dist/types/action-buttons/index.d.ts.map +1 -0
  220. package/dist/types/cart/create-cart-manager-client.d.ts +3 -0
  221. package/dist/types/cart/create-cart-manager-client.d.ts.map +1 -0
  222. package/dist/types/cart/index.d.ts +47 -0
  223. package/dist/types/cart/index.d.ts.map +1 -0
  224. package/dist/types/confetti/index.d.ts +6 -0
  225. package/dist/types/confetti/index.d.ts.map +1 -0
  226. package/dist/types/feature-icon/index.d.ts +9 -0
  227. package/dist/types/feature-icon/index.d.ts.map +1 -0
  228. package/dist/types/flow-progress/index.d.ts +9 -0
  229. package/dist/types/flow-progress/index.d.ts.map +1 -0
  230. package/dist/types/flow-progress/use-flow-progress.d.ts +11 -0
  231. package/dist/types/flow-progress/use-flow-progress.d.ts.map +1 -0
  232. package/dist/types/hooray/index.d.ts +10 -0
  233. package/dist/types/hooray/index.d.ts.map +1 -0
  234. package/dist/types/index.d.ts +25 -0
  235. package/dist/types/index.d.ts.map +1 -0
  236. package/dist/types/intent-screen/index.d.ts +12 -0
  237. package/dist/types/intent-screen/index.d.ts.map +1 -0
  238. package/dist/types/mshots-image/index.d.ts +21 -0
  239. package/dist/types/mshots-image/index.d.ts.map +1 -0
  240. package/dist/types/navigator/hooks/index.d.ts +3 -0
  241. package/dist/types/navigator/hooks/index.d.ts.map +1 -0
  242. package/dist/types/navigator/hooks/use-navigator-listener.d.ts +4 -0
  243. package/dist/types/navigator/hooks/use-navigator-listener.d.ts.map +1 -0
  244. package/dist/types/navigator/index.d.ts +8 -0
  245. package/dist/types/navigator/index.d.ts.map +1 -0
  246. package/dist/types/navigator/navigator-buttons/index.d.ts +17 -0
  247. package/dist/types/navigator/navigator-buttons/index.d.ts.map +1 -0
  248. package/dist/types/navigator/navigator-header/index.d.ts +12 -0
  249. package/dist/types/navigator/navigator-header/index.d.ts.map +1 -0
  250. package/dist/types/navigator/navigator-item-group/index.d.ts +9 -0
  251. package/dist/types/navigator/navigator-item-group/index.d.ts.map +1 -0
  252. package/dist/types/navigator/navigator-listener/index.d.ts +7 -0
  253. package/dist/types/navigator/navigator-listener/index.d.ts.map +1 -0
  254. package/dist/types/navigator/navigator-screen/index.d.ts +11 -0
  255. package/dist/types/navigator/navigator-screen/index.d.ts.map +1 -0
  256. package/dist/types/navigator/navigator-screens/hooks/index.d.ts +3 -0
  257. package/dist/types/navigator/navigator-screens/hooks/index.d.ts.map +1 -0
  258. package/dist/types/navigator/navigator-screens/hooks/use-navigator-buttons.d.ts +4 -0
  259. package/dist/types/navigator/navigator-screens/hooks/use-navigator-buttons.d.ts.map +1 -0
  260. package/dist/types/navigator/navigator-screens/hooks/use-navigator-screens.d.ts +4 -0
  261. package/dist/types/navigator/navigator-screens/hooks/use-navigator-screens.d.ts.map +1 -0
  262. package/dist/types/navigator/navigator-screens/index.d.ts +4 -0
  263. package/dist/types/navigator/navigator-screens/index.d.ts.map +1 -0
  264. package/dist/types/navigator/navigator-screens/navigator-screens.d.ts +12 -0
  265. package/dist/types/navigator/navigator-screens/navigator-screens.d.ts.map +1 -0
  266. package/dist/types/navigator/navigator-screens/types.d.ts +17 -0
  267. package/dist/types/navigator/navigator-screens/types.d.ts.map +1 -0
  268. package/dist/types/notice/index.d.ts +7 -0
  269. package/dist/types/notice/index.d.ts.map +1 -0
  270. package/dist/types/progress/index.d.ts +10 -0
  271. package/dist/types/progress/index.d.ts.map +1 -0
  272. package/dist/types/select-card-checkbox/index.d.ts +11 -0
  273. package/dist/types/select-card-checkbox/index.d.ts.map +1 -0
  274. package/dist/types/select-card-radio/index.d.ts +22 -0
  275. package/dist/types/select-card-radio/index.d.ts.map +1 -0
  276. package/dist/types/select-items/index.d.ts +25 -0
  277. package/dist/types/select-items/index.d.ts.map +1 -0
  278. package/dist/types/select-items-alt/index.d.ts +19 -0
  279. package/dist/types/select-items-alt/index.d.ts.map +1 -0
  280. package/dist/types/sensei-logo/index.d.ts +8 -0
  281. package/dist/types/sensei-logo/index.d.ts.map +1 -0
  282. package/dist/types/setup-tailored-site-after-creation.d.ts +8 -0
  283. package/dist/types/setup-tailored-site-after-creation.d.ts.map +1 -0
  284. package/dist/types/step-container/index.d.ts +45 -0
  285. package/dist/types/step-container/index.d.ts.map +1 -0
  286. package/dist/types/step-navigation-link/index.d.ts +18 -0
  287. package/dist/types/step-navigation-link/index.d.ts.map +1 -0
  288. package/dist/types/titles/index.d.ts +12 -0
  289. package/dist/types/titles/index.d.ts.map +1 -0
  290. package/dist/types/upload-and-set-site-logo.d.ts +13 -0
  291. package/dist/types/upload-and-set-site-logo.d.ts.map +1 -0
  292. package/dist/types/utils/contrastChecker.d.ts +17 -0
  293. package/dist/types/utils/contrastChecker.d.ts.map +1 -0
  294. package/dist/types/utils/domain-suggester.d.ts +15 -0
  295. package/dist/types/utils/domain-suggester.d.ts.map +1 -0
  296. package/dist/types/utils/flows.d.ts +89 -0
  297. package/dist/types/utils/flows.d.ts.map +1 -0
  298. package/dist/types/utils/index.d.ts +6 -0
  299. package/dist/types/utils/index.d.ts.map +1 -0
  300. package/dist/types/utils/is-domain.d.ts +2 -0
  301. package/dist/types/utils/is-domain.d.ts.map +1 -0
  302. package/dist/types/utils/use-data-loss-warning.d.ts +2 -0
  303. package/dist/types/utils/use-data-loss-warning.d.ts.map +1 -0
  304. package/dist/types/videopress-logo/index.d.ts +8 -0
  305. package/dist/types/videopress-logo/index.d.ts.map +1 -0
  306. package/jest.config.js +5 -0
  307. package/package.json +63 -0
  308. package/src/action-buttons/index.tsx +113 -0
  309. package/src/action-buttons/style.scss +108 -0
  310. package/src/cart/create-cart-manager-client.ts +34 -0
  311. package/src/cart/index.tsx +375 -0
  312. package/src/cart/test/index.ts +172 -0
  313. package/src/confetti/index.tsx +95 -0
  314. package/src/feature-icon/index.tsx +102 -0
  315. package/src/flow-progress/index.tsx +22 -0
  316. package/src/flow-progress/style.scss +5 -0
  317. package/src/flow-progress/use-flow-progress.ts +108 -0
  318. package/src/hooray/index.tsx +34 -0
  319. package/src/hooray/style.scss +66 -0
  320. package/src/index.ts +36 -0
  321. package/src/intent-screen/README.md +12 -0
  322. package/src/intent-screen/index.tsx +26 -0
  323. package/src/intent-screen/test/index.tsx +197 -0
  324. package/src/mshots-image/index.tsx +368 -0
  325. package/src/mshots-image/style.scss +43 -0
  326. package/src/mshots-image/test/mshots-image.tsx +5 -0
  327. package/src/navigator/hooks/index.tsx +2 -0
  328. package/src/navigator/hooks/use-navigator-listener.tsx +18 -0
  329. package/src/navigator/index.ts +7 -0
  330. package/src/navigator/navigator-buttons/index.tsx +58 -0
  331. package/src/navigator/navigator-buttons/style.scss +47 -0
  332. package/src/navigator/navigator-header/index.tsx +40 -0
  333. package/src/navigator/navigator-header/style.scss +45 -0
  334. package/src/navigator/navigator-item-group/index.tsx +23 -0
  335. package/src/navigator/navigator-item-group/style.scss +28 -0
  336. package/src/navigator/navigator-listener/index.tsx +12 -0
  337. package/src/navigator/navigator-screen/index.tsx +24 -0
  338. package/src/navigator/navigator-screens/hooks/index.tsx +2 -0
  339. package/src/navigator/navigator-screens/hooks/use-navigator-buttons.tsx +32 -0
  340. package/src/navigator/navigator-screens/hooks/use-navigator-screens.tsx +57 -0
  341. package/src/navigator/navigator-screens/index.ts +3 -0
  342. package/src/navigator/navigator-screens/navigator-screens.scss +60 -0
  343. package/src/navigator/navigator-screens/navigator-screens.tsx +41 -0
  344. package/src/navigator/navigator-screens/types.ts +15 -0
  345. package/src/notice/index.tsx +16 -0
  346. package/src/notice/style.scss +19 -0
  347. package/src/progress/index.tsx +23 -0
  348. package/src/progress/style.scss +34 -0
  349. package/src/select-card-checkbox/index.tsx +38 -0
  350. package/src/select-card-checkbox/style.scss +30 -0
  351. package/src/select-card-radio/index.tsx +64 -0
  352. package/src/select-card-radio/style.scss +44 -0
  353. package/src/select-card-radio/test/index.tsx +50 -0
  354. package/src/select-items/README.md +13 -0
  355. package/src/select-items/index.tsx +90 -0
  356. package/src/select-items/style.scss +96 -0
  357. package/src/select-items-alt/README.md +13 -0
  358. package/src/select-items-alt/index.tsx +61 -0
  359. package/src/select-items-alt/style.scss +72 -0
  360. package/src/sensei-logo/index.tsx +30 -0
  361. package/src/setup-tailored-site-after-creation.ts +149 -0
  362. package/src/step-container/index.tsx +251 -0
  363. package/src/step-container/style.scss +304 -0
  364. package/src/step-navigation-link/index.tsx +71 -0
  365. package/src/step-navigation-link/style.scss +42 -0
  366. package/src/titles/index.tsx +36 -0
  367. package/src/titles/styles.scss +29 -0
  368. package/src/types.d.ts +1 -0
  369. package/src/upload-and-set-site-logo.ts +38 -0
  370. package/src/utils/contrastChecker.ts +52 -0
  371. package/src/utils/domain-suggester.ts +126 -0
  372. package/src/utils/flows.ts +232 -0
  373. package/src/utils/index.ts +5 -0
  374. package/src/utils/is-domain.ts +18 -0
  375. package/src/utils/test/domain-suggester.ts +87 -0
  376. package/src/utils/use-data-loss-warning.ts +17 -0
  377. package/src/videopress-logo/index.tsx +36 -0
  378. package/styles/base-styles.scss +7 -0
  379. package/styles/mixins.scss +262 -0
  380. package/styles/variables.scss +26 -0
  381. package/styles/z-index.scss +41 -0
  382. package/tsconfig-cjs.json +7 -0
  383. package/tsconfig.json +15 -0
@@ -0,0 +1,102 @@
1
+ import { SVG, Path } from '@wordpress/components';
2
+ import { Icon } from '@wordpress/icons';
3
+ import * as React from 'react';
4
+
5
+ type FeatureId =
6
+ | 'domain'
7
+ | 'store'
8
+ | 'seo'
9
+ | 'plugins'
10
+ | 'ad-free'
11
+ | 'image-storage'
12
+ | 'video-storage'
13
+ | 'support';
14
+
15
+ export const iconList: Record< FeatureId, React.ReactElement > = {
16
+ domain: (
17
+ <SVG viewBox="0 0 24 24">
18
+ <Path
19
+ fillRule="evenodd"
20
+ clipRule="evenodd"
21
+ d="M2 12C2 6.477 6.477 2 12 2C17.523 2 22 6.477 22 12C22 17.523 17.523 22 12 22C6.477 22 2 17.523 2 12ZM15.703 8.00002H18.918C18.054 6.51302 16.731 5.32502 15.138 4.64302C15.283 5.34902 15.515 6.57602 15.703 8.00002ZM13.014 4.07214C13.082 4.42414 13.401 6.11014 13.659 8.00014H10.341C10.599 6.11014 10.918 4.42414 10.986 4.07214C11.319 4.02914 11.656 4.00014 12 4.00014C12.344 4.00014 12.681 4.02914 13.014 4.07214ZM13.891 14.0001C13.957 13.2861 14 12.5981 14 12.0001C14 11.4021 13.957 10.7141 13.891 10.0001H10.109C10.043 10.7141 10 11.4021 10 12.0001C10 12.5981 10.043 13.2861 10.109 14.0001H13.891ZM8.862 4.64302C8.717 5.34902 8.485 6.57602 8.297 8.00002H5.082C5.946 6.51302 7.269 5.32502 8.862 4.64302ZM8.08401 10.0001H4.26301C4.09801 10.6411 4.00001 11.3081 4.00001 12.0001C4.00001 12.6921 4.09701 13.3591 4.26301 14.0001H8.08501C8.03301 13.3321 8.00001 12.6561 8.00001 12.0001C8.00001 11.3441 8.03301 10.6681 8.08401 10.0001ZM5.082 16.0001H8.297C8.485 17.4241 8.717 18.6501 8.862 19.3571C7.269 18.6751 5.946 17.4871 5.082 16.0001ZM10.341 16.0001C10.598 17.8901 10.918 19.5751 10.986 19.9281C11.319 19.9711 11.656 20.0001 12 20.0001C12.344 20.0001 12.681 19.9711 13.014 19.9281C13.082 19.5761 13.401 17.8901 13.659 16.0001H10.341ZM15.138 19.3571C15.283 18.6501 15.515 17.4241 15.703 16.0001H18.918C18.054 17.4871 16.731 18.6751 15.138 19.3571ZM15.916 14.0001H19.737C19.903 13.3591 20 12.6921 20 12.0001C20 11.3081 19.902 10.6411 19.736 10.0001H15.915C15.967 10.6681 16 11.3441 16 12.0001C16 12.6561 15.967 13.3321 15.916 14.0001Z"
22
+ />
23
+ </SVG>
24
+ ),
25
+ store: (
26
+ <SVG viewBox="0 0 24 24">
27
+ <Path
28
+ fillRule="evenodd"
29
+ clipRule="evenodd"
30
+ d="M19.348 11.434C19.145 12.349 18.333 13 17.396 13H7V15H17C18.105 15 19 15.895 19 17H7C5.895 17 5 16.105 5 15V13V5V4H3V2H5C6.105 2 7 2.895 7 4V5H21L19.348 11.434ZM8.99999 19.9999C8.99999 21.0999 8.09999 21.9999 6.99999 21.9999C5.89999 21.9999 5.00999 21.0999 5.00999 19.9999C5.00999 18.8999 5.89999 17.9999 6.99999 17.9999C8.09999 17.9999 8.99999 18.8999 8.99999 19.9999ZM17 17.9999C15.9 17.9999 15.01 18.8999 15.01 19.9999C15.01 21.0999 15.9 21.9999 17 21.9999C18.1 21.9999 19 21.0999 19 19.9999C19 18.8999 18.1 17.9999 17 17.9999Z"
31
+ />
32
+ </SVG>
33
+ ),
34
+ seo: (
35
+ <SVG viewBox="0 0 24 24">
36
+ <Path d="M8.1437 15.8563H5.57227V9.42773H8.1437V15.8563Z" />
37
+ <Path d="M13.2862 15.8571H10.7148V3H13.2862V15.8571Z" />
38
+ <Path d="M18.4289 15.8574H15.8574V6.85742H18.4289V15.8574Z" />
39
+ <Path fillRule="evenodd" clipRule="evenodd" d="M21 20.7148H3V18.7148H21V20.7148Z" />
40
+ </SVG>
41
+ ),
42
+ plugins: (
43
+ <SVG viewBox="0 0 24 28">
44
+ <Path
45
+ fillRule="evenodd"
46
+ clipRule="evenodd"
47
+ d="M4 2.27539C2.78 3.32215 2 5.11415 2 6.8265C2 9.34099 3.79 11.3776 6 11.3776C6.387 11.3776 6.753 11.2866 7.093 11.1364C7.686 11.9761 8.28 12.8158 8.9 13.6304L10.978 11.2638C10.264 10.5584 9.528 9.8803 8.788 9.20446C8.92 8.81989 9 8.40346 9 7.96428C9 6.07898 7.657 4.55095 6 4.55095C4.69 4.55095 4 3.23681 4 2.27539ZM15.492 13.0934L14.152 14.618C16.08 16.7627 17.905 19.0258 19.6 21.4185L20.75 23.0398L19.25 24.7465L17.825 23.4403C15.722 21.5095 13.733 19.4331 11.848 17.2394L5 25.031L3 22.7554L13.493 10.8167C13.188 10.1261 13 9.35806 13 8.53317C13 5.70579 15.015 3.41317 17.5 3.41317C18.225 3.41317 18.9 3.62707 19.507 3.97409L16 7.96428L18 10.2398L21.507 6.24965C21.812 6.94028 22 7.70828 22 8.53317C22 11.3605 19.985 13.6532 17.5 13.6532C16.775 13.6532 16.099 13.4393 15.492 13.0934Z"
48
+ />
49
+ <Path
50
+ fillRule="evenodd"
51
+ clipRule="evenodd"
52
+ d="M4 2.27539C2.78 3.32215 2 5.11415 2 6.8265C2 9.34099 3.79 11.3776 6 11.3776C6.387 11.3776 6.753 11.2866 7.093 11.1364C7.686 11.9761 8.28 12.8158 8.9 13.6304L10.978 11.2638C10.264 10.5584 9.528 9.8803 8.788 9.20446C8.92 8.81989 9 8.40346 9 7.96428C9 6.07898 7.657 4.55095 6 4.55095C4.69 4.55095 4 3.23681 4 2.27539ZM15.492 13.0934L14.152 14.618C16.08 16.7627 17.905 19.0258 19.6 21.4185L20.75 23.0398L19.25 24.7465L17.825 23.4403C15.722 21.5095 13.733 19.4331 11.848 17.2394L5 25.031L3 22.7554L13.493 10.8167C13.188 10.1261 13 9.35806 13 8.53317C13 5.70579 15.015 3.41317 17.5 3.41317C18.225 3.41317 18.9 3.62707 19.507 3.97409L16 7.96428L18 10.2398L21.507 6.24965C21.812 6.94028 22 7.70828 22 8.53317C22 11.3605 19.985 13.6532 17.5 13.6532C16.775 13.6532 16.099 13.4393 15.492 13.0934Z"
53
+ />
54
+ </SVG>
55
+ ),
56
+ 'ad-free': (
57
+ <SVG viewBox="0 0 24 24">
58
+ <Path
59
+ fillRule="evenodd"
60
+ clipRule="evenodd"
61
+ d="M20.5875 3.42383L22.0017 4.83804L20.0003 6.83942V18.0006C20.0003 19.1051 19.1049 20.0006 18.0003 20.0006H6.8392L4.83316 22.0066L3.41895 20.5924L20.5875 3.42383ZM12.4198 14.4202L13.4203 15.4207L14.4203 14.4207C15.0499 13.9172 15.9566 13.9645 16.5303 14.5307L18.0003 16.0007V8.83959L12.4198 14.4202ZM6.00035 6.00023H15.1626L17.1626 4.00023H6.00035C4.89578 4.00023 4.00035 4.89566 4.00035 6.00023V17.1625L9.58148 11.5814L8.19035 10.1902L6.00035 12.3802V6.00023Z"
62
+ />
63
+ </SVG>
64
+ ),
65
+ 'image-storage': (
66
+ <SVG viewBox="0 0 24 24">
67
+ <Path
68
+ fillRule="evenodd"
69
+ clipRule="evenodd"
70
+ d="M22 4V16C22 17.105 21.105 18 20 18H7.99999C6.89499 18 5.99999 17.105 5.99999 16V4C5.99999 2.895 6.89499 2 7.99999 2H20C21.105 2 22 2.895 22 4ZM18 19.9998H4V5.99984C2.895 5.99984 2 6.89484 2 7.99984V19.9998C2 21.0998 2.9 21.9998 4 21.9998H16C17.105 21.9998 18 21.1048 18 19.9998ZM16.5 5.99984C15.672 5.99984 15 6.67184 15 7.49984C15 8.32784 15.672 8.99984 16.5 8.99984C17.328 8.99984 18 8.32784 18 7.49984C18 6.67184 17.328 5.99984 16.5 5.99984ZM8 10.3332V4.00016H20V12.2342L19.487 11.6642C18.693 10.7792 17.306 10.7792 16.511 11.6642L15.855 12.3952L11 7.00016L8 10.3332Z"
71
+ />
72
+ </SVG>
73
+ ),
74
+ 'video-storage': (
75
+ <SVG viewBox="0 0 24 24">
76
+ <Path
77
+ fillRule="evenodd"
78
+ clipRule="evenodd"
79
+ d="M2 12C2 6.47715 6.47715 2 12 2C14.6522 2 17.1957 3.05357 19.0711 4.92893C20.9464 6.8043 22 9.34784 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12ZM16 12L10 7.5V16.5L16 12Z"
80
+ />
81
+ </SVG>
82
+ ),
83
+ support: (
84
+ <SVG viewBox="0 0 24 24">
85
+ <Path
86
+ fillRule="evenodd"
87
+ clipRule="evenodd"
88
+ d="M1 10C1 11.1 1.9 12 3 12H6L9 15V12H11C12.1 12 13 11.1 13 10V5C13 3.9 12.1 3 11 3H3C1.9 3 1 3.9 1 5V10ZM23 16C23 17.1 22.1 18 21 18H18L15 21V18H13C11.9 18 11 17.1 11 16V14C13.2 14 15 12.2 15 10V9H21C22.1 9 23 9.9 23 11V16Z"
89
+ />
90
+ </SVG>
91
+ ),
92
+ };
93
+
94
+ interface Props {
95
+ featureId: FeatureId;
96
+ }
97
+
98
+ const FeatureIcon: React.FunctionComponent< Props > = ( { featureId } ) => (
99
+ <Icon icon={ iconList[ featureId ] } />
100
+ );
101
+
102
+ export default FeatureIcon;
@@ -0,0 +1,22 @@
1
+ import { useTranslate } from 'i18n-calypso';
2
+ import './style.scss';
3
+
4
+ interface Props {
5
+ count: number;
6
+ progress: number;
7
+ }
8
+
9
+ const FlowProgress: React.FC< Props > = ( { count, progress } ) => {
10
+ const translate = useTranslate();
11
+ if ( count > 1 ) {
12
+ return (
13
+ <div className="flow-progress">
14
+ { translate( 'Step %(progress)d of %(count)d', { args: { progress, count } } ) }
15
+ </div>
16
+ );
17
+ }
18
+
19
+ return null;
20
+ };
21
+
22
+ export default FlowProgress;
@@ -0,0 +1,5 @@
1
+ .flow-progress {
2
+ color: var(--studio-gray-30);
3
+ font-weight: 600;
4
+ margin: 0 10px;
5
+ }
@@ -0,0 +1,108 @@
1
+ import {
2
+ ECOMMERCE_FLOW,
3
+ LINK_IN_BIO_FLOW,
4
+ LINK_IN_BIO_TLD_FLOW,
5
+ FREE_FLOW,
6
+ COPY_SITE_FLOW,
7
+ VIDEOPRESS_TV_FLOW,
8
+ VIDEOPRESS_TV_PURCHASE_FLOW,
9
+ } from '../utils/flows';
10
+
11
+ /* eslint-disable no-restricted-imports */
12
+ interface FlowProgress {
13
+ stepName?: string;
14
+ flowName?: string;
15
+ variantSlug?: string;
16
+ }
17
+
18
+ const flows: Record< string, { [ step: string ]: number } > = {
19
+ newsletter: {
20
+ intro: 0,
21
+ user: 0,
22
+ newsletterSetup: 0,
23
+ newsletterGoals: 1,
24
+ domains: 2,
25
+ 'plans-newsletter': 3,
26
+ subscribers: 4,
27
+ launchpad: 5,
28
+ },
29
+ [ LINK_IN_BIO_FLOW ]: {
30
+ intro: 0,
31
+ user: 0,
32
+ patterns: 1,
33
+ linkInBioSetup: 2,
34
+ domains: 3,
35
+ plans: 4,
36
+ launchpad: 5,
37
+ },
38
+ [ LINK_IN_BIO_TLD_FLOW ]: {
39
+ domains: 0,
40
+ user: 1,
41
+ patterns: 2,
42
+ linkInBioSetup: 3,
43
+ plans: 4,
44
+ launchpad: 5,
45
+ },
46
+ [ FREE_FLOW ]: {
47
+ user: 0,
48
+ freeSetup: 0,
49
+ designSetup: 1,
50
+ launchpad: 2,
51
+ },
52
+ videopress: {
53
+ intro: 0,
54
+ videomakerSetup: 1,
55
+ user: 2,
56
+ options: 3,
57
+ chooseADomain: 4,
58
+ processing: 5,
59
+ launchpad: 6,
60
+ },
61
+ [ VIDEOPRESS_TV_FLOW ]: {
62
+ intro: 0,
63
+ processing: 1,
64
+ },
65
+ [ VIDEOPRESS_TV_PURCHASE_FLOW ]: {
66
+ processing: 0,
67
+ },
68
+ sensei: {
69
+ senseiSetup: 1,
70
+ senseiDomain: 2,
71
+ senseiPlan: 3,
72
+ senseiPurpose: 4,
73
+ senseiLaunch: 5,
74
+ },
75
+ [ ECOMMERCE_FLOW ]: {
76
+ intro: 0,
77
+ storeProfiler: 1,
78
+ designCarousel: 2,
79
+ domains: 3,
80
+ createSite: 4,
81
+ processing: 4,
82
+ waitForAtomic: 4,
83
+ checkPlan: 4,
84
+ storeAddress: 5,
85
+ },
86
+ [ COPY_SITE_FLOW ]: {
87
+ domains: 0,
88
+ 'create-site': 1,
89
+ processing: 2,
90
+ 'automated-copy': 3,
91
+ 'processing-copy': 3,
92
+ },
93
+ };
94
+
95
+ export const useFlowProgress = ( { stepName, flowName, variantSlug }: FlowProgress = {} ) => {
96
+ if ( ! stepName || ! flowName ) {
97
+ return;
98
+ }
99
+
100
+ const flow = flows[ variantSlug ?? flowName ];
101
+
102
+ return (
103
+ flow && {
104
+ progress: flow[ stepName ],
105
+ count: Math.max( ...Object.values( flow ) ),
106
+ }
107
+ );
108
+ };
@@ -0,0 +1,34 @@
1
+ import clsx from 'clsx';
2
+ import * as React from 'react';
3
+ import Confetti from '../confetti';
4
+
5
+ import './style.scss';
6
+
7
+ interface Props {
8
+ animate?: boolean;
9
+ className?: string;
10
+ children: React.ReactNode;
11
+ }
12
+
13
+ const Hooray: React.FunctionComponent< Props > = ( {
14
+ className,
15
+ animate = false,
16
+ children,
17
+ ...additionalProps
18
+ } ) => {
19
+ return (
20
+ <div
21
+ className={ clsx(
22
+ `onboarding-hooray`,
23
+ { 'onboarding-hooray__animate': animate },
24
+ className
25
+ ) }
26
+ { ...additionalProps }
27
+ >
28
+ <Confetti />
29
+ { children }
30
+ </div>
31
+ );
32
+ };
33
+
34
+ export default Hooray;
@@ -0,0 +1,66 @@
1
+ @import "@wordpress/base-styles/breakpoints";
2
+ @import "@wordpress/base-styles/mixins";
3
+
4
+ .onboarding-hooray {
5
+ text-align: center;
6
+
7
+ svg {
8
+ max-width: 350px;
9
+ margin-bottom: -20px;
10
+ }
11
+
12
+ .onboarding-title {
13
+ font-size: 3rem;
14
+ color: var(--studio-gray-100);
15
+ margin-bottom: 0.75rem;
16
+
17
+ @media (max-width: 1080px) {
18
+ line-height: 1;
19
+ }
20
+ }
21
+
22
+ .onboarding-subtitle {
23
+ color: var(--studio-gray-50);
24
+ margin-bottom: 1.5em;
25
+ }
26
+
27
+ .components-button.action-buttons__next {
28
+ min-width: 100px;
29
+ padding: 10px 24px !important;
30
+ margin: 0 0.75em 0.75em 0.75em;
31
+ border-radius: 4px;
32
+ }
33
+ }
34
+
35
+ .onboarding-hooray__animate {
36
+ .onboarding-title {
37
+ animation: hooray-fade 0.9s ease-in-out, hooray-jump 0.8s cubic-bezier(0.21, 0.19, 0.24, 0.99);
38
+ }
39
+
40
+ .onboarding-subtitle,
41
+ .components-button.action-buttons__next.is-primary {
42
+ opacity: 0;
43
+ animation: hooray-fade 0.9s ease-in-out 0.8s forwards, hooray-jump 0.8s cubic-bezier(0.21, 0.19, 0.24, 0.99) 0.8s forwards;
44
+ }
45
+ }
46
+
47
+
48
+ @keyframes hooray-fade {
49
+ from {
50
+ opacity: 0;
51
+ }
52
+
53
+ to {
54
+ opacity: 1;
55
+ }
56
+ }
57
+
58
+ @keyframes hooray-jump {
59
+ from {
60
+ transform: translateY(20px);
61
+ }
62
+
63
+ to {
64
+ transform: none;
65
+ }
66
+ }
package/src/index.ts ADDED
@@ -0,0 +1,36 @@
1
+ export { Title, SubTitle } from './titles';
2
+ export { useFlowProgress } from './flow-progress/use-flow-progress';
3
+ export {
4
+ default as ActionButtons,
5
+ BackButton,
6
+ NextButton,
7
+ SkipButton,
8
+ ArrowButton,
9
+ } from './action-buttons';
10
+ export {
11
+ createSiteWithCart,
12
+ addPlanToCart,
13
+ addProductsToCart,
14
+ replaceProductsInCart,
15
+ setThemeOnSite,
16
+ } from './cart';
17
+ export { setupSiteAfterCreation, base64ImageToBlob } from './setup-tailored-site-after-creation';
18
+ export { uploadAndSetSiteLogo } from './upload-and-set-site-logo';
19
+ export { default as FeatureIcon } from './feature-icon';
20
+ export { default as Progress } from './progress';
21
+ export { default as Hooray } from './hooray';
22
+ export { default as Confetti } from './confetti';
23
+ export { default as IntentScreen } from './intent-screen';
24
+ export { default as SelectItems } from './select-items';
25
+ export { default as SelectItemsAlt } from './select-items-alt';
26
+ export { default as StepContainer } from './step-container';
27
+ export { default as StepNavigationLink } from './step-navigation-link';
28
+ export { default as MShotsImage } from './mshots-image';
29
+ export * from './navigator';
30
+ export { default as Notice } from './notice';
31
+ export { default as SelectCardCheckbox } from './select-card-checkbox';
32
+ export * from './utils';
33
+ export * from './select-card-radio';
34
+ export type { SelectItem } from './select-items';
35
+ export type { SelectItemAlt } from './select-items-alt';
36
+ export type { MShotsOptions } from './mshots-image';
@@ -0,0 +1,12 @@
1
+ # IntentScreen
2
+
3
+ Currently used in WordPress.com signup flow. This step gives the user a few different starting points to choose from and an additional alternative at the bottom.
4
+
5
+ ## Props
6
+
7
+ | Name | Type | Required | Description |
8
+ | --------------- | --------------- | -------- | --------------------------------------------------------------------------------------------- |
9
+ | `intents` | `SelectItem` | yes | Main items listed with text and buttons. See type description below. |
10
+ | `intentsAlt` | `SelectAltItem` | yes | Alternative option styled without a button and placed at the end. See type description below. |
11
+ | `onSelect` | `function` | yes | ( **value** ) Callback to run when an item is selected. This should have no return. |
12
+ | `preventWidows` | `function` | yes | ( **text, wordsToKeep** - _optional_ ) Wrapper for the _intents_ title and description. |
@@ -0,0 +1,26 @@
1
+ import { TranslateResult } from 'i18n-calypso';
2
+ import SelectItems, { SelectItem } from '../select-items';
3
+ import SelectItemsAlt, { SelectItemAlt } from '../select-items-alt';
4
+
5
+ interface Props< T > {
6
+ intents: SelectItem< T >[];
7
+ intentsAlt: SelectItemAlt< T >[];
8
+ onSelect: ( value: T ) => void;
9
+ preventWidows: ( text: TranslateResult, wordsToKeep?: number ) => string;
10
+ }
11
+
12
+ const IntentScreen = < T extends string >( {
13
+ intents,
14
+ intentsAlt,
15
+ onSelect,
16
+ preventWidows,
17
+ }: Props< T > ) => {
18
+ return (
19
+ <>
20
+ <SelectItems items={ intents } onSelect={ onSelect } preventWidows={ preventWidows } />
21
+ <SelectItemsAlt items={ intentsAlt } onSelect={ onSelect } />
22
+ </>
23
+ );
24
+ };
25
+
26
+ export default IntentScreen;
@@ -0,0 +1,197 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import '@testing-library/jest-dom';
6
+ import { render, screen } from '@testing-library/react';
7
+ import userEvent from '@testing-library/user-event';
8
+ import React from 'react';
9
+ import IntentScreen from '../';
10
+ import { SelectItem } from '../../select-items';
11
+ import { SelectItemAlt } from '../../select-items-alt';
12
+
13
+ jest.mock( '@automattic/calypso-config', () => ( {
14
+ isEnabled: () => false,
15
+ __esModule: true,
16
+ default: function config( key: string ) {
17
+ return key;
18
+ },
19
+ } ) );
20
+
21
+ afterEach( () => {
22
+ jest.clearAllMocks();
23
+ } );
24
+
25
+ const icon = <svg />;
26
+ const onSelect = jest.fn();
27
+ const preventWidow = jest.fn();
28
+
29
+ const intents: SelectItem< string >[] = [
30
+ {
31
+ key: '1',
32
+ title: 'Title',
33
+ icon: icon,
34
+ description: <p>Description</p>,
35
+ value: 'value',
36
+ actionText: 'Action Text',
37
+ },
38
+ {
39
+ key: '2',
40
+ title: 'Title',
41
+ icon: icon,
42
+ description: <p>Description</p>,
43
+ value: 'value',
44
+ actionText: 'Action Text',
45
+ },
46
+ ];
47
+
48
+ const intentsAlt: SelectItemAlt< string >[] = [
49
+ {
50
+ show: false,
51
+ key: '1-alt',
52
+ description: 'Description Alt',
53
+ actionText: 'Action Text Alt',
54
+ value: 'value-alt',
55
+ disable: false,
56
+ disableText: 'Disabled text',
57
+ },
58
+ {
59
+ show: true,
60
+ key: '2-alt',
61
+ description: 'Description Alt',
62
+ actionText: 'Action Text Alt',
63
+ value: 'value-alt',
64
+ disable: false,
65
+ disableText: 'Disabled text',
66
+ },
67
+ {
68
+ show: true,
69
+ key: '3-alt',
70
+ description: 'Description Alt',
71
+ actionText: 'Action Text Alt',
72
+ value: 'value-alt',
73
+ disable: true,
74
+ disableText: 'Disabled text',
75
+ },
76
+ ];
77
+
78
+ describe( 'IntentScreen', () => {
79
+ describe( 'SelectItem', () => {
80
+ it( 'should render H2 titles', () => {
81
+ render(
82
+ <IntentScreen
83
+ intents={ intents }
84
+ intentsAlt={ intentsAlt }
85
+ onSelect={ onSelect }
86
+ preventWidows={ preventWidow }
87
+ />
88
+ );
89
+
90
+ expect( screen.getAllByRole( 'heading', { level: 2 } ) ).toHaveLength( 2 );
91
+ } );
92
+
93
+ it( 'should render a working button', async () => {
94
+ const user = userEvent.setup();
95
+
96
+ render(
97
+ <IntentScreen
98
+ intents={ intents }
99
+ intentsAlt={ intentsAlt }
100
+ onSelect={ onSelect }
101
+ preventWidows={ preventWidow }
102
+ />
103
+ );
104
+
105
+ const button = screen.getAllByRole( 'button', { name: 'Action Text' } )[ 0 ];
106
+
107
+ expect( button ).toBeVisible();
108
+
109
+ await user.click( button );
110
+
111
+ expect( onSelect ).toHaveBeenCalledTimes( 1 );
112
+ expect( onSelect ).toHaveBeenCalledWith( 'value' );
113
+ } );
114
+
115
+ it( 'should render icons', () => {
116
+ const { container } = render(
117
+ <IntentScreen
118
+ intents={ intents }
119
+ intentsAlt={ intentsAlt }
120
+ onSelect={ onSelect }
121
+ preventWidows={ preventWidow }
122
+ />
123
+ );
124
+
125
+ expect( container.querySelectorAll( '.select-items__item svg' ) ).toHaveLength( 2 );
126
+ } );
127
+ } );
128
+
129
+ describe( 'SelectItemAlt', () => {
130
+ it( 'should render descriptions', () => {
131
+ const { container } = render(
132
+ <IntentScreen
133
+ intents={ intents }
134
+ intentsAlt={ intentsAlt }
135
+ onSelect={ onSelect }
136
+ preventWidows={ preventWidow }
137
+ />
138
+ );
139
+
140
+ expect( container.querySelectorAll( 'p.select-items-alt__item-description' ) ).toHaveLength(
141
+ 2
142
+ );
143
+ } );
144
+
145
+ it( 'should render a working button', async () => {
146
+ const user = userEvent.setup();
147
+
148
+ render(
149
+ <IntentScreen
150
+ intents={ intents }
151
+ intentsAlt={ intentsAlt }
152
+ onSelect={ onSelect }
153
+ preventWidows={ preventWidow }
154
+ />
155
+ );
156
+
157
+ const button = screen.getAllByRole( 'button', { name: 'Action Text Alt' } )[ 0 ];
158
+
159
+ expect( button ).toBeVisible();
160
+
161
+ await user.click( button );
162
+
163
+ expect( onSelect ).toHaveBeenCalledTimes( 1 );
164
+ expect( onSelect ).toHaveBeenCalledWith( 'value-alt' );
165
+ } );
166
+
167
+ it( 'should be able to be hidden', () => {
168
+ const { container } = render(
169
+ <IntentScreen
170
+ intents={ intents }
171
+ intentsAlt={ intentsAlt }
172
+ onSelect={ onSelect }
173
+ preventWidows={ preventWidow }
174
+ />
175
+ );
176
+
177
+ expect( container.querySelectorAll( '.select-items-alt__item' ) ).toHaveLength( 2 );
178
+ } );
179
+
180
+ it( 'should be able to be disabled', () => {
181
+ const { container } = render(
182
+ <IntentScreen
183
+ intents={ intents }
184
+ intentsAlt={ intentsAlt }
185
+ onSelect={ onSelect }
186
+ preventWidows={ preventWidow }
187
+ />
188
+ );
189
+
190
+ const buttons = screen.getAllByRole( 'button', { name: 'Action Text Alt' } );
191
+ const lastButton = buttons[ buttons.length - 1 ];
192
+
193
+ expect( lastButton ).toBeDisabled();
194
+ expect( container.querySelector( '.select-items-alt__item-disabled-info' ) ).toBeVisible();
195
+ } );
196
+ } );
197
+ } );