@designcrowd/fe-shared-lib 1.6.0 → 1.6.2-eng-4039-freemode

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 (185) hide show
  1. package/.github/workflows/claude.yml +72 -0
  2. package/.storybook/main.ts +2 -5
  3. package/CLAUDE.md +78 -55
  4. package/dist/css/tailwind-brandCrowd.css +25 -4
  5. package/dist/css/tailwind-brandPage.css +16 -3
  6. package/dist/css/tailwind-crazyDomains.css +25 -4
  7. package/dist/css/tailwind-designCom.css +25 -4
  8. package/dist/css/tailwind-designCrowd.css +25 -4
  9. package/index.js +2 -0
  10. package/package.json +36 -32
  11. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.stories.js +364 -0
  12. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +296 -0
  13. package/src/atoms/components/Button/variants/ButtonGray.vue +3 -3
  14. package/src/atoms/components/Carousel/Carousel.vue +8 -2
  15. package/src/atoms/components/Icon/Icon.stories.js +5 -7
  16. package/src/atoms/components/Icon/Icon.vue +25 -15
  17. package/src/atoms/components/Icon/icons/crown-alt.vue +5 -0
  18. package/src/atoms/components/Icon/icons/crown.vue +6 -0
  19. package/src/atoms/components/Icon/icons/home-outline.vue +6 -0
  20. package/src/atoms/components/Icon/icons/page-blank.vue +6 -0
  21. package/src/atoms/components/Icon/icons/question-alt.vue +20 -0
  22. package/src/atoms/components/Price/Price.stories.js +42 -21
  23. package/src/experiences/components/AuthFlow/SignIn.vue +10 -3
  24. package/src/experiences/components/AuthFlow/SignUp.vue +1 -1
  25. package/src/experiences/components/SideNavigationPanel/MenuCta.vue +62 -0
  26. package/src/experiences/components/SideNavigationPanel/MenuItem.vue +40 -0
  27. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.stories.js +219 -0
  28. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.vue +48 -0
  29. package/src/experiences/components/SideNavigationPanel/types.ts +7 -0
  30. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue +5 -3
  31. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploader.vue +8 -1
  32. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadingLoader.vue +17 -0
  33. package/src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue +10 -1
  34. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.vue +2 -2
  35. package/tailwind.config.js +1 -1
  36. package/vite.config.ts +4 -0
  37. package/.claude/settings.local.json +0 -56
  38. package/.storybook-static/assets/Auth-DT64t5h-.css +0 -1
  39. package/.storybook-static/assets/Auth.stories-C6eXcTSu.js +0 -490
  40. package/.storybook-static/assets/AuthCrazyDomains.stories-DGvEoWCa.js +0 -73
  41. package/.storybook-static/assets/Button-5UzSGUF6.css +0 -1
  42. package/.storybook-static/assets/Button-DKdQT6Fq.js +0 -1
  43. package/.storybook-static/assets/ButtonGroup-DDPXuhxR.css +0 -1
  44. package/.storybook-static/assets/ButtonGroup.stories-DlrYMRSk.js +0 -504
  45. package/.storybook-static/assets/ButtonPrimary-Bu6bXb_c.css +0 -1
  46. package/.storybook-static/assets/ButtonPrimary-BvWW6Duz.js +0 -1
  47. package/.storybook-static/assets/Buttons.stories-CKmd6hkZ.js +0 -761
  48. package/.storybook-static/assets/ButtonsCrazyDomains.stories-DdEuOUrn.js +0 -199
  49. package/.storybook-static/assets/Checkbox.mixin-DkHpdvGa.js +0 -1
  50. package/.storybook-static/assets/Checkbox.stories-DPBUC2Mx.js +0 -246
  51. package/.storybook-static/assets/Checktile.stories-ByaFwplD.js +0 -88
  52. package/.storybook-static/assets/CollapsiblePanel.stories-Y6q3gP9j.js +0 -56
  53. package/.storybook-static/assets/ColorPicker.stories-DdxPUB_R.js +0 -73
  54. package/.storybook-static/assets/CopyToClipboardText.stories-J9qndWxd.js +0 -32
  55. package/.storybook-static/assets/Dropdown.stories-1zKPATii.js +0 -159
  56. package/.storybook-static/assets/DropdownItem-BV-BdThU.css +0 -1
  57. package/.storybook-static/assets/DropdownItem-DA6TdpDb.js +0 -1
  58. package/.storybook-static/assets/FormControl.mixin-DcEBwrV3.js +0 -1
  59. package/.storybook-static/assets/HashRouteModal.stories-BGxvqE22.js +0 -60
  60. package/.storybook-static/assets/HelloBar-CYEZR2kQ.js +0 -1
  61. package/.storybook-static/assets/HelloBar.stories-597Kxj0W.js +0 -342
  62. package/.storybook-static/assets/Icon-C17LFvsP.js +0 -145
  63. package/.storybook-static/assets/Icon.stories-B9iAmcTU.js +0 -151
  64. package/.storybook-static/assets/Icon.stories-CR5vT9H7.js +0 -791
  65. package/.storybook-static/assets/Loader-BWGoT_xC.js +0 -1
  66. package/.storybook-static/assets/LogoBusinessBrandColours-CExzox1Z.js +0 -1
  67. package/.storybook-static/assets/LogoBusinessBrandColours-CeAaMKke.css +0 -1
  68. package/.storybook-static/assets/LogoBusinessBrandColours.stories-kuxAH8B8.js +0 -36
  69. package/.storybook-static/assets/Masonry-C2MNiGg0.css +0 -1
  70. package/.storybook-static/assets/Masonry.stories-CTXJLQ_i.js +0 -71
  71. package/.storybook-static/assets/Modal-CGwEIF5R.css +0 -1
  72. package/.storybook-static/assets/Modal-CydTNprT.js +0 -1
  73. package/.storybook-static/assets/Modal.stories-DZiG5NGM.js +0 -345
  74. package/.storybook-static/assets/Notice.stories-ChOj8CWm.js +0 -222
  75. package/.storybook-static/assets/NumberStepper-Blffv09R.css +0 -1
  76. package/.storybook-static/assets/NumberStepper.stories-CVbKJ_oJ.js +0 -64
  77. package/.storybook-static/assets/PaymentConfigList-BpUMV6cp.css +0 -1
  78. package/.storybook-static/assets/PaymentConfigList.stories-DUD7OZBS.js +0 -130
  79. package/.storybook-static/assets/Picture-B8m1I9xN.js +0 -1
  80. package/.storybook-static/assets/Picture.stories-MMzybhJ6.js +0 -119
  81. package/.storybook-static/assets/Pill-DLXZ_TL8.js +0 -1
  82. package/.storybook-static/assets/Pill.stories-DCP7szJm.js +0 -18
  83. package/.storybook-static/assets/PillBar-os4mJV3M.css +0 -1
  84. package/.storybook-static/assets/PillBar.stories-Bry-zQ6f.js +0 -41
  85. package/.storybook-static/assets/Price-C4GZbDSa.js +0 -1
  86. package/.storybook-static/assets/Price.stories-CMHly9V0.js +0 -337
  87. package/.storybook-static/assets/PromoCard.stories-xsbFtADE.js +0 -299
  88. package/.storybook-static/assets/PublishBrandPageModal-Q9-mNG1q.css +0 -1
  89. package/.storybook-static/assets/PublishBrandPageModal.stories-C9XzW_1m.js +0 -324
  90. package/.storybook-static/assets/SearchBar.stories-DaIneOSz.js +0 -12
  91. package/.storybook-static/assets/Select-DnioWQmi.css +0 -1
  92. package/.storybook-static/assets/Select.stories-BmGYB4pw.js +0 -108
  93. package/.storybook-static/assets/SellDomainNameList.fixtures-LC6fjr_b.js +0 -1
  94. package/.storybook-static/assets/SellDomainNameListModal-DH6khE10.css +0 -1
  95. package/.storybook-static/assets/SellDomainNameListModal-ymtVclFP.js +0 -1
  96. package/.storybook-static/assets/SellDomainNameListModal.stories-DvGvylgx.js +0 -71
  97. package/.storybook-static/assets/SellDomainNameListSearchResult-Cpxq0jDA.css +0 -1
  98. package/.storybook-static/assets/SellDomainNameListSearchResult-D-1CrQyf.js +0 -1
  99. package/.storybook-static/assets/SellDomainNameSearchWithResults-bX--zu97.js +0 -1
  100. package/.storybook-static/assets/SellDomainNameSearchWithResults.stories-DRUJjSdH.js +0 -37
  101. package/.storybook-static/assets/SellDomainNameWidget.stories-CC3LX10s.js +0 -36
  102. package/.storybook-static/assets/SignIn-CPjf8_2O.css +0 -1
  103. package/.storybook-static/assets/SignIn-DI0DSDFe.js +0 -1
  104. package/.storybook-static/assets/Slider-Cog2FFdj.css +0 -1
  105. package/.storybook-static/assets/Slider.stories-B2KGwnJy.js +0 -141
  106. package/.storybook-static/assets/SparkleIcon.stories-Dk904hVE.js +0 -547
  107. package/.storybook-static/assets/StarRating-BtKh7pzm.css +0 -1
  108. package/.storybook-static/assets/StarRating.stories-d2mgOuo2.js +0 -45
  109. package/.storybook-static/assets/TabMenu.stories-Cg2yenqj.js +0 -47
  110. package/.storybook-static/assets/TextCopyField-B66NKTk_.js +0 -1
  111. package/.storybook-static/assets/TextCopyField.stories-B4_ZlfLU.js +0 -47
  112. package/.storybook-static/assets/TextInput-CMoUjT_5.js +0 -1
  113. package/.storybook-static/assets/TextInput.stories-oyyxxf3j.js +0 -233
  114. package/.storybook-static/assets/Textarea.stories-BvhZR6K2.js +0 -207
  115. package/.storybook-static/assets/Toggle.stories-yT5-rL2k.js +0 -161
  116. package/.storybook-static/assets/Tooltip-DyXIgFQH.css +0 -1
  117. package/.storybook-static/assets/Tooltip-ZukyujG5.js +0 -1
  118. package/.storybook-static/assets/Tooltip.stories-sJFylRS_.js +0 -953
  119. package/.storybook-static/assets/UploadYourLogoApplication-Dmw8QcH3.css +0 -1
  120. package/.storybook-static/assets/UploadYourLogoApplication.stories-C9AvzHO_.js +0 -186
  121. package/.storybook-static/assets/UploadYourLogoDropzone-B1ffcicv.js +0 -24
  122. package/.storybook-static/assets/UploadYourLogoDropzone-DQqACf-e.css +0 -1
  123. package/.storybook-static/assets/UploadYourLogoDropzone.stories-D1Dt2ord.js +0 -55
  124. package/.storybook-static/assets/UploadedLogoSearchResultCard.stories-D8oF1Yrx.js +0 -79
  125. package/.storybook-static/assets/WebsiteContextualUpgradeModal-8u1zOZrW.css +0 -1
  126. package/.storybook-static/assets/WebsiteContextualUpgradeModal.stories-mtcvWOAg.js +0 -211
  127. package/.storybook-static/assets/_commonjsHelpers-CE1G-McA.js +0 -1
  128. package/.storybook-static/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  129. package/.storybook-static/assets/api-lSJGRrF2.js +0 -1
  130. package/.storybook-static/assets/axe-DrS73Vi2.js +0 -20
  131. package/.storybook-static/assets/brand-crowd-api.client-D45NKshX.js +0 -1
  132. package/.storybook-static/assets/bundled-translations-BoWhEDU_.js +0 -1
  133. package/.storybook-static/assets/bundled-translations.de-DE-C4lqla4O.js +0 -1
  134. package/.storybook-static/assets/bundled-translations.es-ES-BxMIllUH.js +0 -1
  135. package/.storybook-static/assets/bundled-translations.fr-CA-MxZpyz0w.js +0 -1
  136. package/.storybook-static/assets/bundled-translations.fr-FR-N7UPCZVr.js +0 -1
  137. package/.storybook-static/assets/bundled-translations.pt-BR-C8tscYuG.js +0 -1
  138. package/.storybook-static/assets/bundled-translations.pt-PT-Dszj5Xfa.js +0 -1
  139. package/.storybook-static/assets/carousel-BelyIYOK.css +0 -1
  140. package/.storybook-static/assets/carousel.stories-CJw3-Iy6.js +0 -668
  141. package/.storybook-static/assets/event-constants-CMO9VQVu.js +0 -1
  142. package/.storybook-static/assets/iframe-B3A6OXQU.js +0 -1104
  143. package/.storybook-static/assets/index-B-eiLVzF.js +0 -7
  144. package/.storybook-static/assets/index-QquxUozE.js +0 -6
  145. package/.storybook-static/assets/matchers-5TDFFDYO-HJu_DfWo.js +0 -14
  146. package/.storybook-static/assets/mediaQueryMixin-CISNqd93.js +0 -1
  147. package/.storybook-static/assets/preload-helper-PPVm8Dsz.js +0 -1
  148. package/.storybook-static/assets/tracking-ATsLLehC.js +0 -1
  149. package/.storybook-static/css/tailwind-brandCrowd.css +0 -2508
  150. package/.storybook-static/css/tailwind-brandPage.css +0 -2188
  151. package/.storybook-static/css/tailwind-crazyDomains.css +0 -2508
  152. package/.storybook-static/css/tailwind-designCom.css +0 -2508
  153. package/.storybook-static/css/tailwind-designCrowd.css +0 -2508
  154. package/.storybook-static/favicon-wrapper.svg +0 -46
  155. package/.storybook-static/favicon.svg +0 -1
  156. package/.storybook-static/iframe.html +0 -713
  157. package/.storybook-static/index.html +0 -148
  158. package/.storybook-static/index.json +0 -1
  159. package/.storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  160. package/.storybook-static/nunito-sans-bold.woff2 +0 -0
  161. package/.storybook-static/nunito-sans-italic.woff2 +0 -0
  162. package/.storybook-static/nunito-sans-regular.woff2 +0 -0
  163. package/.storybook-static/project.json +0 -1
  164. package/.storybook-static/sb-addons/a11y-1/manager-bundle.js +0 -57
  165. package/.storybook-static/sb-addons/links-2/manager-bundle.js +0 -3
  166. package/.storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +0 -628
  167. package/.storybook-static/sb-addons/themes-3/manager-bundle.js +0 -3
  168. package/.storybook-static/sb-common-assets/favicon-wrapper.svg +0 -46
  169. package/.storybook-static/sb-common-assets/favicon.svg +0 -1
  170. package/.storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  171. package/.storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  172. package/.storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  173. package/.storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  174. package/.storybook-static/sb-manager/globals-runtime.js +0 -77935
  175. package/.storybook-static/sb-manager/globals.js +0 -24
  176. package/.storybook-static/sb-manager/manager-stores.js +0 -23
  177. package/.storybook-static/sb-manager/runtime.js +0 -20404
  178. package/.storybook-static/vite-inject-mocker-entry.js +0 -2
  179. package/docs/plans/2026-01-30-upgrade-vite7-storybook10-design.md +0 -177
  180. package/docs/plans/2026-01-30-upgrade-vite7-storybook10.md +0 -388
  181. package/public/css/tailwind-brandCrowd.css +0 -2508
  182. package/public/css/tailwind-brandPage.css +0 -2188
  183. package/public/css/tailwind-crazyDomains.css +0 -2508
  184. package/public/css/tailwind-designCom.css +0 -2508
  185. package/public/css/tailwind-designCrowd.css +0 -2508
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@designcrowd/fe-shared-lib",
3
- "version": "1.6.0",
3
+ "version": "1.6.2-eng-4039-freemode",
4
4
  "scripts": {
5
5
  "start": "run-p storybook watch:translation",
6
6
  "build": "npm run build:css --production",
7
- "storybook": "export NODE_ENV=development && npm run storybook:css && npm run storybook:themes && storybook dev -p 6006",
7
+ "storybook": "export NODE_ENV=development && npm run storybook:css && npm run storybook:themes && storybook dev -p 6006 public",
8
8
  "build:css": "node ./tailwind.build.js",
9
9
  "build:storybook": "mkdir -p public && mkdir -p public/css && npm run storybook:css && storybook build -c .storybook -o .storybook-static && cp -R ./public/css .storybook-static/",
10
10
  "bundle-translation": "node ./src/bundleTranslation.js",
@@ -20,62 +20,63 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@nuxtjs/i18n": "9.5.4",
23
- "autoprefixer": "10.4.24",
24
- "axios": "1.13.4",
23
+ "autoprefixer": "10.4.17",
24
+ "axios": "1.6.7",
25
25
  "click-outside-vue3": "4.0.1",
26
- "core-js": "3.48.0",
26
+ "core-js": "3.35.1",
27
27
  "cropperjs": "1.6.1",
28
28
  "dropzone-vue3": "1.0.2",
29
- "fs-extra": "11.3.3",
30
- "i18next": "25.8.0",
29
+ "fs-extra": "11.2.0",
30
+ "i18next": "25.2.1",
31
31
  "lodash.throttle": "4.1.1",
32
- "postcss-loader": "8.2.0",
32
+ "postcss-loader": "8.1.0",
33
33
  "swiper": "11.0.6",
34
34
  "tailwindcss": "3.4.1",
35
- "vite": "^7.3.1",
36
- "vite-plugin-vue-devtools": "^7.7.2",
37
- "vue": "^3.5.26",
38
- "vue-color": "3.3.3",
35
+ "vite": "6.3.5",
36
+ "vite-plugin-eslint": "1.8.1",
37
+ "vite-plugin-vue-devtools": "7.7.0",
38
+ "vue": "3.5.15",
39
+ "vue-color": "3.0.2",
39
40
  "vue-cropperjs": "5.0.0",
40
41
  "vue-observe-visibility": "1.0.0",
41
42
  "vue-router": "4.5.0",
42
43
  "yargs": "17.7.2"
43
44
  },
