|
3 | 3 | // @description Adds the magic of AI to Amazon shopping |
4 | 4 | // @author KudoAI |
5 | 5 | // @namespace https://kudoai.com |
6 | | -// @version 2025.3.30.3 |
| 6 | +// @version 2025.3.30.5 |
7 | 7 | // @license MIT |
8 | 8 | // @icon https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@0fddfc7/assets/images/icons/amazongpt/black-gold-teal/icon48.png |
9 | 9 | // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@0fddfc7/assets/images/icons/amazongpt/black-gold-teal/icon64.png |
|
680 | 680 | modals.draggingModal = event.currentTarget |
681 | 681 | event.preventDefault() // prevent sub-elems like icons being draggable |
682 | 682 | Object.assign(modals.draggingModal.style, { // update styles |
683 | | - transition: '0.1s', willChange: 'transform', transform: 'scale(1.05)' }) |
| 683 | + transform: 'scale(1.05)', willChange: 'transform', |
| 684 | + transition: '0.1s', '-webkit-transition': '0.1s', '-moz-transition': '0.1s', |
| 685 | + '-o-transition': '0.1s', '-ms-transition': '0.1s' |
| 686 | + }) |
684 | 687 | document.body.style.cursor = 'grabbing'; // update cursor |
685 | 688 | [...modals.draggingModal.children] // prevent hover FX if drag lags behind cursor |
686 | 689 | .forEach(child => child.style.pointerEvents = 'none'); |
|
701 | 704 |
|
702 | 705 | mouseup() { // restore styles/pointer events, remove listeners, reset modals.draggingModal |
703 | 706 | Object.assign(modals.draggingModal.style, { // restore styles |
704 | | - cursor: 'inherit', transition: 'inherit', willChange: 'auto', transform: 'scale(1)' }) |
| 707 | + cursor: 'inherit', transform: 'scale(1)', willChange: 'auto', |
| 708 | + transition: 'inherit', '-webkit-transition': 'inherit', '-moz-transition': 'inherit', |
| 709 | + '-o-transition': 'inherit', '-ms-transition': 'inherit' |
| 710 | + }) |
705 | 711 | document.body.style.cursor = ''; // restore cursor |
706 | 712 | [...modals.draggingModal.children] // restore pointer events |
707 | 713 | .forEach(child => child.style.pointerEvents = ''); |
|
1163 | 1169 | document.head.append(this.styles) |
1164 | 1170 | } |
1165 | 1171 | this.styles.innerText = ( |
1166 | | - ':root {' // vars |
1167 | | - + '--transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1),' // for modal fade-in |
1168 | | - + 'transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ;' // for modal move-in |
1169 | | - + '--bg-transition: background-color 0.25s ease !important ;' // for modal bg dim |
1170 | | - + '--btn-transition: transform 0.15s ease ;' // for modal button hover-zoom |
1171 | | - + '--settings-transition: transform 0.1s ease }' // for Settings entry hover-zoom |
| 1172 | + |
| 1173 | + // Vars |
| 1174 | + `:root { |
| 1175 | + --fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */ |
| 1176 | + transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */ |
| 1177 | + --bg-transition: background-color 0.25s ease !important } /* dim */` |
1172 | 1178 |
|
1173 | 1179 | // Main modal styles |
1174 | 1180 | + '@keyframes modal-zoom-fade-out {' |
|
1216 | 1222 | + 'pointer-events: auto ;' // override any disabling from site modals |
1217 | 1223 | + 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port |
1218 | 1224 | + 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align |
1219 | | - + 'transition: var(--bg-transition) ;' // for bg dim |
1220 | | - + '-webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ;' |
1221 | | - + '-o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }' |
| 1225 | + + `transition: var(--bg-transition) ; /* dim */ |
| 1226 | + -webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ; |
| 1227 | + -o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }` |
1222 | 1228 | + '[class*=-modal-bg].animated > div {' |
1223 | 1229 | + 'z-index: 13456 ; opacity: 0.98 ; transform: translateX(0) translateY(0) }' |
1224 | 1230 | + '[class$=-modal] {' // native modals + chatgpt.alert()s |
|
1229 | 1235 | + `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;` |
1230 | 1236 | + `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' } ;` |
1231 | 1237 | + 'transform: translateX(-3px) translateY(7px) ;' // offset to move-in from |
1232 | | - + 'transition: var(--transition) ;' // for fade-in + move-in |
1233 | | - + '-webkit-transition: var(--transition) ; -moz-transition: var(--transition) ;' |
1234 | | - + '-o-transition: var(--transition) ; -ms-transition: var(--transition) }' |
1235 | | - + ( config.fgAnimationsDisabled || env.browser.isMobile ? '' : ( |
1236 | | - '[class$=-modal] button:hover { transform: scale(1.055) }' |
1237 | | - + '[class$=-modal] button { transition: var(--btn-transition) ;' |
1238 | | - + '-webkit-transition: var(--btn-transition) ; -moz-transition: var(--btn-transition) ;' |
1239 | | - + '-o-transition: var(--btn-transition) ; -ms-transition: var(--btn-transition) }' )) |
| 1238 | + + `transition: var(--fg-transition) ; /* fade-in + move-in */ |
| 1239 | + -webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ; |
| 1240 | + -o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) }` |
| 1241 | + + ( config.fgAnimationsDisabled || env.browser.isMobile ? '' : ` |
| 1242 | + [class$=-modal] button:hover { transform: scale(1.055) } |
| 1243 | + [class$=-modal] button { transition: var(--zoom-transition-more) ; |
| 1244 | + -webkit-transition: var(--zoom-transition-more) ; -moz-transition: var(--zoom-transition-more) ; |
| 1245 | + -o-transition: var(--zoom-transition-more) ; -ms-transition: var(--zoom-transition-more) }` ) |
1240 | 1246 |
|
1241 | 1247 | // Glowing modal btns |
1242 | 1248 | + ':root { --glow-color: hsl(186 100% 69%) }' |
|
1294 | 1300 | + 'height: 37px ; padding: 6px 10px 4px ; font-size: 15.5px ; list-style: none ;' |
1295 | 1301 | + `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' } ;` // add separators |
1296 | 1302 | + 'border-radius: 3px ;' // slightly round highlight strip |
1297 | | - + 'transition: var(--settings-transition) ;' // for hover-zoom |
1298 | | - + '-webkit-transition: var(--settings-transition) ; -moz-transition: var(--settings-transition) ;' |
1299 | | - + '-o-transition: var(--settings-transition) ; -ms-transition: var(--settings-transition) }' |
| 1303 | + + `transition: var(--zoom-transition-less) ; |
| 1304 | + -webkit-transition: var(--zoom-transition-less) ; -moz-transition: var(--zoom-transition-less) ; |
| 1305 | + -o-transition: var(--zoom-transition-less) ; -ms-transition: var(--zoom-transition-less) }` |
1300 | 1306 | + `#${app.slug}-settings li.active {` |
1301 | 1307 | + `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' } ;` // for text |
1302 | 1308 | + `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' } ;` // for icons |
|
1750 | 1756 | + '--app-transition: opacity 0.5s ease, transform 0.5s ease,' // for 1st fade-in |
1751 | 1757 | + 'bottom 0.1s cubic-bezier(0,0,0.2,1),' // smoothen Anchor Y min/restore |
1752 | 1758 | + 'width 0.167s cubic-bezier(0,0,0.2,1) ;' // smoothen Anchor X expand/shrink |
1753 | | - + '--btn-transition: transform 0.15s ease,' // for hover-zoom |
| 1759 | + + '--zoom-transition-more: transform 0.15s ease ;' // for button hover-zoom |
| 1760 | + + '--zoom-transition-less: transform 0.1s ease ;' // for Settings entry hover-zoom |
| 1761 | + + '--btn-transition: var(--zoom-transition-more),' // for hover-zoom |
1754 | 1762 | + 'opacity 0.25s ease-in-out ;' // + btn-zoom-fade-out + .app-hover-only shows |
1755 | 1763 | + '--font-size-slider-thumb-transition: transform 0.05s ease ;' // for hover-zoom |
1756 | 1764 | + '--reply-pre-transition: max-height 0.167s cubic-bezier(0, 0, 0.2, 1) ;' // for Anchor changes |
1757 | 1765 | + '--fade-in-less-transition: opacity 0.2s ease }' // used by Font Size slider |
1758 | 1766 |
|
1759 | 1767 | // Animations |
1760 | 1768 | + '.fade-in { opacity: 0 ; transform: translateY(10px) }' |
1761 | | - + '.fade-in-less { opacity: 0 ;' |
1762 | | - + 'transition: var(--fade-in-less-transition) ;' |
1763 | | - + '-webkit-transition: var(--fade-in-less-transition) ;' |
1764 | | - + '-moz-transition: var(--fade-in-less-transition) ;' |
1765 | | - + '-o-transition: var(--fade-in-less-transition) ;' |
1766 | | - + '-ms-transition: var(--fade-in-less-transition) }' |
| 1769 | + + `.fade-in-less { opacity: 0 ; |
| 1770 | + transition: var(--fade-in-less-transition) ; |
| 1771 | + -webkit-transition: var(--fade-in-less-transition) ; |
| 1772 | + -moz-transition: var(--fade-in-less-transition) ; |
| 1773 | + -o-transition: var(--fade-in-less-transition) ; |
| 1774 | + -ms-transition: var(--fade-in-less-transition) }` |
1767 | 1775 | + '.fade-in.active, .fade-in-less.active { opacity: 1 ; transform: translateY(0) }' |
1768 | 1776 | + '@keyframes btn-zoom-fade-out {' |
1769 | 1777 | + '0% { opacity: 1 } 55% { opacity: 0.25 ; transform: scale(1.85) }' |
|
1808 | 1816 | + `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` |
1809 | 1817 | + '.kudoai {' // header byline |
1810 | 1818 | + `position: relative ; bottom: -1px ; margin-left: 8px ; color: #aaa ; |
1811 | | - --transition: 0.15s ease-in-out ; transition: var(--transition) ; |
1812 | | - -webkit-transition: var(--transition) ; -moz-transition: var(--transition) ; |
1813 | | - -o-transition: var(--transition) ; -ms-transition: var(--transition) }` |
| 1819 | + --kudoai-transition: 0.15s ease-in-out ; transition: var(--kudoai-transition) ; |
| 1820 | + -webkit-transition: var(--kudoai-transition) ; -moz-transition: var(--kudoai-transition) ; |
| 1821 | + -o-transition: var(--kudoai-transition) ; -ms-transition: var(--kudoai-transition) }` |
1814 | 1822 | + '.kudoai a, .kudoai a:visited { color: #aaa ; text-decoration: none !important } ' |
1815 | 1823 | + `.kudoai a:hover { |
1816 | | - transition: 0.15s ease-in ; color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` |
| 1824 | + color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }; |
| 1825 | + transition: var(--kudoai-transition) ; |
| 1826 | + -webkit-transition: var(--kudoai-transition) ; -moz-transition: var(--kudoai-transition) ; |
| 1827 | + -o-transition: var(--kudoai-transition) ; -ms-transition: var(--kudoai-transition) }` |
1817 | 1828 | + `#${app.slug}-header-btns { float: right ; margin-top: -2px }` |
1818 | 1829 | + `.${app.slug}-header-btn {` |
1819 | 1830 | + 'float: right ; cursor: pointer ; position: relative ; top: 4px ;' |
|
1895 | 1906 | color: var(--font-color-light-scheme) ; border: none` }; |
1896 | 1907 | ${ config.fgAnimationsDisabled ? '' : // smoothen Anchor mode expand/shrink |
1897 | 1908 | `transition: var(--reply-pre-transition) ; |
1898 | | - -webkit-transition: var(--reply-pre-transition) ; -moz-transition: var(--reply-pre-transition) ; |
1899 | | - -o-transition: var(--reply-pre-transition) ; -ms-transition: var(--reply-pre-transition)` }} |
| 1909 | + -webkit-transition: var(--reply-pre-transition) ; |
| 1910 | + -moz-transition: var(--reply-pre-transition) ; |
| 1911 | + -o-transition: var(--reply-pre-transition) ; |
| 1912 | + -ms-transition: var(--reply-pre-transition)` }} |
1900 | 1913 | #${app.slug} .reply-pre a, #${app.slug} .reply-pre a:visited { color: #4495d4 } |
1901 | 1914 | #${app.slug} .reply-pre a:hover { color: ${ env.ui.app.scheme == 'dark' ? 'white' : '#ea7a28' }} |
1902 | 1915 | code #${app.slug}-copy-btn { position: relative ; top: -6px ; right: -9px } |
|
1939 | 1952 | `--chatbar-inset-shadow: 0 1px 2px rgba(15,17,17,0.1) inset ; |
1940 | 1953 | box-shadow: var(--chatbar-inset-shadow) ; -webkit-box-shadow: var(--chatbar-inset-shadow) ; |
1941 | 1954 | -moz-box-shadow: var(--chatbar-inset-shadow) ;` } |
1942 | | - transition: box-shadow 0.15s ease } |
| 1955 | + transition: box-shadow 0.15s ease ; |
| 1956 | + -webkit-transition: box-shadow 0.15s ease ; -moz-transition: box-shadow 0.15s ease ; |
| 1957 | + -o-transition: box-shadow 0.15s ease ; -ms-transition: box-shadow 0.15s ease } |
1943 | 1958 | ${ isParticlizedDS ? '' : // add inset shadow to chatbar on hover |
1944 | 1959 | `#${app.slug}-chatbar:hover:not(:focus) { |
1945 | 1960 | --chatbar-hover-inset-shadow: 0 ${ |
1946 | 1961 | env.ui.app.scheme == 'dark' ? '3px 2px' : '1px 7px' } rgba(15,17,17,0.15) inset ; |
1947 | 1962 | box-shadow: var(--chatbar-hover-inset-shadow) ; |
1948 | 1963 | -webkit-box-shadow: var(--chatbar-hover-inset-shadow) ; |
1949 | 1964 | -moz-box-shadow: var(--chatbar-hover-inset-shadow) ; |
1950 | | - transition: transform 0.15s ease, box-shadow 0.25s ease }` } |
| 1965 | + transition: box-shadow 0.25s ease ; |
| 1966 | + -webkit-transition: box-shadow 0.25s ease ; -moz-transition: box-shadow 0.25s ease ; |
| 1967 | + -o-transition: box-shadow 0.25s ease ; -ms-transition: box-shadow 0.25s ease }` } |
1951 | 1968 | #${app.slug}-chatbar:focus-visible { /* fallback outline chatbar + reduce inset shadow on focus */ |
1952 | 1969 | outline: -webkit-focus-ring-color auto 1px ; |
1953 | 1970 | ${ isParticlizedDS ? '' : |
|
3402 | 3419 | + `--shadow: 3px 5px 16px 0 rgb(0,0,0,0.21) ; |
3403 | 3420 | box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow)` |
3404 | 3421 | + 'opacity: 0 ; height: fit-content ; z-index: 1250 ;' // visibility |
3405 | | - + 'transition: opacity 0.1s ; -webkit-transition: opacity 0.1s ; -moz-transition: opacity 0.1s ;' |
3406 | | - + '-o-transition: opacity 0.1s ; -ms-transition: opacity 0.1s }' |
| 3422 | + + `transition: opacity 0.1s ; -webkit-transition: opacity 0.1s ; -moz-transition: opacity 0.1s ; |
| 3423 | + -o-transition: opacity 0.1s ; -ms-transition: opacity 0.1s }` |
3407 | 3424 | )) |
3408 | 3425 |
|
3409 | 3426 | // APPEND AMAZONGPT to Amazon |
|
0 commit comments