@designcrowd/fe-shared-lib 1.8.4-edge-fallback-1 → 1.8.4

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 (165) hide show
  1. package/.claude/skills/playwright-cli/SKILL.md +278 -0
  2. package/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  3. package/.claude/skills/playwright-cli/references/running-code.md +232 -0
  4. package/.claude/skills/playwright-cli/references/session-management.md +169 -0
  5. package/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  6. package/.claude/skills/playwright-cli/references/test-generation.md +88 -0
  7. package/.claude/skills/playwright-cli/references/tracing.md +139 -0
  8. package/.claude/skills/playwright-cli/references/video-recording.md +43 -0
  9. package/dist/css/tailwind-brandCrowd.css +59 -4
  10. package/dist/css/tailwind-brandPage.css +46 -3
  11. package/dist/css/tailwind-crazyDomains.css +59 -4
  12. package/dist/css/tailwind-designCom.css +59 -4
  13. package/dist/css/tailwind-designCrowd.css +59 -4
  14. package/package.json +1 -1
  15. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +12 -8
  16. package/src/atoms/components/VoiceToTextButton/VoiceToTextButton.stories.ts +0 -68
  17. package/src/useVoiceToText.ts +1 -58
  18. package/.storybook-static/assets/Auth-DT64t5h-.css +0 -1
  19. package/.storybook-static/assets/Auth.stories-C6eXcTSu.js +0 -490
  20. package/.storybook-static/assets/AuthCrazyDomains.stories-DGvEoWCa.js +0 -73
  21. package/.storybook-static/assets/Button-5UzSGUF6.css +0 -1
  22. package/.storybook-static/assets/Button-DKdQT6Fq.js +0 -1
  23. package/.storybook-static/assets/ButtonGroup-DDPXuhxR.css +0 -1
  24. package/.storybook-static/assets/ButtonGroup.stories-DlrYMRSk.js +0 -504
  25. package/.storybook-static/assets/ButtonPrimary-Bu6bXb_c.css +0 -1
  26. package/.storybook-static/assets/ButtonPrimary-BvWW6Duz.js +0 -1
  27. package/.storybook-static/assets/Buttons.stories-CKmd6hkZ.js +0 -761
  28. package/.storybook-static/assets/ButtonsCrazyDomains.stories-DdEuOUrn.js +0 -199
  29. package/.storybook-static/assets/Checkbox.mixin-DkHpdvGa.js +0 -1
  30. package/.storybook-static/assets/Checkbox.stories-DPBUC2Mx.js +0 -246
  31. package/.storybook-static/assets/Checktile.stories-ByaFwplD.js +0 -88
  32. package/.storybook-static/assets/CollapsiblePanel.stories-Y6q3gP9j.js +0 -56
  33. package/.storybook-static/assets/ColorPicker.stories-DdxPUB_R.js +0 -73
  34. package/.storybook-static/assets/CopyToClipboardText.stories-J9qndWxd.js +0 -32
  35. package/.storybook-static/assets/Dropdown.stories-1zKPATii.js +0 -159
  36. package/.storybook-static/assets/DropdownItem-BV-BdThU.css +0 -1
  37. package/.storybook-static/assets/DropdownItem-DA6TdpDb.js +0 -1
  38. package/.storybook-static/assets/FormControl.mixin-DcEBwrV3.js +0 -1
  39. package/.storybook-static/assets/HashRouteModal.stories-BGxvqE22.js +0 -60
  40. package/.storybook-static/assets/HelloBar-CYEZR2kQ.js +0 -1
  41. package/.storybook-static/assets/HelloBar.stories-597Kxj0W.js +0 -342
  42. package/.storybook-static/assets/Icon-C17LFvsP.js +0 -145
  43. package/.storybook-static/assets/Icon.stories-B9iAmcTU.js +0 -151
  44. package/.storybook-static/assets/Icon.stories-CR5vT9H7.js +0 -791
  45. package/.storybook-static/assets/Loader-BWGoT_xC.js +0 -1
  46. package/.storybook-static/assets/LogoBusinessBrandColours-CExzox1Z.js +0 -1
  47. package/.storybook-static/assets/LogoBusinessBrandColours-CeAaMKke.css +0 -1
  48. package/.storybook-static/assets/LogoBusinessBrandColours.stories-kuxAH8B8.js +0 -36
  49. package/.storybook-static/assets/Masonry-C2MNiGg0.css +0 -1
  50. package/.storybook-static/assets/Masonry.stories-CTXJLQ_i.js +0 -71
  51. package/.storybook-static/assets/Modal-CGwEIF5R.css +0 -1
  52. package/.storybook-static/assets/Modal-CydTNprT.js +0 -1
  53. package/.storybook-static/assets/Modal.stories-DZiG5NGM.js +0 -345
  54. package/.storybook-static/assets/Notice.stories-ChOj8CWm.js +0 -222
  55. package/.storybook-static/assets/NumberStepper-Blffv09R.css +0 -1
  56. package/.storybook-static/assets/NumberStepper.stories-CVbKJ_oJ.js +0 -64
  57. package/.storybook-static/assets/PaymentConfigList-BpUMV6cp.css +0 -1
  58. package/.storybook-static/assets/PaymentConfigList.stories-DUD7OZBS.js +0 -130
  59. package/.storybook-static/assets/Picture-B8m1I9xN.js +0 -1
  60. package/.storybook-static/assets/Picture.stories-MMzybhJ6.js +0 -119
  61. package/.storybook-static/assets/Pill-DLXZ_TL8.js +0 -1
  62. package/.storybook-static/assets/Pill.stories-DCP7szJm.js +0 -18
  63. package/.storybook-static/assets/PillBar-os4mJV3M.css +0 -1
  64. package/.storybook-static/assets/PillBar.stories-Bry-zQ6f.js +0 -41
  65. package/.storybook-static/assets/Price-C4GZbDSa.js +0 -1
  66. package/.storybook-static/assets/Price.stories-CMHly9V0.js +0 -337
  67. package/.storybook-static/assets/PromoCard.stories-xsbFtADE.js +0 -299
  68. package/.storybook-static/assets/PublishBrandPageModal-Q9-mNG1q.css +0 -1
  69. package/.storybook-static/assets/PublishBrandPageModal.stories-C9XzW_1m.js +0 -324
  70. package/.storybook-static/assets/SearchBar.stories-DaIneOSz.js +0 -12
  71. package/.storybook-static/assets/Select-DnioWQmi.css +0 -1
  72. package/.storybook-static/assets/Select.stories-BmGYB4pw.js +0 -108
  73. package/.storybook-static/assets/SellDomainNameList.fixtures-LC6fjr_b.js +0 -1
  74. package/.storybook-static/assets/SellDomainNameListModal-DH6khE10.css +0 -1
  75. package/.storybook-static/assets/SellDomainNameListModal-ymtVclFP.js +0 -1
  76. package/.storybook-static/assets/SellDomainNameListModal.stories-DvGvylgx.js +0 -71
  77. package/.storybook-static/assets/SellDomainNameListSearchResult-Cpxq0jDA.css +0 -1
  78. package/.storybook-static/assets/SellDomainNameListSearchResult-D-1CrQyf.js +0 -1
  79. package/.storybook-static/assets/SellDomainNameSearchWithResults-bX--zu97.js +0 -1
  80. package/.storybook-static/assets/SellDomainNameSearchWithResults.stories-DRUJjSdH.js +0 -37
  81. package/.storybook-static/assets/SellDomainNameWidget.stories-CC3LX10s.js +0 -36
  82. package/.storybook-static/assets/SignIn-CPjf8_2O.css +0 -1
  83. package/.storybook-static/assets/SignIn-DI0DSDFe.js +0 -1
  84. package/.storybook-static/assets/Slider-Cog2FFdj.css +0 -1
  85. package/.storybook-static/assets/Slider.stories-B2KGwnJy.js +0 -141
  86. package/.storybook-static/assets/SparkleIcon.stories-Dk904hVE.js +0 -547
  87. package/.storybook-static/assets/StarRating-BtKh7pzm.css +0 -1
  88. package/.storybook-static/assets/StarRating.stories-d2mgOuo2.js +0 -45
  89. package/.storybook-static/assets/TabMenu.stories-Cg2yenqj.js +0 -47
  90. package/.storybook-static/assets/TextCopyField-B66NKTk_.js +0 -1
  91. package/.storybook-static/assets/TextCopyField.stories-B4_ZlfLU.js +0 -47
  92. package/.storybook-static/assets/TextInput-CMoUjT_5.js +0 -1
  93. package/.storybook-static/assets/TextInput.stories-oyyxxf3j.js +0 -233
  94. package/.storybook-static/assets/Textarea.stories-BvhZR6K2.js +0 -207
  95. package/.storybook-static/assets/Toggle.stories-yT5-rL2k.js +0 -161
  96. package/.storybook-static/assets/Tooltip-DyXIgFQH.css +0 -1
  97. package/.storybook-static/assets/Tooltip-ZukyujG5.js +0 -1
  98. package/.storybook-static/assets/Tooltip.stories-sJFylRS_.js +0 -953
  99. package/.storybook-static/assets/UploadYourLogoApplication-Dmw8QcH3.css +0 -1
  100. package/.storybook-static/assets/UploadYourLogoApplication.stories-C9AvzHO_.js +0 -186
  101. package/.storybook-static/assets/UploadYourLogoDropzone-B1ffcicv.js +0 -24
  102. package/.storybook-static/assets/UploadYourLogoDropzone-DQqACf-e.css +0 -1
  103. package/.storybook-static/assets/UploadYourLogoDropzone.stories-D1Dt2ord.js +0 -55
  104. package/.storybook-static/assets/UploadedLogoSearchResultCard.stories-D8oF1Yrx.js +0 -79
  105. package/.storybook-static/assets/WebsiteContextualUpgradeModal-8u1zOZrW.css +0 -1
  106. package/.storybook-static/assets/WebsiteContextualUpgradeModal.stories-mtcvWOAg.js +0 -211
  107. package/.storybook-static/assets/_commonjsHelpers-CE1G-McA.js +0 -1
  108. package/.storybook-static/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  109. package/.storybook-static/assets/api-lSJGRrF2.js +0 -1
  110. package/.storybook-static/assets/axe-DrS73Vi2.js +0 -20
  111. package/.storybook-static/assets/brand-crowd-api.client-D45NKshX.js +0 -1
  112. package/.storybook-static/assets/bundled-translations-BoWhEDU_.js +0 -1
  113. package/.storybook-static/assets/bundled-translations.de-DE-C4lqla4O.js +0 -1
  114. package/.storybook-static/assets/bundled-translations.es-ES-BxMIllUH.js +0 -1
  115. package/.storybook-static/assets/bundled-translations.fr-CA-MxZpyz0w.js +0 -1
  116. package/.storybook-static/assets/bundled-translations.fr-FR-N7UPCZVr.js +0 -1
  117. package/.storybook-static/assets/bundled-translations.pt-BR-C8tscYuG.js +0 -1
  118. package/.storybook-static/assets/bundled-translations.pt-PT-Dszj5Xfa.js +0 -1
  119. package/.storybook-static/assets/carousel-BelyIYOK.css +0 -1
  120. package/.storybook-static/assets/carousel.stories-CJw3-Iy6.js +0 -668
  121. package/.storybook-static/assets/event-constants-CMO9VQVu.js +0 -1
  122. package/.storybook-static/assets/iframe-B3A6OXQU.js +0 -1104
  123. package/.storybook-static/assets/index-B-eiLVzF.js +0 -7
  124. package/.storybook-static/assets/index-QquxUozE.js +0 -6
  125. package/.storybook-static/assets/matchers-5TDFFDYO-HJu_DfWo.js +0 -14
  126. package/.storybook-static/assets/mediaQueryMixin-CISNqd93.js +0 -1
  127. package/.storybook-static/assets/preload-helper-PPVm8Dsz.js +0 -1
  128. package/.storybook-static/assets/tracking-ATsLLehC.js +0 -1
  129. package/.storybook-static/css/tailwind-brandCrowd.css +0 -2508
  130. package/.storybook-static/css/tailwind-brandPage.css +0 -2188
  131. package/.storybook-static/css/tailwind-crazyDomains.css +0 -2508
  132. package/.storybook-static/css/tailwind-designCom.css +0 -2508
  133. package/.storybook-static/css/tailwind-designCrowd.css +0 -2508
  134. package/.storybook-static/favicon-wrapper.svg +0 -46
  135. package/.storybook-static/favicon.svg +0 -1
  136. package/.storybook-static/iframe.html +0 -713
  137. package/.storybook-static/index.html +0 -148
  138. package/.storybook-static/index.json +0 -1
  139. package/.storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  140. package/.storybook-static/nunito-sans-bold.woff2 +0 -0
  141. package/.storybook-static/nunito-sans-italic.woff2 +0 -0
  142. package/.storybook-static/nunito-sans-regular.woff2 +0 -0
  143. package/.storybook-static/project.json +0 -1
  144. package/.storybook-static/sb-addons/a11y-1/manager-bundle.js +0 -57
  145. package/.storybook-static/sb-addons/links-2/manager-bundle.js +0 -3
  146. package/.storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +0 -628
  147. package/.storybook-static/sb-addons/themes-3/manager-bundle.js +0 -3
  148. package/.storybook-static/sb-common-assets/favicon-wrapper.svg +0 -46
  149. package/.storybook-static/sb-common-assets/favicon.svg +0 -1
  150. package/.storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  151. package/.storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  152. package/.storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  153. package/.storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  154. package/.storybook-static/sb-manager/globals-runtime.js +0 -77935
  155. package/.storybook-static/sb-manager/globals.js +0 -24
  156. package/.storybook-static/sb-manager/manager-stores.js +0 -23
  157. package/.storybook-static/sb-manager/runtime.js +0 -20404
  158. package/.storybook-static/vite-inject-mocker-entry.js +0 -2
  159. package/force-unsupported-hidden.png +0 -0
  160. package/force-unsupported-with-button.png +0 -0
  161. package/public/css/tailwind-brandCrowd.css +0 -2563
  162. package/public/css/tailwind-brandPage.css +0 -2231
  163. package/public/css/tailwind-crazyDomains.css +0 -2563
  164. package/public/css/tailwind-designCom.css +0 -2563
  165. package/public/css/tailwind-designCrowd.css +0 -2563
