@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.
- package/.claude/skills/playwright-cli/SKILL.md +278 -0
- package/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.claude/skills/playwright-cli/references/running-code.md +232 -0
- package/.claude/skills/playwright-cli/references/session-management.md +169 -0
- package/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/.claude/skills/playwright-cli/references/test-generation.md +88 -0
- package/.claude/skills/playwright-cli/references/tracing.md +139 -0
- package/.claude/skills/playwright-cli/references/video-recording.md +43 -0
- package/dist/css/tailwind-brandCrowd.css +59 -4
- package/dist/css/tailwind-brandPage.css +46 -3
- package/dist/css/tailwind-crazyDomains.css +59 -4
- package/dist/css/tailwind-designCom.css +59 -4
- package/dist/css/tailwind-designCrowd.css +59 -4
- package/package.json +1 -1
- package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +12 -8
- package/src/atoms/components/VoiceToTextButton/VoiceToTextButton.stories.ts +0 -68
- package/src/useVoiceToText.ts +1 -58
- package/.storybook-static/assets/Auth-DT64t5h-.css +0 -1
- package/.storybook-static/assets/Auth.stories-C6eXcTSu.js +0 -490
- package/.storybook-static/assets/AuthCrazyDomains.stories-DGvEoWCa.js +0 -73
- package/.storybook-static/assets/Button-5UzSGUF6.css +0 -1
- package/.storybook-static/assets/Button-DKdQT6Fq.js +0 -1
- package/.storybook-static/assets/ButtonGroup-DDPXuhxR.css +0 -1
- package/.storybook-static/assets/ButtonGroup.stories-DlrYMRSk.js +0 -504
- package/.storybook-static/assets/ButtonPrimary-Bu6bXb_c.css +0 -1
- package/.storybook-static/assets/ButtonPrimary-BvWW6Duz.js +0 -1
- package/.storybook-static/assets/Buttons.stories-CKmd6hkZ.js +0 -761
- package/.storybook-static/assets/ButtonsCrazyDomains.stories-DdEuOUrn.js +0 -199
- package/.storybook-static/assets/Checkbox.mixin-DkHpdvGa.js +0 -1
- package/.storybook-static/assets/Checkbox.stories-DPBUC2Mx.js +0 -246
- package/.storybook-static/assets/Checktile.stories-ByaFwplD.js +0 -88
- package/.storybook-static/assets/CollapsiblePanel.stories-Y6q3gP9j.js +0 -56
- package/.storybook-static/assets/ColorPicker.stories-DdxPUB_R.js +0 -73
- package/.storybook-static/assets/CopyToClipboardText.stories-J9qndWxd.js +0 -32
- package/.storybook-static/assets/Dropdown.stories-1zKPATii.js +0 -159
- package/.storybook-static/assets/DropdownItem-BV-BdThU.css +0 -1
- package/.storybook-static/assets/DropdownItem-DA6TdpDb.js +0 -1
- package/.storybook-static/assets/FormControl.mixin-DcEBwrV3.js +0 -1
- package/.storybook-static/assets/HashRouteModal.stories-BGxvqE22.js +0 -60
- package/.storybook-static/assets/HelloBar-CYEZR2kQ.js +0 -1
- package/.storybook-static/assets/HelloBar.stories-597Kxj0W.js +0 -342
- package/.storybook-static/assets/Icon-C17LFvsP.js +0 -145
- package/.storybook-static/assets/Icon.stories-B9iAmcTU.js +0 -151
- package/.storybook-static/assets/Icon.stories-CR5vT9H7.js +0 -791
- package/.storybook-static/assets/Loader-BWGoT_xC.js +0 -1
- package/.storybook-static/assets/LogoBusinessBrandColours-CExzox1Z.js +0 -1
- package/.storybook-static/assets/LogoBusinessBrandColours-CeAaMKke.css +0 -1
- package/.storybook-static/assets/LogoBusinessBrandColours.stories-kuxAH8B8.js +0 -36
- package/.storybook-static/assets/Masonry-C2MNiGg0.css +0 -1
- package/.storybook-static/assets/Masonry.stories-CTXJLQ_i.js +0 -71
- package/.storybook-static/assets/Modal-CGwEIF5R.css +0 -1
- package/.storybook-static/assets/Modal-CydTNprT.js +0 -1
- package/.storybook-static/assets/Modal.stories-DZiG5NGM.js +0 -345
- package/.storybook-static/assets/Notice.stories-ChOj8CWm.js +0 -222
- package/.storybook-static/assets/NumberStepper-Blffv09R.css +0 -1
- package/.storybook-static/assets/NumberStepper.stories-CVbKJ_oJ.js +0 -64
- package/.storybook-static/assets/PaymentConfigList-BpUMV6cp.css +0 -1
- package/.storybook-static/assets/PaymentConfigList.stories-DUD7OZBS.js +0 -130
- package/.storybook-static/assets/Picture-B8m1I9xN.js +0 -1
- package/.storybook-static/assets/Picture.stories-MMzybhJ6.js +0 -119
- package/.storybook-static/assets/Pill-DLXZ_TL8.js +0 -1
- package/.storybook-static/assets/Pill.stories-DCP7szJm.js +0 -18
- package/.storybook-static/assets/PillBar-os4mJV3M.css +0 -1
- package/.storybook-static/assets/PillBar.stories-Bry-zQ6f.js +0 -41
- package/.storybook-static/assets/Price-C4GZbDSa.js +0 -1
- package/.storybook-static/assets/Price.stories-CMHly9V0.js +0 -337
- package/.storybook-static/assets/PromoCard.stories-xsbFtADE.js +0 -299
- package/.storybook-static/assets/PublishBrandPageModal-Q9-mNG1q.css +0 -1
- package/.storybook-static/assets/PublishBrandPageModal.stories-C9XzW_1m.js +0 -324
- package/.storybook-static/assets/SearchBar.stories-DaIneOSz.js +0 -12
- package/.storybook-static/assets/Select-DnioWQmi.css +0 -1
- package/.storybook-static/assets/Select.stories-BmGYB4pw.js +0 -108
- package/.storybook-static/assets/SellDomainNameList.fixtures-LC6fjr_b.js +0 -1
- package/.storybook-static/assets/SellDomainNameListModal-DH6khE10.css +0 -1
- package/.storybook-static/assets/SellDomainNameListModal-ymtVclFP.js +0 -1
- package/.storybook-static/assets/SellDomainNameListModal.stories-DvGvylgx.js +0 -71
- package/.storybook-static/assets/SellDomainNameListSearchResult-Cpxq0jDA.css +0 -1
- package/.storybook-static/assets/SellDomainNameListSearchResult-D-1CrQyf.js +0 -1
- package/.storybook-static/assets/SellDomainNameSearchWithResults-bX--zu97.js +0 -1
- package/.storybook-static/assets/SellDomainNameSearchWithResults.stories-DRUJjSdH.js +0 -37
- package/.storybook-static/assets/SellDomainNameWidget.stories-CC3LX10s.js +0 -36
- package/.storybook-static/assets/SignIn-CPjf8_2O.css +0 -1
- package/.storybook-static/assets/SignIn-DI0DSDFe.js +0 -1
- package/.storybook-static/assets/Slider-Cog2FFdj.css +0 -1
- package/.storybook-static/assets/Slider.stories-B2KGwnJy.js +0 -141
- package/.storybook-static/assets/SparkleIcon.stories-Dk904hVE.js +0 -547
- package/.storybook-static/assets/StarRating-BtKh7pzm.css +0 -1
- package/.storybook-static/assets/StarRating.stories-d2mgOuo2.js +0 -45
- package/.storybook-static/assets/TabMenu.stories-Cg2yenqj.js +0 -47
- package/.storybook-static/assets/TextCopyField-B66NKTk_.js +0 -1
- package/.storybook-static/assets/TextCopyField.stories-B4_ZlfLU.js +0 -47
- package/.storybook-static/assets/TextInput-CMoUjT_5.js +0 -1
- package/.storybook-static/assets/TextInput.stories-oyyxxf3j.js +0 -233
- package/.storybook-static/assets/Textarea.stories-BvhZR6K2.js +0 -207
- package/.storybook-static/assets/Toggle.stories-yT5-rL2k.js +0 -161
- package/.storybook-static/assets/Tooltip-DyXIgFQH.css +0 -1
- package/.storybook-static/assets/Tooltip-ZukyujG5.js +0 -1
- package/.storybook-static/assets/Tooltip.stories-sJFylRS_.js +0 -953
- package/.storybook-static/assets/UploadYourLogoApplication-Dmw8QcH3.css +0 -1
- package/.storybook-static/assets/UploadYourLogoApplication.stories-C9AvzHO_.js +0 -186
- package/.storybook-static/assets/UploadYourLogoDropzone-B1ffcicv.js +0 -24
- package/.storybook-static/assets/UploadYourLogoDropzone-DQqACf-e.css +0 -1
- package/.storybook-static/assets/UploadYourLogoDropzone.stories-D1Dt2ord.js +0 -55
- package/.storybook-static/assets/UploadedLogoSearchResultCard.stories-D8oF1Yrx.js +0 -79
- package/.storybook-static/assets/WebsiteContextualUpgradeModal-8u1zOZrW.css +0 -1
- package/.storybook-static/assets/WebsiteContextualUpgradeModal.stories-mtcvWOAg.js +0 -211
- package/.storybook-static/assets/_commonjsHelpers-CE1G-McA.js +0 -1
- package/.storybook-static/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
- package/.storybook-static/assets/api-lSJGRrF2.js +0 -1
- package/.storybook-static/assets/axe-DrS73Vi2.js +0 -20
- package/.storybook-static/assets/brand-crowd-api.client-D45NKshX.js +0 -1
- package/.storybook-static/assets/bundled-translations-BoWhEDU_.js +0 -1
- package/.storybook-static/assets/bundled-translations.de-DE-C4lqla4O.js +0 -1
- package/.storybook-static/assets/bundled-translations.es-ES-BxMIllUH.js +0 -1
- package/.storybook-static/assets/bundled-translations.fr-CA-MxZpyz0w.js +0 -1
- package/.storybook-static/assets/bundled-translations.fr-FR-N7UPCZVr.js +0 -1
- package/.storybook-static/assets/bundled-translations.pt-BR-C8tscYuG.js +0 -1
- package/.storybook-static/assets/bundled-translations.pt-PT-Dszj5Xfa.js +0 -1
- package/.storybook-static/assets/carousel-BelyIYOK.css +0 -1
- package/.storybook-static/assets/carousel.stories-CJw3-Iy6.js +0 -668
- package/.storybook-static/assets/event-constants-CMO9VQVu.js +0 -1
- package/.storybook-static/assets/iframe-B3A6OXQU.js +0 -1104
- package/.storybook-static/assets/index-B-eiLVzF.js +0 -7
- package/.storybook-static/assets/index-QquxUozE.js +0 -6
- package/.storybook-static/assets/matchers-5TDFFDYO-HJu_DfWo.js +0 -14
- package/.storybook-static/assets/mediaQueryMixin-CISNqd93.js +0 -1
- package/.storybook-static/assets/preload-helper-PPVm8Dsz.js +0 -1
- package/.storybook-static/assets/tracking-ATsLLehC.js +0 -1
- package/.storybook-static/css/tailwind-brandCrowd.css +0 -2508
- package/.storybook-static/css/tailwind-brandPage.css +0 -2188
- package/.storybook-static/css/tailwind-crazyDomains.css +0 -2508
- package/.storybook-static/css/tailwind-designCom.css +0 -2508
- package/.storybook-static/css/tailwind-designCrowd.css +0 -2508
- package/.storybook-static/favicon-wrapper.svg +0 -46
- package/.storybook-static/favicon.svg +0 -1
- package/.storybook-static/iframe.html +0 -713
- package/.storybook-static/index.html +0 -148
- package/.storybook-static/index.json +0 -1
- package/.storybook-static/nunito-sans-bold-italic.woff2 +0 -0
- package/.storybook-static/nunito-sans-bold.woff2 +0 -0
- package/.storybook-static/nunito-sans-italic.woff2 +0 -0
- package/.storybook-static/nunito-sans-regular.woff2 +0 -0
- package/.storybook-static/project.json +0 -1
- package/.storybook-static/sb-addons/a11y-1/manager-bundle.js +0 -57
- package/.storybook-static/sb-addons/links-2/manager-bundle.js +0 -3
- package/.storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +0 -628
- package/.storybook-static/sb-addons/themes-3/manager-bundle.js +0 -3
- package/.storybook-static/sb-common-assets/favicon-wrapper.svg +0 -46
- package/.storybook-static/sb-common-assets/favicon.svg +0 -1
- package/.storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
- package/.storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
- package/.storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
- package/.storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
- package/.storybook-static/sb-manager/globals-runtime.js +0 -77935
- package/.storybook-static/sb-manager/globals.js +0 -24
- package/.storybook-static/sb-manager/manager-stores.js +0 -23
- package/.storybook-static/sb-manager/runtime.js +0 -20404
- package/.storybook-static/vite-inject-mocker-entry.js +0 -2
- package/force-unsupported-hidden.png +0 -0
- package/force-unsupported-with-button.png +0 -0
- package/public/css/tailwind-brandCrowd.css +0 -2563
- package/public/css/tailwind-brandPage.css +0 -2231
- package/public/css/tailwind-crazyDomains.css +0 -2563
- package/public/css/tailwind-designCom.css +0 -2563
- 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,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
|
|
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
|
|
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
|
|
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(
|
|
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="
|
|
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
|
-
|
|
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
|
-
|
|
93
|
+
.top-star {
|
|
90
94
|
animation: ai-loader-secondary-top 2000ms infinite ease-in-out;
|
|
91
95
|
}
|
|
92
96
|
|
|
93
|
-
|
|
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
|
-
};
|
package/src/useVoiceToText.ts
CHANGED
|
@@ -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
|
|
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}
|