diff --git a/src/SEQTA.ts b/src/SEQTA.ts index 1e073587..0f964734 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -37,6 +37,7 @@ import injectedCSS from '@/css/injected.scss?inline' import documentLoadCSS from '@/css/documentload.scss?inline' import renderSvelte from '@/svelte-interface/main' import Settings from '@/svelte-interface/pages/settings.svelte' +import { renderStore } from './seqta/ui/renderStore' let SettingsClicked = false export let MenuOptionsOpen = false @@ -343,6 +344,44 @@ export function OpenWhatsNewPopup() { }) } +export function OpenStorePage() { + const remove = renderStore() + /* export function renderStore() { + const container = document.querySelector('#container'); + if (!container) { + throw new Error('Container not found'); + } + + const child = document.createElement('div'); + child.id = 'store'; + container!.appendChild(child); + + const shadow = child.attachShadow({ mode: 'open' }); + const app = renderSvelte(Store, shadow); + + return () => unmount(app) +} + */ + + // add a close button to the page + const closeButton = document.createElement('button') + closeButton.id = 'storeclosebutton' + closeButton.classList.add('closeButton') + closeButton.innerHTML = 'Close' + document.body.appendChild(closeButton) + + closeButton.addEventListener('click', () => { + closeButton.classList.add('hide') + document.getElementById('store')!.classList.add('hide') + + setTimeout(() => { + remove() + document.body.removeChild(closeButton) + document.getElementById('store')!.remove() + }, 500) + }) +} + export function OpenAboutPage() { const background = document.createElement('div') background.id = 'whatsnewbk' diff --git a/src/css/injected.scss b/src/css/injected.scss index 7ab86545..1b9bc801 100644 --- a/src/css/injected.scss +++ b/src/css/injected.scss @@ -62,6 +62,58 @@ html { } } +#store { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 9998; + animation: fadeIn 500ms forwards; + animation-delay: 200ms; + opacity: 0; + + &.hide { + animation: fadeOut 500ms forwards; + } +} +#storeclosebutton { + position: absolute; + top: 10px; + right: 10px; + z-index: 9999; + animation: fadeIn 500ms forwards; + animation-delay: 200ms; + opacity: 0; + + &.hide { + animation: fadeOut 500ms forwards; + pointer-events: none; + } +} + +.dark #storeclosebutton { + color: white; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + .dark .resizeBar { background-color: rgb(28 28 30); } @@ -2532,6 +2584,7 @@ li.MessageList__unread___3imtO { position: absolute; display: none; } + /* Show the checkmark when checked */ .upcoming-checkbox-container input:checked ~ .upcoming-checkmark:after { display: block; diff --git a/src/seqta/ui/renderStore.ts b/src/seqta/ui/renderStore.ts new file mode 100644 index 00000000..7842ac50 --- /dev/null +++ b/src/seqta/ui/renderStore.ts @@ -0,0 +1,20 @@ +import renderSvelte from '@/svelte-interface/main'; +import Store from '@/svelte-interface/pages/store.svelte' + +import { unmount } from 'svelte' + +export function renderStore() { + const container = document.querySelector('#container'); + if (!container) { + throw new Error('Container not found'); + } + + const child = document.createElement('div'); + child.id = 'store'; + container!.appendChild(child); + + const shadow = child.attachShadow({ mode: 'open' }); + const app = renderSvelte(Store, shadow); + + return () => unmount(app) +} diff --git a/src/svelte-interface/components/SkeletonLoader.svelte b/src/svelte-interface/components/SkeletonLoader.svelte new file mode 100644 index 00000000..17e23ade --- /dev/null +++ b/src/svelte-interface/components/SkeletonLoader.svelte @@ -0,0 +1,5 @@ + + +
diff --git a/src/svelte-interface/components/store/CoverSwiper.svelte b/src/svelte-interface/components/store/CoverSwiper.svelte new file mode 100644 index 00000000..4d4b2a88 --- /dev/null +++ b/src/svelte-interface/components/store/CoverSwiper.svelte @@ -0,0 +1,48 @@ + + +{#if coverThemes.length > 0} +{theme.description}
+Transform it into a stunning theme!
+Sorry, we couldn't find the theme you're looking for. Maybe... you could create it?
++ {theme.description} +
+ {#if currentThemes.includes(theme.id)} + + {:else} + + {/if} +