@designcrowd/fe-shared-lib 1.6.10 → 1.7.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 (722) 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 +615 -482
  16. package/dist/css/tailwind-brandPage.css +525 -404
  17. package/dist/css/tailwind-crazyDomains.css +615 -482
  18. package/dist/css/tailwind-designCom.css +615 -482
  19. package/dist/css/tailwind-designCrowd.css +615 -482
  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/public/css/tailwind-brandCrowd.css +513 -537
  27. package/public/css/tailwind-brandPage.css +427 -431
  28. package/public/css/tailwind-crazyDomains.css +513 -537
  29. package/public/css/tailwind-designCom.css +513 -537
  30. package/public/css/tailwind-designCrowd.css +513 -537
  31. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.stories.js +90 -90
  32. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +120 -120
  33. package/src/atoms/components/Button/Button.vue +341 -341
  34. package/src/atoms/components/Button/ButtonVariant.mixin.vue +126 -126
  35. package/src/atoms/components/Button/Buttons.stories.js +828 -828
  36. package/src/atoms/components/Button/ButtonsCrazyDomains.stories.js +117 -117
  37. package/src/atoms/components/Button/variants/ButtonAi.vue +63 -63
  38. package/src/atoms/components/Button/variants/ButtonDarkModePill.vue +52 -52
  39. package/src/atoms/components/Button/variants/ButtonFlat.vue +65 -65
  40. package/src/atoms/components/Button/variants/ButtonGray.vue +64 -64
  41. package/src/atoms/components/Button/variants/ButtonInfo.vue +51 -51
  42. package/src/atoms/components/Button/variants/ButtonInfoFilled.vue +63 -63
  43. package/src/atoms/components/Button/variants/ButtonNoBorder.vue +65 -65
  44. package/src/atoms/components/Button/variants/ButtonOutline.vue +62 -62
  45. package/src/atoms/components/Button/variants/ButtonOutlineNoHover.vue +62 -62
  46. package/src/atoms/components/Button/variants/ButtonOutlinePrimary.vue +53 -53
  47. package/src/atoms/components/Button/variants/ButtonOutlineSuccess.vue +54 -54
  48. package/src/atoms/components/Button/variants/ButtonPill.vue +52 -52
  49. package/src/atoms/components/Button/variants/ButtonPrimary.vue +69 -69
  50. package/src/atoms/components/Button/variants/ButtonPrimaryWithIcon.vue +68 -68
  51. package/src/atoms/components/Button/variants/ButtonSecondary.vue +51 -51
  52. package/src/atoms/components/Button/variants/ButtonSuccess.vue +55 -55
  53. package/src/atoms/components/Button/variants/ButtonWarning.vue +65 -65
  54. package/src/atoms/components/Button/variants/crazy-domains/ButtonCrazyDomainsOutline.vue +58 -58
  55. package/src/atoms/components/Button/variants/crazy-domains/ButtonCrazyDomainsPrimary.vue +38 -38
  56. package/src/atoms/components/ButtonGroup/ButtonGroup.stories.js +575 -575
  57. package/src/atoms/components/ButtonGroup/ButtonGroup.vue +200 -200
  58. package/src/atoms/components/Carousel/Carousel.fixtures.js +53 -53
  59. package/src/atoms/components/Carousel/Carousel.vue +363 -363
  60. package/src/atoms/components/Carousel/carousel.stories.js +530 -530
  61. package/src/atoms/components/Checkbox/Checkbox.mixin.js +57 -57
  62. package/src/atoms/components/Checkbox/Checkbox.stories.js +340 -340
  63. package/src/atoms/components/Checkbox/Checkbox.vue +84 -84
  64. package/src/atoms/components/Checktile/Checktile.stories.js +79 -79
  65. package/src/atoms/components/Checktile/Checktile.vue +73 -73
  66. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.mixin.js +38 -38
  67. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.stories.js +53 -53
  68. package/src/atoms/components/CollapsiblePanel/CollapsiblePanel.vue +33 -33
  69. package/src/atoms/components/ColorPicker/ColorPicker.stories.js +89 -89
  70. package/src/atoms/components/ColorPicker/ColorPicker.vue +95 -95
  71. package/src/atoms/components/CopyToClipboardText/CopyToClipboardText.stories.js +41 -41
  72. package/src/atoms/components/CopyToClipboardText/CopyToClipboardText.vue +71 -71
  73. package/src/atoms/components/Dropdown/Dropdown.stories.js +140 -140
  74. package/src/atoms/components/Dropdown/Dropdown.vue +129 -129
  75. package/src/atoms/components/Dropdown/DropdownItem.vue +33 -33
  76. package/src/atoms/components/FormControl/FormControl.mixin.js +136 -136
  77. package/src/atoms/components/HelloBar/HelloBar.stories.js +195 -195
  78. package/src/atoms/components/HelloBar/HelloBar.vue +156 -156
  79. package/src/atoms/components/Icon/Icon.stories.js +410 -409
  80. package/src/atoms/components/Icon/Icon.vue +932 -930
  81. package/src/atoms/components/Icon/icons/add-page.vue +6 -6
  82. package/src/atoms/components/Icon/icons/ai.vue +6 -6
  83. package/src/atoms/components/Icon/icons/annotate-heart.vue +7 -7
  84. package/src/atoms/components/Icon/icons/arrow-down.vue +6 -6
  85. package/src/atoms/components/Icon/icons/arrow-left.vue +7 -7
  86. package/src/atoms/components/Icon/icons/arrow-right.vue +7 -7
  87. package/src/atoms/components/Icon/icons/arrow-top-right.vue +6 -6
  88. package/src/atoms/components/Icon/icons/arrow-up-underline.vue +7 -7
  89. package/src/atoms/components/Icon/icons/arrow-up.vue +7 -7
  90. package/src/atoms/components/Icon/icons/attach.vue +6 -6
  91. package/src/atoms/components/Icon/icons/auth-facebook-white.vue +17 -17
  92. package/src/atoms/components/Icon/icons/auth-facebook.vue +24 -24
  93. package/src/atoms/components/Icon/icons/auth-google.vue +32 -32
  94. package/src/atoms/components/Icon/icons/award.vue +7 -7
  95. package/src/atoms/components/Icon/icons/background.vue +7 -7
  96. package/src/atoms/components/Icon/icons/badge.vue +7 -7
  97. package/src/atoms/components/Icon/icons/banner-centered.vue +6 -6
  98. package/src/atoms/components/Icon/icons/banner-left.vue +6 -6
  99. package/src/atoms/components/Icon/icons/banner.vue +7 -7
  100. package/src/atoms/components/Icon/icons/bc-mast.vue +7 -7
  101. package/src/atoms/components/Icon/icons/bezier-curve-outline.vue +7 -7
  102. package/src/atoms/components/Icon/icons/bezier-curve.vue +7 -7
  103. package/src/atoms/components/Icon/icons/briefcase.vue +7 -7
  104. package/src/atoms/components/Icon/icons/browser.vue +7 -7
  105. package/src/atoms/components/Icon/icons/brush.vue +6 -6
  106. package/src/atoms/components/Icon/icons/business-card-filled.vue +5 -5
  107. package/src/atoms/components/Icon/icons/business.vue +6 -6
  108. package/src/atoms/components/Icon/icons/calculator.vue +3 -3
  109. package/src/atoms/components/Icon/icons/calendar.vue +5 -5
  110. package/src/atoms/components/Icon/icons/callout-error.vue +6 -6
  111. package/src/atoms/components/Icon/icons/callout-info.vue +6 -6
  112. package/src/atoms/components/Icon/icons/callout-success.vue +8 -8
  113. package/src/atoms/components/Icon/icons/callout-warning.vue +6 -6
  114. package/src/atoms/components/Icon/icons/cap.vue +22 -22
  115. package/src/atoms/components/Icon/icons/card-vertical.vue +7 -7
  116. package/src/atoms/components/Icon/icons/card.vue +9 -9
  117. package/src/atoms/components/Icon/icons/cart-empty.vue +9 -9
  118. package/src/atoms/components/Icon/icons/check-thin.vue +7 -7
  119. package/src/atoms/components/Icon/icons/check.vue +3 -3
  120. package/src/atoms/components/Icon/icons/chevron-down.vue +7 -7
  121. package/src/atoms/components/Icon/icons/chevron-left.vue +7 -7
  122. package/src/atoms/components/Icon/icons/chevron-right-wide.vue +3 -3
  123. package/src/atoms/components/Icon/icons/chevron-right.vue +3 -3
  124. package/src/atoms/components/Icon/icons/chevron-up.vue +7 -7
  125. package/src/atoms/components/Icon/icons/clipboard-check.vue +6 -6
  126. package/src/atoms/components/Icon/icons/close.vue +6 -6
  127. package/src/atoms/components/Icon/icons/community.vue +5 -5
  128. package/src/atoms/components/Icon/icons/contact-message.vue +10 -10
  129. package/src/atoms/components/Icon/icons/content.vue +7 -7
  130. package/src/atoms/components/Icon/icons/copy.vue +10 -10
  131. package/src/atoms/components/Icon/icons/crazy-domains/filter.vue +6 -6
  132. package/src/atoms/components/Icon/icons/crazy-domains/globe.vue +6 -6
  133. package/src/atoms/components/Icon/icons/crazy-domains/home.vue +6 -6
  134. package/src/atoms/components/Icon/icons/crazy-domains/social-facebook.vue +6 -6
  135. package/src/atoms/components/Icon/icons/crazy-domains/social-google.vue +6 -6
  136. package/src/atoms/components/Icon/icons/crazy-domains/social-instagram.vue +6 -6
  137. package/src/atoms/components/Icon/icons/crazy-domains/social-twitter.vue +6 -6
  138. package/src/atoms/components/Icon/icons/crazy-domains/social-youtube.vue +6 -6
  139. package/src/atoms/components/Icon/icons/crop.vue +6 -6
  140. package/src/atoms/components/Icon/icons/crown-alt.vue +5 -5
  141. package/src/atoms/components/Icon/icons/crown.vue +6 -6
  142. package/src/atoms/components/Icon/icons/delete.vue +8 -8
  143. package/src/atoms/components/Icon/icons/designs.vue +6 -6
  144. package/src/atoms/components/Icon/icons/desktop.vue +7 -7
  145. package/src/atoms/components/Icon/icons/digital-business-card-filled.vue +8 -8
  146. package/src/atoms/components/Icon/icons/donate.vue +6 -6
  147. package/src/atoms/components/Icon/icons/download.vue +5 -5
  148. package/src/atoms/components/Icon/icons/duplicate.vue +6 -6
  149. package/src/atoms/components/Icon/icons/edit-line.vue +10 -10
  150. package/src/atoms/components/Icon/icons/edit.vue +6 -6
  151. package/src/atoms/components/Icon/icons/ellipsis.vue +6 -6
  152. package/src/atoms/components/Icon/icons/envelope-email.vue +9 -9
  153. package/src/atoms/components/Icon/icons/error.vue +8 -8
  154. package/src/atoms/components/Icon/icons/eye-crossed.vue +7 -7
  155. package/src/atoms/components/Icon/icons/eye-open.vue +11 -11
  156. package/src/atoms/components/Icon/icons/fees.vue +6 -6
  157. package/src/atoms/components/Icon/icons/file-box.vue +3 -3
  158. package/src/atoms/components/Icon/icons/file-empty.vue +7 -7
  159. package/src/atoms/components/Icon/icons/file.vue +7 -7
  160. package/src/atoms/components/Icon/icons/filter.vue +7 -7
  161. package/src/atoms/components/Icon/icons/filters.vue +6 -6
  162. package/src/atoms/components/Icon/icons/flag.vue +6 -6
  163. package/src/atoms/components/Icon/icons/flip-horizontal.vue +7 -7
  164. package/src/atoms/components/Icon/icons/flip-vertical.vue +7 -7
  165. package/src/atoms/components/Icon/icons/folder.vue +6 -6
  166. package/src/atoms/components/Icon/icons/font.vue +7 -7
  167. package/src/atoms/components/Icon/icons/footer-centered.vue +7 -7
  168. package/src/atoms/components/Icon/icons/footer-left.vue +7 -7
  169. package/src/atoms/components/Icon/icons/form-message.vue +6 -6
  170. package/src/atoms/components/Icon/icons/form.vue +5 -5
  171. package/src/atoms/components/Icon/icons/fullscreen-exit.vue +5 -5
  172. package/src/atoms/components/Icon/icons/fullscreen.vue +5 -5
  173. package/src/atoms/components/Icon/icons/globe.vue +6 -6
  174. package/src/atoms/components/Icon/icons/godaddy/logo.vue +5 -5
  175. package/src/atoms/components/Icon/icons/group.vue +6 -6
  176. package/src/atoms/components/Icon/icons/hamburger.vue +7 -7
  177. package/src/atoms/components/Icon/icons/headphones.vue +7 -7
  178. package/src/atoms/components/Icon/icons/history.vue +12 -12
  179. package/src/atoms/components/Icon/icons/home-outline.vue +6 -6
  180. package/src/atoms/components/Icon/icons/home.vue +7 -7
  181. package/src/atoms/components/Icon/icons/icon-style-circle-bg.vue +22 -22
  182. package/src/atoms/components/Icon/icons/icon-style-no-bg.vue +16 -16
  183. package/src/atoms/components/Icon/icons/icon-style-square-bg.vue +22 -22
  184. package/src/atoms/components/Icon/icons/image-gallery-carousel.vue +7 -7
  185. package/src/atoms/components/Icon/icons/image-gallery-grid.vue +7 -7
  186. package/src/atoms/components/Icon/icons/image-gallery-masonry.vue +6 -6
  187. package/src/atoms/components/Icon/icons/image.vue +7 -7
  188. package/src/atoms/components/Icon/icons/images-gallery.vue +5 -5
  189. package/src/atoms/components/Icon/icons/images.vue +7 -7
  190. package/src/atoms/components/Icon/icons/info.vue +9 -9
  191. package/src/atoms/components/Icon/icons/jobs.vue +8 -8
  192. package/src/atoms/components/Icon/icons/layer-bring-front.vue +6 -6
  193. package/src/atoms/components/Icon/icons/layer-send-back.vue +6 -6
  194. package/src/atoms/components/Icon/icons/layer.vue +6 -6
  195. package/src/atoms/components/Icon/icons/layout/display-style-about-1.vue +20 -20
  196. package/src/atoms/components/Icon/icons/layout/display-style-about-2.vue +20 -20
  197. package/src/atoms/components/Icon/icons/layout/display-style-about-3.vue +20 -20
  198. package/src/atoms/components/Icon/icons/layout/display-style-about-4.vue +32 -32
  199. package/src/atoms/components/Icon/icons/layout/display-style-about-5.vue +27 -27
  200. package/src/atoms/components/Icon/icons/layout/display-style-about-6.vue +27 -27
  201. package/src/atoms/components/Icon/icons/layout/display-style-banner-1.vue +20 -20
  202. package/src/atoms/components/Icon/icons/layout/display-style-banner-2.vue +20 -20
  203. package/src/atoms/components/Icon/icons/layout/display-style-banner-3.vue +20 -20
  204. package/src/atoms/components/Icon/icons/layout/display-style-banner-4.vue +20 -20
  205. package/src/atoms/components/Icon/icons/layout/display-style-banner-5.vue +20 -20
  206. package/src/atoms/components/Icon/icons/layout/display-style-banner-6.vue +27 -27
  207. package/src/atoms/components/Icon/icons/layout/display-style-banner-7.vue +27 -27
  208. package/src/atoms/components/Icon/icons/layout/display-style-banner-8.vue +20 -20
  209. package/src/atoms/components/Icon/icons/layout/display-style-banner-9.vue +20 -20
  210. package/src/atoms/components/Icon/icons/layout/display-style-contact-1.vue +24 -24
  211. package/src/atoms/components/Icon/icons/layout/display-style-contact-2.vue +24 -24
  212. package/src/atoms/components/Icon/icons/layout/display-style-contact-4.vue +24 -24
  213. package/src/atoms/components/Icon/icons/layout/display-style-contact-5.vue +39 -39
  214. package/src/atoms/components/Icon/icons/layout/display-style-contact-6.vue +39 -39
  215. package/src/atoms/components/Icon/icons/layout/footer/display-style-1.vue +7 -7
  216. package/src/atoms/components/Icon/icons/layout/footer/display-style-2.vue +16 -16
  217. package/src/atoms/components/Icon/icons/layout/header/desktop-hamburger-display-style-1.vue +17 -17
  218. package/src/atoms/components/Icon/icons/layout/header/desktop-hamburger-display-style-2.vue +17 -17
  219. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-1.vue +17 -17
  220. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-2.vue +17 -17
  221. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-3.vue +13 -13
  222. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-4.vue +13 -13
  223. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-5.vue +17 -17
  224. package/src/atoms/components/Icon/icons/layout/header/desktop-tab-display-style-6.vue +17 -17
  225. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-1.vue +16 -16
  226. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-2.vue +16 -16
  227. package/src/atoms/components/Icon/icons/layout/header/hamburger-display-style-no-logo-3.vue +16 -16
  228. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-1.vue +17 -17
  229. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-2.vue +17 -17
  230. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-3.vue +17 -17
  231. package/src/atoms/components/Icon/icons/layout/header/mobile-hamburger-display-style-4.vue +21 -21
  232. package/src/atoms/components/Icon/icons/layout/header/mobile-tab-display-style-1.vue +17 -17
  233. package/src/atoms/components/Icon/icons/layout/header/mobile-tab-display-style-2.vue +17 -17
  234. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-1.vue +16 -16
  235. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-2.vue +16 -16
  236. package/src/atoms/components/Icon/icons/layout/header/tab-display-style-no-logo-3.vue +16 -16
  237. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-normal-text-center-normal.vue +7 -7
  238. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-normal-text-center-small.vue +7 -7
  239. package/src/atoms/components/Icon/icons/layout/layout-icon-bottom-small-text-center-normal.vue +7 -7
  240. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-bottom.vue +11 -11
  241. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-circle.vue +10 -10
  242. package/src/atoms/components/Icon/icons/layout/layout-icon-center-normal-curved-text-top.vue +11 -11
  243. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-center-normal.vue +7 -7
  244. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-justify-normal.vue +7 -7
  245. package/src/atoms/components/Icon/icons/layout/layout-icon-left-normal-text-left-normal.vue +7 -7
  246. package/src/atoms/components/Icon/icons/layout/layout-icon-left-small-text-left-normal.vue +7 -7
  247. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-center-normal.vue +7 -7
  248. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-justify-normal.vue +7 -7
  249. package/src/atoms/components/Icon/icons/layout/layout-icon-right-normal-text-right-normal.vue +7 -7
  250. package/src/atoms/components/Icon/icons/layout/layout-icon-right-small-text-right-normal.vue +7 -7
  251. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-center-normal.vue +7 -7
  252. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-center-small.vue +7 -7
  253. package/src/atoms/components/Icon/icons/layout/layout-icon-top-normal-text-justify-normal.vue +7 -7
  254. package/src/atoms/components/Icon/icons/layout/layout-icon-top-small-text-center-normal.vue +7 -7
  255. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-1.vue +16 -16
  256. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-2.vue +10 -10
  257. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-3.vue +10 -10
  258. package/src/atoms/components/Icon/icons/layout/nav/hamburger/display-style-4.vue +23 -23
  259. package/src/atoms/components/Icon/icons/layout/nav/tab/display-style-1.vue +16 -16
  260. package/src/atoms/components/Icon/icons/layout/nav/tab/display-style-2.vue +7 -7
  261. package/src/atoms/components/Icon/icons/letterhead-filled.vue +5 -5
  262. package/src/atoms/components/Icon/icons/lightning.vue +7 -7
  263. package/src/atoms/components/Icon/icons/link-in-bio-filled.vue +8 -8
  264. package/src/atoms/components/Icon/icons/link.vue +6 -6
  265. package/src/atoms/components/Icon/icons/location.vue +6 -6
  266. package/src/atoms/components/Icon/icons/lock.vue +6 -6
  267. package/src/atoms/components/Icon/icons/logo.vue +7 -7
  268. package/src/atoms/components/Icon/icons/mac-command.vue +7 -7
  269. package/src/atoms/components/Icon/icons/maker/align-center.vue +7 -7
  270. package/src/atoms/components/Icon/icons/maker/align-justify.vue +7 -7
  271. package/src/atoms/components/Icon/icons/maker/align-left.vue +7 -7
  272. package/src/atoms/components/Icon/icons/maker/align-right.vue +7 -7
  273. package/src/atoms/components/Icon/icons/maker/animate.vue +7 -7
  274. package/src/atoms/components/Icon/icons/maker/bold.vue +7 -7
  275. package/src/atoms/components/Icon/icons/maker/custom-landscape.vue +5 -5
  276. package/src/atoms/components/Icon/icons/maker/email-symbol.vue +5 -5
  277. package/src/atoms/components/Icon/icons/maker/email.vue +5 -5
  278. package/src/atoms/components/Icon/icons/maker/eraser.vue +5 -5
  279. package/src/atoms/components/Icon/icons/maker/etsy.vue +5 -5
  280. package/src/atoms/components/Icon/icons/maker/facebook.vue +5 -5
  281. package/src/atoms/components/Icon/icons/maker/favicon.vue +7 -7
  282. package/src/atoms/components/Icon/icons/maker/flyer.vue +7 -7
  283. package/src/atoms/components/Icon/icons/maker/gift-certificate.vue +5 -5
  284. package/src/atoms/components/Icon/icons/maker/globe.vue +5 -5
  285. package/src/atoms/components/Icon/icons/maker/image.vue +7 -7
  286. package/src/atoms/components/Icon/icons/maker/instagram.vue +7 -7
  287. package/src/atoms/components/Icon/icons/maker/invitation.vue +5 -5
  288. package/src/atoms/components/Icon/icons/maker/invoice.vue +5 -5
  289. package/src/atoms/components/Icon/icons/maker/italic.vue +7 -7
  290. package/src/atoms/components/Icon/icons/maker/link.vue +7 -7
  291. package/src/atoms/components/Icon/icons/maker/linkedin.vue +7 -7
  292. package/src/atoms/components/Icon/icons/maker/menu.vue +5 -5
  293. package/src/atoms/components/Icon/icons/maker/pause.vue +5 -5
  294. package/src/atoms/components/Icon/icons/maker/phone.vue +5 -5
  295. package/src/atoms/components/Icon/icons/maker/pinterest.vue +5 -5
  296. package/src/atoms/components/Icon/icons/maker/play.vue +5 -5
  297. package/src/atoms/components/Icon/icons/maker/postcard.vue +5 -5
  298. package/src/atoms/components/Icon/icons/maker/poster.vue +7 -7
  299. package/src/atoms/components/Icon/icons/maker/profile.vue +5 -5
  300. package/src/atoms/components/Icon/icons/maker/qrcode.vue +5 -5
  301. package/src/atoms/components/Icon/icons/maker/snapchat.vue +5 -5
  302. package/src/atoms/components/Icon/icons/maker/soundcloud.vue +7 -7
  303. package/src/atoms/components/Icon/icons/maker/spacing.vue +18 -18
  304. package/src/atoms/components/Icon/icons/maker/strikethrough.vue +7 -7
  305. package/src/atoms/components/Icon/icons/maker/t-shirt.vue +32 -32
  306. package/src/atoms/components/Icon/icons/maker/text-background-color.vue +12 -12
  307. package/src/atoms/components/Icon/icons/maker/text-color.vue +14 -14
  308. package/src/atoms/components/Icon/icons/maker/text.vue +7 -7
  309. package/src/atoms/components/Icon/icons/maker/thankyou-card.vue +5 -5
  310. package/src/atoms/components/Icon/icons/maker/tiktok.vue +5 -5
  311. package/src/atoms/components/Icon/icons/maker/tumblr.vue +5 -5
  312. package/src/atoms/components/Icon/icons/maker/twitch.vue +7 -7
  313. package/src/atoms/components/Icon/icons/maker/twitter.vue +5 -5
  314. package/src/atoms/components/Icon/icons/maker/underline.vue +7 -7
  315. package/src/atoms/components/Icon/icons/maker/uppercase.vue +14 -14
  316. package/src/atoms/components/Icon/icons/maker/video.vue +5 -5
  317. package/src/atoms/components/Icon/icons/maker/whatsapp.vue +7 -7
  318. package/src/atoms/components/Icon/icons/maker/youtube.vue +5 -5
  319. package/src/atoms/components/Icon/icons/maker/zoom.vue +5 -5
  320. package/src/atoms/components/Icon/icons/map.vue +6 -6
  321. package/src/atoms/components/Icon/icons/media.vue +3 -3
  322. package/src/atoms/components/Icon/icons/message.vue +6 -6
  323. package/src/atoms/components/Icon/icons/minus-circle-light.vue +7 -7
  324. package/src/atoms/components/Icon/icons/minus.vue +3 -3
  325. package/src/atoms/components/Icon/icons/mobile.vue +5 -5
  326. package/src/atoms/components/Icon/icons/mug.vue +29 -29
  327. package/src/atoms/components/Icon/icons/opacity.vue +6 -6
  328. package/src/atoms/components/Icon/icons/other.vue +7 -7
  329. package/src/atoms/components/Icon/icons/page-blank.vue +6 -6
  330. package/src/atoms/components/Icon/icons/page-buttons.vue +8 -8
  331. package/src/atoms/components/Icon/icons/page-hamburger.vue +9 -9
  332. package/src/atoms/components/Icon/icons/page-tabs.vue +9 -9
  333. package/src/atoms/components/Icon/icons/pages.vue +6 -6
  334. package/src/atoms/components/Icon/icons/palette-outline.vue +7 -7
  335. package/src/atoms/components/Icon/icons/palette.vue +6 -6
  336. package/src/atoms/components/Icon/icons/pause.vue +5 -5
  337. package/src/atoms/components/Icon/icons/payment.vue +8 -8
  338. package/src/atoms/components/Icon/icons/payments-featured.vue +6 -6
  339. package/src/atoms/components/Icon/icons/payments-textonly.vue +8 -8
  340. package/src/atoms/components/Icon/icons/payments-thumbnail.vue +9 -9
  341. package/src/atoms/components/Icon/icons/pen-outline.vue +7 -7
  342. package/src/atoms/components/Icon/icons/pen-sparkle.vue +17 -17
  343. package/src/atoms/components/Icon/icons/pen-tool.vue +7 -7
  344. package/src/atoms/components/Icon/icons/pen.vue +7 -7
  345. package/src/atoms/components/Icon/icons/phone.vue +6 -6
  346. package/src/atoms/components/Icon/icons/plus-circle-light.vue +8 -8
  347. package/src/atoms/components/Icon/icons/plus-circle.vue +7 -7
  348. package/src/atoms/components/Icon/icons/plus.vue +3 -3
  349. package/src/atoms/components/Icon/icons/poll.vue +3 -3
  350. package/src/atoms/components/Icon/icons/portfolio.vue +10 -10
  351. package/src/atoms/components/Icon/icons/premium-content.vue +8 -8
  352. package/src/atoms/components/Icon/icons/preview.vue +6 -6
  353. package/src/atoms/components/Icon/icons/printing.vue +6 -6
  354. package/src/atoms/components/Icon/icons/processing.vue +5 -5
  355. package/src/atoms/components/Icon/icons/question-alt.vue +20 -20
  356. package/src/atoms/components/Icon/icons/question.vue +11 -11
  357. package/src/atoms/components/Icon/icons/ratio-1-1.vue +3 -3
  358. package/src/atoms/components/Icon/icons/ratio-16-9.vue +1 -1
  359. package/src/atoms/components/Icon/icons/ratio-2-3.vue +3 -3
  360. package/src/atoms/components/Icon/icons/ratio-3-2.vue +3 -3
  361. package/src/atoms/components/Icon/icons/ratio-3-4.vue +3 -3
  362. package/src/atoms/components/Icon/icons/ratio-4-3.vue +3 -3
  363. package/src/atoms/components/Icon/icons/ratio-9-16.vue +3 -3
  364. package/src/atoms/components/Icon/icons/ratio-circle.vue +8 -8
  365. package/src/atoms/components/Icon/icons/ratio-original.vue +11 -11
  366. package/src/atoms/components/Icon/icons/redo.vue +6 -6
  367. package/src/atoms/components/Icon/icons/reload.vue +6 -6
  368. package/src/atoms/components/Icon/icons/reorderable.vue +5 -5
  369. package/src/atoms/components/Icon/icons/request-payment.vue +6 -6
  370. package/src/atoms/components/Icon/icons/reset.vue +6 -6
  371. package/src/atoms/components/Icon/icons/resize.vue +6 -6
  372. package/src/atoms/components/Icon/icons/save.vue +6 -6
  373. package/src/atoms/components/Icon/icons/search.vue +11 -11
  374. package/src/atoms/components/Icon/icons/secure.vue +7 -7
  375. package/src/atoms/components/Icon/icons/send.vue +12 -12
  376. package/src/atoms/components/Icon/icons/services.vue +7 -7
  377. package/src/atoms/components/Icon/icons/settings.vue +7 -7
  378. package/src/atoms/components/Icon/icons/shape.vue +5 -5
  379. package/src/atoms/components/Icon/icons/share.vue +9 -9
  380. package/src/atoms/components/Icon/icons/shield-tick.vue +6 -6
  381. package/src/atoms/components/Icon/icons/shop.vue +5 -5
  382. package/src/atoms/components/Icon/icons/sms.vue +5 -5
  383. package/src/atoms/components/Icon/icons/social-facebook-color.vue +9 -9
  384. package/src/atoms/components/Icon/icons/social-facebook.vue +5 -5
  385. package/src/atoms/components/Icon/icons/social-google.vue +5 -5
  386. package/src/atoms/components/Icon/icons/social-instagram-color.vue +24 -24
  387. package/src/atoms/components/Icon/icons/social-linkedin-color.vue +9 -9
  388. package/src/atoms/components/Icon/icons/social-share.vue +7 -7
  389. package/src/atoms/components/Icon/icons/social-twitter-color.vue +9 -9
  390. package/src/atoms/components/Icon/icons/sparkle-square.vue +22 -22
  391. package/src/atoms/components/Icon/icons/star-filled.vue +6 -6
  392. package/src/atoms/components/Icon/icons/star-hollow.vue +6 -6
  393. package/src/atoms/components/Icon/icons/sticker.vue +28 -28
  394. package/src/atoms/components/Icon/icons/stop.vue +5 -5
  395. package/src/atoms/components/Icon/icons/styles.vue +5 -5
  396. package/src/atoms/components/Icon/icons/submit.vue +5 -5
  397. package/src/atoms/components/Icon/icons/templates.vue +7 -7
  398. package/src/atoms/components/Icon/icons/text-image-center.vue +6 -6
  399. package/src/atoms/components/Icon/icons/text-image-justified.vue +7 -7
  400. package/src/atoms/components/Icon/icons/text-image-left.vue +9 -9
  401. package/src/atoms/components/Icon/icons/text-image-only.vue +5 -5
  402. package/src/atoms/components/Icon/icons/text-image-right.vue +9 -9
  403. package/src/atoms/components/Icon/icons/text-image.vue +13 -13
  404. package/src/atoms/components/Icon/icons/time.vue +8 -8
  405. package/src/atoms/components/Icon/icons/tooltip-bottom.vue +5 -5
  406. package/src/atoms/components/Icon/icons/tooltip-left.vue +5 -5
  407. package/src/atoms/components/Icon/icons/tooltip-right.vue +5 -5
  408. package/src/atoms/components/Icon/icons/tooltip-top.vue +5 -5
  409. package/src/atoms/components/Icon/icons/undo.vue +6 -6
  410. package/src/atoms/components/Icon/icons/upgrade-alt.vue +7 -7
  411. package/src/atoms/components/Icon/icons/upgrade.vue +9 -9
  412. package/src/atoms/components/Icon/icons/upload-arrow.vue +5 -5
  413. package/src/atoms/components/Icon/icons/upload.vue +5 -5
  414. package/src/atoms/components/Icon/icons/user-accounts.vue +5 -5
  415. package/src/atoms/components/Icon/icons/user-headset.vue +50 -50
  416. package/src/atoms/components/Icon/icons/users-2.vue +5 -0
  417. package/src/atoms/components/Icon/icons/volume-muted.vue +5 -5
  418. package/src/atoms/components/Icon/icons/volume.vue +5 -5
  419. package/src/atoms/components/Icon/icons/watchlist-filled.vue +14 -14
  420. package/src/atoms/components/Icon/icons/watchlist-hollow-alt.vue +14 -14
  421. package/src/atoms/components/Icon/icons/watchlist-hollow.vue +6 -6
  422. package/src/atoms/components/Icon/icons/website-filled.vue +5 -5
  423. package/src/atoms/components/Icon/icons/website.vue +6 -6
  424. package/src/atoms/components/Icon/icons/websites/upgrade-to-add-page.vue +50 -50
  425. package/src/atoms/components/Icon/icons/websites/upgrade-to-contact-form.vue +82 -82
  426. package/src/atoms/components/Icon/icons/websites/upgrade-to-google-ad.vue +92 -92
  427. package/src/atoms/components/Icon/icons/websites/upgrade-to-maps.vue +40 -40
  428. package/src/atoms/components/Icon/icons/websites/upgrade-to-publish.vue +107 -107
  429. package/src/atoms/components/Icon/icons/websites/upgrade-to-remove-watermark.vue +74 -74
  430. package/src/atoms/components/Icon/icons/websites/upgrade-to-videos.vue +16 -16
  431. package/src/atoms/components/Icon/icons/wholesale.vue +6 -6
  432. package/src/atoms/components/Icon/icons/zoom-in.vue +5 -5
  433. package/src/atoms/components/Icon/icons/zoom-out.vue +5 -5
  434. package/src/atoms/components/Icon/icons/zoom.vue +11 -11
  435. package/src/atoms/components/Loader/Loader.vue +15 -15
  436. package/src/atoms/components/Masonry/Masonry.stories.js +48 -48
  437. package/src/atoms/components/Masonry/Masonry.vue +48 -48
  438. package/src/atoms/components/Masonry/fixtures.js +589 -589
  439. package/src/atoms/components/Modal/HashRouteModal.stories.js +68 -68
  440. package/src/atoms/components/Modal/HashRouteModal.vue +120 -120
  441. package/src/atoms/components/Modal/Modal.stories.js +293 -293
  442. package/src/atoms/components/Modal/Modal.vue +272 -272
  443. package/src/atoms/components/Notice/Notice.stories.js +174 -174
  444. package/src/atoms/components/Notice/Notice.vue +71 -71
  445. package/src/atoms/components/NumberStepper/NumberStepper.stories.js +55 -55
  446. package/src/atoms/components/NumberStepper/NumberStepper.vue +340 -340
  447. package/src/atoms/components/Picture/Picture.stories.js +90 -90
  448. package/src/atoms/components/Picture/Picture.vue +84 -84
  449. package/src/atoms/components/Picture/picture.fixtures.js +35 -35
  450. package/src/atoms/components/Pill/Pill.stories.js +20 -20
  451. package/src/atoms/components/Pill/Pill.vue +8 -8
  452. package/src/atoms/components/PillBar/PillBar.fixtures.js +941 -941
  453. package/src/atoms/components/PillBar/PillBar.stories.js +39 -39
  454. package/src/atoms/components/PillBar/PillBar.vue +62 -62
  455. package/src/atoms/components/Price/Price.fixtures.js +85 -85
  456. package/src/atoms/components/Price/Price.stories.js +313 -313
  457. package/src/atoms/components/Price/Price.vue +135 -135
  458. package/src/atoms/components/Price/i18n/price.de-DE.json +5 -5
  459. package/src/atoms/components/Price/i18n/price.es-ES.json +5 -5
  460. package/src/atoms/components/Price/i18n/price.fr-CA.json +5 -5
  461. package/src/atoms/components/Price/i18n/price.fr-FR.json +5 -5
  462. package/src/atoms/components/Price/i18n/price.json +5 -5
  463. package/src/atoms/components/Price/i18n/price.pt-BR.json +5 -5
  464. package/src/atoms/components/Price/i18n/price.pt-PT.json +5 -5
  465. package/src/atoms/components/PromoCard/PromoCard.stories.ts +263 -263
  466. package/src/atoms/components/PromoCard/PromoCard.vue +83 -83
  467. package/src/atoms/components/SearchBar/SearchBar.stories.js +21 -21
  468. package/src/atoms/components/SearchBar/SearchBar.vue +51 -51
  469. package/src/atoms/components/Select/Select.stories.js +142 -142
  470. package/src/atoms/components/Select/Select.vue +619 -619
  471. package/src/atoms/components/Select/pointerMixin.js +99 -99
  472. package/src/atoms/components/Select/selectMixin.js +356 -356
  473. package/src/atoms/components/SparkleIcon/SparkleIcon.stories.js +386 -386
  474. package/src/atoms/components/SparkleIcon/SparkleIcon.vue +136 -136
  475. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-01.svg +5 -5
  476. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-02.svg +5 -5
  477. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-03.svg +5 -5
  478. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-04.svg +5 -5
  479. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-05.svg +5 -5
  480. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-06.svg +5 -5
  481. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-07.svg +5 -5
  482. package/src/atoms/components/SparkleIcon/assets/animations/sparkle/state-08.svg +5 -5
  483. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-01.svg +5 -5
  484. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-02.svg +14 -14
  485. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-03.svg +14 -14
  486. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-04.svg +14 -14
  487. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-05.svg +14 -14
  488. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-06.svg +14 -14
  489. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-07.svg +14 -14
  490. package/src/atoms/components/SparkleIcon/assets/animations/spinner/state-08.svg +14 -14
  491. package/src/atoms/components/SparkleIcon/assets/sparkle.svg +3 -3
  492. package/src/atoms/components/SparkleIcon/index.ts +3 -3
  493. package/src/atoms/components/SparkleIcon/sparkle-paths.ts +54 -54
  494. package/src/atoms/components/SparkleIcon/sparkle-with-spinner-paths.ts +61 -61
  495. package/src/atoms/components/StarRating/StarRating.stories.js +50 -50
  496. package/src/atoms/components/StarRating/StarRating.vue +84 -84
  497. package/src/atoms/components/TabMenu/TabMenu.stories.js +54 -54
  498. package/src/atoms/components/TabMenu/TabMenu.vue +44 -44
  499. package/src/atoms/components/TextCopyField/TextCopyField.stories.js +68 -68
  500. package/src/atoms/components/TextCopyField/TextCopyField.vue +75 -75
  501. package/src/atoms/components/TextInput/TextInput.stories.js +232 -232
  502. package/src/atoms/components/TextInput/TextInput.vue +161 -161
  503. package/src/atoms/components/Textarea/Textarea.stories.js +209 -209
  504. package/src/atoms/components/Textarea/Textarea.vue +112 -112
  505. package/src/atoms/components/Toggle/Toggle.stories.js +176 -176
  506. package/src/atoms/components/Toggle/Toggle.vue +69 -69
  507. package/src/atoms/components/Tooltip/Tooltip.stories.js +493 -493
  508. package/src/atoms/components/Tooltip/Tooltip.vue +196 -196
  509. package/src/atoms/components/design-com/Icon/Icon.stories.js +94 -94
  510. package/src/atoms/components/design-com/Icon/Icon.vue +181 -181
  511. package/src/atoms/components/design-com/Icon/icons/ai.vue +5 -5
  512. package/src/atoms/components/design-com/Icon/icons/award.vue +7 -7
  513. package/src/atoms/components/design-com/Icon/icons/badge.vue +7 -7
  514. package/src/atoms/components/design-com/Icon/icons/briefcase.vue +6 -6
  515. package/src/atoms/components/design-com/Icon/icons/browser.vue +7 -7
  516. package/src/atoms/components/design-com/Icon/icons/bulb.vue +7 -7
  517. package/src/atoms/components/design-com/Icon/icons/card-vertical.vue +8 -8
  518. package/src/atoms/components/design-com/Icon/icons/card.vue +6 -6
  519. package/src/atoms/components/design-com/Icon/icons/check-circle-light.vue +7 -7
  520. package/src/atoms/components/design-com/Icon/icons/chevron-down.vue +7 -7
  521. package/src/atoms/components/design-com/Icon/icons/chevron-left.vue +7 -7
  522. package/src/atoms/components/design-com/Icon/icons/chevron-right.vue +3 -3
  523. package/src/atoms/components/design-com/Icon/icons/chevron-up.vue +7 -7
  524. package/src/atoms/components/design-com/Icon/icons/diamond.vue +7 -7
  525. package/src/atoms/components/design-com/Icon/icons/download.vue +7 -7
  526. package/src/atoms/components/design-com/Icon/icons/file-empty.vue +7 -7
  527. package/src/atoms/components/design-com/Icon/icons/file.vue +7 -7
  528. package/src/atoms/components/design-com/Icon/icons/filter.vue +7 -7
  529. package/src/atoms/components/design-com/Icon/icons/folder.vue +5 -5
  530. package/src/atoms/components/design-com/Icon/icons/font.vue +7 -7
  531. package/src/atoms/components/design-com/Icon/icons/headphones.vue +7 -7
  532. package/src/atoms/components/design-com/Icon/icons/heart.vue +7 -7
  533. package/src/atoms/components/design-com/Icon/icons/image.vue +7 -7
  534. package/src/atoms/components/design-com/Icon/icons/lightning.vue +7 -7
  535. package/src/atoms/components/design-com/Icon/icons/logo.vue +7 -7
  536. package/src/atoms/components/design-com/Icon/icons/minus-circle-light.vue +7 -7
  537. package/src/atoms/components/design-com/Icon/icons/plus-circle-light.vue +8 -8
  538. package/src/atoms/components/design-com/Icon/icons/printing.vue +5 -5
  539. package/src/atoms/components/design-com/Icon/icons/question-circle-filled.vue +7 -7
  540. package/src/atoms/components/design-com/Icon/icons/search.vue +7 -7
  541. package/src/atoms/components/design-com/Icon/icons/shield-tick.vue +5 -5
  542. package/src/atoms/components/design-com/Icon/icons/star-filled.vue +6 -6
  543. package/src/atoms/components/design-com/Icon/icons/star-hollow.vue +6 -6
  544. package/src/atoms/components/design-com/Icon/icons/users.vue +7 -7
  545. package/src/atoms/constants/constants.ts +6 -6
  546. package/src/atoms/mixin/hash-router-mixin.js +68 -68
  547. package/src/atoms/thirdparty-components/VueMasonryWall/VueMasonryWall.vue +280 -280
  548. package/src/atoms/thirdparty-components/VueMasonryWall/maxBy.js +50 -50
  549. package/src/bundleTranslation.js +86 -86
  550. package/src/bundles/bundled-translations.de-DE.json +8 -53
  551. package/src/bundles/bundled-translations.es-ES.json +8 -53
  552. package/src/bundles/bundled-translations.fr-CA.json +8 -53
  553. package/src/bundles/bundled-translations.fr-FR.json +8 -53
  554. package/src/bundles/bundled-translations.json +8 -53
  555. package/src/bundles/bundled-translations.pt-BR.json +8 -53
  556. package/src/bundles/bundled-translations.pt-PT.json +8 -53
  557. package/src/css/tailwind.css +3 -3
  558. package/src/experiences/clients/brand-crowd-api.client.js +142 -142
  559. package/src/experiences/clients/brand-page-api.client.js +62 -62
  560. package/src/experiences/components/AuthFlow/Auth.fixtures.js +4 -4
  561. package/src/experiences/components/AuthFlow/Auth.stories.js +345 -345
  562. package/src/experiences/components/AuthFlow/AuthCrazyDomains.stories.js +60 -60
  563. package/src/experiences/components/AuthFlow/AuthLegal.vue +108 -108
  564. package/src/experiences/components/AuthFlow/AuthModal.vue +39 -39
  565. package/src/experiences/components/AuthFlow/ForgotPassword.vue +222 -222
  566. package/src/experiences/components/AuthFlow/ForgotPasswordModal.vue +68 -68
  567. package/src/experiences/components/AuthFlow/ResetPassword.vue +179 -179
  568. package/src/experiences/components/AuthFlow/ResetPasswordModal.vue +64 -64
  569. package/src/experiences/components/AuthFlow/ResetPasswordSuccessModal.vue +56 -56
  570. package/src/experiences/components/AuthFlow/SignIn.vue +472 -472
  571. package/src/experiences/components/AuthFlow/SignUp.vue +278 -278
  572. package/src/experiences/components/AuthFlow/SignUpModal.vue +90 -90
  573. package/src/experiences/components/AuthFlow/SocialSignIn.vue +177 -177
  574. package/src/experiences/components/AuthFlow/SocialSignInButton.vue +74 -74
  575. package/src/experiences/components/AuthFlow/SubmissionButton.vue +56 -56
  576. package/src/experiences/components/PaymentConfigList/PaymentConfig.mixin.js +118 -118
  577. package/src/experiences/components/PaymentConfigList/PaymentConfigDeleteConfigModal.vue +108 -108
  578. package/src/experiences/components/PaymentConfigList/PaymentConfigDropdown.vue +175 -175
  579. package/src/experiences/components/PaymentConfigList/PaymentConfigList.stories.js +234 -234
  580. package/src/experiences/components/PaymentConfigList/PaymentConfigList.vue +136 -136
  581. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.de-DE.json +11 -11
  582. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.es-ES.json +11 -11
  583. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.fr-CA.json +11 -11
  584. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.fr-FR.json +11 -11
  585. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.json +11 -11
  586. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.pt-BR.json +11 -11
  587. package/src/experiences/components/PaymentConfigList/i18n/shared-payment-config.pt-PT.json +11 -11
  588. package/src/experiences/components/PublishBrandPageModal/PublishBrandPageCard.vue +119 -119
  589. package/src/experiences/components/PublishBrandPageModal/PublishBrandPageModal.stories.js +262 -262
  590. package/src/experiences/components/PublishBrandPageModal/__fixtures__/data.js +25 -25
  591. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.de-DE.json +27 -27
  592. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.es-ES.json +27 -27
  593. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.fr-CA.json +27 -27
  594. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.fr-FR.json +27 -27
  595. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.json +27 -27
  596. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.pt-BR.json +27 -27
  597. package/src/experiences/components/PublishBrandPageModal/i18n/publish-brand-page-modal.pt-PT.json +27 -27
  598. package/src/experiences/components/SellDomainNameList/SellDomainNameList.fixtures.js +32 -32
  599. package/src/experiences/components/SellDomainNameList/SellDomainNameList.vue +157 -157
  600. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.de-DE.json +7 -7
  601. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.es-ES.json +7 -7
  602. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.fr-CA.json +7 -7
  603. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.fr-FR.json +7 -7
  604. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.json +7 -7
  605. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.pt-BR.json +7 -7
  606. package/src/experiences/components/SellDomainNameList/i18n/sell-domain-name-list.pt-PT.json +7 -7
  607. package/src/experiences/components/SellDomainNameListModal/SellDomainNameListModal.stories.js +74 -74
  608. package/src/experiences/components/SellDomainNameListModal/SellDomainNameListModal.vue +128 -128
  609. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.de-DE.json +5 -5
  610. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.es-ES.json +5 -5
  611. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.fr-CA.json +5 -5
  612. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.fr-FR.json +5 -5
  613. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.json +5 -5
  614. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.pt-BR.json +5 -5
  615. package/src/experiences/components/SellDomainNameListModal/i18n/sell-domain-name-list-modal.pt-PT.json +5 -5
  616. package/src/experiences/components/SellDomainNameModalApplication/SellDomainNameModalApplication.vue +222 -222
  617. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.de-DE.json +5 -5
  618. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.es-ES.json +5 -5
  619. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.fr-CA.json +5 -5
  620. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.fr-FR.json +5 -5
  621. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.json +5 -5
  622. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.pt-BR.json +5 -5
  623. package/src/experiences/components/SellDomainNameModalApplication/i18n/sell-domain-name-modal-application.pt-PT.json +5 -5
  624. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.de-DE.json +7 -7
  625. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.es-ES.json +7 -7
  626. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.fr-CA.json +7 -7
  627. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.fr-FR.json +7 -7
  628. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.json +7 -7
  629. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.pt-BR.json +7 -7
  630. package/src/experiences/components/SellDomainNameSearch/i18n/sell-domain-name-search.pt-PT.json +7 -7
  631. package/src/experiences/components/SellDomainNameSearchResult/SellDomainNameListSearchResult.vue +167 -167
  632. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.de-DE.json +5 -5
  633. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.es-ES.json +5 -5
  634. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.fr-CA.json +5 -5
  635. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.fr-FR.json +5 -5
  636. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.json +5 -5
  637. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.pt-BR.json +5 -5
  638. package/src/experiences/components/SellDomainNameSearchResult/i18n/sell-domain-name-list-search-result.pt-PT.json +5 -5
  639. package/src/experiences/components/SellDomainNameSearchWithResults/SellDomainNameSearchWithResults.stories.js +38 -38
  640. package/src/experiences/components/SellDomainNameSearchWithResults/SellDomainNameSearchWithResults.vue +223 -223
  641. package/src/experiences/components/SellDomainNameWidget/SellDomainNameWidget.stories.js +40 -40
  642. package/src/experiences/components/SellDomainNameWidget/SellDomainNameWidget.vue +155 -155
  643. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.de-DE.json +7 -7
  644. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.es-ES.json +7 -7
  645. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.fr-CA.json +7 -7
  646. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.fr-FR.json +7 -7
  647. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.json +7 -7
  648. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.pt-BR.json +7 -7
  649. package/src/experiences/components/SellDomainNameWidget/i18n/sell-domain-name-widget.pt-PT.json +7 -7
  650. package/src/experiences/components/SideNavigationPanel/MenuCta.vue +62 -62
  651. package/src/experiences/components/SideNavigationPanel/MenuItem.vue +40 -40
  652. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.stories.js +219 -219
  653. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.vue +82 -82
  654. package/src/experiences/components/SideNavigationPanel/types.ts +7 -7
  655. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.stories.js +254 -254
  656. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue +163 -163
  657. package/src/experiences/components/UploadYourLogoDropzone/UploadYourLogoDropzone.stories.js +59 -59
  658. package/src/experiences/components/UploadYourLogoDropzone/UploadYourLogoDropzone.vue +285 -285
  659. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessBrandColours.stories.js +37 -37
  660. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessBrandColours.vue +338 -338
  661. package/src/experiences/components/UploadYourLogoOnBoarding/LogoBusinessText.vue +146 -146
  662. package/src/experiences/components/UploadYourLogoOnBoarding/LogoCropper.vue +473 -473
  663. package/src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.stories.js +65 -65
  664. package/src/experiences/components/UploadYourLogoOnBoarding/LogoKeywords.vue +156 -156
  665. package/src/experiences/components/UploadYourLogoOnBoarding/LogoPreview.vue +103 -103
  666. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadError.vue +75 -75
  667. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadExitConfirmation.vue +55 -55
  668. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadModal.vue +38 -38
  669. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploader.vue +109 -109
  670. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadingLoader.vue +39 -39
  671. package/src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue +363 -363
  672. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.de-DE.json +37 -37
  673. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.es-ES.json +37 -37
  674. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-CA.json +37 -37
  675. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.fr-FR.json +37 -37
  676. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.json +37 -37
  677. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-BR.json +37 -37
  678. package/src/experiences/components/UploadYourLogoOnBoarding/i18n/upload-your-logo.pt-PT.json +37 -37
  679. package/src/experiences/components/UploadedLogoSearchResultCard/UploadedLogoSearchResultCard.stories.js +82 -82
  680. package/src/experiences/components/UploadedLogoSearchResultCard/UploadedLogoSearchResultCard.vue +211 -211
  681. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.de-DE.json +8 -8
  682. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.es-ES.json +8 -8
  683. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.fr-CA.json +8 -8
  684. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.fr-FR.json +8 -8
  685. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.json +8 -8
  686. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.pt-BR.json +8 -8
  687. package/src/experiences/components/UploadedLogoSearchResultCard/i18n/upload-logo-search-result-card.pt-PT.json +8 -8
  688. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.stories.js +181 -181
  689. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.vue +203 -203
  690. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.de-DE.json +42 -42
  691. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.es-ES.json +42 -42
  692. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.fr-CA.json +42 -42
  693. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.fr-FR.json +42 -42
  694. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.json +42 -42
  695. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.pt-BR.json +42 -42
  696. package/src/experiences/components/WebsitesContextualUpgradeModal/i18n/website-contextual-upgrade-modal.pt-PT.json +42 -42
  697. package/src/experiences/constants/api.js +9 -9
  698. package/src/experiences/constants/error-constants.js +5 -5
  699. package/src/experiences/constants/event-constants.js +18 -18
  700. package/src/experiences/constants/partner-dictionary-constants.js +27 -27
  701. package/src/experiences/constants/rego-source-constants.js +3 -3
  702. package/src/experiences/constants/sell-domain-name-constants.js +4 -4
  703. package/src/experiences/helpers/email-validator.js +5 -5
  704. package/src/experiences/helpers/hex-diff.js +116 -116
  705. package/src/experiences/helpers/tracking.js +5 -5
  706. package/src/experiences/mixins/mediaQueryMixin.js +31 -31
  707. package/src/experiences/mixins/themeMixin.js +22 -22
  708. package/src/experiences/models/websiteContextualModel.ts +11 -11
  709. package/src/themes/base.js +20 -20
  710. package/src/themes/bc.js +95 -95
  711. package/src/themes/bp.js +21 -21
  712. package/src/themes/cd.js +94 -94
  713. package/src/themes/dc.js +84 -84
  714. package/src/themes/dcom.js +106 -106
  715. package/src/themes/themes.js +16 -16
  716. package/src/useSharedLibTranslate.js +131 -131
  717. package/src/viewports.js +51 -51
  718. package/stylelint.config.js +19 -19
  719. package/tailwind.build.js +83 -83
  720. package/tailwind.config.js +36 -36
  721. package/tailwind.themes.js +59 -59
  722. package/vite.config.ts +37 -37
@@ -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) |