44
45
  "devDependencies": {
45
- "@storybook/addon-a11y": "10.2.3",
46
- "@storybook/addon-links": "10.2.3",
47
- "@storybook/addon-themes": "10.2.3",
48
- "@storybook/vue3": "10.2.3",
49
- "@storybook/vue3-vite": "10.2.3",
50
- "@vitejs/plugin-vue": "^6.0.3",
51
- "@vue/cli-plugin-eslint": "5.0.9",
52
- "@vue/cli-service": "5.0.9",
46
+ "@storybook/addon-a11y": "9.0.4",
47
+ "@storybook/addon-links": "9.0.4",
48
+ "@storybook/addon-themes": "9.0.4",
49
+ "@storybook/vue3": "9.0.4",
50
+ "@storybook/vue3-vite": "9.0.4",
51
+ "@vitejs/plugin-vue": "5.2.4",
52
+ "@vue/cli-plugin-eslint": "5.0.8",
53
+ "@vue/cli-service": "5.0.8",
53
54
  "@vue/eslint-config-airbnb": "8.0.0",
54
55
  "@vue/eslint-config-prettier": "9.0.0",
55
56
  "@vue/eslint-config-typescript": "12.0.0",
56
- "@vue/test-utils": "2.4.6",
57
+ "@vue/test-utils": "2.4.4",
57
58
  "axios-mock-adapter": "1.22.0",
58
59
  "css-loader": "6.10.0",
59
60
  "cssnano": "6.0.3",
60
61
  "eslint": "8.56.0",
61
- "eslint-plugin-prettier": "5.5.5",
62
- "eslint-plugin-storybook": "10.2.3",
62
+ "eslint-plugin-prettier": "5.1.3",
63
+ "eslint-plugin-storybook": "0.8.0",
63
64
  "eslint-plugin-vue": "9.21.1",
64
- "husky": "9.1.7",
65
+ "husky": "9.0.10",
65
66
  "lint-staged": "15.2.1",
66
- "nodemon": "3.1.11",
67
+ "nodemon": "3.0.3",
67
68
  "npm-run-all": "4.1.5",
68
- "postcss": "8.5.6",
69
- "postcss-cli": "11.0.1",
70
- "postcss-import": "16.1.1",
69
+ "postcss": "8.4.33",
70
+ "postcss-cli": "11.0.0",
71
+ "postcss-import": "16.0.0",
71
72
  "postcss-nested": "6.0.1",
72
- "prettier": "3.8.1",
73
- "storybook": "10.2.3",
73
+ "prettier": "3.2.4",
74
+ "storybook": "9.0.4",
74
75
  "stylelint": "16.2.1",
75
76
  "stylelint-config-standard": "36.0.0",
76
77
  "tailwindcss": "3.4.1",
77
- "ts-loader": "9.5.4",
78
- "typescript": "5.9.3",
78
+ "ts-loader": "9.5.1",
79
+ "typescript": "5.3.3",
79
80
  "vue-style-loader": "4.1.3",
80
81
  "yargs": "17.7.2"
81
82
  },