@@ -551,6 +551,9 @@ video {
551
551
  .tw-relative {
552
552
  position: relative;
553
553
  }
554
+ .tw-inset-0 {
555
+ inset: 0px;
556
+ }
554
557
  .tw--left-16 {
555
558
  left: -4rem;
556
559
  }
@@ -946,6 +949,9 @@ video {
946
949
  .tw-w-96 {
947
950
  width: 24rem;
948
951
  }
952
+ .tw-w-\[14rem\] {
953
+ width: 14rem;
954
+ }
949
955
  .tw-w-auto {
950
956
  width: auto;
951
957
  }
@@ -1210,6 +1216,9 @@ video {
1210
1216
  .tw-rounded-full {
1211
1217
  border-radius: 9999px;
1212
1218
  }
1219
+ .tw-rounded-lg {
1220
+ border-radius: 0.5rem;
1221
+ }
1213
1222
  .tw-rounded-md {
1214
1223
  border-radius: 0.375rem;
1215
1224
  }
@@ -1394,6 +1403,9 @@ video {
1394
1403
  --tw-border-opacity: 1;
1395
1404
  border-color: rgb(255 255 255 / var(--tw-border-opacity));
1396
1405
  }
1406
+ .tw-border-t-transparent {
1407
+ border-top-color: transparent;
1408
+ }
1397
1409
  .tw-bg-black {
1398
1410
  --tw-bg-opacity: 1;
1399
1411
  background-color: rgb(0 0 0 / var(--tw-bg-opacity));
@@ -1509,6 +1521,9 @@ video {
1509
1521
  --tw-bg-opacity: 1;
1510
1522
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1511
1523
  }
1524
+ .tw-bg-white\/50 {
1525
+ background-color: rgb(255 255 255 / 0.5);
1526
+ }
1512
1527
  .tw-bg-opacity-75 {
1513
1528
  --tw-bg-opacity: 0.75;
1514
1529
  }
@@ -1851,6 +1866,9 @@ video {
1851
1866
  .tw-font-bold {
1852
1867
  font-weight: 700;
1853
1868
  }
1869
+ .tw-font-medium {
1870
+ font-weight: 500;
1871
+ }
1854
1872
  .tw-font-normal {
1855
1873
  font-weight: 400;
1856
1874
  }
@@ -1878,6 +1896,10 @@ video {
1878
1896
  --tw-text-opacity: 1;
1879
1897
  color: rgb(146 38 36 / var(--tw-text-opacity));
1880
1898
  }
1899
+ .tw-text-grayscale-400 {
1900
+ --tw-text-opacity: 1;
1901
+ color: rgb(230 230 230 / var(--tw-text-opacity));
1902
+ }
1881
1903
  .tw-text-grayscale-500 {
1882
1904
  --tw-text-opacity: 1;
1883
1905
  color: rgb(204 204 204 / var(--tw-text-opacity));
@@ -2031,6 +2053,11 @@ video {
2031
2053
  --tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / 0.05));
2032
2054
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2033
2055
  }
2056
+ .tw-transition-all {
2057
+ transition-property: all;
2058
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2059
+ transition-duration: 150ms;
2060
+ }
2034
2061
  .tw-transition-colors {
2035
2062
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
2036
2063
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -2062,6 +2089,10 @@ video {
2062
2089
  --tw-border-opacity: 1;
2063
2090
  border-color: rgb(230 230 230 / var(--tw-border-opacity));
2064
2091
  }
2092
+ .hover\:tw-border-grayscale-500:hover {
2093
+ --tw-border-opacity: 1;
2094
+ border-color: rgb(204 204 204 / var(--tw-border-opacity));
2095
+ }
2065
2096
  .hover\:tw-border-info-600:hover {
2066
2097
  --tw-border-opacity: 1;
2067
2098
  border-color: rgb(14 121 188 / var(--tw-border-opacity));
@@ -2098,6 +2129,14 @@ video {
2098
2129
  --tw-bg-opacity: 1;
2099
2130
  background-color: rgb(230 230 230 / var(--tw-bg-opacity));
2100
2131
  }
2132
+ .hover\:tw-bg-grayscale-500:hover {
2133
+ --tw-bg-opacity: 1;
2134
+ background-color: rgb(204 204 204 / var(--tw-bg-opacity));
2135
+ }
2136
+ .hover\:tw-bg-grayscale-700:hover {
2137
+ --tw-bg-opacity: 1;
2138
+ background-color: rgb(82 93 96 / var(--tw-bg-opacity));
2139
+ }
2101
2140
  .hover\:tw-bg-info-100:hover {
2102
2141
  --tw-bg-opacity: 1;
2103
2142
  background-color: rgb(207 234 251 / var(--tw-bg-opacity));
@@ -2122,6 +2161,10 @@ video {
2122
2161
  --tw-bg-opacity: 1;
2123
2162
  background-color: rgb(14 121 188 / var(--tw-bg-opacity));
2124
2163
  }
2164
+ .hover\:tw-bg-primary-700:hover {
2165
+ --tw-bg-opacity: 1;
2166
+ background-color: rgb(10 91 141 / var(--tw-bg-opacity));
2167
+ }
2125
2168
  .hover\:tw-bg-secondary-100:hover {
2126
2169
  --tw-bg-opacity: 1;
2127
2170
  background-color: rgb(223 226 230 / var(--tw-bg-opacity));
@@ -2138,6 +2181,10 @@ video {
2138
2181
  --tw-bg-opacity: 1;
2139
2182
  background-color: rgb(74 87 103 / var(--tw-bg-opacity));
2140
2183
  }
2184
+ .hover\:tw-bg-secondary-700:hover {
2185
+ --tw-bg-opacity: 1;
2186
+ background-color: rgb(56 65 77 / var(--tw-bg-opacity));
2187
+ }
2141
2188
  .hover\:tw-bg-success-100:hover {
2142
2189
  --tw-bg-opacity: 1;
2143
2190
  background-color: rgb(213 242 223 / var(--tw-bg-opacity));
@@ -2150,10 +2197,6 @@ video {
2150
2197
  --tw-bg-opacity: 1;
2151
2198
  background-color: rgb(194 140 34 / var(--tw-bg-opacity));
2152
2199
  }
2153
- .hover\:tw-text-grayscale-800:hover {
2154
- --tw-text-opacity: 1;
2155
- color: rgb(39 52 56 / var(--tw-text-opacity));
2156
- }
2157
2200
  .hover\:tw-text-primary-600:hover {
2158
2201
  --tw-text-opacity: 1;
2159
2202
  color: rgb(14 121 188 / var(--tw-text-opacity));
@@ -2210,6 +2253,18 @@ video {
2210
2253
  outline: 2px solid transparent;
2211
2254
  outline-offset: 2px;
2212
2255
  }
2256
+ .focus-visible\:tw-ring-2:focus-visible {
2257
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2258
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2259
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2260
+ }
2261
+ .focus-visible\:tw-ring-primary-500:focus-visible {
2262
+ --tw-ring-opacity: 1;
2263
+ --tw-ring-color: rgb(17 151 235 / var(--tw-ring-opacity));
2264
+ }
2265
+ .focus-visible\:tw-ring-offset-2:focus-visible {
2266
+ --tw-ring-offset-width: 2px;
2267
+ }
2213
2268
  .tw-group:hover .group-hover\:tw-text-info-500 {
2214
2269
  --tw-text-opacity: 1;
2215
2270
  color: rgb(17 151 235 / var(--tw-text-opacity));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@designcrowd/fe-shared-lib",
3
- "version": "1.8.4-edge-fallback-1",
3
+ "version": "1.8.4",
4
4
  "scripts": {
5
5
  "start": "run-p storybook watch:translation",
6
6
  "build": "npm run build:css --production",
@@ -1,21 +1,21 @@
1
1
  <template>
2
2
  <div class="sparkle-loader" role="status" :aria-label="alt">
3
3
  <svg :width="size" :height="size" viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg">
4
- <g id="bottom-star">
4
+ <g class="bottom-star">
5
5
  <path
6
6
  d="M39.286883,33.960772c-6.044693,2.417601-7.991402,4.376919-10.393442,10.460772C26.491402,38.337691,24.544694,36.378373,18.5,33.960772C24.544694,31.543171,26.491402,29.583852,28.893441,23.5c2.402041,6.083852,4.348749,8.043171,10.393442,10.460772Z"
7
7
  transform="matrix(1 0 0 1 -5 -6)"
8
8
  fill="#8b5cf6"
9
9
  ></path>
10
10
  </g>
11
- <g id="top-star">
11
+ <g class="top-star">
12
12
  <path
13
13
  d="M39.056802,33.844967c-5.977787,2.390837-7.902948,4.328466-10.278401,10.344967C26.402949,38.173434,24.477787,36.235805,18.5,33.844967C24.477787,31.454131,26.402949,29.516502,28.778401,23.5c2.375453,6.016502,4.300614,7.954131,10.278401,10.344967Z"
14
14
  transform="matrix(1 0 0 1 -5 -61)"
15
15
  fill="#8b5cf6"
16
16
  ></path>
17
17
  </g>
18
- <g id="primary">
18
+ <g class="primary">
19
19
  <path
20
20
  d="M65.653886,47.229432c-13.71205,5.484135-18.128049,9.928695-23.576943,23.729431C36.62805,57.158127,32.212051,52.713567,18.5,47.229432C32.212051,41.745296,36.62805,37.300736,42.076943,23.5c5.448894,13.800736,9.864893,18.245296,23.576943,23.729432Z"
21
21
  transform="matrix(1.595951 0.008736 -0.00868 1.585695 -77.344676 -75.246035)"
@@ -26,14 +26,14 @@
26
26
  <path
27
27
  d="M 0 -90
28
28
  A 90 90 0 0 1 85 -30"
29
- stroke="url(#sparkle-grad-2)"
29
+ :stroke="`url(#${gradientId})`"
30
30
  stroke-width="16"
31
31
  stroke-linecap="round"
32
32
  fill="transparent"
33
33
  ></path>
34
34
  </g>
35
35
  <defs>
36
- <linearGradient id="sparkle-grad-2" x1="0" y1="-90" x2="85" y2="-30" gradientUnits="userSpaceOnUse">
36
+ <linearGradient :id="gradientId" x1="0" y1="-90" x2="85" y2="-30" gradientUnits="userSpaceOnUse">
37
37
  <stop stop-color="#E3E3E3" stop-opacity="0"></stop>
38
38
  <stop offset="0.33" stop-color="#E3E3E3" stop-opacity="0.3"></stop>
39
39
  <stop offset="0.66" stop-color="#8b5cf6" stop-opacity="0.5"></stop>
@@ -45,6 +45,8 @@
45
45
  </template>
46
46
 
47
47
  <script setup lang="ts">
48
+ import { useId } from 'vue';
49
+
48
50
  interface Props {
49
51
  size?: number;
50
52
  alt?: string;
@@ -54,6 +56,8 @@ withDefaults(defineProps<Props>(), {
54
56
  size: 96,
55
57
  alt: 'loading',
56
58
  });
59
+
60
+ const gradientId = useId();
57
61
  </script>
58
62
 
59
63
  <style scoped>
@@ -70,7 +74,7 @@ withDefaults(defineProps<Props>(), {
70
74
  }
71
75
  }
72
76
 
73
- #primary {
77
+ .primary {
74
78
  animation: ai-loader-primary 2000ms infinite ease-in-out;
75
79
  }
76
80
 
@@ -86,11 +90,11 @@ withDefaults(defineProps<Props>(), {
86
90
  }
87
91
  }
88
92
 
89
- #top-star {
93
+ .top-star {
90
94
  animation: ai-loader-secondary-top 2000ms infinite ease-in-out;
91
95
  }
92
96
 
93
- #bottom-star {
97
+ .bottom-star {
94
98
  animation: ai-loader-secondary-bottom 2000ms infinite ease-in-out;
95
99
  }
96
100
 
@@ -1,5 +1,4 @@
1
1
  import VoiceToTextButton from './VoiceToTextButton.vue';
2
- import { __setVoiceToTextSessionDisabled } from '../../../useVoiceToText';
3
2
 
4
3
  export default {
5
4
  title: 'Components/VoiceToTextButton',
@@ -241,70 +240,3 @@ export const SideBySide = () => ({
241
240
  SideBySide.story = {
242
241
  name: 'Side by Side Comparison',
243
242
  };
244
-
245
- export const ForceUnsupported = () => ({
246
- components: { VoiceToTextButton },
247
- data() {
248
- return {
249
- // Reactive ping so the button re-renders when we flip the session flag.
250
- // The composable's isSupported is reactive on its own, but the parent
251
- // template uses :key to make the toggle obvious in Storybook.
252
- tick: 0,
253
- };
254
- },
255
- methods: {
256
- forceUnsupported() {
257
- __setVoiceToTextSessionDisabled(true);
258
- this.tick += 1;
259
- },
260
- reset() {
261
- __setVoiceToTextSessionDisabled(false);
262
- this.tick += 1;
263
- },
264
- },
265
- template: `
266
- <div class="tw-min-h-[400px] tw-p-8 tw-flex tw-flex-col tw-items-center tw-justify-center tw-bg-white">
267
- <h3 class="tw-text-grayscale-800 tw-text-lg tw-font-semibold tw-mb-2">Force unsupported preview</h3>
268
- <p class="tw-text-grayscale-600 tw-text-sm tw-mb-6 tw-text-center tw-max-w-md">
269
- Simulates the Edge fallback: after a 'network' SpeechRecognitionError, the composable latches
270
- <code class="tw-bg-grayscale-100 tw-px-1 tw-rounded">isSupported</code> to false for the rest of the session
271
- and the button hides itself. Reset clears the session flag.
272
- </p>
273
-
274
- <div class="tw-flex tw-gap-3 tw-mb-6">
275
- <button
276
- type="button"
277
- @click="forceUnsupported"
278
- class="tw-px-4 tw-py-2 tw-rounded tw-bg-error-500 tw-text-white tw-text-sm hover:tw-bg-error-600"
279
- >
280
- Force unsupported
281
- </button>
282
- <button
283
- type="button"
284
- @click="reset"
285
- class="tw-px-4 tw-py-2 tw-rounded tw-bg-grayscale-200 tw-text-grayscale-800 tw-text-sm hover:tw-bg-grayscale-300"
286
- >
287
- Reset
288
- </button>
289
- </div>
290
-
291
- <div class="tw-w-full tw-max-w-xl tw-bg-grayscale-100 tw-rounded-full tw-px-6 tw-py-3 tw-flex tw-items-center tw-gap-3 tw-border tw-border-grayscale-300 tw-min-h-[64px]">
292
- <input
293
- type="text"
294
- placeholder="Voice input would appear on the right..."
295
- class="tw-flex-1 tw-bg-transparent tw-border-none tw-text-grayscale-800 tw-placeholder-grayscale-500 focus:tw-outline-none tw-text-base"
296
- />
297
- <VoiceToTextButton :key="tick" variant="light" size="md" />
298
- </div>
299
-
300
- <p class="tw-text-grayscale-500 tw-text-xs tw-mt-4">
301
- Tip: open DevTools → Application → Session Storage to see the
302
- <code class="tw-bg-grayscale-100 tw-px-1 tw-rounded">fe-shared-lib:voice-to-text-disabled</code> key.
303
- </p>
304
- </div>
305
- `,
306
- });
307
-
308
- ForceUnsupported.story = {
309
- name: 'Force Unsupported (Edge Fallback)',
310
- };
@@ -30,14 +30,6 @@ let recognition: SpeechRecognition | null = null;
30
30
  let isInitialized = false;
31
31
  let errorClearTimeout: ReturnType<typeof setTimeout> | null = null;
32
32
  let state: VoiceToTextState | null = null;
33
- let sessionDisabled: Ref<boolean> | null = null;
34
-
35
- // Edge ships window.SpeechRecognition but routes it through Microsoft's Online
36
- // Speech service, which is gated by a Windows privacy toggle that's commonly
37
- // off — start() then fires a 'network' error. There's no synchronous capability
38
- // check, so we latch on the first network error and treat the feature as
39
- // unsupported for the rest of the session. See issue #161.
40
- const SESSION_DISABLED_KEY = 'fe-shared-lib:voice-to-text-disabled';
41
33
 
42
34
  // Error message mapping per spec
43
35
  const ERROR_MESSAGES: Record<string, string> = {
@@ -61,43 +53,6 @@ function getState(): VoiceToTextState {
61
53
  return state;
62
54
  }
63
55
 
64
- function getSessionDisabled(): Ref<boolean> {
65
- if (!sessionDisabled) {
66
- let initial = false;
67
- try {
68
- initial = typeof window !== 'undefined' && window.sessionStorage?.getItem(SESSION_DISABLED_KEY) === '1';
69
- } catch {
70
- // sessionStorage can throw in sandboxed iframes / disabled-cookie contexts
71
- }
72
- sessionDisabled = ref(initial);
73
- }
74
- return sessionDisabled;
75
- }
76
-
77
- function setSessionDisabled(disabled: boolean): void {
78
- const flag = getSessionDisabled();
79
- flag.value = disabled;
80
- try {
81
- if (typeof window === 'undefined') return;
82
- if (disabled) {
83
- window.sessionStorage?.setItem(SESSION_DISABLED_KEY, '1');
84
- } else {
85
- window.sessionStorage?.removeItem(SESSION_DISABLED_KEY);
86
- }
87
- } catch {
88
- // ignore storage failures — in-memory flag still applies for this session
89
- }
90
- }
91
-
92
- /**
93
- * Test/Storybook helper: force the session-disabled latch on or off without
94
- * needing a real network error. Not part of the public consumer API.
95
- */
96
- // eslint-disable-next-line no-underscore-dangle
97
- export function __setVoiceToTextSessionDisabled(disabled: boolean): void {
98
- setSessionDisabled(disabled);
99
- }
100
-
101
56
  /**
102
57
  * Singleton composable that wraps the Web Speech API (SpeechRecognition).
103
58
  * All calls to useVoiceToText() return the same shared instance.
@@ -112,8 +67,7 @@ export function useVoiceToText(options: UseVoiceToTextOptions = {}): UseVoiceToT
112
67
  const SpeechRecognitionCtor: typeof SpeechRecognition | null =
113
68
  typeof window !== 'undefined' ? window.SpeechRecognition || window.webkitSpeechRecognition : null;
114
69
 
115
- const sessionDisabledRef = getSessionDisabled();
116
- const isSupported = computed(() => !!SpeechRecognitionCtor && !sessionDisabledRef.value);
70
+ const isSupported = computed(() => !!SpeechRecognitionCtor);
117
71
 
118
72
  // Initialize singleton once
119
73
  if (!isInitialized && SpeechRecognitionCtor) {
@@ -144,17 +98,6 @@ export function useVoiceToText(options: UseVoiceToTextOptions = {}): UseVoiceToT
144
98
  return;
145
99
  }
146
100
 
147
- // Latch on first network error: Edge exposes SpeechRecognition but the
148
- // backend doesn't actually work for most users. Hide the feature for the
149
- // rest of the session rather than surfacing a recurring toast.
150
- if (event.error === 'network') {
151
- // eslint-disable-next-line no-console
152
- console.warn('[useVoiceToText] network error — disabling voice input for this session');
153
- isListening.value = false;
154
- setSessionDisabled(true);
155
- return;
156
- }
157
-
158
101
  const message = ERROR_MESSAGES[event.error] || 'An error occurred with speech recognition.';
159
102
  error.value = message;
160
103
 
@@ -1 +0,0 @@
1
- .email-input[data-v-777ace40]{background-image:url(https://dcstatic.com/images/icons/forms/forms-email-58207f9a5c.svg);background-position:top 50% left .5rem}.password-input[data-v-777ace40]{background-image:url(https://dcstatic.com/images/icons/forms/forms-password-ff538cd5e4.svg);background-position:top 50% left .5rem}.tw-pl-10-important[data-v-777ace40]{padding-left:2.5rem!important}.email-input[data-v-91cb4060]{background-image:url(https://dcstatic.com/images/icons/forms/forms-email-58207f9a5c.svg);background-position:top 50% left .5rem}.tw-pl-10-important[data-v-91cb4060]{padding-left:2.5rem!important}.password-input[data-v-524c1521]{background-image:url(https://dcstatic.com/images/icons/forms/forms-password-ff538cd5e4.svg);background-position:top 50% left .5rem}.tw-pl-10-important[data-v-524c1521]{padding-left:2.5rem!important}