diff --git a/src/lib/CategoryFilters.svelte b/src/lib/CategoryFilters.svelte new file mode 100644 index 0000000..b55ebe0 --- /dev/null +++ b/src/lib/CategoryFilters.svelte @@ -0,0 +1,64 @@ + + +
+ {#each selectedCategories as category} + {@const newCategories = selectedCategories.filter((c) => c !== category)} + {@const title = category.replaceAll('-', ' ')} + {#if newCategories.length === 0} + {title} + {:else} + `category=${t}`).join('&')}`} + > + {title} + + {/if} + {/each} + + {#each categories as category} + {#if !selectedCategories.includes(category)} + {@const newCategories = [...selectedCategories, category]} + {@const title = category.replaceAll('-', ' ')} + `category=${t}`).join('&')}`} + > + {title} + + {/if} + {/each} + + {#if selectedCategories.length !== 0} + + {/if} +
+ + diff --git a/src/lib/SearchableJson.svelte b/src/lib/SearchableJson.svelte index 3dee457..708dc62 100644 --- a/src/lib/SearchableJson.svelte +++ b/src/lib/SearchableJson.svelte @@ -3,13 +3,13 @@ import Seo from '$lib/components/Seo.svelte'; import Select from '$lib/components/Select.svelte'; import { packageManager } from '$stores/packageManager'; - import TagFilters from '$lib/TagFilters.svelte'; + import CategoryFilters from '$lib/CategoryFilters.svelte'; import { filterArray, sortArray } from '$utils/arrayUtils'; // eslint-disable-next-line @typescript-eslint/no-explicit-any export let data: any[]; - export let tags: string[]; - export let selectedTags: string[]; + export let categories: string[]; + export let selectedCategories: string[]; export let sortableFields: { value: string; label: string; asc: boolean }[]; export let displayTitle = ''; export let displayTitleSingular = ''; @@ -26,7 +26,7 @@

{displayTitle}

- +
{data.length} result{#if data.length !== 1}s{/if}{sortedData.length} result{#if sortedData.length !== 1}s{/if}

@@ -72,7 +72,6 @@ description={entry.description} repository={entry.repository} stars={entry.stars} - tags={entry.tags} date={entry.date} npm={entry.npm} version={entry.version} diff --git a/src/lib/TagFilters.svelte b/src/lib/TagFilters.svelte deleted file mode 100644 index 12ce3c6..0000000 --- a/src/lib/TagFilters.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - -
- {#each selectedTags as tag} - {@const newTags = selectedTags.filter((t) => t !== tag)} - {@const title = tag.replaceAll('-', ' ')} - {#if newTags.length === 0} - {title} - {:else} - `tag=${t}`).join('&')}`} - > - {title} - - {/if} - {/each} - - {#each tags as tag} - {#if !selectedTags.includes(tag)} - {@const newTags = [...selectedTags, tag]} - {@const title = tag.replaceAll('-', ' ')} - `tag=${t}`).join('&')}`}> - {title} - - {/if} - {/each} - - {#if selectedTags.length !== 0} - - {/if} -
- - diff --git a/src/lib/components/ComponentIndex/Card.svelte b/src/lib/components/ComponentIndex/Card.svelte index 992886a..382a7f0 100644 --- a/src/lib/components/ComponentIndex/Card.svelte +++ b/src/lib/components/ComponentIndex/Card.svelte @@ -6,7 +6,6 @@ export let title: string; export let description: string; - export let tags: string[]; export let stars: string; export let npm = ''; export let repository = undefined; @@ -27,11 +26,11 @@ }; -
+
diff --git a/src/lib/items.ts b/src/lib/items.ts index 72faa48..da8373f 100644 --- a/src/lib/items.ts +++ b/src/lib/items.ts @@ -308,7 +308,7 @@ const allItems: Array = [ tags: item.tags, type: 'Package', search: searchKeywords(item.title, item.description, ...(item.tags ?? []), item.npm ?? ''), - url: '/packages#component-' + item.title + url: '/packages#' + item.title })), ...(templates as Array).map((item) => ({ title: item.title, @@ -316,7 +316,7 @@ const allItems: Array = [ tags: item.tags, type: 'Template', search: searchKeywords(item.title, item.description, ...(item.tags ?? []), item.npm ?? ''), - url: '/templates#component-' + item.title + url: '/templates#' + item.title })), ...Object.entries( import.meta.glob('../routes/recipes/**/*.svx', { eager: true }) as Record< diff --git a/src/lib/schemas.js b/src/lib/schemas.js index 7195f2f..08b18fe 100644 --- a/src/lib/schemas.js +++ b/src/lib/schemas.js @@ -1,7 +1,7 @@ import { z } from 'zod'; import { packageNameRegex } from 'package-name-regex'; -const PACKAGES_TAGS = /** @type {const} */ ([ +const PACKAGES_CATEGORIES = /** @type {const} */ ([ 'auth', 'build-plugins', 'data-fetching', @@ -31,11 +31,11 @@ export const packagesSchema = z.array( url: z.string().url().optional(), repository: z.string().url(), description: z.string().max(250), - tags: z.array(z.enum(PACKAGES_TAGS)).min(1).max(6) + categories: z.array(z.enum(PACKAGES_CATEGORIES)).min(1).max(6) }) ); -const TEMPLATES_TAGS = /** @type {const} */ ([ +const TEMPLATES_CATEGORIES = /** @type {const} */ ([ 'blog', 'code-splitting', 'component-sets', @@ -66,6 +66,6 @@ export const templatesSchema = z.array( url: z.string().url().optional(), repository: z.string().url(), description: z.string().max(250), - tags: z.array(z.enum(TEMPLATES_TAGS)).min(1).max(6) + categories: z.array(z.enum(TEMPLATES_CATEGORIES)).min(1).max(6) }) ); diff --git a/src/lib/utils/extractUnique.test.ts b/src/lib/utils/extractUnique.test.ts deleted file mode 100644 index 0c9e699..0000000 --- a/src/lib/utils/extractUnique.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { extractUnique } from './extractUnique'; - -describe('extractUnique', () => { - it("creates an object using the item's `category` field", () => { - const extracted = extractUnique(oneItem, 'category'); - expect(extracted).toEqual([{ label: 'Testing', value: 'Testing' }]); - }); - - it('reduces down to unique values, including the empty string', () => { - const extracted = extractUnique(manyItems, 'category'); - expect(extracted.length).toBeLessThan(manyItems.length); - expect(extracted.map((i) => i.value)).toEqual([ - '', - 'Data Visualisation', - 'Forms & User Input', - 'SvelteKit Adapters', - 'Testing', - 'User Interaction' - ]); - }); -}); - -const oneItem = [ - { - title: 'svelte-carbonbadge', - url: 'https://gitlab.com/davidhund/svelte-carbonbadge', - description: 'Svelte badge component for https://www.websitecarbon.com/', - npm: 'svelte-carbonbadge', - addedOn: '2022-02-08', - category: 'Testing', - stars: 0 - } -]; - -const manyItems = [ - { - title: 'svelte-carbonbadge', - url: 'https://gitlab.com/davidhund/svelte-carbonbadge', - description: 'Svelte badge component for https://www.websitecarbon.com/', - npm: 'svelte-carbonbadge', - addedOn: '2022-02-08', - category: 'Testing', - stars: 0 - }, - { - title: 'svelte-form-validation', - url: 'https://github.com/DhyeyMoliya/svelte-form-validation', - npm: 'svelte-form-validation', - description: 'Svelte Form Validation Library', - tags: ['forms', 'form validation', 'components and libraries'], - addedOn: '2021-11-14T17:10:00.000Z', - category: 'Forms & User Input', - stars: 0 - }, - { - title: 'Date Picker Svelte', - url: 'https://github.com/probablykasper/date-picker-svelte', - description: 'Date and time picker for Svelte', - npm: 'date-picker-svelte', - addedOn: '2021-10-23', - category: 'Forms & User Input', - tags: [ - 'time and date', - 'forms', - 'components and libraries', - 'form validation', - 'inputs and widgets', - 'component sets' - ] - }, - { - title: 'svelte-virtual-table', - description: 'A virtual, sortable table for Svelte ', - url: 'https://github.com/BernhardWebstudio/svelte-virtual-table', - npm: 'svelte-virtual-table', - tags: ['components and libraries'], - addedOn: '2021-10-04', - category: 'Data Visualisation', - stars: 1 - }, - { - title: 'svelte-number-spinner', - description: - 'A number input field that can be controlled by mouse/touch drag, arrow keys or usual editing.', - url: 'https://github.com/bohnacker/svelte-number-spinner', - npm: 'svelte-number-spinner', - tags: ['components and libraries', 'inputs and widgets'], - addedOn: '2021-08-29T00:00:00Z', - category: 'Forms & User Input', - stars: 4 - }, - { - title: 'svelte-remixicon', - description: - 'An icon library for svelte based on Remix Icon. Consists of more than 2000 icons.', - url: 'https://github.com/ABarnob/svelte-remixicon', - npm: 'https://www.npmjs.com/package/svelte-remixicon', - tags: ['components and libraries'], - addedOn: '2021-08-25T00:00:00Z', - category: '', - stars: 14 - }, - { - title: 'svelte-fast-marquee', - description: 'A Marquee component for Svelte inspired by react-fast-marquee.', - url: 'https://github.com/abosch19/svelte-fast-marquee', - npm: 'svelte-fast-marquee', - tags: ['components and libraries'], - addedOn: '2021-08-25T00:00:00Z', - category: '', - stars: 2 - }, - { - title: 'sswr', - category: 'User Interaction', - description: 'Svelte stale while revalidate (SWR) data fetching strategy', - url: 'https://github.com/ConsoleTVs/sswr', - npm: 'https://www.npmjs.com/package/sswr', - tags: ['components and libraries', 'fonts and icons'], - addedOn: '2021-07-29T00:00:00Z', - stars: 59 - }, - { - title: 'svelte-adapter-firebase', - description: - 'SvelteKit adapter for Firebase Hosting rewrites to either Cloud Functions or Cloud Run for a Svelte SSR experience', - url: 'https://github.com/jthegedus/svelte-adapter-firebase', - npm: 'https://www.npmjs.com/package/svelte-adapter-firebase', - stars: 54, - tags: ['integrations'], - addedOn: '2021-03-31T00:00:00Z', - category: 'SvelteKit Adapters' - }, - { - title: 'architect/sveltekit-adapter', - description: - 'Adapter for Svelte apps that creates a Begin or Architect app, using a function for dynamic server rendering.', - url: 'https://github.com/architect/sveltekit-adapter', - npm: 'https://www.npmjs.com/package/@architect/sveltekit-adapter', - stars: 3, - tags: ['integrations'], - addedOn: '2021-08-09T00:00:00Z' - } -]; diff --git a/src/lib/utils/extractUnique.ts b/src/lib/utils/extractUnique.ts deleted file mode 100644 index a892aa3..0000000 --- a/src/lib/utils/extractUnique.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const extractUnique = ( - source: Array>, - field: string -): Array> => { - const extracted = source.map((item) => item[field] ?? ''); - const uniqued = Array.from(new Set(extracted.flat())); - return uniqued - .map((value) => ({ label: value, value })) - .sort((a, b) => { - if (typeof a.value === 'string' && typeof b.value === 'string') { - return a.value.toLowerCase().localeCompare(b.value.toLowerCase()); - } - if (typeof a.value === 'number' && typeof b.value === 'number') { - return a.value - b.value; - } - return 0; - }); -}; diff --git a/src/lib/utils/getCategories.ts b/src/lib/utils/getCategories.ts new file mode 100644 index 0000000..3c5666d --- /dev/null +++ b/src/lib/utils/getCategories.ts @@ -0,0 +1,11 @@ +export const getCategories = (input) => { + const output: string[] = []; + input.forEach((item) => { + item.categories.forEach((category) => { + if (!output.includes(category)) { + output.push(category); + } + }); + }); + return output.toSorted(); +}; diff --git a/src/lib/utils/getTags.ts b/src/lib/utils/getTags.ts deleted file mode 100644 index 01801fe..0000000 --- a/src/lib/utils/getTags.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const getTags = (input) => { - const output = []; - input.forEach((item) => { - item.tags.forEach((tag) => { - if (!output.includes(tag)) { - output.push(tag); - } - }); - }); - return output.toSorted(); -}; diff --git a/src/lib/utils/injectData.ts b/src/lib/utils/injectData.ts index a818d8d..ce62ecf 100644 --- a/src/lib/utils/injectData.ts +++ b/src/lib/utils/injectData.ts @@ -6,7 +6,7 @@ import type { z } from 'zod'; import type { packagesSchema, templatesSchema } from '$lib/schemas'; export const injectData = (input: z.infer) => { - const output = []; + const output: z.infer = []; for (const item of input) { // Github const githubIndex = Object.keys(github).find((key) => diff --git a/src/routes/help/submitting/+page.svelte b/src/routes/help/submitting/+page.svelte index 4c55f03..af71e68 100644 --- a/src/routes/help/submitting/+page.svelte +++ b/src/routes/help/submitting/+page.svelte @@ -4,7 +4,7 @@ import templates from '../../templates/templates.json'; import { onMount, tick } from 'svelte'; import { copyToClipboard } from '$lib/utils/clipboard'; - import { extractUnique } from '$lib/utils/extractUnique'; + import { getCategories } from '$utils/getCategories'; import Seo from '$lib/components/Seo.svelte'; const repoURL = 'https://github.com/svelte-society/sveltesociety.dev'; @@ -15,10 +15,10 @@ const data = { package: { - tags: extractUnique(packages, 'tags') + categories: getCategories(packages) }, template: { - tags: extractUnique(templates, 'tags') + categories: getCategories(templates) } }; @@ -33,7 +33,7 @@ let url = 'https://svelte-lorem-ipsum.dev'; let description = 'A dummy text generator that does not exist'; let npm = 'svelte-lorem-ipsum'; - let tags; + let categories; let repository = 'https://github.com/sveltejs/svelte-lorem-ipsum'; $: pathName = `${type.value}s`; @@ -43,19 +43,19 @@ repository: repository ? repository : undefined, description, npm: npm ? npm : undefined, - tags: tags?.map((tag) => tag.value) + categories: categories?.map((c) => c.value) }; - $: currentTags = data[type.value].tags; + $: currentCategories = data[type.value].categories; onMount(() => { const typeQuery = new URLSearchParams(location.search).get('type'); type = types.find((t) => t.value == typeQuery) || types[0]; }); - async function clearTags() { + async function clearCategories() { await tick(); - tags = null; + categories = null; } @@ -80,7 +80,7 @@ isClearable={false} showIndicator bind:value={type} - on:select={clearTags} + on:select={clearCategories} /> The type of snippet to generate
@@ -123,10 +123,16 @@
- +
- - A list of tags + + A list of categories
diff --git a/src/routes/packages/+page.server.ts b/src/routes/packages/+page.server.ts index 8e1c0f2..7a39b6b 100644 --- a/src/routes/packages/+page.server.ts +++ b/src/routes/packages/+page.server.ts @@ -1,5 +1,5 @@ import { packagesSchema } from '$lib/schemas.js'; -import { getTags } from '$utils/getTags'; +import { getCategories } from '$utils/getCategories'; import { injectData } from '$utils/injectData'; import packages from './packages.json'; @@ -8,15 +8,15 @@ export const prerender = false; export const load = async ({ url }) => { const data = injectData(packagesSchema.parse(packages)); - const selectedTags = url.searchParams.getAll('tag'); + const selectedCategories = url.searchParams.getAll('category'); - if (!selectedTags) { - return { packages: data, tags: getTags(data), selectedTags: [] }; + if (!selectedCategories) { + return { packages: data, categories: getCategories(data), selectedCategories: [] }; } const filteredData = data.filter((entry) => { - return selectedTags.every((val) => entry.tags.includes(val)); + return selectedCategories.every((val) => entry.categories.includes(val)); }); - return { packages: filteredData, tags: getTags(filteredData), selectedTags }; + return { packages: filteredData, categories: getCategories(filteredData), selectedCategories }; }; diff --git a/src/routes/packages/+page.svelte b/src/routes/packages/+page.svelte index 2f93a5c..f0d28a1 100644 --- a/src/routes/packages/+page.svelte +++ b/src/routes/packages/+page.svelte @@ -6,8 +6,8 @@ ` component used on the Svelte website", "npm": "@sveltejs/svelte-repl", - "tags": ["ui-components", "forms-and-input", "official"], + "categories": ["ui-components", "forms-and-input", "official"], "title": "@sveltejs/svelte-repl", "repository": "https://github.com/sveltejs/svelte-repl" }, { "description": "A `` component for Svelte apps", "npm": "@sveltejs/svelte-scroller", - "tags": ["ui-components", "styling-and-layout", "user-interaction", "official"], + "categories": ["ui-components", "styling-and-layout", "user-interaction", "official"], "title": "@sveltejs/svelte-scroller", "repository": "https://github.com/sveltejs/svelte-scroller" }, { "description": "A virtual list component for Svelte apps", "npm": "@sveltejs/svelte-virtual-list", - "tags": ["ui-components", "styling-and-layout", "official"], + "categories": ["ui-components", "styling-and-layout", "official"], "title": "@sveltejs/svelte-virtual-list", "repository": "https://github.com/sveltejs/svelte-virtual-list" }, @@ -1227,96 +1227,96 @@ "repository": "https://github.com/gitbreaker222/svelte-virtual-list", "description": "A virtual list component for Svelte apps - Community Edition", "npm": "svelte-virtual-list-ce", - "tags": ["ui-components", "styling-and-layout"] + "categories": ["ui-components", "styling-and-layout"] }, { "description": "abstract-state-router renderer for Svelte", "npm": "svelte-state-renderer", - "tags": ["routers"], + "categories": ["routers"], "title": "svelte-state-renderer", "repository": "https://github.com/TehShrike/svelte-state-renderer" }, { "description": "Simple and complete DOM testing utilities that encourage good practices", "npm": "@testing-library/svelte", - "tags": ["testing"], + "categories": ["testing"], "title": "@testing-library/svelte", "repository": "https://github.com/testing-library/svelte-testing-library" }, { "description": "Svelte component for file upload and file dropzone.", "npm": "svelte-file-dropzone", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "svelte-file-dropzone", "repository": "https://github.com/thecodejack/svelte-file-dropzone" }, { "description": "Svelte integration for Apollo GraphQL", "npm": "svelte-apollo", - "tags": ["data-fetching", "stores-and-state"], + "categories": ["data-fetching", "stores-and-state"], "title": "svelte-apollo", "repository": "https://github.com/timhall/svelte-apollo" }, { "description": "Fomantic-UI components for Svelte 3", "npm": "sveltemantic", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "sveltemantic", "repository": "https://github.com/titans-inc/sveltemantic" }, { "description": "A lightweight library for managing forms in Svelte", "npm": "svelte-forms-lib", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "svelte-forms-lib", "repository": "https://github.com/tjinauyeung/svelte-forms-lib" }, { "description": "A responsive, draggable and resizable grid layout, for Svelte", "npm": "svelte-grid", - "tags": ["ui-components", "styling-and-layout", "user-interaction"], + "categories": ["ui-components", "styling-and-layout", "user-interaction"], "title": "svelte-grid", "repository": "https://github.com/vaheqelyan/svelte-grid" }, { "description": "A smart popover component for Svelte", "npm": "svelte-popover", - "tags": ["ui-components", "styling-and-layout", "user-interaction"], + "categories": ["ui-components", "styling-and-layout", "user-interaction"], "title": "svelte-popover", "repository": "https://github.com/vaheqelyan/svelte-popover" }, { "description": "A Svelte component to crop images with easy interactions", "npm": "svelte-easy-crop", - "tags": ["ui-components", "images", "forms-and-input"], + "categories": ["ui-components", "images", "forms-and-input"], "title": "svelte-easy-crop", "repository": "https://github.com/ValentinH/svelte-easy-crop" }, { "description": "A set of Svelte UI components inspired by Google's Material Design", "npm": "svelte-mui", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "svelte-mui", "repository": "https://github.com/vikignt/svelte-mui" }, { "description": "Focused on making embedding and using media elements for the web simple.", "npm": "@vime/svelte", - "tags": ["ui-components"], + "categories": ["ui-components"], "title": "Vime", "repository": "https://github.com/vime-js/vime" }, { "description": "Simple Svelte component to detect offline & online changes.", "npm": "s-offline", - "tags": ["user-interaction"], + "categories": ["user-interaction"], "title": "s-offline", "repository": "https://github.com/vinayakkulkarni/s-offline" }, { "description": "A fast, friendly, and fun web UI kit for everyone", "npm": "minna-ui", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "minna-ui", "repository": "https://github.com/WeAreGenki/minna-ui" }, @@ -1326,7 +1326,7 @@ "repository": "https://github.com/huntabyte/shadcn-svelte", "description": "shadcn/ui, but for Svelte", "npm": "shadcn-svelte", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "svelte-headlessui", @@ -1334,68 +1334,68 @@ "repository": "https://github.com/CaptainCodeman/svelte-headlessui", "description": "HeadlessUI components for Svelte", "npm": "svelte-headlessui", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "description": "CSS media queries in Svelte", "npm": "svelte-media-query", - "tags": ["ui-components", "styling-and-layout"], + "categories": ["ui-components", "styling-and-layout"], "title": "svelte-media-query", "repository": "https://github.com/xelaok/svelte-media-query" }, { "description": "Reactive MVVM with MobX & Svelte", "npm": "svelte-mobx", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "svelte-mobx", "repository": "https://github.com/xelaok/svelte-mobx" }, { "description": "Input masking component for Svelte (credit cards, phones, dates, numbers, etc.)", "npm": "svelte-input-mask", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "svelte-input-mask", "repository": "https://github.com/xnimorz/svelte-input-mask" }, { "description": "Easily customizable library for validation scenarios in svelte components.", "npm": "svelidation", - "tags": ["forms-and-input"], + "categories": ["forms-and-input"], "title": "svelidation", "repository": "https://github.com/yazonnile/svelidation" }, { "description": "A Svelte component wrapper around FullCalendar.", "npm": "svelte-fullcalendar", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "svelte-fullcalendar", "repository": "https://github.com/YogliB/svelte-fullcalendar" }, { "description": "Svelte item list with pagination", "npm": "svelte-item-list", - "tags": ["ui-components", "user-interaction"], + "categories": ["ui-components", "user-interaction"], "title": "svelte-item-list", "repository": "https://github.com/the-homeless-god/svelte-item-list" }, { "description": "Web-components library built with Svelte", "npm": "@zooplus/zoo-web-components", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "@zooplus/zoo-web-components", "repository": "https://github.com/zooplus/zoo-web-components" }, { "description": "Svelte UI kit based on Atol design", "npm": "svelte-atoms", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "svelte-atoms", "repository": "https://gitlab.com/az67128/svelte-atoms" }, { "description": "frictionless state management", "npm": "overmind-svelte", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "overmind-svelte", "url": "https://overmindjs.org", "repository": "https://github.com/cerebral/overmind" @@ -1403,14 +1403,14 @@ { "description": "A tiny but mighty list virtualization library for Svelte, with zero dependencies - Supports variable heights/widths, sticky items, scrolling to index, and more!", "npm": "svelte-tiny-virtual-list", - "tags": ["ui-components", "styling-and-layout"], + "categories": ["ui-components", "styling-and-layout"], "title": "svelte-tiny-virtual-list", "repository": "https://github.com/Skayo/svelte-tiny-virtual-list" }, { "description": "Drop files(s) or click to browse file system", "npm": "@svelte-parts/drop-file", - "tags": ["user-interaction", "forms-and-input"], + "categories": ["user-interaction", "forms-and-input"], "title": "@svelte-parts/drop-file", "url": "https://svelte-parts.surge.sh/drop-file", "repository": "https://github.com/idris-maps/svelte-parts" @@ -1418,7 +1418,7 @@ { "description": "Yet another form component", "npm": "@svelte-parts/form", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "@svelte-parts/form", "url": "https://svelte-parts.surge.sh/form", "repository": "https://github.com/idris-maps/svelte-parts" @@ -1426,7 +1426,7 @@ { "description": "SVG icons from feather icons, maki icons and octicons", "npm": "@svelte-parts/icons", - "tags": ["ui-components", "icons"], + "categories": ["ui-components", "icons"], "title": "@svelte-parts/icons", "url": "https://svelte-parts.surge.sh/icons", "repository": "https://github.com/idris-maps/svelte-parts" @@ -1434,7 +1434,7 @@ { "description": "Allow pan and zoom on images", "npm": "@svelte-parts/zoom", - "tags": ["ui-components", "images"], + "categories": ["ui-components", "images"], "title": "@svelte-parts/zoom", "url": "https://svelte-parts.surge.sh/zoom", "repository": "https://github.com/idris-maps/svelte-parts" @@ -1442,49 +1442,49 @@ { "description": "Use Appwrite in Svelte components", "npm": "svelte-appwrite", - "tags": ["ui-components", "auth", "integrations"], + "categories": ["ui-components", "auth", "integrations"], "title": "svelte-appwrite", "repository": "https://github.com/appwrite/sdk-for-svelte" }, { "description": "svelte-pdf provides a component for rendering PDF documents using PDF.js", "npm": "svelte-pdf", - "tags": ["ui-components", "integrations"], + "categories": ["ui-components", "integrations"], "title": "svelte-pdf", "repository": "https://github.com/vinodnimbalkar/svelte-pdf" }, { "description": "Light & reactive client-side router for Svelte", "npm": "svelte-micro", - "tags": ["routers"], + "categories": ["routers"], "title": "svelte-micro", "repository": "https://github.com/ayndqy/svelte-micro" }, { "description": "A set of Fomantic-UI components for Svelte framework", "npm": "svantic", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "svantic", "repository": "https://github.com/ryu-man/svantic" }, { "description": "Memento design pattern (undo/redo) in Svelte", "npm": "@macfja/svelte-undoable", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "Undoable store", "repository": "https://github.com/macfja/svelte-undoable" }, { "description": "A collection of renderless/headless components for Svelte", "npm": "renderless-svelte", - "tags": ["ui-components", "user-interaction"], + "categories": ["ui-components", "user-interaction"], "title": "Renderless Svelte", "repository": "https://github.com/stephane-vanraes/renderless-svelte" }, { "description": "Set of simple state machines for Svelte applications", "npm": "svate", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "svate", "repository": "https://github.com/AlexxNB/svate" }, @@ -1493,83 +1493,83 @@ "repository": "https://github.com/kindoflew/svelte-parallax", "npm": "svelte-parallax", "description": "A spring-based parallax component for Svelte, based on react-spring/parallax.", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "Svelte Modals", "url": "https://svelte-modals.mattjennings.io", "npm": "svelte-modals", "description": "A simple, flexible, zero-dependency modal manager for Svelte.", - "tags": ["ui-components", "user-interaction"], + "categories": ["ui-components", "user-interaction"], "repository": "https://github.com/mattjennings/svelte-modals" }, { "description": "A (high order) store that keep its value through pages and reloads", "npm": "@macfja/svelte-persistent-store", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "Persistent Store", "repository": "https://github.com/MacFJA/svelte-persistent-store" }, { "description": "A (high order) store that can be requested to update itself", "npm": "@macfja/svelte-invalidable", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "Invalidable Store", "repository": "https://github.com/MacFJA/svelte-invalidable" }, { "description": "The awesome carousel component for Svelte 3", "npm": "svelte-carousel", - "tags": ["ui-components", "styling-and-layout", "user-interaction"], + "categories": ["ui-components", "styling-and-layout", "user-interaction"], "title": "svelte-carousel", "repository": "https://github.com/vadimkorr/svelte-carousel" }, { "description": "Immutable store for Svelte with full Typescript support and Redux Devtools integration", "npm": "svelte-restate", - "tags": ["stores-and-state"], + "categories": ["stores-and-state"], "title": "Svelte Restate", "repository": "https://github.com/endenwer/svelte-restate" }, { "description": "Declarative pincode component for Svelte", "npm": "svelte-pincode", - "tags": ["ui-components", "user-interaction", "forms-and-input"], + "categories": ["ui-components", "user-interaction", "forms-and-input"], "title": "svelte-pincode", "repository": "https://github.com/metonym/svelte-pincode" }, { "description": "Official tsParticles Svelte Component - Easily create highly customizable particle animations and use them as animated backgrounds for your website.", "npm": "@tsparticles/svelte", - "tags": ["ui-components"], + "categories": ["ui-components"], "title": "@tsparticles/svelte", "repository": "https://github.com/tsparticles/svelte/" }, { "description": "Svelte components for tiptap v2. Open source headless content editor.", "npm": "svelte-tiptap", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "svelte-tiptap", "repository": "https://github.com/sibiraj-s/svelte-tiptap" }, { "description": "PaperCSS components for Svelte", "npm": "spaper", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "Spaper", "repository": "https://github.com/Oli8/spaper" }, { "description": "Full-sized drag & drop event calendar with resource view", "npm": "@event-calendar/core", - "tags": ["ui-components", "forms-and-input"], + "categories": ["ui-components", "forms-and-input"], "title": "Event Calendar", "repository": "https://github.com/vkurko/calendar" }, { "description": "Straight-forward Svelte UI, made with Windi CSS", "npm": "@kahi-ui/framework", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "title": "Kahi UI", "repository": "https://github.com/novacbn/kahi-ui" }, @@ -1577,35 +1577,35 @@ "title": "Svelte Multi Adapter", "description": "An adapter to launch multiple adapter", "npm": "@macfja/svelte-multi-adapter", - "tags": ["sveltekit-adapters"], + "categories": ["sveltekit-adapters"], "repository": "https://github.com/macfja/svelte-adapter-multi#readme" }, { "title": "svelte-multiselect", "repository": "https://github.com/janosh/svelte-multiselect", "description": "Keyboard-friendly, accessible and highly customizable multi-select component", - "tags": ["ui-components", "forms-and-input", "user-interaction"], + "categories": ["ui-components", "forms-and-input", "user-interaction"], "npm": "svelte-multiselect" }, { "title": "svelte-toc", "repository": "https://github.com/janosh/svelte-toc", "description": "Sticky responsive table of contents component", - "tags": ["ui-components", "user-interaction"], + "categories": ["ui-components", "user-interaction"], "npm": "svelte-toc" }, { "title": "svelte-bricks", "repository": "https://github.com/janosh/svelte-bricks", "description": "Naive Svelte masonry component without column balancing (ragged columns at the bottom)", - "tags": ["ui-components", "styling-and-layout"], + "categories": ["ui-components", "styling-and-layout"], "npm": "svelte-bricks" }, { "title": "Svelte (and SvelteKit) OAuth2", "description": "Add OAuth2 authorization in Svelte (and SvelteKit, works with SSR)", "npm": "@macfja/svelte-oauth2", - "tags": ["auth", "integrations"], + "categories": ["auth", "integrations"], "repository": "https://github.com/macfja/svelte-oauth2#readme" }, { @@ -1613,105 +1613,105 @@ "repository": "https://github.com/paolotiu/svelte-boring-avatars", "description": "Svelte port of Boring Avatars", "npm": "svelte-boring-avatars", - "tags": ["ui-components", "images", "icons"] + "categories": ["ui-components", "images", "icons"] }, { "title": "filedrop-svelte", "repository": "https://github.com/chanced/filedrop-svelte", "description": "file dropzone action & component", "npm": "filedrop-svelte", - "tags": ["user-interaction", "forms-and-input"] + "categories": ["user-interaction", "forms-and-input"] }, { "title": "focus-svelte", "repository": "https://github.com/chanced/focus-svelte", "description": "focus lock for accessibility", "npm": "focus-svelte", - "tags": ["user-interaction", "forms-and-input"] + "categories": ["user-interaction", "forms-and-input"] }, { "title": "svelte-translate", "repository": "https://github.com/noelmugnier/svelte-translate", "description": "Use a dynamic translation service (loaded from xx-XX.json files) and fallback to the text in html tags if no translations are provided.", "npm": "svelte-translate", - "tags": ["ui-components", "internationalization"] + "categories": ["ui-components", "internationalization"] }, { "title": "svelecte", "repository": "https://github.com/mskocik/svelecte", "description": "Selectize-like autocomplete select/multiselect/tagging component", "npm": "svelecte", - "tags": ["ui-components", "forms-and-input", "user-interaction"] + "categories": ["ui-components", "forms-and-input", "user-interaction"] }, { "title": "svelte-adapter-azure-swa", "repository": "https://github.com/geoffrich/svelte-adapter-azure-swa", "description": "SvelteKit adapter for Azure Static Web Apps.", "npm": "svelte-adapter-azure-swa", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-adapter-appengine", "repository": "https://github.com/halfdanj/svelte-adapter-appengine", "description": "SvelteKit adapter for Google Cloud App Engine", "npm": "svelte-adapter-appengine", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "sveltekit-adapter-browser-extension", "repository": "https://github.com/antony/sveltekit-adapter-browser-extension", "description": "Build browser extensions with Svelte", "npm": "sveltekit-adapter-browser-extension", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-fsm", "repository": "https://github.com/kenkunz/svelte-fsm", "description": "Tiny, expressive, Svelte-optimized Finite State Machine library", "npm": "svelte-fsm", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "svelte-pin-input", "repository": "https://github.com/Yellowinq/svelte-pin-input", "description": "Pin Input component for Svelte", "npm": "@yellowinq/svelte-pin-input", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "svelte-codesandbox", "repository": "https://github.com/tropix126/svelte-codesandbox", "description": "A powerful Svelte wrapper component around the CodeSandbox editor embed.", "npm": "svelte-codesandbox", - "tags": ["integrations", "forms-and-input"] + "categories": ["integrations", "forms-and-input"] }, { "title": "svelte-icons-pack", "repository": "https://github.com/leshak/svelte-icons-pack", "description": "Icons pack", "npm": "svelte-icons-pack", - "tags": ["icons", "design-system"] + "categories": ["icons", "design-system"] }, { "title": "@joeinnes/svelte-image", "repository": "https://github.com/joeinnes/svelte-image", "description": "Svelte Component for using image CDNs to dynamically serve responsive images.", "npm": "@joeinnes/svelte-image", - "tags": ["images"] + "categories": ["images"] }, { "title": "@budgetdraw/sveltekit-cloudflare-adapter", "repository": "https://github.com/budgetdraw/sveltekit-cloudflare-adapter", "description": "Alternative SvelteKit adapter for Cloudflare workers. Designed to be standalone and not use wrangler.", "npm": "@budgetdraw/sveltekit-cloudflare-adapter", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-intl-precompile", "url": "https://svelte-intl-precompile.com/", "description": "I18n library for Svelte.js that analyzes your keys at build time for max performance and minimal footprint", "npm": "svelte-intl-precompile", - "tags": ["internationalization", "build-plugins"], + "categories": ["internationalization", "build-plugins"], "repository": "https://github.com/cibernox/svelte-intl-precompile" }, { @@ -1719,133 +1719,133 @@ "repository": "https://github.com/GCBenlloch/svelte-cleavejs", "description": "Svelte action for Cleave.js input masking", "npm": "svelte-cleavejs", - "tags": ["forms-and-input", "user-interaction"] + "categories": ["forms-and-input", "user-interaction"] }, { "title": "svelty-picker", "repository": "https://github.com/mskocik/svelty-picker", "description": "Simple date & time picker you will love", "npm": "svelty-picker", - "tags": ["forms-and-input", "user-interaction"] + "categories": ["forms-and-input", "user-interaction"] }, { "title": "svelte-slider", "repository": "https://github.com/korywka/svelte-slider", "description": "Single and Range sliders", "npm": "svelte-slider", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "sveltekit-adapter-wordpress-shortcode", "repository": "https://github.com/tomatrow/sveltekit-adapter-wordpress-shortcode", "description": "Build wordpress shortcode plugins with SvelteKit", "npm": "sveltekit-adapter-wordpress-shortcode", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "Svelte Expirable store", "repository": "https://github.com/MacFJA/svelte-expirable", "description": "A Svelte store with items that expire", "npm": "@macfja/svelte-expirable", - "tags": ["user-interaction", "notifications", "stores-and-state"] + "categories": ["user-interaction", "notifications", "stores-and-state"] }, { "title": "Store2", "repository": "https://github.com/vkurko/svelte-store2", "description": "Extended Svelte stores with additional methods", "npm": "svelte-store2", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "Svelte(kit) adapter for Neutralino", "repository": "https://github.com/MacFJA/svelte-adapter-neutralino", "description": "A SvelteKit adapter to generate a Neutralinojs application from a SvelteKit project", "npm": "@macfja/svelte-adapter-neutralino", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "sveltekit-adapter-html-like", "repository": "https://github.com/idleberg/sveltekit-adapter-html-like", "description": "Adapter for SvelteKit apps that prerenders your site as static files for template engines such as PHP, Blade, Handlebars, EJS etc.", "npm": "sveltekit-adapter-html-like", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-gestures", "repository": "https://github.com/Rezi/svelte-gestures", "description": "collection of gesture recognisers for Svelte.", "npm": "svelte-gestures", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "svelte-adapter-github", "repository": "https://github.com/malynium/svelte-adapter-github", "description": "Easily deploy your static site to GitHub Pages", "npm": "svelte-adapter-github", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-steps", "repository": "https://github.com/shaozi/svelte-steps", "description": "A wizard steps component", "npm": "svelte-steps", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "AgnosticUI Svelte", "description": "A set of UI primitives that start their lives in clean HTML and CSS", "repository": "https://github.com/AgnosticUI/agnosticui/tree/master/agnostic-svelte", "npm": "agnostic-svelte", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "svelte-adapter-static-digitalocean", "repository": "https://github.com/torstendittmann/svelte-adapter-static-digitalocean", "description": "SvelteKit adapter for DigitalOcean App Platform static sites.", "npm": "svelte-adapter-static-digitalocean", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "KitQL", "repository": "https://github.com/jycouet/kitql", "description": "A set of tools, helping you building efficient apps in a fast way.", "npm": "@kitql/all-in", - "tags": ["data-fetching", "stores-and-state"] + "categories": ["data-fetching", "stores-and-state"] }, { "title": "svelte-brick-gallery", "repository": "https://github.com/anotherempty/svelte-brick-gallery", "description": "A masonry-like image gallery component for svelte", "npm": "svelte-brick-gallery", - "tags": ["images", "styling-and-layout"] + "categories": ["images", "styling-and-layout"] }, { "title": "SvelteKit Adapter Bun.js", "repository": "https://github.com/gornostay25/svelte-adapter-bun", "description": "SvelteKit adapter that generates a standalone Bun server.", "npm": "svelte-adapter-bun", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "@rgossiaux/svelte-headlessui", "repository": "https://github.com/rgossiaux/svelte-headlessui", "description": "Unofficial Svelte port of the Headless UI component library", "npm": "@rgossiaux/svelte-headlessui", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "BeerUi", "repository": "https://github.com/beerui/BeerUi", "description": "A Svelte Ui Components", "npm": "@brewer/beerui", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "Skeleton", "url": "https://skeleton.dev/", "description": "A fully featured web UI toolkit for Svelte and Tailwind.", "npm": "@skeletonlabs/skeleton", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "repository": "https://github.com/skeletonlabs/skeleton" }, { @@ -1853,14 +1853,14 @@ "repository": "https://github.com/wd-David/svelte-hover-draw-svg", "description": "A lightweight Svelte component to draw SVG on hover.", "npm": "svelte-hover-draw-svg", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "Casual UI Svelte", "repository": "https://github.com/Casual-UI/casual-ui", "description": "A simple, easy to use UI components lib for Svelte developers.", "npm": "@casual-ui/svelte", - "tags": [ + "categories": [ "design-system", "ui-components", "forms-and-input", @@ -1873,112 +1873,112 @@ "repository": "https://github.com/specialdoom/proi-ui", "description": "Yet another Svelte UI lib", "npm": "@specialdoom/proi-ui", - "tags": ["ui-components", "design-system", "user-interaction"] + "categories": ["ui-components", "design-system", "user-interaction"] }, { "title": "svelte-currency-input", "repository": "https://github.com/fmaclen/svelte-currency-input", "description": "A form input that converts numbers to localized currency formats as you type", "npm": "@canutin/svelte-currency-input", - "tags": ["forms-and-input", "internationalization"] + "categories": ["forms-and-input", "internationalization"] }, { "title": "flowbite-svelte", "repository": "https://github.com/themesberg/flowbite-svelte", "description": "Official Svelte components built for Flowbite and Tailwind CSS", "npm": "flowbite-svelte", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "typesafe-i18n", "repository": "https://github.com/ivanhofer/typesafe-i18n", "description": "A fully type-safe and lightweight internationalization library for all your TypeScript and JavaScript projects.", "npm": "typesafe-i18n", - "tags": ["ui-components", "internationalization"] + "categories": ["ui-components", "internationalization"] }, { "title": "tolgee/svelte", "repository": "https://github.com/tolgee/tolgee-js/tree/main/packages/svelte", "description": "Web-based localization tool enabling users to translate directly in the Svelte app they develop", "npm": "@tolgee/svelte", - "tags": ["ui-components", "internationalization"] + "categories": ["ui-components", "internationalization"] }, { "title": "sthemer", "repository": "https://github.com/ivanhofer/sthemer", "description": "A lightweight yet powerful solution to support multiple color schemes in your Svelte/SvelteKit application.", "npm": "sthemer", - "tags": ["ui-components", "styling-and-layout", "design-system"] + "categories": ["ui-components", "styling-and-layout", "design-system"] }, { "title": "svelte-exstore", "repository": "https://github.com/noney1412/svelte-exstore", "description": "Connect your store to Redux Devtools to enhance your work flow.", "npm": "svelte-exstore", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "Svelte Scroll Video", "description": "A component to play a video by scrolling the page", "repository": "https://github.com/macfja/svelte-scroll-video#readme", "npm": "@macfja/svelte-scroll-video", - "tags": ["images", "user-interaction"] + "categories": ["images", "user-interaction"] }, { "title": "@prgm/sveltekit-progress-bar", "repository": "https://github.com/prgm-dev/sveltekit-progress-bar", "description": "A progress bar component that hooks to SvelteKit navigation", "npm": "@prgm/sveltekit-progress-bar", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "svelte-unicons", "repository": "https://github.com/devShamim/svelte-unicons", "description": "Unicons for Svelte based on @iconscout/unicons", "npm": "svelte-unicons", - "tags": ["ui-components", "icons", "user-interaction"] + "categories": ["ui-components", "icons", "user-interaction"] }, { "title": "svelte-google-auth", "repository": "https://github.com/halfdanj/svelte-google-auth", "description": "Integration with Google Authenticartion for sveltekit", "npm": "svelte-google-auth", - "tags": ["auth", "integrations"] + "categories": ["auth", "integrations"] }, { "title": "sveltekit-adapter-firebase", "repository": "https://github.com/simonnepomuk/monorepo/tree/main/libs/sveltekit-adapter-firebase", "description": "SvelteKit Adapter for Firebase", "npm": "sveltekit-adapter-firebase", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "sveltekit-search-params", "repository": "https://github.com/paoloricciuti/sveltekit-search-params", "description": "The best way to read and WRITE from query params in sveltekit.", "npm": "sveltekit-search-params", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "sveltekit-view-transition", "repository": "https://github.com/paoloricciuti/sveltekit-view-transition", "description": "Simplified view-transition-api for Sveltekit.", "npm": "sveltekit-view-transition", - "tags": ["styling-and-layout"] + "categories": ["styling-and-layout"] }, { "title": "sterling-svelte", "repository": "https://github.com/GeoffCox/sterling-svelte", "description": "A modern, accessible, and lightweight component library for Svelte.", "npm": "@geoffcox/sterling-svelte", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "@perfectthings/ui", "url": "https://ui.perfectthings.dev/", "description": "A set of simple, but perfect, UI components, written in Svelte", "npm": "@perfectthings/ui", - "tags": ["design-system", "forms-and-input", "ui-components"], + "categories": ["design-system", "forms-and-input", "ui-components"], "repository": "https://github.com/perfect-things/ui/" }, { @@ -1986,35 +1986,35 @@ "repository": "https://github.com/tanstack/query", "description": "Powerful asynchronous state management, server-state utilities and data fetching for the web", "npm": "@tanstack/svelte-query", - "tags": ["data-fetching", "stores-and-state"] + "categories": ["data-fetching", "stores-and-state"] }, { "title": "svelte-form-builder", "repository": "https://github.com/pragmatic-engineering/svelte-form-builder-community", "description": "A No-Code Form Builder Library", "npm": "@pragmatic-engineering/svelte-form-builder-community", - "tags": ["forms-and-input", "ui-components"] + "categories": ["forms-and-input", "ui-components"] }, { "title": "SvelteKit Cordova/Capacitor Adapter", "repository": "https://github.com/ptkdev/sveltekit-cordova-adapter", "description": "Adapter for build mobile apps (android/ios) with Svelte Kit and Apache Cordova or Ionic Capacitor", "npm": "@ptkdev/sveltekit-cordova-adapter", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "SvelteKit Electron Adapter", "repository": "https://github.com/ptkdev/sveltekit-electron-adapter", "description": "Adapter for build desktop apps with Svelte Kit and Electron", "npm": "@ptkdev/sveltekit-electron-adapter", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "@carlosv2/adapter-node-ws", "repository": "https://github.com/carlosV2/adapter-node-ws", "description": "Adapter for SvelteKit apps that generates a standalone Node server with support for WebSockets.", "npm": "@carlosv2/adapter-node-ws", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "leblog", @@ -2022,90 +2022,90 @@ "description": "Add a blog (or changelog) to any SvelteKit site.", "npm": "leblog", "repository": "https://github.com/nbgoodall/leblog", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "html-svelte-parser", "repository": "https://github.com/PatrickG/html-svelte-parser", "description": "HTML to Svelte parser that works on both the server and the client.", "npm": "html-svelte-parser", - "tags": ["ui-components"] + "categories": ["ui-components"] }, { "title": "Svelte Droplet", "repository": "https://github.com/probablykasper/svelte-droplet", "description": "File dropzone utility with styling up to you", "npm": "svelte-droplet", - "tags": ["forms-and-input", "user-interaction"] + "categories": ["forms-and-input", "user-interaction"] }, { "title": "chat-embed", "repository": "https://github.com/mawa-ai/chat-embed", "description": "A chat component made with svelte", "npm": "chat-embed", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "Lucide icons", "repository": "https://github.com/lucide-icons/lucide", "description": "Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.", "npm": "lucide-svelte", - "tags": ["icons", "ui-components"] + "categories": ["icons", "ui-components"] }, { "title": "YeSvelte", "repository": "https://github.com/yesvelte/yesvelte", "description": "Flexible Svelte UI component library, designed to help developers build enterprise-grade web applications quickly and easily", "npm": "yesvelte", - "tags": ["ui-components", "design-system", "forms-and-input"] + "categories": ["ui-components", "design-system", "forms-and-input"] }, { "title": "QR Code generator for SvelteKit", "repository": "https://github.com/bonosoft/sveltekit-qrcode", "description": "Use QR codes to initialise your onetime password generator or transfer other information", "npm": "@bonosoft/sveltekit-qrcode", - "tags": ["auth", "user-interaction"] + "categories": ["auth", "user-interaction"] }, { "title": "Progress component for SvelteKit", "repository": "https://github.com/bonosoft/sveltekit-progress", "description": "Add circular or square status and progress indicators to your pages", "npm": "@bonosoft/sveltekit-progress", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "Code Entry component for SvelteKit", "repository": "https://github.com/bonosoft/sveltekit-codeentry", "description": "Allows user to enter pin or numeric codes for example onetime passwords", "npm": "@bonosoft/sveltekit-codeentry", - "tags": ["auth", "forms-and-input"] + "categories": ["auth", "forms-and-input"] }, { "title": "@radar-azdelta/svelte-datatable", "repository": "https://github.com/RADar-AZDelta/svelte-datatable", "description": "A datatable in Svelte that can handle very lage CSV's with ease.", "npm": "@radar-azdelta/svelte-datatable", - "tags": ["ui-components", "data-visualisation"] + "categories": ["ui-components", "data-visualisation"] }, { "title": "svelte-svg-transform", "repository": "https://github.com/bartektelec/svelte-svg-transform", "description": "A tiny component to override SVG file properties", "npm": "svelte-svg-transform", - "tags": ["ui-components", "icons", "images"] + "categories": ["ui-components", "icons", "images"] }, { "title": "@nerd-coder/svelte-zod-form", "repository": "https://github.com/nerd-coder/svelte-zod-form", "description": "Building forms in Svelte with breeze, using Zod", "npm": "@nerd-coder/svelte-zod-form", - "tags": ["forms-and-input"] + "categories": ["forms-and-input"] }, { "title": "sveltekit-adapter-iis", "description": "An adapter to deploy to IIS Server with iisnode installed", "npm": "sveltekit-adapter-iis", - "tags": ["integrations", "sveltekit-adapters"], + "categories": ["integrations", "sveltekit-adapters"], "repository": "https://github.com/abaga129/sveltekit-adapter-iis" }, { @@ -2113,28 +2113,28 @@ "repository": "https://github.com/thecodejack/svelte-dx-table", "description": "Simple dev friendly Svelte component for building a HTML Table with basic features like sorting by default.", "npm": "svelte-dx-table", - "tags": ["ui-components", "styling-and-layout", "data-visualisation", "user-interaction"] + "categories": ["ui-components", "styling-and-layout", "data-visualisation", "user-interaction"] }, { "title": "svelte-switch", "repository": "https://github.com/thecodejack/svelte-switch", "description": "SvelteJS component for switch or toggle a boolean. User would be able to drag or click for toggling.", "npm": "svelte-switch", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "svelte-pagination", "repository": "https://github.com/thecodejack/svelte-pagination", "description": "Raw SvelteJS component for dynamic pagination. By applying styles, developer can acheive component in multiple forms.", "npm": "svelte-pagination", - "tags": ["ui-components"] + "categories": ["ui-components"] }, { "title": "STDF", "url": "https://stdf.design/", "description": "Mobile web component library based on Svelte and Tailwind.", "npm": "stdf", - "tags": ["ui-components", "design-system"], + "categories": ["ui-components", "design-system"], "repository": "https://github.com/any-tdf/stdf" }, { @@ -2142,28 +2142,28 @@ "repository": "https://github.com/TwicPics/components", "description": "Images and videos components - Context aware resizing and cropping, lazy-loading, LQIP, Next-Gen format, compression, CDN.", "npm": "@twicpics/components", - "tags": ["ui-components", "images"] + "categories": ["ui-components", "images"] }, { "title": "Svane", "repository": "https://github.com/ShipBit/svane", "description": "A single-component dev helper to see your current Tailwind breakpoint", "npm": "@shipbit/svane", - "tags": ["ui-components", "styling-and-layout"] + "categories": ["ui-components", "styling-and-layout"] }, { "title": "sveltekit-html-minifier", "repository": "https://github.com/ntsd/sveltekit-html-minifier", "description": "Sveltekit Adapter to Minify the preload HTML page", "npm": "sveltekit-html-minifier", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-tex", "repository": "https://github.com/ntsd/svelte-tex", "description": "Svelte component to convert TeX/LaTeX to MathML or SVG", "npm": "svelte-tex", - "tags": ["ui-components", "images"] + "categories": ["ui-components", "images"] }, { "title": "drab", @@ -2171,42 +2171,42 @@ "repository": "https://github.com/rossrobino/drab", "description": "Unstyled Svelte component library", "npm": "drab", - "tags": ["design-system", "user-interaction", "ui-components"] + "categories": ["design-system", "user-interaction", "ui-components"] }, { "title": "SupaSvelteKit", "repository": "https://github.com/OpenFrenchFries/supasveltekit", "description": "🌟 Where Svelte's elegance meets Supabase's might! 🌟", "npm": "supasveltekit", - "tags": ["ui-components", "integrations"] + "categories": ["ui-components", "integrations"] }, { "title": "@jill64/sveltekit-adapter-aws", "repository": "https://github.com/jill64/sveltekit-adapter-aws", "description": "AWS adapter for SvelteKit with multiple architecture", "npm": "@jill64/sveltekit-adapter-aws", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "@jill64/sentry-sveltekit-cloudflare", "repository": "https://github.com/jill64/sentry-sveltekit-cloudflare", "description": "Unofficial Sentry Integration for SvelteKit Cloudflare Adapter", "npm": "@jill64/sentry-sveltekit-cloudflare", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "@jill64/sentry-sveltekit-edge", "repository": "https://github.com/jill64/sentry-sveltekit-edge", "description": "Unofficial Sentry integration for SvelteKit edge runtime", "npm": "@jill64/sentry-sveltekit-edge", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "SvelteKit-Adapter-Versioned-Worker", "repository": "https://github.com/hedgehog125/SvelteKit-Adapter-Versioned-Worker", "description": "A SvelteKit adapter for generating service workers to make PWAs work offline", "npm": "sveltekit-adapter-versioned-worker", - "tags": ["sveltekit-adapters"] + "categories": ["sveltekit-adapters"] }, { "title": "LayerChart", @@ -2214,14 +2214,14 @@ "repository": "https://github.com/techniq/layerchart", "description": "Composable Svelte chart components to build a wide range of visualizations", "npm": "layerchart", - "tags": ["ui-components", "data-visualisation"] + "categories": ["ui-components", "data-visualisation"] }, { "title": "@egjs/svelte-flicking", "repository": "https://github.com/naver/egjs-flicking", "description": "🎠 ♻️ Everyday 30 million people experience. It's reliable, flexible and extendable carousel.", "npm": "@egjs/svelte-flicking", - "tags": ["images", "styling-and-layout", "user-interaction"] + "categories": ["images", "styling-and-layout", "user-interaction"] }, { "title": "Svelte UX", @@ -2229,7 +2229,7 @@ "repository": "https://github.com/techniq/svelte-ux", "description": "Collection of Svelte components, actions, stores, and utilities to build highly interactive applications", "npm": "svelte-ux", - "tags": ["ui-components", "stores-and-state", "styling-and-layout", "design-system"] + "categories": ["ui-components", "stores-and-state", "styling-and-layout", "design-system"] }, { "title": "sveltekit-proxy", @@ -2237,14 +2237,14 @@ "repository": "https://github.com/born05/sveltekit-proxy", "description": "A simple way to proxy paths from SvelteKit to a different server.", "npm": "@born05/sveltekit-proxy", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "MisMerge", "repository": "https://github.com/BearToCode/mismerge", "description": "A modern merge editor for the Web", "npm": "@mismerge/core", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "svelte-ripple-action", @@ -2252,14 +2252,14 @@ "repository": "https://github.com/Posandu/svelte-ripple-action", "description": "Svelte action to add ripple effects to Svelte components", "npm": "svelte-ripple-action", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "sveltekit-superforms", "repository": "https://github.com/ciscoheat/sveltekit-superforms", "description": "Making SvelteKit validation and displaying of forms a pleasure!", "npm": "sveltekit-superforms", - "tags": ["forms-and-input"] + "categories": ["forms-and-input"] }, { "title": "svelte-reparent", @@ -2267,469 +2267,469 @@ "repository": "https://github.com/LeoDog896/svelte-reparent", "description": "Utility for reparenting elements", "npm": "svelte-reparent", - "tags": ["stores-and-state", "user-interaction"] + "categories": ["stores-and-state", "user-interaction"] }, { "title": "svelte-inline-modal", "repository": "https://github.com/jill64/svelte-inline-modal", "description": "Simple Modal on the Fly", "npm": "svelte-inline-modal", - "tags": ["styling-and-layout", "user-interaction"] + "categories": ["styling-and-layout", "user-interaction"] }, { "title": "@jill64/svelte-input", "repository": "https://github.com/jill64/svelte-input", "description": "Functional Input Component Set for Svelte", "npm": "@jill64/svelte-input", - "tags": ["forms-and-input", "ui-components"] + "categories": ["forms-and-input", "ui-components"] }, { "title": "@jill64/svelte-toast", "repository": "https://github.com/jill64/svelte-toast", "description": "Pre-Themed Responsive Toast Notification", "npm": "@jill64/svelte-toast", - "tags": ["ui-components", "notifications", "user-interaction"] + "categories": ["ui-components", "notifications", "user-interaction"] }, { "title": "@tanstack/svelte-table", "npm": "@tanstack/svelte-table", "repository": "https://github.com/tanstack/table", "description": "Headless UI for building powerful tables & datagrids for TS/JS", - "tags": ["ui-components", "styling-and-layout", "data-visualisation"] + "categories": ["ui-components", "styling-and-layout", "data-visualisation"] }, { "title": "Histoire", "npm": "@histoire/plugin-svelte", "repository": "https://github.com/histoire-dev/histoire", "description": "Fast and beautiful interactive component playgrounds, powered by Vite", - "tags": ["testing", "integrations"] + "categories": ["testing", "integrations"] }, { "title": "Lucia", "npm": "lucia", "repository": "https://github.com/lucia-auth/lucia", "description": "An auth library that abstracts away the complexity of handling users and sessions", - "tags": ["integrations", "auth"] + "categories": ["integrations", "auth"] }, { "title": "Monaco", "npm": "@monaco-auth/sveltekit", "repository": "https://github.com/pilcrowOnPaper/monaco", "description": "A simple, lightweight alternative to Auth.js", - "tags": ["integrations", "auth"] + "categories": ["integrations", "auth"] }, { "title": "trpc-svelte-query", "npm": "trpc-svelte-query", "repository": "https://github.com/ottomated/trpc-svelte-query", "description": "A tRPC wrapper around @tanstack/svelte-query", - "tags": ["data-fetching"] + "categories": ["data-fetching"] }, { "title": "Svelte Legos", "npm": "svelte-legos", "repository": "https://github.com/ankurrsinghal/svelte-legos", "description": "Collection of essential Svelte Composition Utilities", - "tags": ["user-interaction", "stores-and-state"] + "categories": ["user-interaction", "stores-and-state"] }, { "title": "Supabase Auth", "npm": "@supabase/auth-helpers-sveltekit", "repository": "https://github.com/supabase/auth-helpers/tree/main/packages/sveltekit", "description": "A collection of framework specific Auth utilities for working with Supabase", - "tags": ["integrations", "auth"] + "categories": ["integrations", "auth"] }, { "title": "svelte-markdown", "npm": "svelte-markdown", "repository": "https://github.com/pablo-abc/svelte-markdown", "description": "Markdown parser to svelte components", - "tags": ["ui-components", "markdown"] + "categories": ["ui-components", "markdown"] }, { "title": "svelte-exmarkdown", "npm": "svelte-exmarkdown", "repository": "https://github.com/ssssota/svelte-exmarkdown", "description": "Svelte component to render markdown. Dynamic and Extensible.", - "tags": ["ui-components", "markdown"] + "categories": ["ui-components", "markdown"] }, { "title": "Sentry for Svelte", "npm": "@sentry/svelte", "repository": "https://github.com/getsentry/sentry-javascript/tree/develop/packages/svelte", "description": "Official Sentry SDK for Svelte", - "tags": ["integrations", "testing"] + "categories": ["integrations", "testing"] }, { "title": "Sentry for SvelteKit", "npm": "@sentry/sveltekit", "repository": "https://github.com/getsentry/sentry-javascript/tree/develop/packages/sveltekit", "description": "Official Sentry SDK for SvelteKit", - "tags": ["integrations", "testing"] + "categories": ["integrations", "testing"] }, { "title": "svelte-french-toast", "npm": "svelte-french-toast", "repository": "https://github.com/kbrgl/svelte-french-toast", "description": "Buttery smooth toast notifications for Svelte", - "tags": ["ui-components", "notifications", "user-interaction"] + "categories": ["ui-components", "notifications", "user-interaction"] }, { "title": "@zerodevx/svelte-toast", "npm": "@zerodevx/svelte-toast", "repository": "https://github.com/zerodevx/svelte-toast", "description": "Simple elegant toast notifications", - "tags": ["ui-components", "notifications", "user-interaction"] + "categories": ["ui-components", "notifications", "user-interaction"] }, { "title": "svodals", "repository": "https://github.com/chadulous/svodals", "description": "Cybernatically enhanced modals", "npm": "@mavthedev/svodals", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "svelte-persisted-store", "repository": "https://github.com/joshnuss/svelte-persisted-store", "description": "A Svelte store that persists to localStorage", "npm": "svelte-persisted-store", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "svelte-stripe", "repository": "https://github.com/joshnuss/svelte-stripe", "description": "Everything you need to add Stripe Elements to your Svelte project.", "npm": "svelte-stripe", - "tags": ["integrations", "ui-components"] + "categories": ["integrations", "ui-components"] }, { "title": "vite-plugin-kit-routes", "repository": "https://github.com/jycouet/kitql/tree/main/packages/vite-plugin-kit-routes", "description": "Automatically updates route references in SvelteKit projects", "npm": "vite-plugin-kit-routes", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-action-balancer", "repository": "https://github.com/paoloricciuti/svelte-action-balancer", "description": "A svelte action to balance the text inside the an html node. Heavily inspired by react-wrap-balancer", "npm": "svelte-action-balancer", - "tags": ["styling-and-layout"] + "categories": ["styling-and-layout"] }, { "title": "svelte-sonner", "repository": "https://github.com/wobsoriano/svelte-sonner", "description": "An opinionated toast component for Svelte.", "npm": "svelte-sonner", - "tags": ["ui-components", "notifications", "user-interaction"] + "categories": ["ui-components", "notifications", "user-interaction"] }, { "title": "Square Svelte Store", "repository": "https://github.com/square/svelte-store", "description": "Extension of svelte default stores for dead-simple handling of complex asynchronous behavior.", "npm": "@square/svelte-store", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "@neoconfetti/svelte", "repository": "https://github.com/PuruVJ/neoconfetti/tree/main/packages/svelte", "description": "@neoconfetti/svelte allows you to show an awesome confetti explosion on your page, with Svelte!", "npm": "@neoconfetti/svelte", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "Svelte Headless Table", "repository": "https://github.com/bryanmylee/svelte-headless-table", "description": "Unopinionated and extensible data tables for Svelte", "npm": "svelte-headless-table", - "tags": ["ui-components", "styling-and-layout", "data-visualisation"] + "categories": ["ui-components", "styling-and-layout", "data-visualisation"] }, { "title": "AutoAnimate", "repository": "https://github.com/formkit/auto-animate", "description": "Add motion to your apps with a single line of code.", "npm": "@formkit/auto-animate", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "SvelteUI", "repository": "https://github.com/svelteuidev/svelteui", "description": "SvelteUI is a Svelte library with a variety of packages to help make development easier!", "npm": "@svelteuidev/core", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "Houdini", "repository": "https://github.com/HoudiniGraphql/houdini", "description": "The disappearing GraphQL client.", "npm": "houdini", - "tags": ["data-fetching", "integrations"] + "categories": ["data-fetching", "integrations"] }, { "title": "@svelte-put/clickoutside", "repository": "https://github.com/vnphanquang/svelte-put/tree/main/packages/actions/clickoutside", "description": "Svelte action use:clickoutside - event for clicking outside a node", "npm": "@svelte-put/clickoutside", - "tags": ["user-interaction"] + "categories": ["user-interaction"] }, { "title": "Grail UI", "repository": "https://github.com/grail-ui/grail-ui", "description": "Grail UI offers a set of component primitives, actions and utilities that help you build accessible and high quality Svelte applications faster", "npm": "@grail-ui/svelte", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "svelte-maplibre", "repository": "https://github.com/dimfeld/svelte-maplibre", "description": "Svelte wrapper for the maplibre mapping library.", "npm": "svelte-maplibre", - "tags": ["ui-components", "data-visualisation", "integrations"] + "categories": ["ui-components", "data-visualisation", "integrations"] }, { "title": "SvelteKit Open Graph Image Generation", "repository": "https://github.com/etherCorps/sveltekit-og", "description": "Dynamically generate Open Graph images from an HTML+CSS template or Svelte component. Based on Satori.", "npm": "@ethercorps/sveltekit-og", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "rollup-plugin-svelte", "npm": "rollup-plugin-svelte", "description": "Compile Svelte components with Rollup", "repository": "https://github.com/sveltejs/rollup-plugin-svelte", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "svelte-loader", "npm": "svelte-loader", "description": "Webpack loader for svelte components", "repository": "https://github.com/sveltejs/svelte-loader", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "vite-plugin-svelte", "npm": "@sveltejs/vite-plugin-svelte", "description": "This is the official svelte plugin for vite", "repository": "https://github.com/sveltejs/vite-plugin-svelte", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "esbuild-svelte", "npm": "esbuild-svelte", "description": "An esbuild plugin to compile Svelte components", "repository": "https://github.com/EMH333/esbuild-svelte", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "rollup-plugin-svelte-hot", "npm": "rollup-plugin-svelte-hot", "description": "Fork of official rollup-plugin-svelte with added HMR support (for both Nollup or Rollup)", "repository": "https://github.com/rixo/rollup-plugin-svelte-hot", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "parcel-transformer-svelte3-plus", "npm": "parcel-transformer-svelte3-plus", "description": "Transformer plugin for Parcel v2; works with Svelte 3 & Svelte 4", "repository": "https://github.com/HellButcher/parcel-transformer-svelte3-plus", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "parcel-plugin-svelte", "npm": "parcel-plugin-svelte", "description": "A Parcel v1 plugin that enables Svelte support", "repository": "https://github.com/DeMoorJasper/parcel-plugin-svelte", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "sveltejs-brunch", "npm": "sveltejs-brunch", "description": "Compile Svelte components inside Brunch projects", "repository": "https://github.com/StarpTech/sveltejs-brunch", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocess", "npm": "svelte-preprocess", "description": "A ✨ magical ✨ Svelte preprocessor with sensible defaults and support for: PostCSS, SCSS, Less, Stylus, Coffeescript, TypeScript, Pug and much more", "repository": "https://github.com/sveltejs/svelte-preprocess", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "description": "Write Svelte components in markdown syntax", "npm": "svelte-preprocess-markdown", "title": "svelte-preprocess-markdown", "repository": "https://github.com/AlexxNB/svelte-preprocess-markdown", - "tags": ["build-plugins", "markdown"] + "categories": ["build-plugins", "markdown"] }, { "description": "A markdown preprocessor for Svelte", "npm": "mdsvex", "title": "mdsvex", "repository": "https://github.com/pngwn/MDsveX", - "tags": ["build-plugins", "markdown"] + "categories": ["build-plugins", "markdown"] }, { "title": "svelte-switch-case", "repository": "https://github.com/l-portet/svelte-switch-case", "description": "Switch case syntax for Svelte", "npm": "svelte-switch-case", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "modular-css", "npm": "@modular-css/svelte", "description": "Svelte preprocessor support for modular-css", "repository": "https://github.com/tivac/modular-css/tree/main/packages/svelte", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocess-sass", "npm": "svelte-preprocess-sass", "description": "Svelte preprocessor for sass", "repository": "https://github.com/ls-age/svelte-preprocess-sass", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocess-css-hash", "npm": "svelte-preprocess-css-hash", "description": "Passing hashed css class name to child component. It is used to avoid class name conflicts.", "repository": "https://github.com/jiangfengming/svelte-preprocess-css-hash", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocess-html-asset", "npm": "svelte-preprocess-html-asset", "description": "Transform html asset relative path. Works with snowpack & webpack 5.", "repository": "https://github.com/jiangfengming/svelte-preprocess-html-asset", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocessor-fetch", "npm": "svelte-preprocessor-fetch", "description": "A preprocessor for Svelte can be used to fetch data before the component is compiled.", "repository": "https://github.com/kevmodrome/svelte-preprocessor-fetch", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "prettier-plugin-svelte", "npm": "prettier-plugin-svelte", "description": "Format your svelte components using prettier.", "repository": "https://github.com/sveltejs/prettier-plugin-svelte", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "svelte-check", "npm": "svelte-check", "description": "Detects unused css. Adds Svelte A11y hints. Provides JavaScript/TypeScript diagnostics.", "repository": "https://github.com/sveltejs/language-tools/tree/master/packages/svelte-check", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "svelte-reactive-css-preprocess", "repository": "https://github.com/srmullen/svelte-reactive-css-preprocess", "description": "Automatically update css on component state changes.", "npm": "svelte-reactive-css-preprocess", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-subcomponent-preprocessor", "repository": "https://github.com/srmullen/svelte-subcomponent-preprocessor", "description": "Write more than one component per svelte file", "npm": "svelte-subcomponent-preprocessor", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "eslint-plugin-svelte", "repository": "https://github.com/sveltejs/eslint-plugin-svelte", "description": "ESLint plugin that applies own rules to Svelte", "npm": "eslint-plugin-svelte", - "tags": ["build-plugins", "official"] + "categories": ["build-plugins", "official"] }, { "title": "full-client-server-sveltekit", "repository": "https://github.com/SBHattarj/full-client-server-sveltekit", "description": "A plugin allowing usage of server directly on browser using web socket", "npm": "full-client-server-sveltekit", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "svelte-preprocess-delegate-events", "repository": "https://github.com/baseballyama/svelte-preprocess-delegate-events", "description": "Delegate events with on:* 🎉", "npm": "svelte-preprocess-delegate-events", - "tags": ["build-plugins"] + "categories": ["build-plugins"] }, { "title": "Dark Runes", "repository": "https://github.com/flakolefluk/dark-runes", "description": "Svelte Custom Runes. Dark Runes will be retired when equivalent features are incorporated into the core Svelte framework.", "npm": "dark-runes", - "tags": ["build-plugins", "stores-and-state"] + "categories": ["build-plugins", "stores-and-state"] }, { "title": "Clerk SvelteKit", "repository": "https://github.com/markjaquith/clerk-sveltekit", "description": "Adapter for using Clerk authentication in SvelteKit.", "npm": "clerk-sveltekit", - "tags": ["auth", "integrations"] + "categories": ["auth", "integrations"] }, { "title": "Svelvet", "repository": "https://github.com/open-source-labs/Svelvet", "description": "A Svelte library for building dynamic, infinitely customizable node-based user interfaces and flowcharts", "npm": "svelvet", - "tags": ["data-visualisation", "ui-components"] + "categories": ["data-visualisation", "ui-components"] }, { "title": "Carta", "repository": "https://github.com/BearToCode/carta", "description": "Carta is a lightweight, fast and extensible Svelte Markdown editor and viewer, based on Marked.", "npm": "carta-md", - "tags": ["forms-and-input", "markdown"] + "categories": ["forms-and-input", "markdown"] }, { "title": "svelte-broadcastable", "repository": "https://github.com/Hugos68/svelte-broadcastable", "description": "Svelte broadcastable is a store wrapper for the Broadcast Channel API.", "npm": "svelte-broadcastable", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "svelte-markdown-input", "repository": "https://github.com/CaptainCodeman/svelte-markdown-input", "description": "A simple markdown input action and store for Svelte. Designed for simple inputs of HTML snippets.", "npm": "svelte-markdown-input", - "tags": ["forms-and-input", "markdown"] + "categories": ["forms-and-input", "markdown"] }, { "title": "svelte-tweakpane-ui", "repository": "https://github.com/kitschpatrol/svelte-tweakpane-ui", "description": "A Svelte component library wrapping UI elements from Tweakpane.", "npm": "svelte-tweakpane-ui", - "tags": ["ui-components", "styling-and-layout"] + "categories": ["ui-components", "styling-and-layout"] }, { "title": "tRPC-SvelteKit", "repository": "https://github.com/icflorescu/trpc-sveltekit", "description": "End-to-end typesafe APIs with tRPC.io for your SvelteKit applications.", "npm": "trpc-sveltekit", - "tags": ["integrations", "stores-and-state", "data-fetching"] + "categories": ["integrations", "stores-and-state", "data-fetching"] }, { "title": "Konsta UI", "repository": "https://github.com/konstaui/konsta", "description": "Mobile UI components made with Tailwind CSS", "npm": "konsta", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "@prismicio/svelte", "repository": "https://github.com/prismicio/prismic-svelte", "description": "Svelte components to render content from the Prismic API", "npm": "@prismicio/svelte", - "tags": ["integrations", "images", "styling-and-layout"] + "categories": ["integrations", "images", "styling-and-layout"] }, { "title": "@slicemachine/adapter-sveltekit", @@ -2737,146 +2737,146 @@ "repository": "https://github.com/prismicio/slice-machine/tree/master/packages/adapter-sveltekit", "description": "Turn your SvelteKit project into a website builder with Prismic's Slice Machine", "npm": "@slicemachine/adapter-sveltekit", - "tags": ["integrations", "sveltekit-adapters"] + "categories": ["integrations", "sveltekit-adapters"] }, { "title": "svelte-i18next", "repository": "https://github.com/maximux13/svelte-i18next", "description": "Add support to your svelte kit project to use i18next", "npm": "@maximux13/svelte-i18next", - "tags": ["integrations", "internationalization"] + "categories": ["integrations", "internationalization"] }, { "title": "@vite-pwa/sveltekit", "repository": "https://github.com/vite-pwa/sveltekit", "description": "Zero-config PWA Plugin for SvelteKit", "npm": "@vite-pwa/sveltekit", - "tags": ["integrations", "build-plugins"] + "categories": ["integrations", "build-plugins"] }, { "title": "Bits UI", "repository": "https://github.com/huntabyte/bits-ui", "description": "The headless components for Svelte.", "npm": "bits-ui", - "tags": ["ui-components"] + "categories": ["ui-components"] }, { "title": "Formsnap", "repository": "https://github.com/huntabyte/formsnap", "description": "Functional, accessible, and powerful form components for Svelte.", "npm": "formsnap", - "tags": ["forms-and-input", "ui-components"] + "categories": ["forms-and-input", "ui-components"] }, { "title": "cmdk-sv", "repository": "https://github.com/huntabyte/cmdk-sv", "description": "cmdk, but for Svelte", "npm": "cmdk-sv", - "tags": ["ui-components", "user-interaction"] + "categories": ["ui-components", "user-interaction"] }, { "title": "Ato UI", "repository": "https://github.com/bennymi/ato-ui", "description": "The elemental UI component library for Svelte, built with UnoCSS and Melt UI.", "npm": "ato-ui", - "tags": ["ui-components", "design-system"] + "categories": ["ui-components", "design-system"] }, { "title": "svelte-monaco", "repository": "https://github.com/LeoDog896/svelte-monaco", "description": "Reactive two-way, full theme support monaco editor for Svelte(&Kit).", "npm": "svelte-monaco", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "SuperNavigation", "repository": "https://github.com/0xDjole/super-navigation", "description": "SuperNavigation is a powerful, customizable navigation library for Svelte and SvelteKit applications.", "npm": "super-navigation", - "tags": ["styling-and-layout"] + "categories": ["styling-and-layout"] }, { "title": "svelte-audio-store", "repository": "https://github.com/elron/svelte-audio-store", "description": "A Svelte store for managing and playing audio", "npm": "@elron/svelte-audio-store", - "tags": ["stores-and-state"] + "categories": ["stores-and-state"] }, { "title": "Svelte Color Select", "repository": "https://github.com/CaptainCodeman/svelte-color-select", "description": "Okhsv color select for Svelte", "npm": "svelte-color-select", - "tags": ["ui-components", "forms-and-input"] + "categories": ["ui-components", "forms-and-input"] }, { "title": "svelte-enhanced-transitions", "repository": "https://github.com/Thiagolino8/svelte-enhanced-transitions", "description": "Enhance your svelte transitions", "npm": "svelte-enhanced-transitions", - "tags": ["styling-and-layout"] + "categories": ["styling-and-layout"] }, { "title": "Amplify Adapter", "repository": "https://github.com/gzimbron/amplify-adapter", "description": "Deploy Sveltekit SSR application to Aws Amplify (CI/CD)", "npm": "amplify-adapter", - "tags": ["sveltekit-adapters", "integrations"] + "categories": ["sveltekit-adapters", "integrations"] }, { "title": "@tsconfig/svelte", "repository": "https://github.com/tsconfig/bases", "description": "A base TSConfig for working with Svelte.", "npm": "@tsconfig/svelte", - "tags": ["integrations"] + "categories": ["integrations"] }, { "title": "svelte-highlight", "repository": "https://github.com/metonym/svelte-highlight", "description": "Syntax highlighting for Svelte using highlight.js.", "npm": "svelte-highlight", - "tags": ["ui-components", "data-visualisation"] + "categories": ["ui-components", "data-visualisation"] }, { "title": "progressbar-svelte", "repository": "https://github.com/dhimankamal/svelte-progressbar", "description": "A Svelte package for customizable progress bars.", "npm": "progressbar-svelte", - "tags": ["ui-components"] + "categories": ["ui-components"] }, { "title": "Brefer", "repository": "https://github.com/KilDesu/brefer", "description": "A Svelte preprocessor to shorten the new Svelte 5 syntax for handling reactivity", "npm": "brefer", - "tags": ["stores-and-state", "build-plugins"] + "categories": ["stores-and-state", "build-plugins"] }, { "title": "svelte-mapbox", "repository": "https://github.com/jack-weilage/svelte-mapbox", "description": "A simple and powerful Svelte wrapper around mapbox-gl", "npm": "svelte-mapbox", - "tags": ["data-visualisation", "integrations"] + "categories": ["data-visualisation", "integrations"] }, { "title": "@sveltejs/enhanced-img", "repository": "https://github.com/sveltejs/kit/tree/main/packages/enhanced-img", "description": "A Vite plugin which runs a Svelte preprocessor to locate images and then transform them at build-time.", "npm": "@sveltejs/enhanced-img", - "tags": ["official", "images", "build-plugins"] + "categories": ["official", "images", "build-plugins"] }, { "title": "@unpic/svelte", "repository": "https://github.com/ascorbic/unpic-img/tree/main/packages/svelte", "description": "A high-performance, responsive image component for Svelte.", "npm": "@unpic/svelte", - "tags": ["images", "ui-components"] + "categories": ["images", "ui-components"] }, { "title": "@playwright/experimental-ct-svelte", "repository": "https://github.com/microsoft/playwright/tree/main/packages/playwright-ct-svelte", "description": "Playwright plugin which can test your Svelte components", "npm": "@playwright/experimental-ct-svelte", - "tags": ["images", "ui-components"] + "categories": ["images", "ui-components"] } ] diff --git a/src/routes/templates/+page.server.ts b/src/routes/templates/+page.server.ts index 0102007..ee17774 100644 --- a/src/routes/templates/+page.server.ts +++ b/src/routes/templates/+page.server.ts @@ -1,5 +1,5 @@ import { templatesSchema } from '$lib/schemas.js'; -import { getTags } from '$utils/getTags'; +import { getCategories } from '$utils/getCategories'; import { injectData } from '$utils/injectData'; import templates from './templates.json'; @@ -8,15 +8,15 @@ export const prerender = false; export const load = async ({ url }) => { const data = injectData(templatesSchema.parse(templates)); - const selectedTags = url.searchParams.getAll('tag'); + const selectedCategories = url.searchParams.getAll('category'); - if (!selectedTags) { - return { packages: data, tags: getTags(data), selectedTags: [] }; + if (!selectedCategories) { + return { templates: data, categories: getCategories(data), selectedCategories: [] }; } const filteredData = data.filter((entry) => { - return selectedTags.every((val) => entry.tags.includes(val)); + return selectedCategories.every((val) => entry.categories.includes(val)); }); - return { templates: filteredData, tags: getTags(filteredData), selectedTags }; + return { templates: filteredData, categories: getCategories(filteredData), selectedCategories }; }; diff --git a/src/routes/templates/+page.svelte b/src/routes/templates/+page.svelte index 400d017..150c008 100644 --- a/src/routes/templates/+page.svelte +++ b/src/routes/templates/+page.svelte @@ -6,8 +6,8 @@