@designcrowd/fe-shared-lib 1.7.0 → 1.7.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 (723) hide show
  1. package/.eslintrc.js +36 -36
  2. package/.github/workflows/auto-merge.yml +52 -52
  3. package/.github/workflows/claude.yml +72 -72
  4. package/.prettierrc.js +7 -7
  5. package/.storybook/main.ts +36 -36
  6. package/.storybook/preview-head-master.html +4 -4
  7. package/.storybook/preview-head-publish-master.html +4 -4
  8. package/.storybook/preview-head-publish.html +9 -9
  9. package/.storybook/preview-head.html +9 -9
  10. package/.storybook/preview.js +53 -53
  11. package/CLAUDE.md +94 -94
  12. package/Dockerfile +43 -43
  13. package/README.md +103 -103
  14. package/buildspec.yml +47 -47
  15. package/dist/css/tailwind-brandCrowd.css +499 -499
  16. package/dist/css/tailwind-brandPage.css +417 -417
  17. package/dist/css/tailwind-crazyDomains.css +499 -499
  18. package/dist/css/tailwind-designCom.css +499 -499
  19. package/dist/css/tailwind-designCrowd.css +499 -499
  20. package/docs/plans/DY-957-plan-phase-2-fe-shared-lib.md +382 -382
  21. package/index.cjs +16 -16
  22. package/index.js +62 -62
  23. package/nodemon.translation.json +6 -6
  24. package/package.json +115 -115
  25. package/postcss.config.js +5 -5
  26. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.stories.js +90 -90
  27. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +120 -120
  28. package/src/atoms/components/Button/Button.vue +341 -341
  29. package/src/atoms/components/Button/ButtonVariant.mixin.vue +126 -126
  30. package/src/atoms/components/Button/Buttons.stories.js +828 -828
  31. package/src/atoms/components/Button/ButtonsCrazyDomains.stories.js +117 -117
  32. package/src/atoms/components/Button/variants/ButtonAi.vue +63 -63
  33. package/src/atoms/components/Button/variants/ButtonDarkModePill.vue +52 -52
  34. package/src/atoms/components/Button/variants/ButtonFlat.vue +65 -65
  35. package/src/atoms/components/Button/variants/ButtonGray.vue +64 -64
  36. package/src/atoms/components/Button/variants/ButtonInfo.vue +51 -51
  37. package/src/atoms/components/Button/variants/ButtonInfoFilled.vue +63 -63
  38. package/src/atoms/components/Button/variants/ButtonNoBorder.vue +65 -65
  39. package/src/atoms/components/Button/variants/ButtonOutline.vue +62 -62
  40. package/src/atoms/components/Button/variants/ButtonOutlineNoHover.vue +62 -62
  41. package/src/atoms/components/Button/variants/ButtonOutlinePrimary.vue +53 -53
  42. package/src/atoms/components/Button/variants/ButtonOutlineSuccess.vue +54 -54
  43. package/src/atoms/components/Button/variants/ButtonPill.vue +52 -52
  44. package/src/atoms/components/Button/variants/ButtonPrimary.vue +69 -69
  45. package/src/atoms/components/Button/variants/ButtonPrimaryWithIcon.vue +68 -68
  46. package/src/atoms/components/Button/variants/ButtonSecondary.vue +51 -51
  47. package/src/atoms/components/Button/variants/ButtonSuccess.vue +55 -55
  48. package/src/atoms/components/Button/variants/ButtonWarning.vue +65 -65
  49. package/src/atoms/components/Button/variants/crazy-domains/ButtonCrazyDomainsOutline.vue +58 -58
  50. package/src/atoms/components/Button/variants/crazy-domains/ButtonCrazyDomainsPrimary.vue +38 -38
  51. package/src/atoms/components/ButtonGroup/ButtonGroup.stories.js +575 -575
  52. package/src/atoms/components/ButtonGroup/ButtonGroup.vue +200 -200
  53. package/src/atoms/components/Carousel/Carousel.fixtures.js +53 -53
  54. package/src/atoms/components/Carousel/Carousel.vue +363 -363
  55. package/src/atoms/components/Carousel/carousel.stories.js +530 -530
  56. package/src/atoms/components/Checkbox/Checkbox.mixin.js +57 -57
  57. package/src/atoms/components/Checkbox/Checkbox.stories.js +340 -340
  58. package/src/atoms/components/Checkbox/Checkbox.vue +84 -84
  59. package/src/atoms/components/Checktile/Checktile.stories.js +79 -79
  60. package/src/atoms/components/Checktile/Checktile.vue +73 -73
  61. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.mixin.js +38 -38
  62. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.stories.js +53 -53
  63. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.vue +33 -33
  64. package/src/atoms/components/ColorPicker/ColorPicker.stories.js +89 -89
  65. package/src/atoms/components/ColorPicker/ColorPicker.vue +95 -95
  66. package/src/atoms/components/CopyToClipboardText/CopyToClipboardText.stories.js +41 -41
  67. package/src/atoms/components/CopyToClipboardText/CopyToClipboardText.vue +71 -71
  68. package/src/atoms/components/Dropdown/Dropdown.stories.js +140 -140
  69. package/src/atoms/components/Dropdown/Dropdown.vue +129 -129
  70. package/src/atoms/components/Dropdown/DropdownItem.vue +33 -33
  71. package/src/atoms/components/FormControl/FormControl.mixin.js +136 -136
  72. package/src/atoms/components/HelloBar/HelloBar.stories.js +195 -195
  73. package/src/atoms/components/HelloBar/HelloBar.vue +156 -156
  74. package/src/atoms/components/Icon/Icon.stories.js +410 -410
  75. package/src/atoms/components/Icon/Icon.vue +934 -932
  76. package/src/atoms/components/Icon/icons/add-page.vue +6 -6
  77. package/src/atoms/components/Icon/icons/ai.vue +6 -6
  78. package/src/atoms/components/Icon/icons/annotate-heart.vue +7 -7
  79. package/src/atoms/components/Icon/icons/arrow-down.vue +6 -6
  80. package/src/atoms/components/Icon/icons/arrow-left.vue +7 -7
  81. package/src/atoms/components/Icon/icons/arrow-right.vue +7 -7
  82. package/src/atoms/components/Icon/icons/arrow-top-right.vue +6 -6
  83. package/src/atoms/components/Icon/icons/arrow-up-underline.vue +7 -7
  84. package/src/atoms/components/Icon/icons/arrow-up.vue +7 -7
  85. package/src/atoms/components/Icon/icons/attach.vue +6 -6
  86. package/src/atoms/components/Icon/icons/auth-facebook-white.vue +17 -17
  87. package/src/atoms/components/Icon/icons/auth-facebook.vue +24 -24
  88. package/src/atoms/components/Icon/icons/auth-google.vue +32 -32
  89. package/src/atoms/components/Icon/icons/award.vue +7 -7
  90. package/src/atoms/components/Icon/icons/background.vue +7 -7
  91. package/src/atoms/components/Icon/icons/badge.vue +7 -7
  92. package/src/atoms/components/Icon/icons/banner-centered.vue +6 -6
  93. package/src/atoms/components/Icon/icons/banner-left.vue +6 -6
  94. package/src/atoms/components/Icon/icons/banner.vue +7 -7
  95. package/src/atoms/components/Icon/icons/bc-mast.vue +7 -7
  96. package/src/atoms/components/Icon/icons/bezier-curve-outline.vue +7 -7
  97. package/src/atoms/components/Icon/icons/bezier-curve.vue +7 -7
  98. package/src/atoms/components/Icon/icons/briefcase.vue +7 -7
  99. package/src/atoms/components/Icon/icons/browser.vue +7 -7
  100. package/src/atoms/components/Icon/icons/brush.vue +6 -6
  101. package/src/atoms/components/Icon/icons/business-card-filled.vue +5 -5
  102. package/src/atoms/components/Icon/icons/business.vue +6 -6
  103. package/src/atoms/components/Icon/icons/calculator.vue +3 -3
  104. package/src/atoms/components/Icon/icons/calendar.vue +5 -5
  105. package/src/atoms/components/Icon/icons/callout-error.vue +6 -6
  106. package/src/atoms/components/Icon/icons/callout-info.vue +6 -6
  107. package/src/atoms/components/Icon/icons/callout-success.vue +8 -8
  108. package/src/atoms/components/Icon/icons/callout-warning.vue +6 -6
  109. package/src/atoms/components/Icon/icons/cap.vue +22 -22
  110. package/src/atoms/components/Icon/icons/card-vertical.vue +7 -7
  111. package/src/atoms/components/Icon/icons/card.vue +9 -9
  112. package/src/atoms/components/Icon/icons/cart-empty.vue +9 -9
  113. package/src/atoms/components/Icon/icons/check-thin.vue +7 -7
  114. package/src/atoms/components/Icon/icons/check.vue +3 -3
  115. package/src/atoms/components/Icon/icons/chevron-down.vue +7 -7
  116. package/src/atoms/components/Icon/icons/chevron-left.vue +7 -7
  117. package/src/atoms/components/Icon/icons/chevron-right-wide.vue +3 -3
  118. package/src/atoms/components/Icon/icons/chevron-right.vue +3 -3
  119. package/src/atoms/components/Icon/icons/chevron-up.vue +7 -7
  120. package/src/atoms/components/Icon/icons/clipboard-check.vue +6 -6
  121. package/src/atoms/components/Icon/icons/close.vue +6 -6
  122. package/src/atoms/components/Icon/icons/community.vue +5 -5
  123. package/src/atoms/components/Icon/icons/contact-message.vue +10 -10
  124. package/src/atoms/components/Icon/icons/content.vue +7 -7
  125. package/src/atoms/components/Icon/icons/copy.vue +10 -10
  126. package/src/atoms/components/Icon/icons/crazy-domains/filter.vue +6 -6
  127. package/src/atoms/components/Icon/icons/crazy-domains/globe.vue +6 -6
  128. package/src/atoms/components/Icon/icons/crazy-domains/home.vue +6 -6
  129. package/src/atoms/components/Icon/icons/crazy-domains/social-facebook.vue +6 -6
  130. package/src/atoms/components/Icon/icons/crazy-domains/social-google.vue +6 -6
  131. package/src/atoms/components/Icon/icons/crazy-domains/social-instagram.vue +6 -6
  132. package/src/atoms/components/Icon/icons/crazy-domains/social-twitter.vue +6 -6
  133. package/src/atoms/components/Icon/icons/crazy-domains/social-youtube.vue +6 -6
  134. package/src/atoms/components/Icon/icons/crop.vue +6 -6
  135. package/src/atoms/components/Icon/icons/crown-alt.vue +5 -5
  136. package/src/atoms/components/Icon/icons/crown.vue +6 -6
  137. package/src/atoms/components/Icon/icons/delete.vue +8 -8
  138. package/src/atoms/components/Icon/icons/designs.vue +6 -6
  139. package/src/atoms/components/Icon/icons/desktop.vue +7 -7
  140. package/src/atoms/components/Icon/icons/digital-business-card-filled.vue +8 -8
  141. package/src/atoms/components/Icon/icons/donate.vue +6 -6
  142. package/src/atoms/components/Icon/icons/download.vue +5 -5
  143. package/src/atoms/components/Icon/icons/duplicate.vue +6 -6
  144. package/src/atoms/components/Icon/icons/edit-line.vue +10 -10
  145. package/src/atoms/components/Icon/icons/edit.vue +6 -6
  146. package/src/atoms/components/Icon/icons/ellipsis.vue +6 -6
  147. package/src/atoms/components/Icon/icons/envelope-email.vue +9 -9
  148. package/src/atoms/components/Icon/icons/error.vue +8 -8
  149. package/src/atoms/components/Icon/icons/eye-crossed.vue +7 -7
  150. package/src/atoms/components/Icon/icons/eye-open.vue +11 -11
  151. package/src/atoms/components/Icon/icons/fees.vue +6 -6
  152. package/src/atoms/components/Icon/icons/file-box.vue +3 -3
  153. package/src/atoms/components/Icon/icons/file-empty.vue +7 -7
  154. package/src/atoms/components/Icon/icons/file.vue +7 -7
  155. package/src/atoms/components/Icon/icons/filter.vue +7 -7
  156. package/src/atoms/components/Icon/icons/filters.vue +6 -6
  157. package/src/atoms/components/Icon/icons/flag.vue +6 -6
  158. package/src/atoms/components/Icon/icons/flip-horizontal.vue +7 -7
  159. package/src/atoms/components/Icon/icons/flip-vertical.vue +7 -7
  160. package/src/atoms/components/Icon/icons/folder.vue +6 -6
  161. package/src/atoms/components/Icon/icons/font.vue +7 -7
  162. package/src/atoms/components/Icon/icons/footer-centered.vue +7 -7
  163. package/src/atoms/components/Icon/icons/footer-left.vue +7 -7
  164. package/src/atoms/components/Icon/icons/form-message.vue +6 -6
  165. package/src/atoms/components/Icon/icons/form.vue +5 -5
  166. package/src/atoms/components/Icon/icons/fullscreen-exit.vue +5 -5
  167. package/src/atoms/components/Icon/icons/fullscreen.vue +5 -5
  168. package/src/atoms/components/Icon/icons/globe.vue +6 -6
  169. package/src/atoms/components/Icon/icons/godaddy/logo.vue +5 -5
  170. package/src/atoms/components/Icon/icons/group.vue +6 -6
  171. package/src/atoms/components/Icon/icons/hamburger.vue +7 -7
  172. package/src/atoms/components/Icon/icons/headphones.vue +7 -7
  173. package/src/atoms/components/Icon/icons/history.vue +12 -12
  174. package/src/atoms/components/Icon/icons/home-outline.vue +6 -6
  175. package/src/atoms/components/Icon/icons/home.vue +7 -7
  176. package/src/atoms/components/Icon/icons/icon-style-circle-bg.vue +22 -22
  177. package/src/atoms/components/Icon/icons/icon-style-no-bg.vue +16 -16
  178. package/src/atoms/components/Icon/icons/icon-style-square-bg.vue +22 -22
  179. package/src/atoms/components/Icon/icons/image-gallery-carousel.vue +7 -7
  180. package/src/atoms/components/Icon/icons/image-gallery-grid.vue +7 -7
  181. package/src/atoms/components/Icon/icons/image-gallery-masonry.vue +6 -6
  182. package/src/atoms/components/Icon/icons/image.vue +7 -7
  183. package/src/atoms/components/Icon/icons/images-gallery.vue +5 -5
  184. package/src/atoms/components/Icon/icons/images.vue +7 -7
  185. package/src/atoms/components/Icon/icons/info.vue +9 -9
  186. package/src/atoms/components/Icon/icons/jobs.vue +8 -8
  187. package/src/atoms/components/Icon/icons/layer-bring-front.vue +6 -6
  188. package/src/atoms/components/Icon/icons/layer-send-back.vue +6 -6
  189. package/src/atoms/components/Icon/icons/layer.vue +6 -6
  190. package/src/atoms/components/Icon/icons/layout/display-style-about-1.vue +20 -20
  191. package/src/atoms/components/Icon/icons/layout/display-style-about-2.vue +20 -20
  192. package/src/atoms/components/Icon/icons/layout/display-style-about-3.vue +20 -20
  193. package/src/atoms/components/Icon/icons/layout/display-style-about-4.vue +32 -32
  194. package/src/atoms/components/Icon/icons/layout/display-style-about-5.vue +27 -27
  195. package/src/atoms/components/Icon/icons/layout/display-style-about-6.vue +27 -27
  196. package/src/atoms/components/Icon/icons/layout/display-style-banner-1.vue +20 -20
  197. package/src/atoms/components/Icon/icons/layout/display-style-banner-2.vue +20 -20
  198. package/src/atoms/components/Icon/icons/layout/display-style-banner-3.vue +20 -20
  199. package/src/atoms/components/Icon/icons/layout/display-style-banner-4.vue +20 -20
  200. package/src/atoms/components/Icon/icons/layout/display-style-banner-5.vue +20 -20
  201. package/src/atoms/components/Icon/icons/layout/display-style-banner-6.vue +27 -27
  202. package/src/atoms/components/Icon/icons/layout/display-style-banner-7.vue +27 -27
  203. package/src/atoms/components/Icon/icons/layout/display-style-banner-8.vue +20 -20
  204. package/src/atoms/components/Icon/icons/layout/display-style-banner-9.vue +20 -20
  205. package/src/atoms/components/Icon/icons/layout/display-style-contact-1.vue +24 -24
  206. package/src/atoms/components/Icon/icons/layout/display-style-contact-2.vue +24 -24
  207. package/src/atoms/components/Icon/icons/layout/display-style-contact-4.vue +24 -24
  208. package/src/atoms/components/Icon/icons/layout/display-style-contact-5.vue +39 -39
  209. package/src/atoms/components/Icon/icons/layout/display-style-contact-6.vue +39 -39
  210. package/src/atoms/components/Icon/icons/layout/footer/display-style-1.vue +7 -7
  211. package/src/atoms/components/Icon/icons/layout/footer/display-style-2.vue +16 -16
  212. package/src/atoms/components/Icon/icons/layout/header/desktop-hamburger-display-style-1.vue +17 -17
  213. package/src/atoms/components/Icon/icons/layout/header/desktop-hamburger-display-style-2.vue +17 -17
  214. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-1.vue +17 -17
  215. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-2.vue +17 -17
  216. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-3.vue +13 -13
  217. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-4.vue +13 -13
  218. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-5.vue +17 -17
  219. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-6.vue +17 -17
  220. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-1.vue +16 -16
  221. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-2.vue +16 -16
  222. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-3.vue +16 -16
  223. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-1.vue +17 -17
  224. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-2.vue +17 -17
  225. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-3.vue +17 -17
  226. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-4.vue +21 -21
  227. package/src/atoms/components/Icon/icons/layout/header/mobile-tab-display-style-1.vue +17 -17
  228. package/src/atoms/components/Icon/icons/layout/header/mobile-tab-display-style-2.vue +17 -17
  229. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-1.vue +16 -16
  230. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-2.vue +16 -16
  231. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-3.vue +16 -16
  232. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-normal-text-center-normal.vue +7 -7
  233. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-normal-text-center-small.vue +7 -7
  234. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-small-text-center-normal.vue +7 -7
  235. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-bottom.vue +11 -11
  236. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-circle.vue +10 -10
  237. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-top.vue +11 -11
  238. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-center-normal.vue +7 -7
  239. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-justify-normal.vue +7 -7
  240. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-left-normal.vue +7 -7
  241. package/src/atoms/components/Icon/icons/layout/layout-icon-left-small-text-left-normal.vue +7 -7
  242. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-center-normal.vue +7 -7
  243. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-justify-normal.vue +7 -7
  244. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-right-normal.vue +7 -7
  245. package/src/atoms/components/Icon/icons/layout/layout-icon-right-small-text-right-normal.vue +7 -7
  246. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-center-normal.vue +7 -7
  247. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-center-small.vue +7 -7
  248. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-justify-normal.vue +7 -7
  249. package/src/atoms/components/Icon/icons/layout/layout-icon-top-small-text-center-normal.vue +7 -7
  250. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-1.vue +16 -16
  251. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-2.vue +10 -10
  252. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-3.vue +10 -10
  253. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-4.vue +23 -23
  254. package/src/atoms/components/Icon/icons/layout/nav/tab/display-style-1.vue +16 -16
  255. package/src/atoms/components/Icon/icons/layout/nav/tab/display-style-2.vue +7 -7
  256. package/src/atoms/components/Icon/icons/letterhead-filled.vue +5 -5
  257. package/src/atoms/components/Icon/icons/lightning.vue +7 -7
  258. package/src/atoms/components/Icon/icons/link-in-bio-filled.vue +8 -8
  259. package/src/atoms/components/Icon/icons/link.vue +6 -6
  260. package/src/atoms/components/Icon/icons/location.vue +6 -6
  261. package/src/atoms/components/Icon/icons/lock.vue +6 -6
  262. package/src/atoms/components/Icon/icons/logo.vue +7 -7
  263. package/src/atoms/components/Icon/icons/mac-command.vue +7 -7
  264. package/src/atoms/components/Icon/icons/maker/align-center.vue +7 -7
  265. package/src/atoms/components/Icon/icons/maker/align-justify.vue +7 -7
  266. package/src/atoms/components/Icon/icons/maker/align-left.vue +7 -7
  267. package/src/atoms/components/Icon/icons/maker/align-right.vue +7 -7
  268. package/src/atoms/components/Icon/icons/maker/animate.vue +7 -7
  269. package/src/atoms/components/Icon/icons/maker/bold.vue +7 -7
  270. package/src/atoms/components/Icon/icons/maker/custom-landscape.vue +5 -5
  271. package/src/atoms/components/Icon/icons/maker/email-symbol.vue +5 -5
  272. package/src/atoms/components/Icon/icons/maker/email.vue +5 -5
  273. package/src/atoms/components/Icon/icons/maker/eraser.vue +5 -5
  274. package/src/atoms/components/Icon/icons/maker/etsy.vue +5 -5
  275. package/src/atoms/components/Icon/icons/maker/facebook.vue +5 -5
  276. package/src/atoms/components/Icon/icons/maker/favicon.vue +7 -7
  277. package/src/atoms/components/Icon/icons/maker/flyer.vue +7 -7
  278. package/src/atoms/components/Icon/icons/maker/gift-certificate.vue +5 -5
  279. package/src/atoms/components/Icon/icons/maker/globe.vue +5 -5
  280. package/src/atoms/components/Icon/icons/maker/image.vue +7 -7
  281. package/src/atoms/components/Icon/icons/maker/instagram.vue +7 -7
  282. package/src/atoms/components/Icon/icons/maker/invitation.vue +5 -5
  283. package/src/atoms/components/Icon/icons/maker/invoice.vue +5 -5
  284. package/src/atoms/components/Icon/icons/maker/italic.vue +7 -7
  285. package/src/atoms/components/Icon/icons/maker/link.vue +7 -7
  286. package/src/atoms/components/Icon/icons/maker/linkedin.vue +7 -7
  287. package/src/atoms/components/Icon/icons/maker/menu.vue +5 -5
  288. package/src/atoms/components/Icon/icons/maker/pause.vue +5 -5
  289. package/src/atoms/components/Icon/icons/maker/phone.vue +5 -5
  290. package/src/atoms/components/Icon/icons/maker/pinterest.vue +5 -5
  291. package/src/atoms/components/Icon/icons/maker/play.vue +5 -5
  292. package/src/atoms/components/Icon/icons/maker/postcard.vue +5 -5
  293. package/src/atoms/components/Icon/icons/maker/poster.vue +7 -7
  294. package/src/atoms/components/Icon/icons/maker/profile.vue +5 -5
  295. package/src/atoms/components/Icon/icons/maker/qrcode.vue +5 -5
  296. package/src/atoms/components/Icon/icons/maker/snapchat.vue +5 -5
  297. package/src/atoms/components/Icon/icons/maker/soundcloud.vue +7 -7
  298. package/src/atoms/components/Icon/icons/maker/spacing.vue +18 -18
  299. package/src/atoms/components/Icon/icons/maker/strikethrough.vue +7 -7
  300. package/src/atoms/components/Icon/icons/maker/t-shirt.vue +32 -32
  301. package/src/atoms/components/Icon/icons/maker/text-background-color.vue +12 -12
  302. package/src/atoms/components/Icon/icons/maker/text-color.vue +14 -14
  303. package/src/atoms/components/Icon/icons/maker/text.vue +7 -7
  304. package/src/atoms/components/Icon/icons/maker/thankyou-card.vue +5 -5
  305. package/src/atoms/components/Icon/icons/maker/tiktok.vue +5 -5
  306. package/src/atoms/components/Icon/icons/maker/tumblr.vue +5 -5
  307. package/src/atoms/components/Icon/icons/maker/twitch.vue +7 -7
  308. package/src/atoms/components/Icon/icons/maker/twitter.vue +5 -5
  309. package/src/atoms/components/Icon/icons/maker/underline.vue +7 -7
  310. package/src/atoms/components/Icon/icons/maker/uppercase.vue +14 -14
  311. package/src/atoms/components/Icon/icons/maker/video.vue +5 -5
  312. package/src/atoms/components/Icon/icons/maker/whatsapp.vue +7 -7
  313. package/src/atoms/components/Icon/icons/maker/youtube.vue +5 -5
  314. package/src/atoms/components/Icon/icons/maker/zoom.vue +5 -5
  315. package/src/atoms/components/Icon/icons/map.vue +6 -6
  316. package/src/atoms/components/Icon/icons/media.vue +3 -3
  317. package/src/atoms/components/Icon/icons/message.vue +6 -6
  318. package/src/atoms/components/Icon/icons/minus-circle-light.vue +7 -7
  319. package/src/atoms/components/Icon/icons/minus.vue +3 -3
  320. package/src/atoms/components/Icon/icons/mobile.vue +5 -5
  321. package/src/atoms/components/Icon/icons/mug.vue +29 -29
  322. package/src/atoms/components/Icon/icons/opacity.vue +6 -6
  323. package/src/atoms/components/Icon/icons/other.vue +7 -7
  324. package/src/atoms/components/Icon/icons/page-blank.vue +6 -6
  325. package/src/atoms/components/Icon/icons/page-buttons.vue +8 -8
  326. package/src/atoms/components/Icon/icons/page-hamburger.vue +9 -9
  327. package/src/atoms/components/Icon/icons/page-tabs.vue +9 -9
  328. package/src/atoms/components/Icon/icons/pages.vue +6 -6
  329. package/src/atoms/components/Icon/icons/palette-outline.vue +7 -7
  330. package/src/atoms/components/Icon/icons/palette.vue +6 -6
  331. package/src/atoms/components/Icon/icons/pause.vue +5 -5
  332. package/src/atoms/components/Icon/icons/payment.vue +8 -8
  333. package/src/atoms/components/Icon/icons/payments-featured.vue +6 -6
  334. package/src/atoms/components/Icon/icons/payments-textonly.vue +8 -8
  335. package/src/atoms/components/Icon/icons/payments-thumbnail.vue +9 -9
  336. package/src/atoms/components/Icon/icons/pen-outline.vue +7 -7
  337. package/src/atoms/components/Icon/icons/pen-sparkle.vue +17 -17
  338. package/src/atoms/components/Icon/icons/pen-tool.vue +7 -7
  339. package/src/atoms/components/Icon/icons/pen.vue +7 -7
  340. package/src/atoms/components/Icon/icons/phone.vue +6 -6
  341. package/src/atoms/components/Icon/icons/plus-circle-light.vue +8 -8
  342. package/src/atoms/components/Icon/icons/plus-circle.vue +7 -7
  343. package/src/atoms/components/Icon/icons/plus.vue +3 -3
  344. package/src/atoms/components/Icon/icons/poll.vue +3 -3
  345. package/src/atoms/components/Icon/icons/portfolio.vue +10 -10
  346. package/src/atoms/components/Icon/icons/premium-content.vue +8 -8
  347. package/src/atoms/components/Icon/icons/preview.vue +6 -6
  348. package/src/atoms/components/Icon/icons/printing.vue +6 -6
  349. package/src/atoms/components/Icon/icons/processing.vue +5 -5
  350. package/src/atoms/components/Icon/icons/question-alt.vue +20 -20
  351. package/src/atoms/components/Icon/icons/question.vue +11 -11
  352. package/src/atoms/components/Icon/icons/ratio-1-1.vue +3 -3
  353. package/src/atoms/components/Icon/icons/ratio-16-9.vue +1 -1
  354. package/src/atoms/components/Icon/icons/ratio-2-3.vue +3 -3
  355. package/src/atoms/components/Icon/icons/ratio-3-2.vue +3 -3
  356. package/src/atoms/components/Icon/icons/ratio-3-4.vue +3 -3
  357. package/src/atoms/components/Icon/icons/ratio-4-3.vue +3 -3
  358. package/src/atoms/components/Icon/icons/ratio-9-16.vue +3 -3
  359. package/src/atoms/components/Icon/icons/ratio-circle.vue +8 -8
  360. package/src/atoms/components/Icon/icons/ratio-original.vue +11 -11
  361. package/src/atoms/components/Icon/icons/redo.vue +6 -6
  362. package/src/atoms/components/Icon/icons/reload.vue +6 -6
  363. package/src/atoms/components/Icon/icons/reorderable.vue +5 -5
  364. package/src/atoms/components/Icon/icons/request-payment.vue +6 -6
  365. package/src/atoms/components/Icon/icons/reset.vue +6 -6
  366. package/src/atoms/components/Icon/icons/resize.vue +6 -6
  367. package/src/atoms/components/Icon/icons/save.vue +6 -6
  368. package/src/atoms/components/Icon/icons/search.vue +11 -11
  369. package/src/atoms/components/Icon/icons/secure.vue +7 -7
  370. package/src/atoms/components/Icon/icons/select-all.vue +7 -0
  371. package/src/atoms/components/Icon/icons/send.vue +12 -12
  372. package/src/atoms/components/Icon/icons/services.vue +7 -7
  373. package/src/atoms/components/Icon/icons/settings.vue +7 -7
  374. package/src/atoms/components/Icon/icons/shape.vue +5 -5
  375. package/src/atoms/components/Icon/icons/share.vue +9 -9
  376. package/src/atoms/components/Icon/icons/shield-tick.vue +6 -6
  377. package/src/atoms/components/Icon/icons/shop.vue +5 -5
  378. package/src/atoms/components/Icon/icons/sms.vue +5 -5
  379. package/src/atoms/components/Icon/icons/social-facebook-color.vue +9 -9
  380. package/src/atoms/components/Icon/icons/social-facebook.vue +5 -5
  381. package/src/atoms/components/Icon/icons/social-google.vue +5 -5
  382. package/src/atoms/components/Icon/icons/social-instagram-color.vue +24 -24
  383. package/src/atoms/components/Icon/icons/social-linkedin-color.vue +9 -9
  384. package/src/atoms/components/Icon/icons/social-share.vue +7 -7
  385. package/src/atoms/components/Icon/icons/social-twitter-color.vue +9 -9
  386. package/src/atoms/components/Icon/icons/sparkle-square.vue +22 -22
  387. package/src/atoms/components/Icon/icons/star-filled.vue +6 -6
  388. package/src/atoms/components/Icon/icons/star-hollow.vue +6 -6
  389. package/src/atoms/components/Icon/icons/sticker.vue +28 -28
  390. package/src/atoms/components/Icon/icons/stop.vue +5 -5
  391. package/src/atoms/components/Icon/icons/styles.vue +5 -5
  392. package/src/atoms/components/Icon/icons/submit.vue +5 -5
  393. package/src/atoms/components/Icon/icons/templates.vue +7 -7
  394. package/src/atoms/components/Icon/icons/text-image-center.vue +6 -6
  395. package/src/atoms/components/Icon/icons/text-image-justified.vue +7 -7
  396. package/src/atoms/components/Icon/icons/text-image-left.vue +9 -9
  397. package/src/atoms/components/Icon/icons/text-image-only.vue +5 -5
  398. package/src/atoms/components/Icon/icons/text-image-right.vue +9 -9
  399. package/src/atoms/components/Icon/icons/text-image.vue +13 -13
  400. package/src/atoms/components/Icon/icons/time.vue +8 -8
  401. package/src/atoms/components/Icon/icons/tooltip-bottom.vue +5 -5
  402. package/src/atoms/components/Icon/icons/tooltip-left.vue +5 -5
  403. package/src/atoms/components/Icon/icons/tooltip-right.vue +5 -5
  404. package/src/atoms/components/Icon/icons/tooltip-top.vue +5 -5
  405. package/src/atoms/components/Icon/icons/undo.vue +6 -6
  406. package/src/atoms/components/Icon/icons/upgrade-alt.vue +7 -7
  407. package/src/atoms/components/Icon/icons/upgrade.vue +9 -9
  408. package/src/atoms/components/Icon/icons/upload-arrow.vue +5 -5
  409. package/src/atoms/components/Icon/icons/upload.vue +5 -5
  410. package/src/atoms/components/Icon/icons/user-accounts.vue +5 -5
  411. package/src/atoms/components/Icon/icons/user-headset.vue +50 -50
  412. package/src/atoms/components/Icon/icons/users-2.vue +5 -5
  413. package/src/atoms/components/Icon/icons/volume-muted.vue +5 -5
  414. package/src/atoms/components/Icon/icons/volume.vue +5 -5
  415. package/src/atoms/components/Icon/icons/watchlist-filled.vue +14 -14
  416. package/src/atoms/components/Icon/icons/watchlist-hollow-alt.vue +14 -14
  417. package/src/atoms/components/Icon/icons/watchlist-hollow.vue +6 -6
  418. package/src/atoms/components/Icon/icons/website-filled.vue +5 -5
  419. package/src/atoms/components/Icon/icons/website.vue +6 -6
  420. package/src/atoms/components/Icon/icons/websites/upgrade-to-add-page.vue +50 -50
  421. package/src/atoms/components/Icon/icons/websites/upgrade-to-contact-form.vue +82 -82
  422. package/src/atoms/components/Icon/icons/websites/upgrade-to-google-ad.vue +92 -92
  423. package/src/atoms/components/Icon/icons/websites/upgrade-to-maps.vue +40 -40
  424. package/src/atoms/components/Icon/icons/websites/upgrade-to-publish.vue +107 -107
  425. package/src/atoms/components/Icon/icons/websites/upgrade-to-remove-watermark.vue +74 -74
  426. package/src/atoms/components/Icon/icons/websites/upgrade-to-videos.vue +16 -16
  427. package/src/atoms/components/Icon/icons/wholesale.vue +6 -6
  428. package/src/atoms/components/Icon/icons/zoom-in.vue +5 -5
  429. package/src/atoms/components/Icon/icons/zoom-out.vue +5 -5
  430. package/src/atoms/components/Icon/icons/zoom.vue +11 -11
  431. package/src/atoms/components/Loader/Loader.vue +15 -15
  432. package/src/atoms/components/Masonry/Masonry.stories.js +48 -48
  433. package/src/atoms/components/Masonry/Masonry.vue +48 -48
  434. package/src/atoms/components/Masonry/fixtures.js +589 -589
  435. package/src/atoms/components/Modal/HashRouteModal.stories.js +68 -68
  436. package/src/atoms/components/Modal/HashRouteModal.vue +120 -120
  437. package/src/atoms/components/Modal/Modal.stories.js +293 -293
  438. package/src/atoms/components/Modal/Modal.vue +272 -272
  439. package/src/atoms/components/Notice/Notice.stories.js +174 -174
  440. package/src/atoms/components/Notice/Notice.vue +71 -71
  441. package/src/atoms/components/NumberStepper/NumberStepper.stories.js +55 -55
  442. package/src/atoms/components/NumberStepper/NumberStepper.vue +340 -340
  443. package/src/atoms/components/Picture/Picture.stories.js +90 -90
  444. package/src/atoms/components/Picture/Picture.vue +84 -84
  445. package/src/atoms/components/Picture/picture.fixtures.js +35 -35
  446. package/src/atoms/components/Pill/Pill.stories.js +20 -20
  447. package/src/atoms/components/Pill/Pill.vue +8 -8
  448. package/src/atoms/components/PillBar/PillBar.fixtures.js +941 -941
  449. package/src/atoms/components/PillBar/PillBar.stories.js +39 -39
  450. package/src/atoms/components/PillBar/PillBar.vue +62 -62
  451. package/src/atoms/components/Price/Price.fixtures.js +85 -85
  452. package/src/atoms/components/Price/Price.stories.js +313 -313
  453. package/src/atoms/components/Price/Price.vue +135 -135
  454. package/src/atoms/components/Price/i18n/price.de-DE.json +5 -5
  455. package/src/atoms/components/Price/i18n/price.es-ES.json +5 -5
  456. package/src/atoms/components/Price/i18n/price.fr-CA.json +5 -5
  457. package/src/atoms/components/Price/i18n/price.fr-FR.json +5 -5
  458. package/src/atoms/components/Price/i18n/price.json +5 -5
  459. package/src/atoms/components/Price/i18n/price.pt-BR.json +5 -5
  460. package/src/atoms/components/Price/i18n/price.pt-PT.json +5 -5
  461. package/src/atoms/components/PromoCard/PromoCard.stories.ts +263 -263
  462. package/src/atoms/components/PromoCard/PromoCard.vue +83 -83
  463. package/src/atoms/components/SearchBar/SearchBar.stories.js +21 -21
  464. package/src/atoms/components/SearchBar/SearchBar.vue +51 -51
  465. package/src/atoms/components/Select/Select.stories.js +142 -142
  466. package/src/atoms/components/Select/Select.vue +619 -619
  467. package/src/atoms/components/Select/pointerMixin.js +99 -99
  468. package/src/atoms/components/Select/selectMixin.js +356 -356
  469. package/src/atoms/components/SparkleIcon/SparkleIcon.stories.js +386 -386
  470. package/src/atoms/components/SparkleIcon/SparkleIcon.vue +136 -136
  471. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-01.svg +5 -5
  472. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-02.svg +5 -5
  473. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-03.svg +5 -5
  474. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-04.svg +5 -5
  475. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-05.svg +5 -5
  476. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-06.svg +5 -5
  477. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-07.svg +5 -5
  478. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-08.svg +5 -5
  479. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-01.svg +5 -5
  480. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-02.svg +14 -14
  481. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-03.svg +14 -14
  482. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-04.svg +14 -14
  483. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-05.svg +14 -14
  484. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-06.svg +14 -14
  485. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-07.svg +14 -14
  486. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-08.svg +14 -14
  487. package/src/atoms/components/SparkleIcon/assets/sparkle.svg +3 -3
  488. package/src/atoms/components/SparkleIcon/index.ts +3 -3
  489. package/src/atoms/components/SparkleIcon/sparkle-paths.ts +54 -54
  490. package/src/atoms/components/SparkleIcon/sparkle-with-spinner-paths.ts +61 -61
  491. package/src/atoms/components/StarRating/StarRating.stories.js +50 -50
  492. package/src/atoms/components/StarRating/StarRating.vue +84 -84
  493. package/src/atoms/components/TabMenu/TabMenu.stories.js +54 -54
  494. package/src/atoms/components/TabMenu/TabMenu.vue +44 -44
  495. package/src/atoms/components/TextCopyField/TextCopyField.stories.js +68 -68
  496. package/src/atoms/components/TextCopyField/TextCopyField.vue +75 -75
  497. package/src/atoms/components/TextInput/TextInput.stories.js +232 -232
  498. package/src/atoms/components/TextInput/TextInput.vue +161 -161
  499. package/src/atoms/components/Textarea/Textarea.stories.js +209 -209
  500. package/src/atoms/components/Textarea/Textarea.vue +112 -112
  501. package/src/atoms/components/Toggle/Toggle.stories.js +176 -176
  502. package/src/atoms/components/Toggle/Toggle.vue +69 -69
  503. package/src/atoms/components/Tooltip/Tooltip.stories.js +493 -493
  504. package/src/atoms/components/Tooltip/Tooltip.vue +196 -196
  505. package/src/atoms/components/design-com/Icon/Icon.stories.js +94 -94
  506. package/src/atoms/components/design-com/Icon/Icon.vue +181 -181
  507. package/src/atoms/components/design-com/Icon/icons/ai.vue +5 -5
  508. package/src/atoms/components/design-com/Icon/icons/award.vue +7 -7
  509. package/src/atoms/components/design-com/Icon/icons/badge.vue +7 -7
  510. package/src/atoms/components/design-com/Icon/icons/briefcase.vue +6 -6
  511. package/src/atoms/components/design-com/Icon/icons/browser.vue +7 -7
  512. package/src/atoms/components/design-com/Icon/icons/bulb.vue +7 -7
  513. package/src/atoms/components/design-com/Icon/icons/card-vertical.vue +8 -8
  514. package/src/atoms/components/design-com/Icon/icons/card.vue +6 -6
  515. package/src/atoms/components/design-com/Icon/icons/check-circle-light.vue +7 -7
  516. package/src/atoms/components/design-com/Icon/icons/chevron-down.vue +7 -7
  517. package/src/atoms/components/design-com/Icon/icons/chevron-left.vue +7 -7
  518. package/src/atoms/components/design-com/Icon/icons/chevron-right.vue +3 -3
  519. package/src/atoms/components/design-com/Icon/icons/chevron-up.vue +7 -7
  520. package/src/atoms/components/design-com/Icon/icons/diamond.vue +7 -7
  521. package/src/atoms/components/design-com/Icon/icons/download.vue +7 -7
  522. package/src/atoms/components/design-com/Icon/icons/file-empty.vue +7 -7
  523. package/src/atoms/components/design-com/Icon/icons/file.vue +7 -7
  524. package/src/atoms/components/design-com/Icon/icons/filter.vue +7 -7
  525. package/src/atoms/components/design-com/Icon/icons/folder.vue +5 -5
  526. package/src/atoms/components/design-com/Icon/icons/font.vue +7 -7
  527. package/src/atoms/components/design-com/Icon/icons/headphones.vue +7 -7
  528. package/src/atoms/components/design-com/Icon/icons/heart.vue +7 -7
  529. package/src/atoms/components/design-com/Icon/icons/image.vue +7 -7
  530. package/src/atoms/components/design-com/Icon/icons/lightning.vue +7 -7
  531. package/src/atoms/components/design-com/Icon/icons/logo.vue +7 -7
  532. package/src/atoms/components/design-com/Icon/icons/minus-circle-light.vue +7 -7
  533. package/src/atoms/components/design-com/Icon/icons/plus-circle-light.vue +8 -8
  534. package/src/atoms/components/design-com/Icon/icons/printing.vue +5 -5
  535. package/src/atoms/components/design-com/Icon/icons/question-circle-filled.vue +7 -7
  536. package/src/atoms/components/design-com/Icon/icons/search.vue +7 -7
  537. package/src/atoms/components/design-com/Icon/icons/shield-tick.vue +5 -5
  538. package/src/atoms/components/design-com/Icon/icons/star-filled.vue +6 -6
  539. package/src/atoms/components/design-com/Icon/icons/star-hollow.vue +6 -6
  540. package/src/atoms/components/design-com/Icon/icons/users.vue +7 -7
  541. package/src/atoms/constants/constants.ts +6 -6
  542. package/src/atoms/mixin/hash-router-mixin.js +68 -68
  543. package/src/atoms/thirdparty-components/VueMasonryWall/VueMasonryWall.vue +280 -280
  544. package/src/atoms/thirdparty-components/VueMasonryWall/maxBy.js +50 -50
  545. package/src/bundleTranslation.js +86 -86
  546. package/src/bundles/bundled-translations.de-DE.json +53 -8
  547. package/src/bundles/bundled-translations.es-ES.json +53 -8
  548. package/src/bundles/bundled-translations.fr-CA.json +53 -8
  549. package/src/bundles/bundled-translations.fr-FR.json +53 -8
  550. package/src/bundles/bundled-translations.json +53 -8
  551. package/src/bundles/bundled-translations.pt-BR.json +53 -8
  552. package/src/bundles/bundled-translations.pt-PT.json +53 -8
  553. package/src/css/tailwind.css +3 -3
  554. package/src/experiences/clients/brand-crowd-api.client.js +142 -142
  555. package/src/experiences/clients/brand-page-api.client.js +62 -62
  556. package/src/experiences/components/AuthFlow/Auth.fixtures.js +4 -4
  557. package/src/experiences/components/AuthFlow/Auth.stories.js +345 -345
  558. package/src/experiences/components/AuthFlow/AuthCrazyDomains.stories.js +60 -60
  559. package/src/experiences/components/AuthFlow/AuthLegal.vue +108 -108
  560. package/src/experiences/components/AuthFlow/AuthModal.vue +39 -39
  561. package/src/experiences/components/AuthFlow/ForgotPassword.vue +222 -222
  562. package/src/experiences/components/AuthFlow/ForgotPasswordModal.vue +68 -68
  563. package/src/experiences/components/AuthFlow/ResetPassword.vue +179 -179
  564. package/src/experiences/components/AuthFlow/ResetPasswordModal.vue +64 -64
  565. package/src/experiences/components/AuthFlow/ResetPasswordSuccessModal.vue +56 -56
  566. package/src/experiences/components/AuthFlow/SignIn.vue +472 -472
  567. package/src/experiences/components/AuthFlow/SignUp.vue +278 -278
  568. package/src/experiences/components/AuthFlow/SignUpModal.vue +90 -90
  569. package/src/experiences/components/AuthFlow/SocialSignIn.vue +177 -177
  570. package/src/experiences/components/AuthFlow/SocialSignInButton.vue +74 -74
  571. package/src/experiences/components/AuthFlow/SubmissionButton.vue +56 -56
  572. package/src/experiences/components/PaymentConfigList/PaymentConfig.mixin.js +118 -118
  573. package/src/experiences/components/PaymentConfigList/PaymentConfigDeleteConfigModal.vue +108 -108
  574. package/src/experiences/components/PaymentConfigList/PaymentConfigDropdown.vue +175 -175
  575. package/src/experiences/components/PaymentConfigList/PaymentConfigList.stories.js +234 -234
  576. package/src/experiences/components/PaymentConfigList/PaymentConfigList.vue +136 -136
  577. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.de-DE.json +11 -11
  578. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.es-ES.json +11 -11
  579. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.fr-CA.json +11 -11
  580. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.fr-FR.json +11 -11
  581. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.json +11 -11
  582. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.pt-BR.json +11 -11
  583. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.pt-PT.json +11 -11
  584. package/src/experiences/components/PublishBrandPageModal/PublishBrandPageCard.vue +119 -119
  585. package/src/experiences/components/PublishBrandPageModal/PublishBrandPageModal.stories.js +262 -262
  586. package/src/experiences/components/PublishBrandPageModal/__fixtures__/data.js +25 -25
  587. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.de-DE.json +27 -27
  588. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.es-ES.json +27 -27
  589. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.fr-CA.json +27 -27
  590. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.fr-FR.json +27 -27
  591. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.json +27 -27
  592. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.pt-BR.json +27 -27
  593. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.pt-PT.json +27 -27
  594. package/src/experiences/components/SellDomainNameList/SellDomainNameList.fixtures.js +32 -32
  595. package/src/experiences/components/SellDomainNameList/SellDomainNameList.vue +157 -157
  596. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.de-DE.json +7 -7
  597. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.es-ES.json +7 -7
  598. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.fr-CA.json +7 -7
  599. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.fr-FR.json +7 -7
  600. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.json +7 -7
  601. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.pt-BR.json +7 -7
  602. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.pt-PT.json +7 -7
  603. package/src/experiences/components/SellDomainNameListModal/SellDomainNameListModal.stories.js +74 -74
  604. package/src/experiences/components/SellDomainNameListModal/SellDomainNameListModal.vue +128 -128
  605. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.de-DE.json +5 -5
  606. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.es-ES.json +5 -5
  607. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.fr-CA.json +5 -5
  608. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.fr-FR.json +5 -5
  609. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.json +5 -5
  610. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.pt-BR.json +5 -5
  611. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.pt-PT.json +5 -5
  612. package/src/experiences/components/SellDomainNameModalApplication/SellDomainNameModalApplication.vue +222 -222
  613. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.de-DE.json +5 -5
  614. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.es-ES.json +5 -5
  615. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.fr-CA.json +5 -5
  616. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.fr-FR.json +5 -5
  617. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.json +5 -5
  618. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.pt-BR.json +5 -5
  619. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.pt-PT.json +5 -5
  620. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.de-DE.json +7 -7
  621. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.es-ES.json +7 -7
  622. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.fr-CA.json +7 -7
  623. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.fr-FR.json +7 -7
  624. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.json +7 -7
  625. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.pt-BR.json +7 -7
  626. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.pt-PT.json +7 -7
  627. package/src/experiences/components/SellDomainNameSearchResult/SellDomainNameListSearchResult.vue +167 -167
  628. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.de-DE.json +5 -5
  629. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.es-ES.json +5 -5
  630. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.fr-CA.json +5 -5
  631. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.fr-FR.json +5 -5
  632. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.json +5 -5
  633. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.pt-BR.json +5 -5
  634. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.pt-PT.json +5 -5
  635. package/src/experiences/components/SellDomainNameSearchWithResults/SellDomainNameSearchWithResults.stories.js +38 -38
  636. package/src/experiences/components/SellDomainNameSearchWithResults/SellDomainNameSearchWithResults.vue +223 -223
  637. package/src/experiences/components/SellDomainNameWidget/SellDomainNameWidget.stories.js +40 -40
  638. package/src/experiences/components/SellDomainNameWidget/SellDomainNameWidget.vue +155 -155
  639. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.de-DE.json +7 -7
  640. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.es-ES.json +7 -7
  641. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.fr-CA.json +7 -7
  642. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.fr-FR.json +7 -7
  643. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.json +7 -7
  644. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.pt-BR.json +7 -7
  645. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.pt-PT.json +7 -7
  646. package/src/experiences/components/SideNavigationPanel/MenuCta.vue +62 -62
  647. package/src/experiences/components/SideNavigationPanel/MenuItem.vue +40 -40
  648. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.stories.js +219 -219
  649. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.vue +82 -82
  650. package/src/experiences/components/SideNavigationPanel/types.ts +7 -7
  651. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.stories.js +254 -254
  652. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue +163 -163
  653. package/src/experiences/components/UploadYourLogoDropzone/UploadYourLogoDropzone.stories.js +59 -59
  654. package/src/experiences/components/UploadYourLogoDropzone/UploadYourLogoDropzone.vue +285 -285
  655. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessBrandColours.stories.js +37 -37
  656. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessBrandColours.vue +338 -338
  657. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessText.vue +146 -146
  658. package/src/experiences/components/UploadYourLogoOnBoarding/LogoCropper.vue +473 -473
  659. package/src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js +65 -65
  660. package/src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue +156 -156
  661. package/src/experiences/components/UploadYourLogoOnBoarding/LogoPreview.vue +103 -103
  662. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadError.vue +75 -75
  663. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadExitConfirmation.vue +55 -55
  664. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadModal.vue +38 -38
  665. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploader.vue +109 -109
  666. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadingLoader.vue +39 -39
  667. package/src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue +363 -363
  668. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.de-DE.json +37 -37
  669. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.es-ES.json +37 -37
  670. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-CA.json +37 -37
  671. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-FR.json +37 -37
  672. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.json +37 -37
  673. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-BR.json +37 -37
  674. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-PT.json +37 -37
  675. package/src/experiences/components/UploadedLogoSearchResultCard/UploadedLogoSearchResultCard.stories.js +82 -82
  676. package/src/experiences/components/UploadedLogoSearchResultCard/UploadedLogoSearchResultCard.vue +211 -211
  677. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.de-DE.json +8 -8
  678. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.es-ES.json +8 -8
  679. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.fr-CA.json +8 -8
  680. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.fr-FR.json +8 -8
  681. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.json +8 -8
  682. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.pt-BR.json +8 -8
  683. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.pt-PT.json +8 -8
  684. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.stories.js +181 -181
  685. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.vue +203 -203
  686. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.de-DE.json +42 -42
  687. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.es-ES.json +42 -42
  688. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.fr-CA.json +42 -42
  689. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.fr-FR.json +42 -42
  690. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.json +42 -42
  691. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.pt-BR.json +42 -42
  692. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.pt-PT.json +42 -42
  693. package/src/experiences/constants/api.js +9 -9
  694. package/src/experiences/constants/error-constants.js +5 -5
  695. package/src/experiences/constants/event-constants.js +18 -18
  696. package/src/experiences/constants/partner-dictionary-constants.js +27 -27
  697. package/src/experiences/constants/rego-source-constants.js +3 -3
  698. package/src/experiences/constants/sell-domain-name-constants.js +4 -4
  699. package/src/experiences/helpers/email-validator.js +5 -5
  700. package/src/experiences/helpers/hex-diff.js +116 -116
  701. package/src/experiences/helpers/tracking.js +5 -5
  702. package/src/experiences/mixins/mediaQueryMixin.js +31 -31
  703. package/src/experiences/mixins/themeMixin.js +22 -22
  704. package/src/experiences/models/websiteContextualModel.ts +11 -11
  705. package/src/themes/base.js +20 -20
  706. package/src/themes/bc.js +95 -95
  707. package/src/themes/bp.js +21 -21
  708. package/src/themes/cd.js +94 -94
  709. package/src/themes/dc.js +84 -84
  710. package/src/themes/dcom.js +106 -106
  711. package/src/themes/themes.js +16 -16
  712. package/src/useSharedLibTranslate.js +131 -131
  713. package/src/viewports.js +51 -51
  714. package/stylelint.config.js +19 -19
  715. package/tailwind.build.js +83 -83
  716. package/tailwind.config.js +36 -36
  717. package/tailwind.themes.js +59 -59
  718. package/vite.config.ts +37 -37
  719. package/public/css/tailwind-brandCrowd.css +0 -2497
  720. package/public/css/tailwind-brandPage.css +0 -2197
  721. package/public/css/tailwind-crazyDomains.css +0 -2497
  722. package/public/css/tailwind-designCom.css +0 -2497
  723. package/public/css/tailwind-designCrowd.css +0 -2497
