From b337203804cd150b2793e0ec6b1818683db6599a Mon Sep 17 00:00:00 2001 From: Lasse Date: Thu, 27 Oct 2022 15:30:56 +0200 Subject: [PATCH] Link colors + popup + layout fix + donations --- src/assets/global.css | 12 +- src/assets/images/ava.png | Bin 0 -> 5333 bytes src/assets/images/btc.png | Bin 0 -> 5343 bytes src/assets/images/doge.png | Bin 0 -> 5365 bytes src/content/duckduckgohandler.ts | 16 +- src/content/googlehandler.ts | 35 +++- src/content/searxhandler.ts | 15 +- src/content/startpagehandler.ts | 16 +- src/lib/registerhandler.ts | 134 +++++++++---- src/lib/types.ts | 2 + src/manifest.ts | 7 + src/popup/App.svelte | 76 ++++++++ src/popup/index.html | 11 ++ src/popup/main.ts | 5 + src/richresults/reddit/Comment.svelte | 18 +- src/richresults/reddit/Comments.svelte | 32 +++- src/richresults/reddit/Component.svelte | 9 +- src/richresults/reddit/Reddit.ts | 3 + .../stackexchange/StackExchange.ts | 6 +- .../stackexchange_hostnames.json | 180 ++++++++++++++++++ vite.config.ts | 1 - 21 files changed, 508 insertions(+), 70 deletions(-) create mode 100644 src/assets/images/ava.png create mode 100644 src/assets/images/btc.png create mode 100644 src/assets/images/doge.png create mode 100644 src/popup/App.svelte create mode 100644 src/popup/index.html create mode 100644 src/popup/main.ts create mode 100644 src/richresults/stackexchange/stackexchange_hostnames.json diff --git a/src/assets/global.css b/src/assets/global.css index 41c5a50..a936ced 100644 --- a/src/assets/global.css +++ b/src/assets/global.css @@ -5,15 +5,20 @@ /* max-width: 500px; min-width: 460px; width: 30vw; */ - width: 500px; + width: 500px !important; overflow-y: auto; /* padding-left: 6rem; */ /* padding-right: 3rem; */ - font-size: max(0.9rem, 15px); - margin-bottom: 1em; + font-size: max(0.9rem, 14px) !important; + margin-bottom: 2em; font-size: inherit; } +.mrrContainer > * { + width: auto !important; + margin-bottom: 2em; +} + .mrrContainer h1 { font-size: 1.8em; line-height: 1.2em; font-weight: normal; } .mrrContainer h2 { font-size: 1.6em; line-height: 1.2em; font-weight: normal; } .mrrContainer h3 { font-size: 1.3em; line-height: 1.2em; font-weight: normal; } @@ -36,6 +41,7 @@ .mrrContainer a { text-decoration: none; + color: rgb(var(--mrr-link-color)); } .mrrContainer a:hover { text-decoration: underline; diff --git a/src/assets/images/ava.png b/src/assets/images/ava.png new file mode 100644 index 0000000000000000000000000000000000000000..d394c8c3292234c3c39ecb00bf32d9d567e7f3c8 GIT binary patch literal 5333 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/doge.png b/src/assets/images/doge.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4d4ebfc097c3ce70bc56985a769a8c201c657b GIT binary patch literal 5365 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 { const sidebar = document.querySelector(".results--sidebar") as HTMLElement sidebar.style.maxWidth = "min-content" - console.log(window.innerWidth); if (window.innerWidth <= 1480) sidebar.style.marginLeft = "calc(var(--max-content-width) + 20px)" @@ -40,8 +39,21 @@ registerHandler({ const rgb = searchInputColor.match(/\d+/g)! .map((value) => parseInt(value)) - return { + const link = document.querySelector('#links h2 a') + const linkColor = window.getComputedStyle(link).getPropertyValue("color") + + const linkRgb = linkColor.match(/\d+/g)! + .map((value) => parseInt(value)) + + return { '--mrr-color': rgb.join(", "), + '--mrr-link-color': linkRgb.join(", "), } + }, + + filteredSearchUrl: (currentUrl: URL, triggerHost: string): URL => { + currentUrl.searchParams.set("q", currentUrl.searchParams.get("q") + ' site:' + triggerHost) + + return currentUrl } }) \ No newline at end of file diff --git a/src/content/googlehandler.ts b/src/content/googlehandler.ts index 6a2e31c..1f762b5 100644 --- a/src/content/googlehandler.ts +++ b/src/content/googlehandler.ts @@ -6,12 +6,17 @@ registerHandler({ const links: URL[] = [] - if (resultsElement != null) { - [...resultsElement.children].forEach((e) => { - const link = e.querySelector("a") - if (link != null) links.push(new URL(link.href)); - }) - } + // if (resultsElement != null) { + // [...resultsElement.children].forEach((e) => { + // const link = e.querySelector("a") + // if (link != null) links.push(new URL(link.href)); + // }) + // } + // const links = [] + + document.querySelectorAll("#rso div:has(cite) a:has(h3)").forEach((node: HTMLLinkElement) => { + links.push(new URL(node.href)) + }) return links }, @@ -32,10 +37,11 @@ registerHandler({ rcnt.style.flexWrap = "initial"; } - mrrContainer.style.paddingLeft = "1.5rem" + mrrContainer.style.paddingLeft = "0" + mrrContainer.style.marginLeft = "2rem" mrrContainer.classList.add("mrrContainer") - rcnt.appendChild(mrrContainer as Node) + rcnt.append(mrrContainer as Node) return mrrContainer }, @@ -46,8 +52,21 @@ registerHandler({ const rgb = bodyColor.match(/\d+/g)! .map((value) => parseInt(value)) + const link = document.querySelector('#rso .g a h3') + const linkColor = window.getComputedStyle(link).getPropertyValue("color") + + const linkRgb = linkColor.match(/\d+/g)! + .map((value) => parseInt(value)) + return { '--mrr-color': rgb.join(", "), + '--mrr-link-color': linkRgb.join(", "), } + }, + + filteredSearchUrl: (currentUrl: URL, triggerHost: string): URL => { + currentUrl.searchParams.set("q", currentUrl.searchParams.get("q") + ' site:' + triggerHost) + + return currentUrl } }) \ No newline at end of file diff --git a/src/content/searxhandler.ts b/src/content/searxhandler.ts index 65b3de0..7171ce5 100644 --- a/src/content/searxhandler.ts +++ b/src/content/searxhandler.ts @@ -32,8 +32,21 @@ registerHandler({ const rgb = searchInputColor.match(/\d+/g)! .map((value) => parseInt(value)) - return { + const link = document.querySelector('#urls .result > h3 > a') + const linkColor = window.getComputedStyle(link).getPropertyValue("color") + + const linkRgb = linkColor.match(/\d+/g)! + .map((value) => parseInt(value)) + + return { '--mrr-color': rgb.join(", "), + '--mrr-link-color': linkRgb.join(", "), } + }, + + filteredSearchUrl: (currentUrl: URL, triggerHost: string): URL => { + currentUrl.searchParams.set("q", currentUrl.searchParams.get("q") + ' site:' + triggerHost) + + return currentUrl } }) \ No newline at end of file diff --git a/src/content/startpagehandler.ts b/src/content/startpagehandler.ts index 6ef7d43..bd5a155 100644 --- a/src/content/startpagehandler.ts +++ b/src/content/startpagehandler.ts @@ -33,10 +33,22 @@ registerHandler({ const rgb = searchInputColor.match(/\d+/g)! .map((value) => parseInt(value)) - // ADD LINK COLORS TO THEME + const link = document.querySelector('.result-link > h3') + const linkColor = window.getComputedStyle(link).getPropertyValue("color") + + const linkRgb = linkColor.match(/\d+/g)! + .map((value) => parseInt(value)) - return { + return { '--mrr-color': rgb.join(", "), + '--mrr-link-color': linkRgb.join(", "), } + }, + + filteredSearchUrl: (currentUrl: URL, triggerHost: string): URL => { + let searchInput = document.getElementById("q") as HTMLInputElement + currentUrl.searchParams.set("q", searchInput.value + ' site:' + triggerHost) + + return currentUrl } }) \ No newline at end of file diff --git a/src/lib/registerhandler.ts b/src/lib/registerhandler.ts index 16288e2..3edfb00 100644 --- a/src/lib/registerhandler.ts +++ b/src/lib/registerhandler.ts @@ -3,53 +3,121 @@ import 'virtual:windi-components.css'; import 'virtual:windi-utilities.css'; import '../assets/global.css'; -import type { PlatformHandler } from "./types"; +import type { PlatformHandler, RichResult } from "./types"; import StackExchange from "../richresults/stackexchange/StackExchange"; import Reddit from "../richresults/reddit/Reddit"; const RICH_RESULTS = [StackExchange, Reddit] -export async function registerHandler(platform: PlatformHandler) { - const results = await platform.getResultUrls() +async function mountResult(richResult: RichResult, url: URL, platform: PlatformHandler) { + const theme = platform.getTheme() + const mrrColor = theme['--mrr-color'] + const rgb = mrrColor.split(', ').map(s => parseInt(s)) + + const isDark = rgb[0]+rgb[1]+rgb[2] > 130*3 + + var hljsCss = document.createElement("link"); + hljsCss.rel = "stylesheet"; + hljsCss.href = chrome.runtime.getURL(isDark ? 'src/assets/hljs/github-dark.css' : 'src/assets/hljs/github.css'); + + document.head.appendChild(hljsCss); + + for (const [key, value] of Object.entries(theme)) { + document.body.style.setProperty(key, value); + } + + const container = platform.setupContainer() + if (container == null) throw new Error("Container couldn't be created") - urlLoop: + const innerContainer = document.createElement("div") + container.prepend(innerContainer) + + container.style.color = `rgb(${mrrColor})` + + // mount + new richResult.component({ target: innerContainer, props: { url } }) +} + +function inIframe () { + try { + return window.self !== window.top; + } catch (e) { + return true; + } +} + +async function checkResultsAndMount(results: URL[], platform: PlatformHandler): Promise { for (const url of results) { - - resultLoop: for (const richResult of RICH_RESULTS) { - if (richResult.match(url)) { - // setup - const theme = platform.getTheme() - const mrrColor = theme['--mrr-color'] - const rgb = mrrColor.split(', ').map(s => parseInt(s)) - - const isDark = rgb[0]+rgb[1]+rgb[2] > 130*3 + await mountResult(richResult, url, platform) + return true; + } + } + } - var hljsCss = document.createElement("link"); - hljsCss.rel = "stylesheet"; - hljsCss.href = chrome.runtime.getURL(isDark ? 'src/assets/hljs/github-dark.css' : 'src/assets/hljs/github.css'); - - document.head.appendChild(hljsCss); + return false; +} - for (const [key, value] of Object.entries(theme)) { - document.body.style.setProperty(key, value); - } - - const container = platform.setupContainer() - - if (container == null) return - - container.style.color = `rgb(${mrrColor})` +export async function registerHandler(platform: PlatformHandler) { + const results = await platform.getResultUrls() + + if (inIframe()){ + window.top.postMessage({ + results: results.map(url => url.href) + }) + return + } + + let mounted = await checkResultsAndMount(results, platform); + + if (mounted) return - // mount - new richResult.component({ target: container, props: { url } }) + + + let innerSearchFilterHost: string + + richResultLoop: + for (const richResult of RICH_RESULTS) { + for (const host in richResult.triggers) { + const triggerHosts = richResult.triggers[host]; + for (const result of results) { + const hostname = result.hostname.startsWith('www.') ? result.hostname.substring(4) : result.hostname - break urlLoop; - } else { - continue resultLoop; + if (triggerHosts.indexOf(hostname) != -1) { + innerSearchFilterHost = host + break richResultLoop; + } } - } + } } + + if (innerSearchFilterHost == null) return + + // Inner search + let innerSearch = document.createElement('iframe') + + const innerUrl = platform.filteredSearchUrl(new URL(window.location.href), innerSearchFilterHost); + + innerSearch.src = innerUrl.href + + innerSearch.style.display = 'none' + document.body.appendChild(innerSearch) + + async function listener(msg) { + if (mounted) return + + if (typeof msg.data != 'object' || !("results" in msg.data)) { + return + } + + const iframeResults = msg.data.results.map(href => new URL(href)) + mounted = await checkResultsAndMount(iframeResults, platform) + + innerSearch.remove() + window.removeEventListener('message', listener) + } + + window.addEventListener('message', listener) } \ No newline at end of file diff --git a/src/lib/types.ts b/src/lib/types.ts index 12110d7..0a3a72c 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -4,9 +4,11 @@ export interface PlatformHandler { getResultUrls: () => Promise, setupContainer: () => HTMLElement | null, getTheme: () => {[key: string]: any}, + filteredSearchUrl: (currentUrl: URL, triggerHost: string) => URL } export interface RichResult { match: (url: URL) => boolean, component: ComponentType, + triggers: {[host: string]: Array} } \ No newline at end of file diff --git a/src/manifest.ts b/src/manifest.ts index d5251f0..37a78d0 100644 --- a/src/manifest.ts +++ b/src/manifest.ts @@ -16,22 +16,29 @@ export default defineManifest({ service_worker: 'src/background/main.ts', type: 'module', }, + action: { + default_popup: "src/popup/index.html" + }, content_scripts: [ { matches: ['*://www.google.com/search?q=*'], js: ['src/content/googlehandler.ts'], + all_frames: true, }, { matches: ['*://www.startpage.com/sp/search', '*://www.startpage.com/sp/search*', '*://www.startpage.com/do/search', '*://www.startpage.com/do/search*'], js: ['src/content/startpagehandler.ts'], + all_frames: true, }, { matches: ['*://duckduckgo.com/?q=*'], js: ['src/content/duckduckgohandler.ts'], + all_frames: true, }, { matches: ['*://searx.tiekoetter.com/search?q=*'], js: ['src/content/searxhandler.ts'], + all_frames: true, }, ], web_accessible_resources: [ diff --git a/src/popup/App.svelte b/src/popup/App.svelte new file mode 100644 index 0000000..30951c3 --- /dev/null +++ b/src/popup/App.svelte @@ -0,0 +1,76 @@ + + +
+
+ +

Hello 👋

+

Thanks for using my extension.

+

It is free and open source and will stay that way forever.

+

+ You can donate to the following addresses if you find it useful and want to show your appreciation with crypto. +

+ + + + + + + + + + + + + +
Bitcoin: + + +
Doge: + + +
Avalanche: + + +
+

+ Link to Github repository: +

+ https://github.com/lassebomh/more-rich-results +
+ {#if showQr} +
showQr = false}> + +
+ {/if} +
+ + \ No newline at end of file diff --git a/src/popup/index.html b/src/popup/index.html new file mode 100644 index 0000000..471a47b --- /dev/null +++ b/src/popup/index.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/popup/main.ts b/src/popup/main.ts new file mode 100644 index 0000000..921aa47 --- /dev/null +++ b/src/popup/main.ts @@ -0,0 +1,5 @@ + +import App from './App.svelte' +import 'virtual:windi.css' + +new App({ target: document.body }) diff --git a/src/richresults/reddit/Comment.svelte b/src/richresults/reddit/Comment.svelte index 6eb8440..589cf95 100644 --- a/src/richresults/reddit/Comment.svelte +++ b/src/richresults/reddit/Comment.svelte @@ -9,18 +9,26 @@ export let index: number; export let depth: number; - let highlight = depth == 0 && index == 0 + const isFirst = depth == 0 && index == 0 + const scoreRatio = comment.data.score/Math.max(post.score, 8) + + let highlight = isFirst && scoreRatio > 0.2; + let shown = isFirst || scoreRatio > 0.12; - let shown = highlight || comment.data.score/(1 + post.ups + post.downs + 8) > 0.4; - +
-
+
u/{comment.data.author} • {comment.data.score} points • {moment(comment.data.created*1000).fromNow()}
{#if shown} - + {#if comment.data.replies} {/if} diff --git a/src/richresults/reddit/Comments.svelte b/src/richresults/reddit/Comments.svelte index b2be5ab..fde5a88 100644 --- a/src/richresults/reddit/Comments.svelte +++ b/src/richresults/reddit/Comments.svelte @@ -1,4 +1,6 @@
- {#each comments as comment, i} - {#if comment.data.author} - - {/if} + {#each shownComments as comment, i} + {/each} + {#if limit < comments.length} + + {/if}
diff --git a/src/richresults/reddit/Component.svelte b/src/richresults/reddit/Component.svelte index a1106b1..daca9b6 100644 --- a/src/richresults/reddit/Component.svelte +++ b/src/richresults/reddit/Component.svelte @@ -51,14 +51,7 @@ {/if}
{#if comments} - - {/if} - {#if comments.length > 8} - + {/if}
diff --git a/src/richresults/reddit/Reddit.ts b/src/richresults/reddit/Reddit.ts index 1d0346a..b733576 100644 --- a/src/richresults/reddit/Reddit.ts +++ b/src/richresults/reddit/Reddit.ts @@ -4,5 +4,8 @@ import Component from "./Component.svelte" export default { match: (url: URL) => url.hostname === "www.reddit.com" && /^\/r\/[\w_-]+\/comments\/[\w_-]+\/[\w_-]+\//.test(url.pathname), + triggers: { + "reddit.com": ['imdb.com'] + }, component: Component, } diff --git a/src/richresults/stackexchange/StackExchange.ts b/src/richresults/stackexchange/StackExchange.ts index eb8770b..e81ce63 100644 --- a/src/richresults/stackexchange/StackExchange.ts +++ b/src/richresults/stackexchange/StackExchange.ts @@ -1,7 +1,11 @@ import type { RichResult } from "../../lib/types"; import Component from "./Component.svelte" +import stackexchange_hostnames from './stackexchange_hostnames.json' export default { - match: (url: URL) => url.hostname === "stackoverflow.com", + match: (url: URL) => stackexchange_hostnames.indexOf(url.hostname) != -1, + triggers: { + 'stackoverflow.com': ["w3schools.com", "geeksforgeeks.org", "docs.python.org", "programiz.com", "tutorialspoint.com", "javatpoint.com"] + }, component: Component, } \ No newline at end of file diff --git a/src/richresults/stackexchange/stackexchange_hostnames.json b/src/richresults/stackexchange/stackexchange_hostnames.json new file mode 100644 index 0000000..a580408 --- /dev/null +++ b/src/richresults/stackexchange/stackexchange_hostnames.json @@ -0,0 +1,180 @@ +[ + "stackoverflow.com", + "serverfault.com", + "superuser.com", + "meta.stackexchange.com", + "webapps.stackexchange.com", + "gaming.stackexchange.com", + "webmasters.stackexchange.com", + "cooking.stackexchange.com", + "gamedev.stackexchange.com", + "photo.stackexchange.com", + "stats.stackexchange.com", + "math.stackexchange.com", + "diy.stackexchange.com", + "gis.stackexchange.com", + "tex.stackexchange.com", + "askubuntu.com", + "money.stackexchange.com", + "english.stackexchange.com", + "stackapps.com", + "ux.stackexchange.com", + "unix.stackexchange.com", + "wordpress.stackexchange.com", + "cstheory.stackexchange.com", + "apple.stackexchange.com", + "rpg.stackexchange.com", + "bicycles.stackexchange.com", + "softwareengineering.stackexchange.com", + "electronics.stackexchange.com", + "android.stackexchange.com", + "boardgames.stackexchange.com", + "physics.stackexchange.com", + "homebrew.stackexchange.com", + "security.stackexchange.com", + "writing.stackexchange.com", + "video.stackexchange.com", + "graphicdesign.stackexchange.com", + "dba.stackexchange.com", + "scifi.stackexchange.com", + "codereview.stackexchange.com", + "codegolf.stackexchange.com", + "quant.stackexchange.com", + "pm.stackexchange.com", + "skeptics.stackexchange.com", + "fitness.stackexchange.com", + "drupal.stackexchange.com", + "mechanics.stackexchange.com", + "parenting.stackexchange.com", + "sharepoint.stackexchange.com", + "music.stackexchange.com", + "sqa.stackexchange.com", + "judaism.stackexchange.com", + "german.stackexchange.com", + "japanese.stackexchange.com", + "philosophy.stackexchange.com", + "gardening.stackexchange.com", + "travel.stackexchange.com", + "crypto.stackexchange.com", + "dsp.stackexchange.com", + "french.stackexchange.com", + "christianity.stackexchange.com", + "bitcoin.stackexchange.com", + "linguistics.stackexchange.com", + "hermeneutics.stackexchange.com", + "history.stackexchange.com", + "bricks.stackexchange.com", + "spanish.stackexchange.com", + "scicomp.stackexchange.com", + "movies.stackexchange.com", + "chinese.stackexchange.com", + "biology.stackexchange.com", + "poker.stackexchange.com", + "mathematica.stackexchange.com", + "psychology.stackexchange.com", + "outdoors.stackexchange.com", + "martialarts.stackexchange.com", + "sports.stackexchange.com", + "academia.stackexchange.com", + "cs.stackexchange.com", + "workplace.stackexchange.com", + "windowsphone.stackexchange.com", + "chemistry.stackexchange.com", + "chess.stackexchange.com", + "raspberrypi.stackexchange.com", + "russian.stackexchange.com", + "islam.stackexchange.com", + "salesforce.stackexchange.com", + "patents.stackexchange.com", + "genealogy.stackexchange.com", + "robotics.stackexchange.com", + "expressionengine.stackexchange.com", + "politics.stackexchange.com", + "anime.stackexchange.com", + "magento.stackexchange.com", + "ell.stackexchange.com", + "sustainability.stackexchange.com", + "tridion.stackexchange.com", + "reverseengineering.stackexchange.com", + "networkengineering.stackexchange.com", + "opendata.stackexchange.com", + "freelancing.stackexchange.com", + "blender.stackexchange.com", + "mathoverflow.net", + "space.stackexchange.com", + "sound.stackexchange.com", + "astronomy.stackexchange.com", + "tor.stackexchange.com", + "pets.stackexchange.com", + "ham.stackexchange.com", + "italian.stackexchange.com", + "pt.stackoverflow.com", + "aviation.stackexchange.com", + "ebooks.stackexchange.com", + "alcohol.stackexchange.com", + "softwarerecs.stackexchange.com", + "arduino.stackexchange.com", + "expatriates.stackexchange.com", + "matheducators.stackexchange.com", + "earthscience.stackexchange.com", + "joomla.stackexchange.com", + "datascience.stackexchange.com", + "puzzling.stackexchange.com", + "craftcms.stackexchange.com", + "buddhism.stackexchange.com", + "hinduism.stackexchange.com", + "communitybuilding.stackexchange.com", + "worldbuilding.stackexchange.com", + "ja.stackoverflow.com", + "emacs.stackexchange.com", + "hsm.stackexchange.com", + "economics.stackexchange.com", + "lifehacks.stackexchange.com", + "engineering.stackexchange.com", + "coffee.stackexchange.com", + "vi.stackexchange.com", + "musicfans.stackexchange.com", + "woodworking.stackexchange.com", + "civicrm.stackexchange.com", + "medicalsciences.stackexchange.com", + "ru.stackoverflow.com", + "rus.stackexchange.com", + "mythology.stackexchange.com", + "law.stackexchange.com", + "opensource.stackexchange.com", + "elementaryos.stackexchange.com", + "portuguese.stackexchange.com", + "computergraphics.stackexchange.com", + "hardwarerecs.stackexchange.com", + "es.stackoverflow.com", + "3dprinting.stackexchange.com", + "ethereum.stackexchange.com", + "latin.stackexchange.com", + "languagelearning.stackexchange.com", + "retrocomputing.stackexchange.com", + "crafts.stackexchange.com", + "korean.stackexchange.com", + "monero.stackexchange.com", + "ai.stackexchange.com", + "esperanto.stackexchange.com", + "sitecore.stackexchange.com", + "iot.stackexchange.com", + "literature.stackexchange.com", + "vegetarianism.stackexchange.com", + "ukrainian.stackexchange.com", + "devops.stackexchange.com", + "bioinformatics.stackexchange.com", + "cseducators.stackexchange.com", + "interpersonal.stackexchange.com", + "iota.stackexchange.com", + "stellar.stackexchange.com", + "conlang.stackexchange.com", + "quantumcomputing.stackexchange.com", + "eosio.stackexchange.com", + "tezos.stackexchange.com", + "or.stackexchange.com", + "drones.stackexchange.com", + "mattermodeling.stackexchange.com", + "cardano.stackexchange.com", + "proofassistants.stackexchange.com" +] \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 38a78d0..09adf08 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,7 +2,6 @@ import { defineConfig } from 'vite' import { svelte } from '@sveltejs/vite-plugin-svelte' import { crx } from '@crxjs/vite-plugin' import manifest from './src/manifest' -import { windi } from 'svelte-windicss-preprocess'; import WindiCSS from 'vite-plugin-windicss'