search

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit eea743e8d5641aeb710ee63ffa3c45fab700da79
parent 086a8a2ea3542c3a64907dc40e72a9c46ca924ce
Author: Theo Browne <me@t3.gg>
Date:   Fri, 14 Feb 2025 22:25:23 -0800

Cleaned up a ton

Diffstat:
Apublic/clipboard-check.svg | 2++
Apublic/clipboard.svg | 2++
Asrc/global.css | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main.ts | 30+++++++++++++++++++++++++++++-
4 files changed, 152 insertions(+), 1 deletion(-)

diff --git a/public/clipboard-check.svg b/public/clipboard-check.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clipboard-check"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="m9 14 2 2 4-4"/></svg> +\ No newline at end of file diff --git a/public/clipboard.svg b/public/clipboard.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clipboard"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/></svg> +\ No newline at end of file diff --git a/src/global.css b/src/global.css @@ -0,0 +1,119 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"); + +:root { + font-family: + Inter, + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Oxygen, + Ubuntu, + Cantarell, + "Open Sans", + "Helvetica Neue", + sans-serif; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body { + height: 100%; + width: 100%; +} + +body { + line-height: 1.5; + font-weight: 400; + font-size: 16px; + color: #1a1a1a; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 600; + line-height: 1.2; +} + +a { + color: #444444; +} +a:hover { + color: #888888; +} + +button { + font: inherit; + border: none; + background: none; + cursor: pointer; +} + +input, +textarea { + font: inherit; +} + +/* Add these new styles */ +.url-container { + display: flex; + align-items: center; + gap: 8px; + margin-top: 16px; +} + +/* Add this new style */ +.content-container { + max-width: 36rem; + text-align: center; +} + +/* Update url-input width to be 100% since container will control max width */ +.url-input { + padding: 8px 12px; + border: 1px solid #ddd; + border-radius: 4px; + width: 100%; + background: #f5f5f5; +} + +.copy-button { + padding: 8px; + color: #666; + border-radius: 4px; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; +} + +.copy-button:hover { + background: #f0f0f0; +} + +.copy-button:active { + background: #e5e5e5; +} + +.copy-button img { + width: 20px; + height: 20px; +} + +.copy-button.copied { + background: #28a745; +} diff --git a/src/main.ts b/src/main.ts @@ -1,4 +1,5 @@ import { bangs } from "./bang"; +import "./global.css"; const defaultBang = bangs.find((b) => b.t === "g"); @@ -6,9 +7,36 @@ function noSearchDefaultPageRender() { const app = document.querySelector<HTMLDivElement>("#app")!; app.innerHTML = ` <div style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh;"> - <h1>Unduck</h1> + <div class="content-container"> + <h1>Unduck</h1> + <p>DuckDuckGo's bang redirects are too slow. Add the following URL as a custom search engine to your browser. Enables <a href="https://duckduckgo.com/bang.html" target="_blank">all of DuckDuckGo's bangs.</a></p> + <div class="url-container"> + <input + type="text" + class="url-input" + value="https://unduck.link/search?q={{{s}}}" + readonly + /> + <button class="copy-button"> + <img src="/clipboard.svg" alt="Copy" /> + </button> + </div> + </div> </div> `; + + const copyButton = app.querySelector<HTMLButtonElement>(".copy-button")!; + const copyIcon = copyButton.querySelector("img")!; + const urlInput = app.querySelector<HTMLInputElement>(".url-input")!; + + copyButton.addEventListener("click", async () => { + await navigator.clipboard.writeText(urlInput.value); + copyIcon.src = "/clipboard-check.svg"; + + setTimeout(() => { + copyIcon.src = "/clipboard.svg"; + }, 2000); + }); } function getBangredirectUrl() {