@@ -1,382 +1,382 @@
1
- # DY-957 Phase 2: fe-shared-lib Wizard Changes
2
-
3
- ## Goal
4
-
5
- Add an optional keywords step to the BYO upload wizard in `@designcrowd/fe-shared-lib`. The step fetches AI keyword suggestions, displays them in an editable textbox, and emits the keywords for the consumer to use. The step is opt-in via a `showKeywordsStep` prop (default `false`).
6
-
7
- ## Repo
8
-
9
- `fe-shared-lib`
10
-
11
- ## Prerequisites
12
-
13
- - Phase 1 backend endpoint deployed (needed for integration testing, not for Storybook development)
14
-
15
- ## Implementation Decisions (Confirmed)
16
-
17
- - The keyword suggestions endpoint path is `/api/ai-keyword-suggestion` (this is intentionally **not** maker-prefixed).
18
- - `templateType` is required end-to-end; consumers must pass a non-null default value.
19
- - Continue action in the keywords step must be disabled while suggestions are loading.
20
- - Storybook coverage for `LogoKeywords` is required for this task (not optional).
21
- - Publishing/version bump and final validation are human-owned follow-up steps, not coding-agent scope.
22
-
23
- ---
24
-
25
- ## Tasks
26
-
27
- ### 1. Add API constant
28
-
29
- **File**: `src/experiences/constants/api.js`
30
-
31
- Add one line to the exported object:
32
-
33
- ```js
34
- KEYWORD_SUGGESTIONS_API_URL: '/api/ai-keyword-suggestion',
35
- ```
36
-
37
- ### 2. Add `getKeywordSuggestionsAsync` to API client
38
-
39
- **File**: `src/experiences/clients/brand-crowd-api.client.js`
40
-
41
- Add a new async method following the `searchDomainNamesByKeywordAsync` pattern (lines 71-117):
42
-
43
- ```js
44
- const getKeywordSuggestionsAsync = async ({ businessName, templateType }) => {
45
- try {
46
- const url = `${API.KEYWORD_SUGGESTIONS_API_URL}?businessName=${encodeURIComponent(businessName)}&templateType=${encodeURIComponent(templateType)}`;
47
- const response = await getAxios()({
48
- method: 'get',
49
- url,
50
- });
51
- return response.data;
52
- } catch (error) {
53
- return false;
54
- }
55
- };
56
- ```
57
-
58
- Behavior note: if `businessName` is empty, still call the endpoint with `businessName=` and continue normally (expected to return empty suggestions).
59
-
60
- Add `getKeywordSuggestionsAsync` to the default export object (lines 119-124).
61
-
62
- ### 3. Create `LogoKeywords.vue` component
63
-
64
- **File**: Create `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue`
65
-
66
- Clone the structure from `LogoBusinessText.vue` (same directory). The component should:
67
-
68
- **Props:**
69
- - `progressLabel` (String, required) — "Step X of Y"
70
- - `eventCategory` (String, required) — for analytics tracking
71
- - `savedKeywords` (String, optional, default: `null`) — restored keywords if user navigated back then forward
72
- - `businessName` (String, optional, default: `''`) — from previous step (may be empty)
73
- - `templateType` (String, required) — e.g. "business card"
74
-
75
- Behavior note: keep current wizard behavior where empty business name is allowed; do not block navigation if no business name is entered.
76
-
77
- **Data:**
78
- - `keywordsText: ''` — the editable comma-separated keywords string
79
- - `isLoading: false`
80
-
81
- **Mounted lifecycle:**
82
- ```js
83
- async mounted() {
84
- if (this.savedKeywords !== null) {
85
- this.keywordsText = this.savedKeywords;
86
- return;
87
- }
88
- this.isLoading = true;
89
- try {
90
- const result = await brandCrowdClient.getKeywordSuggestionsAsync({
91
- businessName: this.businessName,
92
- templateType: this.templateType,
93
- });
94
- if (result && result.keywords && result.keywords.length > 0) {
95
- this.keywordsText = result.keywords.join(', ');
96
- }
97
- } catch {
98
- // leave keywordsText as empty string
99
- } finally {
100
- this.isLoading = false;
101
- }
102
- },
103
- ```
104
-
105
- **Methods:**
106
- - `back()` — emits `on-go-back`
107
- - `save()` — no-op if `isLoading` is true; otherwise tracks event with `eventAction: 'keywords'`, `eventLabel: 'Clicked_Continue'`, then emits `on-save` with `{ keywords: this.keywordsText }`
108
- - `onKeywordsKeyUp(e)` — if `e.key === 'Enter'` and `!isLoading`, call `this.save()`
109
-
110
- **Template:** Mirror `LogoBusinessText.vue` layout:
111
- - Progress label header: `{{ progressLabel }}`
112
- - Heading: `{{ uploadYourLogoTr('keywords') }}`
113
- - Description: `{{ uploadYourLogoTr('keywordsDescription') }}`
114
- - Single `<input>` or `<textarea>` bound to `keywordsText`, disabled while `isLoading`, with `@keyup="onKeywordsKeyUp"`
115
- - Show a loading indicator (spinner or skeleton) when `isLoading` is true
116
- - Footer with Back button (emits `on-go-back`) and Continue button (calls `save()`)
117
- - Continue button must be disabled while `isLoading` is `true`
118
-
119
- **i18n:** Use the `uploadYourLogoTr` mixin (same as `LogoBusinessText.vue`).
120
-
121
- ### 4. Add i18n translation keys
122
-
123
- **Files**: All 7 locale files in `src/experiences/components/UploadYourLogoOnBoarding/i18n/`
124
-
125
- Add two new keys inside the `"uploadYourLogo"` object in **every** locale file, using the **English text** in all of them:
126
-
127
- ```json
128
- "keywords": "Keywords",
129
- "keywordsDescription": "Add keywords related to your business and logo"
130
- ```
131
-
132
- Add this identical English text to:
133
- - `upload-your-logo.json` (English)
134
- - `upload-your-logo.de-DE.json`
135
- - `upload-your-logo.es-ES.json`
136
- - `upload-your-logo.fr-CA.json`
137
- - `upload-your-logo.fr-FR.json`
138
- - `upload-your-logo.pt-BR.json`
139
- - `upload-your-logo.pt-PT.json`
140
-
141
- **Do not translate** — a separate process will sweep the codebase and replace the English placeholders with proper translations.
142
-
143
- After editing all files, run `npm run bundle-translation` to regenerate bundled translation files.
144
-
145
- ### 5. Update `UploadYourLogoOnBoarding.vue` orchestrator
146
-
147
- **File**: `src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue`
148
-
149
- #### 5a. Add new props (after existing props at lines 115-136)
150
-
151
- ```js
152
- showKeywordsStep: {
153
- type: Boolean,
154
- required: false,
155
- default: false,
156
- },
157
- templateType: {
158
- type: String,
159
- required: true,
160
- },
161
- ```
162
-
163
- Note: `templateType` must be provided by the consumer (fallback/defaulting happens in consumer app config, not in this component).
164
-
165
- #### 5b. Update `data()` (lines 142-154)
166
-
167
- Change `totalNumSteps` to be dynamic:
168
- ```js
169
- totalNumSteps: this.useDropzone
170
- ? (this.showKeywordsStep ? 6 : 5)
171
- : (this.showKeywordsStep ? 5 : 4),
172
- ```
173
-
174
- Add new data property:
175
- ```js
176
- savedKeywords: null,
177
- ```
178
-
179
- #### 5c. Add computed property for brand colours step number
180
-
181
- ```js
182
- brandColoursStep() {
183
- return this.showKeywordsStep ? 5 : 4;
184
- },
185
- ```
186
-
187
- #### 5d. Update `currentStepProgressLabel` (lines 157-163)
188
-
189
- Replace hard-coded totals with `this.totalNumSteps`:
190
- ```js
191
- currentStepProgressLabel() {
192
- if (this.includeDropzoneInModal) {
193
- const currentStepDisplay = this.currentStep === 0 ? 1 : this.currentStep;
194
- return this.uploadYourLogoTr('stepOf', { CURRENT: currentStepDisplay, TOTAL: this.totalNumSteps });
195
- }
196
- return this.uploadYourLogoTr('stepOf', { CURRENT: this.currentStep - 1, TOTAL: this.totalNumSteps });
197
- },
198
- ```
199
-
200
- #### 5e. Update `currentStepTrackingLabel` (lines 170-176)
201
-
202
- Make it keyword-step aware:
203
- ```js
204
- currentStepTrackingLabel() {
205
- const stepTwoLabel = this.currentStep === 2 && !this.canCropImage ? 'previewLogo' : 'cropLogo';
206
- const steps = this.showKeywordsStep
207
- ? ['logoUploader', stepTwoLabel, 'businessName', 'keywords', 'brandColors']
208
- : ['logoUploader', stepTwoLabel, 'businessName', 'brandColors'];
209
- return steps[this.currentStep - 1];
210
- },
211
- ```
212
-
213
- #### 5f. Import LogoKeywords component
214
-
215
- Add import at top of script:
216
- ```js
217
- import LogoKeywords from './LogoKeywords.vue';
218
- ```
219
-
220
- Register in `components: { ... }`.
221
-
222
- #### 5g. Update `onSaveBusinessText` method (lines 251-255)
223
-
224
- No change needed — it already sets `currentStep = 4`. When `showKeywordsStep` is true, step 4 shows LogoKeywords. When false, step 4 shows LogoBusinessBrandColours (via `brandColoursStep` computed).
225
-
226
- #### 5h. Add `onSaveKeywords` method
227
-
228
- ```js
229
- onSaveKeywords(payload) {
230
- this.$emit('on-save-keywords', { keywords: payload.keywords });
231
- this.savedKeywords = payload.keywords;
232
- this.currentStep = this.brandColoursStep;
233
- },
234
- ```
235
-
236
- #### 5i. Add `onGoBackFromBrandColours` method (or rename existing `onGoBackToBusinessText` usage on brand colours)
237
-
238
- ```js
239
- onGoBackFromBrandColours() {
240
- this.$emit('on-back', { currentStepTrackingLabel: this.currentStepTrackingLabel });
241
- this.currentStep = this.showKeywordsStep ? 4 : 3;
242
- },
243
- ```
244
-
245
- **Important**: The brand colours component currently uses `@on-go-back="onGoBackToBusinessText"` (which sets `currentStep = 3`). Change this to `@on-go-back="onGoBackFromBrandColours"` so it goes back to keywords (step 4) when the keywords step is enabled.
246
-
247
- #### 5j. Update template — add LogoKeywords between BusinessText and BrandColours
248
-
249
- Add after the LogoBusinessText block and before LogoBusinessBrandColours:
250
-
251
- ```vue
252
- <LogoKeywords
253
- v-if="showKeywordsStep && !isAttemptingToExit && currentStep === 4 && uploadedLogoData"
254
- :progress-label="currentStepProgressLabel"
255
- :event-category="eventCategory"
256
- :saved-keywords="savedKeywords"
257
- :business-name="(savedBusinessText && savedBusinessText.businessText) || ''"
258
- :template-type="templateType"
259
- @on-go-back="onGoBackToBusinessText"
260
- @on-save="onSaveKeywords"
261
- />
262
- ```
263
-
264
- #### 5k. Update template — change BrandColours step condition
265
-
266
- Change `currentStep === 4` to `currentStep === brandColoursStep`:
267
-
268
- ```vue
269
- <LogoBusinessBrandColours
270
- v-if="!isAttemptingToExit && currentStep === brandColoursStep && uploadedLogoData && !isCurrentlySaving"
271
- ...
272
- @on-go-back="onGoBackFromBrandColours"
273
- ...
274
- />
275
- ```
276
-
277
- #### 5l. Update `reset()` method (lines 290-299)
278
-
279
- Add:
280
- ```js
281
- this.savedKeywords = null;
282
- ```
283
-
284
- ### 6. Update `UploadYourLogoApplication.vue` wrapper
285
-
286
- **File**: `src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue`
287
-
288
- #### 6a. Add pass-through props (after existing props at lines 29-45)
289
-
290
- ```js
291
- showKeywordsStep: {
292
- type: Boolean,
293
- required: false,
294
- default: false,
295
- },
296
- templateType: {
297
- type: String,
298
- required: true,
299
- },
300
- ```
301
-
302
- Note: `templateType` must be provided by the consumer (fallback/defaulting happens in consumer app config, not in this component).
303
-
304
- #### 6b. Pass props to `UploadYourLogoOnBoarding` in template
305
-
306
- Add to the existing `<UploadYourLogoOnBoarding>` tag:
307
- ```vue
308
- :show-keywords-step="showKeywordsStep"
309
- :template-type="templateType"
310
- @on-save-keywords="onSaveKeywords"
311
- ```
312
-
313
- #### 6c. Add event handler method
314
-
315
- ```js
316
- onSaveKeywords(payload) {
317
- this.$emit('on-save-keywords', payload);
318
- },
319
- ```
320
-
321
- ### 7. Add Storybook story (required)
322
-
323
- **File**: Create `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js`
324
-
325
- Create a story following standard Storybook patterns covering:
326
- - Loading state (mock delayed API)
327
- - Populated state (mock successful response with keywords)
328
- - Empty state (mock failed response)
329
- - Pre-populated state (savedKeywords prop set)
330
-
331
- ### 8. Publish package
332
-
333
- After all changes are verified (human release process; **not** a coding-agent task):
334
- 1. Bump package version in `package.json`
335
- 2. Run `npm run bundle-translation` to regenerate i18n bundles
336
- 3. Perform manual validation in Storybook/integration context (no automated test runner in this repo)
337
- 4. Publish the new version of `@designcrowd/fe-shared-lib`
338
-
339
- ---
340
-
341
- ## Step Number Reference Table
342
-
343
- ### When `showKeywordsStep = false` (default, unchanged):
344
-
345
- | currentStep | Component | Progress Display |
346
- |---|---|---|
347
- | 1 | LogoUploader | Step 0 of 4 |
348
- | 2 | LogoCropper/Preview | Step 1 of 4 |
349
- | 3 | LogoBusinessText | Step 2 of 4 |
350
- | 4 | LogoBusinessBrandColours | Step 3 of 4 |
351
-
352
- ### When `showKeywordsStep = true`:
353
-
354
- | currentStep | Component | Progress Display |
355
- |---|---|---|
356
- | 1 | LogoUploader | Step 0 of 5 |
357
- | 2 | LogoCropper/Preview | Step 1 of 5 |
358
- | 3 | LogoBusinessText | Step 2 of 5 |
359
- | **4** | **LogoKeywords (NEW)** | **Step 3 of 5** |
360
- | 5 | LogoBusinessBrandColours | Step 4 of 5 |
361
-
362
- Note: The `useDropzone` variant adds step 0 (dropzone) and shifts totals by +1. The same logic applies — `totalNumSteps` handles this via the ternary in `data()`.
363
-
364
- ---
365
-
366
- ## Files Changed
367
-
368
- | File | Change |
369
- |---|---|
370
- | `src/experiences/constants/api.js` | Add `KEYWORD_SUGGESTIONS_API_URL` |
371
- | `src/experiences/clients/brand-crowd-api.client.js` | Add `getKeywordSuggestionsAsync` method + export |
372
- | `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue` | **New file** — keywords step component |
373
- | `src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue` | New props, step routing, computed properties, methods, template |
374
- | `src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue` | Pass-through props + event |
375
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.json` | Add `keywords`, `keywordsDescription` |
376
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.de-DE.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
377
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.es-ES.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
378
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-CA.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
379
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-FR.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
380
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-BR.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
381
- | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-PT.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
382
- | `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js` | **New file** (required) |
1
+ # DY-957 Phase 2: fe-shared-lib Wizard Changes
2
+
3
+ ## Goal
4
+
5
+ Add an optional keywords step to the BYO upload wizard in `@designcrowd/fe-shared-lib`. The step fetches AI keyword suggestions, displays them in an editable textbox, and emits the keywords for the consumer to use. The step is opt-in via a `showKeywordsStep` prop (default `false`).
6
+
7
+ ## Repo
8
+
9
+ `fe-shared-lib`
10
+
11
+ ## Prerequisites
12
+
13
+ - Phase 1 backend endpoint deployed (needed for integration testing, not for Storybook development)
14
+
15
+ ## Implementation Decisions (Confirmed)
16
+
17
+ - The keyword suggestions endpoint path is `/api/ai-keyword-suggestion` (this is intentionally **not** maker-prefixed).
18
+ - `templateType` is required end-to-end; consumers must pass a non-null default value.
19
+ - Continue action in the keywords step must be disabled while suggestions are loading.
20
+ - Storybook coverage for `LogoKeywords` is required for this task (not optional).
21
+ - Publishing/version bump and final validation are human-owned follow-up steps, not coding-agent scope.
22
+
23
+ ---
24
+
25
+ ## Tasks
26
+
27
+ ### 1. Add API constant
28
+
29
+ **File**: `src/experiences/constants/api.js`
30
+
31
+ Add one line to the exported object:
32
+
33
+ ```js
34
+ KEYWORD_SUGGESTIONS_API_URL: '/api/ai-keyword-suggestion',
35
+ ```
36
+
37
+ ### 2. Add `getKeywordSuggestionsAsync` to API client
38
+
39
+ **File**: `src/experiences/clients/brand-crowd-api.client.js`
40
+
41
+ Add a new async method following the `searchDomainNamesByKeywordAsync` pattern (lines 71-117):
42
+
43
+ ```js
44
+ const getKeywordSuggestionsAsync = async ({ businessName, templateType }) => {
45
+ try {
46
+ const url = `${API.KEYWORD_SUGGESTIONS_API_URL}?businessName=${encodeURIComponent(businessName)}&templateType=${encodeURIComponent(templateType)}`;
47
+ const response = await getAxios()({
48
+ method: 'get',
49
+ url,
50
+ });
51
+ return response.data;
52
+ } catch (error) {
53
+ return false;
54
+ }
55
+ };
56
+ ```
57
+
58
+ Behavior note: if `businessName` is empty, still call the endpoint with `businessName=` and continue normally (expected to return empty suggestions).
59
+
60
+ Add `getKeywordSuggestionsAsync` to the default export object (lines 119-124).
61
+
62
+ ### 3. Create `LogoKeywords.vue` component
63
+
64
+ **File**: Create `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue`
65
+
66
+ Clone the structure from `LogoBusinessText.vue` (same directory). The component should:
67
+
68
+ **Props:**
69
+ - `progressLabel` (String, required) — "Step X of Y"
70
+ - `eventCategory` (String, required) — for analytics tracking
71
+ - `savedKeywords` (String, optional, default: `null`) — restored keywords if user navigated back then forward
72
+ - `businessName` (String, optional, default: `''`) — from previous step (may be empty)
73
+ - `templateType` (String, required) — e.g. "business card"
74
+
75
+ Behavior note: keep current wizard behavior where empty business name is allowed; do not block navigation if no business name is entered.
76
+
77
+ **Data:**
78
+ - `keywordsText: ''` — the editable comma-separated keywords string
79
+ - `isLoading: false`
80
+
81
+ **Mounted lifecycle:**
82
+ ```js
83
+ async mounted() {
84
+ if (this.savedKeywords !== null) {
85
+ this.keywordsText = this.savedKeywords;
86
+ return;
87
+ }
88
+ this.isLoading = true;
89
+ try {
90
+ const result = await brandCrowdClient.getKeywordSuggestionsAsync({
91
+ businessName: this.businessName,
92
+ templateType: this.templateType,
93
+ });
94
+ if (result && result.keywords && result.keywords.length > 0) {
95
+ this.keywordsText = result.keywords.join(', ');
96
+ }
97
+ } catch {
98
+ // leave keywordsText as empty string
99
+ } finally {
100
+ this.isLoading = false;
101
+ }
102
+ },
103
+ ```
104
+
105
+ **Methods:**
106
+ - `back()` — emits `on-go-back`
107
+ - `save()` — no-op if `isLoading` is true; otherwise tracks event with `eventAction: 'keywords'`, `eventLabel: 'Clicked_Continue'`, then emits `on-save` with `{ keywords: this.keywordsText }`
108
+ - `onKeywordsKeyUp(e)` — if `e.key === 'Enter'` and `!isLoading`, call `this.save()`
109
+
110
+ **Template:** Mirror `LogoBusinessText.vue` layout:
111
+ - Progress label header: `{{ progressLabel }}`
112
+ - Heading: `{{ uploadYourLogoTr('keywords') }}`
113
+ - Description: `{{ uploadYourLogoTr('keywordsDescription') }}`
114
+ - Single `<input>` or `<textarea>` bound to `keywordsText`, disabled while `isLoading`, with `@keyup="onKeywordsKeyUp"`
115
+ - Show a loading indicator (spinner or skeleton) when `isLoading` is true
116
+ - Footer with Back button (emits `on-go-back`) and Continue button (calls `save()`)
117
+ - Continue button must be disabled while `isLoading` is `true`
118
+
119
+ **i18n:** Use the `uploadYourLogoTr` mixin (same as `LogoBusinessText.vue`).
120
+
121
+ ### 4. Add i18n translation keys
122
+
123
+ **Files**: All 7 locale files in `src/experiences/components/UploadYourLogoOnBoarding/i18n/`
124
+
125
+ Add two new keys inside the `"uploadYourLogo"` object in **every** locale file, using the **English text** in all of them:
126
+
127
+ ```json
128
+ "keywords": "Keywords",
129
+ "keywordsDescription": "Add keywords related to your business and logo"
130
+ ```
131
+
132
+ Add this identical English text to:
133
+ - `upload-your-logo.json` (English)
134
+ - `upload-your-logo.de-DE.json`
135
+ - `upload-your-logo.es-ES.json`
136
+ - `upload-your-logo.fr-CA.json`
137
+ - `upload-your-logo.fr-FR.json`
138
+ - `upload-your-logo.pt-BR.json`
139
+ - `upload-your-logo.pt-PT.json`
140
+
141
+ **Do not translate** — a separate process will sweep the codebase and replace the English placeholders with proper translations.
142
+
143
+ After editing all files, run `npm run bundle-translation` to regenerate bundled translation files.
144
+
145
+ ### 5. Update `UploadYourLogoOnBoarding.vue` orchestrator
146
+
147
+ **File**: `src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue`
148
+
149
+ #### 5a. Add new props (after existing props at lines 115-136)
150
+
151
+ ```js
152
+ showKeywordsStep: {
153
+ type: Boolean,
154
+ required: false,
155
+ default: false,
156
+ },
157
+ templateType: {
158
+ type: String,
159
+ required: true,
160
+ },
161
+ ```
162
+
163
+ Note: `templateType` must be provided by the consumer (fallback/defaulting happens in consumer app config, not in this component).
164
+
165
+ #### 5b. Update `data()` (lines 142-154)
166
+
167
+ Change `totalNumSteps` to be dynamic:
168
+ ```js
169
+ totalNumSteps: this.useDropzone
170
+ ? (this.showKeywordsStep ? 6 : 5)
171
+ : (this.showKeywordsStep ? 5 : 4),
172
+ ```
173
+
174
+ Add new data property:
175
+ ```js
176
+ savedKeywords: null,
177
+ ```
178
+
179
+ #### 5c. Add computed property for brand colours step number
180
+
181
+ ```js
182
+ brandColoursStep() {
183
+ return this.showKeywordsStep ? 5 : 4;
184
+ },
185
+ ```
186
+
187
+ #### 5d. Update `currentStepProgressLabel` (lines 157-163)
188
+
189
+ Replace hard-coded totals with `this.totalNumSteps`:
190
+ ```js
191
+ currentStepProgressLabel() {
192
+ if (this.includeDropzoneInModal) {
193
+ const currentStepDisplay = this.currentStep === 0 ? 1 : this.currentStep;
194
+ return this.uploadYourLogoTr('stepOf', { CURRENT: currentStepDisplay, TOTAL: this.totalNumSteps });
195
+ }
196
+ return this.uploadYourLogoTr('stepOf', { CURRENT: this.currentStep - 1, TOTAL: this.totalNumSteps });
197
+ },
198
+ ```
199
+
200
+ #### 5e. Update `currentStepTrackingLabel` (lines 170-176)
201
+
202
+ Make it keyword-step aware:
203
+ ```js
204
+ currentStepTrackingLabel() {
205
+ const stepTwoLabel = this.currentStep === 2 && !this.canCropImage ? 'previewLogo' : 'cropLogo';
206
+ const steps = this.showKeywordsStep
207
+ ? ['logoUploader', stepTwoLabel, 'businessName', 'keywords', 'brandColors']
208
+ : ['logoUploader', stepTwoLabel, 'businessName', 'brandColors'];
209
+ return steps[this.currentStep - 1];
210
+ },
211
+ ```
212
+
213
+ #### 5f. Import LogoKeywords component
214
+
215
+ Add import at top of script:
216
+ ```js
217
+ import LogoKeywords from './LogoKeywords.vue';
218
+ ```
219
+
220
+ Register in `components: { ... }`.
221
+
222
+ #### 5g. Update `onSaveBusinessText` method (lines 251-255)
223
+
224
+ No change needed — it already sets `currentStep = 4`. When `showKeywordsStep` is true, step 4 shows LogoKeywords. When false, step 4 shows LogoBusinessBrandColours (via `brandColoursStep` computed).
225
+
226
+ #### 5h. Add `onSaveKeywords` method
227
+
228
+ ```js
229
+ onSaveKeywords(payload) {
230
+ this.$emit('on-save-keywords', { keywords: payload.keywords });
231
+ this.savedKeywords = payload.keywords;
232
+ this.currentStep = this.brandColoursStep;
233
+ },
234
+ ```
235
+
236
+ #### 5i. Add `onGoBackFromBrandColours` method (or rename existing `onGoBackToBusinessText` usage on brand colours)
237
+
238
+ ```js
239
+ onGoBackFromBrandColours() {
240
+ this.$emit('on-back', { currentStepTrackingLabel: this.currentStepTrackingLabel });
241
+ this.currentStep = this.showKeywordsStep ? 4 : 3;
242
+ },
243
+ ```
244
+
245
+ **Important**: The brand colours component currently uses `@on-go-back="onGoBackToBusinessText"` (which sets `currentStep = 3`). Change this to `@on-go-back="onGoBackFromBrandColours"` so it goes back to keywords (step 4) when the keywords step is enabled.
246
+
247
+ #### 5j. Update template — add LogoKeywords between BusinessText and BrandColours
248
+
249
+ Add after the LogoBusinessText block and before LogoBusinessBrandColours:
250
+
251
+ ```vue
252
+ <LogoKeywords
253
+ v-if="showKeywordsStep && !isAttemptingToExit && currentStep === 4 && uploadedLogoData"
254
+ :progress-label="currentStepProgressLabel"
255
+ :event-category="eventCategory"
256
+ :saved-keywords="savedKeywords"
257
+ :business-name="(savedBusinessText && savedBusinessText.businessText) || ''"
258
+ :template-type="templateType"
259
+ @on-go-back="onGoBackToBusinessText"
260
+ @on-save="onSaveKeywords"
261
+ />
262
+ ```
263
+
264
+ #### 5k. Update template — change BrandColours step condition
265
+
266
+ Change `currentStep === 4` to `currentStep === brandColoursStep`:
267
+
268
+ ```vue
269
+ <LogoBusinessBrandColours
270
+ v-if="!isAttemptingToExit && currentStep === brandColoursStep && uploadedLogoData && !isCurrentlySaving"
271
+ ...
272
+ @on-go-back="onGoBackFromBrandColours"
273
+ ...
274
+ />
275
+ ```
276
+
277
+ #### 5l. Update `reset()` method (lines 290-299)
278
+
279
+ Add:
280
+ ```js
281
+ this.savedKeywords = null;
282
+ ```
283
+
284
+ ### 6. Update `UploadYourLogoApplication.vue` wrapper
285
+
286
+ **File**: `src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue`
287
+
288
+ #### 6a. Add pass-through props (after existing props at lines 29-45)
289
+
290
+ ```js
291
+ showKeywordsStep: {
292
+ type: Boolean,
293
+ required: false,
294
+ default: false,
295
+ },
296
+ templateType: {
297
+ type: String,
298
+ required: true,
299
+ },
300
+ ```
301
+
302
+ Note: `templateType` must be provided by the consumer (fallback/defaulting happens in consumer app config, not in this component).
303
+
304
+ #### 6b. Pass props to `UploadYourLogoOnBoarding` in template
305
+
306
+ Add to the existing `<UploadYourLogoOnBoarding>` tag:
307
+ ```vue
308
+ :show-keywords-step="showKeywordsStep"
309
+ :template-type="templateType"
310
+ @on-save-keywords="onSaveKeywords"
311
+ ```
312
+
313
+ #### 6c. Add event handler method
314
+
315
+ ```js
316
+ onSaveKeywords(payload) {
317
+ this.$emit('on-save-keywords', payload);
318
+ },
319
+ ```
320
+
321
+ ### 7. Add Storybook story (required)
322
+
323
+ **File**: Create `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js`
324
+
325
+ Create a story following standard Storybook patterns covering:
326
+ - Loading state (mock delayed API)
327
+ - Populated state (mock successful response with keywords)
328
+ - Empty state (mock failed response)
329
+ - Pre-populated state (savedKeywords prop set)
330
+
331
+ ### 8. Publish package
332
+
333
+ After all changes are verified (human release process; **not** a coding-agent task):
334
+ 1. Bump package version in `package.json`
335
+ 2. Run `npm run bundle-translation` to regenerate i18n bundles
336
+ 3. Perform manual validation in Storybook/integration context (no automated test runner in this repo)
337
+ 4. Publish the new version of `@designcrowd/fe-shared-lib`
338
+
339
+ ---
340
+
341
+ ## Step Number Reference Table
342
+
343
+ ### When `showKeywordsStep = false` (default, unchanged):
344
+
345
+ | currentStep | Component | Progress Display |
346
+ |---|---|---|
347
+ | 1 | LogoUploader | Step 0 of 4 |
348
+ | 2 | LogoCropper/Preview | Step 1 of 4 |
349
+ | 3 | LogoBusinessText | Step 2 of 4 |
350
+ | 4 | LogoBusinessBrandColours | Step 3 of 4 |
351
+
352
+ ### When `showKeywordsStep = true`:
353
+
354
+ | currentStep | Component | Progress Display |
355
+ |---|---|---|
356
+ | 1 | LogoUploader | Step 0 of 5 |
357
+ | 2 | LogoCropper/Preview | Step 1 of 5 |
358
+ | 3 | LogoBusinessText | Step 2 of 5 |
359
+ | **4** | **LogoKeywords (NEW)** | **Step 3 of 5** |
360
+ | 5 | LogoBusinessBrandColours | Step 4 of 5 |
361
+
362
+ Note: The `useDropzone` variant adds step 0 (dropzone) and shifts totals by +1. The same logic applies — `totalNumSteps` handles this via the ternary in `data()`.
363
+
364
+ ---
365
+
366
+ ## Files Changed
367
+
368
+ | File | Change |
369
+ |---|---|
370
+ | `src/experiences/constants/api.js` | Add `KEYWORD_SUGGESTIONS_API_URL` |
371
+ | `src/experiences/clients/brand-crowd-api.client.js` | Add `getKeywordSuggestionsAsync` method + export |
372
+ | `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue` | **New file** — keywords step component |
373
+ | `src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue` | New props, step routing, computed properties, methods, template |
374
+ | `src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue` | Pass-through props + event |
375
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.json` | Add `keywords`, `keywordsDescription` |
376
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.de-DE.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
377
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.es-ES.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
378
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-CA.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
379
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-FR.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
380
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-BR.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
381
+ | `src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-PT.json` | Add `keywords`, `keywordsDescription` (English placeholder) |
382
+ | `src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js` | **New file** (required) |