@@ -107,5 +108,8 @@
107
108
  "./src/*.js": {
108
109
  "import": "./src/*.js"
109
110
  }
111
+ },
112
+ "overrides": {
113
+ "storybook": "$storybook"
110
114
  }
111
115
  }
@@ -0,0 +1,364 @@
1
+ import AiPoweredLoader from './AiPoweredLoader.vue';
2
+
3
+ export default {
4
+ title: 'Components/AiPoweredLoader',
5
+ component: AiPoweredLoader,
6
+ argTypes: {
7
+ size: {
8
+ control: { type: 'number', min: 16, max: 200, step: 8 },
9
+ description: 'Size of the loader in pixels (width and height)',
10
+ defaultValue: 96,
11
+ },
12
+ interval: {
13
+ control: { type: 'range', min: 50, max: 500, step: 50 },
14
+ description: 'Animation frame interval in milliseconds',
15
+ defaultValue: 150,
16
+ },
17
+ alt: {
18
+ control: 'text',
19
+ description: 'Alternative text for accessibility',
20
+ defaultValue: 'loading',
21
+ },
22
+ },
23
+ };
24
+
25
+ // Default story
26
+ export const Default = (args) => ({
27
+ components: { AiPoweredLoader },
28
+ setup() {
29
+ return { args };
30
+ },
31
+ template: '<AiPoweredLoader v-bind="args" />',
32
+ });
33
+
34
+ Default.args = {
35
+ size: 96,
36
+ interval: 150,
37
+ alt: 'loading',
38
+ };
39
+
40
+ // Size variations story
41
+ export const SizeVariations = () => ({
42
+ components: { AiPoweredLoader },
43
+ template: `
44
+ <div class="tw-flex tw-gap-8 tw-items-center tw-p-6">
45
+ <div class="tw-text-center">
46
+ <AiPoweredLoader :size="48" alt="Small loader" />
47
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Small (48px)</p>
48
+ </div>
49
+ <div class="tw-text-center">
50
+ <AiPoweredLoader :size="64" alt="Medium-small loader" />
51
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Medium-Small (64px)</p>
52
+ </div>
53
+ <div class="tw-text-center">
54
+ <AiPoweredLoader :size="96" alt="Default loader" />
55
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Default (96px)</p>
56
+ </div>
57
+ <div class="tw-text-center">
58
+ <AiPoweredLoader :size="128" alt="Large loader" />
59
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Large (128px)</p>
60
+ </div>
61
+ <div class="tw-text-center">
62
+ <AiPoweredLoader :size="160" alt="Extra large loader" />
63
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Extra Large (160px)</p>
64
+ </div>
65
+ </div>
66
+ `,
67
+ });
68
+
69
+ SizeVariations.story = {
70
+ name: 'Size Variations',
71
+ };
72
+
73
+ // Speed variations story
74
+ export const SpeedVariations = () => ({
75
+ components: { AiPoweredLoader },
76
+ template: `
77
+ <div class="tw-p-6">
78
+ <h3 class="tw-text-lg tw-font-bold tw-mb-4">Animation Speed Variations</h3>
79
+ <div class="tw-flex tw-gap-8 tw-items-center">
80
+ <div class="tw-text-center">
81
+ <AiPoweredLoader :interval="75" alt="Fast animation" />
82
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Fast (75ms)</p>
83
+ </div>
84
+ <div class="tw-text-center">
85
+ <AiPoweredLoader :interval="150" alt="Normal animation" />
86
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Normal (150ms)</p>
87
+ </div>
88
+ <div class="tw-text-center">
89
+ <AiPoweredLoader :interval="300" alt="Slow animation" />
90
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Slow (300ms)</p>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ `,
95
+ });
96
+
97
+ SpeedVariations.story = {
98
+ name: 'Animation Speed',
99
+ };
100
+
101
+ // Common use cases story
102
+ export const CommonUseCases = () => ({
103
+ components: { AiPoweredLoader },
104
+ template: `
105
+ <div class="tw-p-6 tw-space-y-8">
106
+ <!-- Inline loader -->
107
+ <div class="tw-border tw-rounded-lg tw-p-4">
108
+ <h4 class="tw-text-md tw-font-semibold tw-mb-3">Inline Button Loader</h4>
109
+ <div class="tw-flex tw-items-center tw-gap-3">
110
+ <button class="tw-px-4 tw-py-2 tw-bg-primary-500 tw-text-white tw-rounded tw-flex tw-items-center tw-gap-2">
111
+ <AiPoweredLoader :size="20" :interval="100" alt="Processing" />
112
+ Processing...
113
+ </button>
114
+ </div>
115
+ </div>
116
+
117
+ <!-- Card loader -->
118
+ <div class="tw-border tw-rounded-lg tw-p-4">
119
+ <h4 class="tw-text-md tw-font-semibold tw-mb-3">Card Loading State</h4>
120
+ <div class="tw-bg-gray-50 tw-rounded tw-p-6 tw-flex tw-flex-col tw-items-center tw-justify-center tw-min-h-[200px]">
121
+ <AiPoweredLoader :size="80" alt="Loading content" />
122
+ <p class="tw-mt-4 tw-text-gray-600">Loading your content...</p>
123
+ </div>
124
+ </div>
125
+
126
+ <!-- Page loader -->
127
+ <div class="tw-border tw-rounded-lg tw-p-4">
128
+ <h4 class="tw-text-md tw-font-semibold tw-mb-3">Full Page Loader</h4>
129
+ <div class="tw-bg-white tw-rounded tw-p-12 tw-flex tw-flex-col tw-items-center tw-justify-center tw-min-h-[300px] tw-border-2 tw-border-dashed tw-border-gray-300">
130
+ <AiPoweredLoader :size="120" alt="Loading page" />
131
+ <p class="tw-mt-6 tw-text-xl tw-text-gray-700">AI is working its magic...</p>
132
+ <p class="tw-text-sm tw-text-gray-500 tw-mt-2">This may take a few moments</p>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ `,
137
+ });
138
+
139
+ CommonUseCases.story = {
140
+ name: 'Common Use Cases',
141
+ };
142
+
143
+ // Interactive size control story
144
+ export const InteractiveSize = () => ({
145
+ components: { AiPoweredLoader },
146
+ data() {
147
+ return {
148
+ currentSize: 96,
149
+ currentInterval: 150,
150
+ };
151
+ },
152
+ template: `
153
+ <div class="tw-p-6">
154
+ <h3 class="tw-text-lg tw-font-bold tw-mb-4">Interactive Size Control</h3>
155
+
156
+ <!-- Controls -->
157
+ <div class="tw-mb-6 tw-space-y-4">
158
+ <div class="tw-flex tw-items-center tw-gap-4">
159
+ <label class="tw-text-sm tw-font-medium tw-w-20">Size:</label>
160
+ <input
161
+ type="range"
162
+ min="32"
163
+ max="200"
164
+ step="8"
165
+ v-model="currentSize"
166
+ class="tw-flex-1 tw-max-w-xs"
167
+ />
168
+ <span class="tw-text-sm tw-text-gray-600 tw-w-16">{{ currentSize }}px</span>
169
+ </div>
170
+
171
+ <div class="tw-flex tw-items-center tw-gap-4">
172
+ <label class="tw-text-sm tw-font-medium tw-w-20">Speed:</label>
173
+ <input
174
+ type="range"
175
+ min="50"
176
+ max="500"
177
+ step="25"
178
+ v-model="currentInterval"
179
+ class="tw-flex-1 tw-max-w-xs"
180
+ />
181
+ <span class="tw-text-sm tw-text-gray-600 tw-w-16">{{ currentInterval }}ms</span>
182
+ </div>
183
+ </div>
184
+
185
+ <!-- Preview -->
186
+ <div class="tw-flex tw-items-center tw-justify-center tw-p-8 tw-bg-gray-50 tw-rounded-lg">
187
+ <AiPoweredLoader
188
+ :size="currentSize"
189
+ :interval="currentInterval"
190
+ alt="Interactive loader preview"
191
+ />
192
+ </div>
193
+
194
+ <p class="tw-text-sm tw-text-gray-600 tw-mt-4">
195
+ Use the sliders above to adjust the loader size and animation speed in real-time.
196
+ </p>
197
+ </div>
198
+ `,
199
+ });
200
+
201
+ InteractiveSize.story = {
202
+ name: 'Interactive Controls',
203
+ };
204
+
205
+ // Comparison with traditional loader story
206
+ export const LoaderComparison = () => ({
207
+ components: { AiPoweredLoader },
208
+ template: `
209
+ <div class="tw-p-6">
210
+ <h3 class="tw-text-lg tw-font-bold tw-mb-6">AI-Powered vs Traditional Loaders</h3>
211
+
212
+ <div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-8">
213
+ <!-- AI Powered Loader -->
214
+ <div class="tw-border tw-rounded-lg tw-p-6 tw-text-center">
215
+ <h4 class="tw-text-md tw-font-semibold tw-mb-4 tw-text-purple-600">AI-Powered Loader</h4>
216
+ <div class="tw-flex tw-justify-center tw-mb-4">
217
+ <AiPoweredLoader :size="96" alt="AI-powered loader" />
218
+ </div>
219
+ <ul class="tw-text-sm tw-text-gray-600 tw-space-y-1 tw-text-left">
220
+ <li>• Modern sparkle animation</li>
221
+ <li>• Customizable size</li>
222
+ <li>• Smooth gradient transitions</li>
223
+ <li>• Configurable speed</li>
224
+ <li>• Accessibility support</li>
225
+ </ul>
226
+ </div>
227
+
228
+ <!-- Traditional Loader -->
229
+ <div class="tw-border tw-rounded-lg tw-p-6 tw-text-center">
230
+ <h4 class="tw-text-md tw-font-semibold tw-mb-4 tw-text-gray-600">Traditional GIF Loader</h4>
231
+ <div class="tw-flex tw-justify-center tw-mb-4">
232
+ <img
233
+ src="https://dcstatic.com/images/brandcrowd/on-boarding/loading/preloader-1-d1cc0b885f.gif"
234
+ alt="Traditional loading GIF"
235
+ class="tw-block"
236
+ style="width: 96px; height: auto;"
237
+ />
238
+ </div>
239
+ <ul class="tw-text-sm tw-text-gray-600 tw-space-y-1 tw-text-left">
240
+ <li>• Fixed GIF animation</li>
241
+ <li>• Static sizing</li>
242
+ <li>• Limited customization</li>
243
+ <li>• Larger file size</li>
244
+ <li>• Less modern appearance</li>
245
+ </ul>
246
+ </div>
247
+ </div>
248
+
249
+ <div class="tw-mt-6 tw-p-4 tw-bg-purple-50 tw-rounded-lg">
250
+ <p class="tw-text-sm tw-text-purple-800">
251
+ <strong>✨ Pro Tip:</strong> The AI-Powered Loader provides better performance, smaller bundle size,
252
+ and complete customization while maintaining a modern, engaging user experience.
253
+ </p>
254
+ </div>
255
+ </div>
256
+ `,
257
+ });
258
+
259
+ LoaderComparison.story = {
260
+ name: 'Loader Comparison',
261
+ };
262
+
263
+ // Showcase story
264
+ export const Showcase = () => ({
265
+ components: { AiPoweredLoader },
266
+ template: `
267
+ <div class="tw-p-6">
268
+ <h3 class="tw-text-lg tw-font-bold tw-mb-4">AI-Powered Loader Showcase</h3>
269
+
270
+ <div class="tw-space-y-8">
271
+ <!-- Size Showcase -->
272
+ <div class="tw-border tw-rounded-lg tw-p-6">
273
+ <h4 class="tw-text-md tw-font-semibold tw-mb-4">Size Range</h4>
274
+ <div class="tw-flex tw-gap-6 tw-items-end tw-justify-center">
275
+ <div class="tw-text-center">
276
+ <AiPoweredLoader :size="32" alt="Tiny loader" />
277
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">32px</p>
278
+ </div>
279
+ <div class="tw-text-center">
280
+ <AiPoweredLoader :size="48" alt="Small loader" />
281
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">48px</p>
282
+ </div>
283
+ <div class="tw-text-center">
284
+ <AiPoweredLoader :size="64" alt="Medium loader" />
285
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">64px</p>
286
+ </div>
287
+ <div class="tw-text-center">
288
+ <AiPoweredLoader :size="96" alt="Default loader" />
289
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">96px (default)</p>
290
+ </div>
291
+ <div class="tw-text-center">
292
+ <AiPoweredLoader :size="128" alt="Large loader" />
293
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">128px</p>
294
+ </div>
295
+ <div class="tw-text-center">
296
+ <AiPoweredLoader :size="180" alt="Extra large loader" />
297
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">180px</p>
298
+ </div>
299
+ </div>
300
+ </div>
301
+
302
+ <!-- Speed Showcase -->
303
+ <div class="tw-border tw-rounded-lg tw-p-6">
304
+ <h4 class="tw-text-md tw-font-semibold tw-mb-4">Animation Speeds</h4>
305
+ <div class="tw-flex tw-gap-8 tw-items-center tw-justify-center">
306
+ <div class="tw-text-center">
307
+ <AiPoweredLoader :size="80" :interval="50" alt="Very fast loader" />
308
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Very Fast (50ms)</p>
309
+ </div>
310
+ <div class="tw-text-center">
311
+ <AiPoweredLoader :size="80" :interval="100" alt="Fast loader" />
312
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Fast (100ms)</p>
313
+ </div>
314
+ <div class="tw-text-center">
315
+ <AiPoweredLoader :size="80" :interval="150" alt="Normal loader" />
316
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Normal (150ms)</p>
317
+ </div>
318
+ <div class="tw-text-center">
319
+ <AiPoweredLoader :size="80" :interval="250" alt="Slow loader" />
320
+ <p class="tw-text-xs tw-mt-2 tw-text-gray-600">Slow (250ms)</p>
321
+ </div>
322
+ </div>
323
+ </div>
324
+
325
+ <!-- Context Examples -->
326
+ <div class="tw-border tw-rounded-lg tw-p-6">
327
+ <h4 class="tw-text-md tw-font-semibold tw-mb-4">Real-World Examples</h4>
328
+ <div class="tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6">
329
+ <!-- Button context -->
330
+ <div class="tw-bg-gray-50 tw-p-4 tw-rounded tw-text-center">
331
+ <p class="tw-text-sm tw-font-medium tw-mb-3">Button Context</p>
332
+ <button class="tw-px-4 tw-py-2 tw-bg-primary-500 tw-text-white tw-rounded tw-flex tw-items-center tw-gap-2 tw-mx-auto">
333
+ <AiPoweredLoader :size="18" :interval="120" alt="Button loading" />
334
+ Loading...
335
+ </button>
336
+ </div>
337
+
338
+ <!-- Card context -->
339
+ <div class="tw-bg-gray-50 tw-p-4 tw-rounded tw-text-center">
340
+ <p class="tw-text-sm tw-font-medium tw-mb-3">Card Loading</p>
341
+ <div class="tw-bg-white tw-p-4 tw-rounded tw-shadow-sm">
342
+ <AiPoweredLoader :size="60" alt="Card loading" />
343
+ <p class="tw-text-sm tw-text-gray-600 tw-mt-2">Loading data...</p>
344
+ </div>
345
+ </div>
346
+
347
+ <!-- Full screen context -->
348
+ <div class="tw-bg-gray-50 tw-p-4 tw-rounded tw-text-center">
349
+ <p class="tw-text-sm tw-font-medium tw-mb-3">Page Loading</p>
350
+ <div class="tw-bg-white tw-p-6 tw-rounded tw-shadow-sm tw-min-h-[120px] tw-flex tw-flex-col tw-justify-center">
351
+ <AiPoweredLoader :size="80" alt="Page loading" />
352
+ <p class="tw-text-sm tw-text-gray-600 tw-mt-3">Please wait...</p>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ </div>
359
+ `,
360
+ });
361
+
362
+ Showcase.story = {
363
+ name: 'Complete Showcase',
364
+ };