diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..c860dd5
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,16 @@
+## 📝 About your SVG:
+
+- **Title**:
+- **Category**:
+- **Website URL**:
+- **Description**:
+
+## 📷 Screenshots:
+
+✨ Add screenshots of the logo.
+
+## ✅ Checklist
+
+- [ ] I have permission to use this logo.
+- [ ] The ``.svg`` file is optimized for web use.
+- [ ] The ``.svg`` size is less than **20kb**.
diff --git a/README.md b/README.md
index 7485fdb..3dd28ed 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
Discover
✦
-
+
Request logo
✦
@@ -138,6 +138,19 @@ pnpm install
}
```
+- **Add brand guidelines**:
+
+```json
+{
+ "title": "Title",
+ "category": "Category",
+ "route": "/library/your_logo.svg",
+ "wordmark": "/library/your_logo_wordmark.svg",
+ "brandUrl": "https://assets.website.com/brand-guidelines",
+ "url": "Website"
+}
+```
+
> [!NOTE]
>
> - The list of categories is here: [`src/types/categories.ts`](https://github.com/pheralb/svgl/blob/main/src/types/categories.ts). You can add a new category if you need it.
diff --git a/src/app.css b/src/app.css
index f85c976..0f54e63 100644
--- a/src/app.css
+++ b/src/app.css
@@ -72,3 +72,12 @@
src: url('/fonts/GeistMonoVariableVF.woff2') format('woff2');
font-display: swap;
}
+
+html.dark .shiki,
+html.dark .shiki span {
+ color: var(--shiki-dark) !important;
+ background-color: transparent !important;
+ font-style: var(--shiki-dark-font-style) !important;
+ font-weight: var(--shiki-dark-font-weight) !important;
+ text-decoration: var(--shiki-dark-text-decoration) !important;
+}
diff --git a/src/components/copySvg.svelte b/src/components/copySvg.svelte
index 80f0746..526319d 100644
--- a/src/components/copySvg.svelte
+++ b/src/components/copySvg.svelte
@@ -15,11 +15,13 @@
import { buttonStyles } from '@/ui/styles';
import { cn } from '@/utils/cn';
import { componentTemplate } from '@/utils/componentTemplate';
+ import { generateAngularComponent } from '@/utils/generateAngularComponent';
//Icons:
import ReactIcon from './icons/reactIcon.svelte';
import VueIcon from './icons/vueIcon.svelte';
import SvelteIcon from './icons/svelteIcon.svelte';
+ import AngularIcon from './icons/angularIcon.svelte';
// Props:
export let iconSize = 24;
@@ -163,6 +165,33 @@
toast.error(`Failed to copy ${framework} component`);
}
};
+
+ // Copy SVG as Standalone Angular component:
+ const convertSvgAngularComponent = async () => {
+ isLoading = true;
+ optionsOpen = false;
+
+ const title = svgInfo.title.split(' ').join('');
+ const svgUrlToCopy = getSvgUrl();
+ const content = await getSvgContent(svgUrlToCopy);
+
+ if (!content) {
+ toast.error('Failed to fetch the SVG content', {
+ duration: 5000
+ });
+ isLoading = false;
+ return;
+ }
+
+ const angularComponent = generateAngularComponent(content, title);
+ await clipboard(angularComponent);
+
+ toast.success(`Copied as Standalone Angular component`, {
+ description: `${svgInfo.title} - ${svgInfo.category}`
+ });
+
+ isLoading = false;
+ };
+ Remember to request permission from the creators for the use of the SVG. Modification is not
+ allowed.
+
All SVGs include links to the respective products or companies that own them. Please contact the owner directly if you intend to use their logo.Please contact the owner directly if you need to use their logo. - If you are the owner of an SVG and prefer it not to be displayed here, + If you are the owner of an SVG and would like it removed, create an issue on GitHub.
diff --git a/src/data/svgs.ts b/src/data/svgs.ts index a4469d2..2cd4ab6 100644 --- a/src/data/svgs.ts +++ b/src/data/svgs.ts @@ -1,6 +1,13 @@ import type { iSVG } from '../types/svg'; export const svgs: iSVG[] = [ + { + title: 'PayPal', + category: 'Payment', + route: '/library/paypal.svg', + wordmark: '/library/paypal-wordmark.svg', + url: 'https://paypal.com' + }, { title: 'Google Drive', category: 'Google', @@ -214,7 +221,7 @@ export const svgs: iSVG[] = [ }, { title: 'JWT', - category: 'Library', + category: ['Library', 'Authentication'], route: '/library/jwt.svg', url: 'https://jwt.io/' }, @@ -239,7 +246,7 @@ export const svgs: iSVG[] = [ }, { title: 'WorkOS', - category: 'Software', + category: ['Software', 'Authentication'], route: { light: '/library/workos.svg', dark: '/library/workos-light.svg' @@ -575,7 +582,7 @@ export const svgs: iSVG[] = [ }, { title: 'Twilio', - category: 'Software', + category: ['Software', 'Authentication'], route: '/library/twilio.svg', url: 'https://twilio.com' }, @@ -615,7 +622,7 @@ export const svgs: iSVG[] = [ }, { title: 'Authy', - category: 'Software', + category: ['Software', 'Authentication'], route: '/library/authy.svg', url: 'https://authy.com/' }, @@ -736,7 +743,10 @@ export const svgs: iSVG[] = [ { title: 'Amazon Web Services', category: 'Software', - route: '/library/aws.svg', + route: { + light: '/library/aws_light.svg', + dark: '/library/aws_dark.svg' + }, url: 'https://aws.amazon.com/' }, { @@ -810,7 +820,7 @@ export const svgs: iSVG[] = [ }, { title: 'Auth0', - category: 'Library', + category: ['Library', 'Authentication'], route: '/library/auth0.svg', url: 'https://auth0.com/' }, @@ -1070,11 +1080,17 @@ export const svgs: iSVG[] = [ url: 'https://es.wikipedia.org/wiki/HTML5' }, { - title: 'CSS', + title: 'CSS (New)', category: 'Language', route: '/library/css.svg', url: 'https://es.wikipedia.org/wiki/CSS' }, + { + title: 'CSS', + category: 'Language', + route: '/library/css_old.svg', + url: 'https://es.wikipedia.org/wiki/CSS' + }, { title: 'midudev', category: 'Community', @@ -1399,6 +1415,13 @@ export const svgs: iSVG[] = [ route: '/library/webkit.svg', url: 'https://webkit.org/' }, + { + title: 'DuckDuckGo', + category: ['Software', 'Browser'], + route: '/library/duckduckgo.svg', + wordmark: '/library/duckduckgo-wordmark.svg', + url: 'https://duckduckgo.com/' + }, { title: 'Gemini', category: ['Google', 'AI'], @@ -2644,6 +2667,7 @@ export const svgs: iSVG[] = [ light: '/library/vercel_wordmark.svg', dark: '/library/vercel_wordmark_dark.svg' }, + brandUrl: 'https://vercel.com/geist/brands', url: 'https://vercel.com/' }, { @@ -3049,6 +3073,147 @@ export const svgs: iSVG[] = [ }, url: 'https://polar.sh/' }, + { + title: 'bolt', + category: 'Devtool', + route: { + light: '/library/bolt-new.svg', + dark: '/library/bolt-new_dark.svg' + }, + url: 'https://bolt.new/' + }, + { + title: 'JSON', + category: 'Language', + route: '/library/json.svg', + url: 'https://json.org/' + }, + { + title: 'nuqs', + category: 'Library', + route: { + light: '/library/nuqs.svg', + dark: '/library/nuqs_dark.svg' + }, + wordmark: { + light: '/library/nuqs-wordmark.svg', + dark: '/library/nuqs-wordmark_dark.svg' + }, + url: 'https://nuqs.47ng.com/' + }, + { + title: 'SoundCloud', + category: 'Music', + route: { + light: '/library/soundcloud-logo.svg', + dark: '/library/soundcloud-logo_dark.svg' + }, + wordmark: { + light: '/library/soundcloud-wordmark.svg', + dark: 'library/soundcloud-wordmark_dark.svg' + }, + url: 'https://soundcloud.com/' + }, + { + title: 'Clerk', + category: ['Software', 'Authentication'], + route: { + light: '/library/clerk-light.svg', + dark: '/library/clerk-dark.svg' + }, + url: 'https://clerk.com/' + }, + { + title: 'Mermaid', + category: ['Library'], + route: { + light: '/library/mermaid-logo-light.svg', + dark: '/library/mermaid-logo-dark.svg' + }, + url: 'https://mermaid.js.org/' + }, + { + title: 'Home Assistant', + category: ['IoT', 'Home Automation', 'Software'], + route: '/library/home-assistant.svg', + wordmark: { + light: '/library/home-assistant-wordmark.svg', + dark: '/library/home-assistant-wordmark-dark.svg' + }, + url: 'https://github.com/home-assistant/assets/tree/master/logo' + }, + { + title: 'UXAnaRangel', + category: ['Community'], + route: { + light: '/library/uxanarangel-light.svg', + dark: '/library/uxanarangel-dark.svg' + }, + url: 'https://uxanarangel.com/' + }, + { + title: 'UXCorpRangel', + category: ['Community'], + route: { + light: '/library/uxcorprangel-light.svg', + dark: '/library/uxcorprangel-dark.svg' + }, + url: 'https://github.com/UXCorpRangel/' + }, + { + title: 'PostHog', + category: 'Devtool', + route: '/library/posthog.svg', + wordmark: { + light: '/library/posthog-wordmark.svg', + dark: '/library/posthog-wordmark_dark.svg' + }, + url: 'https://posthog.com/' + }, + { + title: 'Lottielab', + category: 'Design', + route: '/library/lottielab.svg', + url: 'https://www.lottielab.com/' + }, + { + title: 'TanStack', + category: ['Software', 'Library'], + route: '/library/tanstack.svg', + url: 'https://tanstack.com/' + }, + { + title: 'TypeGPU', + category: ['Software', 'Library'], + route: { + light: '/library/typegpu-light.svg', + dark: '/library/typegpu-dark.svg' + }, + wordmark: { + light: '/library/typegpu-wordmark-light.svg', + dark: '/library/typegpu-wordmark-dark.svg' + }, + url: 'https://typegpu.com' + }, + { + title: 'dotenv', + category: ['Config', 'Library', 'Devtool'], + route: '/library/dotenv.svg', + url: 'https://github.com/motdotla/dotenv' + }, + { + title: 'dotenvx', + category: ['Secrets', 'Config', 'Devtool'], + route: '/library/dotenvx.svg', + url: 'https://dotenvx.com' + }, + { + title: 'Apache Kafka', + category: 'Software', + route: '/library/apache-kafka.svg', + wordmark: '/library/apache-kafka-wordmark.svg', + url: 'https://kafka.apache.org' + }, { title: 'Motion', category: 'Library', diff --git a/src/docs/api.md b/src/docs/api.md index 76dc803..fd8e41f 100644 --- a/src/docs/api.md +++ b/src/docs/api.md @@ -39,17 +39,18 @@ export interface Category { - For SVGs: ```ts -type ThemeOptions = { - light: string; +export type ThemeOptions = { dark: string; + light: string; }; export interface iSVG { - id: number; + id?: number; title: string; - category: string | string[]; + category: tCategory | tCategory[]; route: string | ThemeOptions; wordmark?: string | ThemeOptions; + brandUrl?: string; url: string; } ``` diff --git a/src/routes/api/+page.svelte b/src/routes/api/+page.svelte index b6d4ae5..323430c 100644 --- a/src/routes/api/+page.svelte +++ b/src/routes/api/+page.svelte @@ -42,7 +42,7 @@ 'prose dark:prose-invert', 'mx-auto max-w-3xl px-4 py-10', 'prose-h2:font-medium prose-h2:tracking-tight prose-h2:underline prose-h2:decoration-neutral-300 prose-h2:underline-offset-[6px] prose-h2:transition-opacity hover:prose-h2:opacity-70 dark:prose-h2:decoration-neutral-700/65', - 'prose-pre:m-0 prose-pre:border-neutral-200 dark:prose-pre:border dark:prose-pre:border-neutral-800/65' + 'prose-pre:m-0 prose-pre:border prose-pre:border-neutral-200 dark:prose-pre:border dark:prose-pre:border-neutral-800/65' )} >