@designcrowd/fe-shared-lib 1.5.35 → 1.5.36

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