mirror of
https://github.com/pheralb/svgl.git
synced 2025-12-29 08:01:36 +08:00
Compare commits
273 Commits
55199765be
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 42f8f2de19 | |||
| 1a1a17e721 | |||
| ac92d613e1 | |||
| f75d0a5845 | |||
| 1e350a301c | |||
| d8c2478f59 | |||
| ec331914e2 | |||
| 7b72e06bc0 | |||
| 4f53ce6b8b | |||
| 18e0328910 | |||
| e82edbb3ac | |||
| 65e185f14a | |||
| 618536abf7 | |||
| 6b53786f25 | |||
| 5e0d933bdc | |||
| a072d137f4 | |||
| 3cea9e3c27 | |||
| a5eb60cac7 | |||
| 7f03e677a5 | |||
| 2d87c8a334 | |||
| 3c8886bd23 | |||
| e6b1a82bc7 | |||
| cb51b5aa29 | |||
| 32332503a9 | |||
| c805b623c7 | |||
| 85e430c6b9 | |||
| 88f473d595 | |||
| 367481f6e8 | |||
| 605bbe52e7 | |||
| 272d5ac54c | |||
| 19b56344c0 | |||
| b244638dd1 | |||
| 4217033082 | |||
| a0c6920d35 | |||
| 7d4ed63dd6 | |||
| cab8409791 | |||
| d00a29d448 | |||
| 21af2505cd | |||
| 5c17f597c1 | |||
| 1ede8ab657 | |||
| 07c02deada | |||
| 66a9c23c28 | |||
| d49a57429a | |||
| bbc289012e | |||
| 70a722512f | |||
| 5f162035fa | |||
| eabbf027ff | |||
| db80b509cb | |||
| bca4fd8fb4 | |||
| bbd47f6869 | |||
| 5674b27db9 | |||
| 14bad31c36 | |||
| c3757181b5 | |||
| fad74405ef | |||
| f5389c36b5 | |||
| 5c1ce9f4b7 | |||
| 404c9f5aeb | |||
| c4b1d8b152 | |||
| 59bdd9c73a | |||
| dd6741e221 | |||
| b9f013ad1c | |||
| 88cf3e6a97 | |||
| 98ffd67bd7 | |||
| ca57dbcc4f | |||
| a6a86f4cd7 | |||
| ab5a98b2c9 | |||
| 7f9f87b8bb | |||
| 86760a1c59 | |||
| e8272a347d | |||
| 962865f3ab | |||
| 9cdbc4353d | |||
| 2c32265127 | |||
| b473c7ca0e | |||
| bd7813693b | |||
| 2ef7bfc3ce | |||
| 57bdd6920f | |||
| c2e1c46a7f | |||
| 1a8f437d2e | |||
| 377f54823f | |||
| cb15c04a42 | |||
| cd136257b7 | |||
| bd67c7b1f7 | |||
| feeeaedc29 | |||
| 532cfeadfb | |||
| adf8ea3891 | |||
| e87c33b870 | |||
| 38ae8e58ee | |||
| 6afd0e108a | |||
| b9ef279cc0 | |||
| fed96a97b7 | |||
| 224d4fbc25 | |||
| b85df6149a | |||
| 27db5a9b7f | |||
| 100e24e306 | |||
| 6039fc2116 | |||
| 6cb0169d8f | |||
| 7d3c144673 | |||
| 7421994755 | |||
| 8ed427b721 | |||
| b84f366d12 | |||
| da832ba4a9 | |||
| ff88dbc341 | |||
| be650f34c7 | |||
| f8602dc640 | |||
| 7c3972d064 | |||
| 3b41deef58 | |||
| c81908cbb4 | |||
| 94e71b14b5 | |||
| 97af4a1288 | |||
| 05fd6bbce8 | |||
| 469fdb7243 | |||
| fd9b47ee1f | |||
| 0e7b8cd5ae | |||
| ceb5835f21 | |||
| bd6ce410bc | |||
| 488813af2c | |||
| a603c09e7e | |||
| 7a914edbd3 | |||
| a8a5cb22fa | |||
| 19ee5cef58 | |||
| b89631b84b | |||
| dafc5fc8f1 | |||
| aab357095f | |||
| a35b66d623 | |||
| 6de7993f85 | |||
| c32dde4b87 | |||
| b2de7e96d0 | |||
| 8bf76bd4f4 | |||
| f9379ffaec | |||
| c14555d21f | |||
| 5126eed189 | |||
| 7bca58d58b | |||
| aa2ed5fc1c | |||
| 07a9198750 | |||
| dcb2fad6f4 | |||
| ab16011b25 | |||
| 204b13c445 | |||
| f28f171d3b | |||
| 2af89d3578 | |||
| 0eaf2ab125 | |||
| 95ee98972c | |||
| dd07e1888d | |||
| 7b81780642 | |||
| 6264d775cb | |||
| e8d42a7055 | |||
| 4f5137ba6e | |||
| c4cfc1017f | |||
| a4232532bd | |||
| 3c56cb6b55 | |||
| 8ce308ed36 | |||
| 54c8943e54 | |||
| fa27a6a752 | |||
| ed5c1172b4 | |||
| a2c29dce99 | |||
| c50125d79c | |||
| 437f69de61 | |||
| 93aedefe79 | |||
| 63b189bce3 | |||
| bf855d15e0 | |||
| 9cf1677e51 | |||
| 49f860f25f | |||
| b7d05a0a56 | |||
| 138b5293ed | |||
| 195fae38e7 | |||
| 32a6eb4f4f | |||
| c33ef02f36 | |||
| 559eb676d9 | |||
| 45de1a631b | |||
| 60314a9648 | |||
| 26f6bb9061 | |||
| 83ec150266 | |||
| 1e0bb95493 | |||
| 01e0b7c66b | |||
| f505eea909 | |||
| e5d130b0c5 | |||
| c306b57ce7 | |||
| 1bf55e6c6e | |||
| aae0771f18 | |||
| f749358b97 | |||
| 7c2ae97dd9 | |||
| 50677ca3db | |||
| bf90439c63 | |||
| 44fd09efb2 | |||
| 3e507cf7c8 | |||
| 8583871f73 | |||
| 0c78255847 | |||
| 8a61650e4b | |||
| 4bd69b5ede | |||
| aef80d6b7d | |||
| 452d121ac4 | |||
| 894aca0d14 | |||
| 11df0d13bd | |||
| e35bb01927 | |||
| 5f5b3687c8 | |||
| 7f5c374d02 | |||
| b354a61eba | |||
| 5d45c720b4 | |||
| aeeaacd993 | |||
| 077df6f0d5 | |||
| 9b9124b220 | |||
| c7e86dd0f4 | |||
| 25ce756481 | |||
| 1da589f79d | |||
| 56125d2844 | |||
| 0b93f9b613 | |||
| 12038062db | |||
| 2198058131 | |||
| 0f2f026803 | |||
| 789fc0ce72 | |||
| 5bc3616dec | |||
| f411ffef8a | |||
| 3b3d30cd0c | |||
| 8e3ea5150a | |||
| 895052ff7a | |||
| fdb9f91d2a | |||
| 6aac1ebb6c | |||
| 3497a6e1e9 | |||
| f2a61200b1 | |||
| 1c11725e01 | |||
| e7bbd32b56 | |||
| 70ad2e0088 | |||
| 907c2b9892 | |||
| eb548fedc0 | |||
| 7d3cd750de | |||
| 3f99f8a115 | |||
| 380b10690e | |||
| c39c2a2f5b | |||
| 2130d8d316 | |||
| 65651faa5b | |||
| a05e849ddb | |||
| 5c88b29387 | |||
| 31f2cefaba | |||
| de47f2fa03 | |||
| 6f7d3c51f9 | |||
| 074e9231d1 | |||
| edb9ece0e3 | |||
| 3349654f79 | |||
| ada05ad75b | |||
| 5b27f543fa | |||
| 6d031bc995 | |||
| ea4b598f2f | |||
| fff76243ec | |||
| 9825fc2544 | |||
| 04ffbe9bbb | |||
| bc831bed17 | |||
| d3e92602c1 | |||
| 3a11cd3d31 | |||
| e465cd7a51 | |||
| f45b2d9d27 | |||
| 9db8deed28 | |||
| 1832eaceca | |||
| 32558885e6 | |||
| 6ffc890a15 | |||
| aa87b899a6 | |||
| 26f23f7e5b | |||
| 74e42b00dc | |||
| 8e27a8053d | |||
| 1aadeb5604 | |||
| ec6db6d23b | |||
| 803e13001a | |||
| 77356d3215 | |||
| 1591ea3146 | |||
| 2a38b834c3 | |||
| e6d441e9f2 | |||
| bc34bdc904 | |||
| 2692c7d34d | |||
| 82d4967e13 | |||
| 3943e624da | |||
| a1d61d73fa | |||
| 5e2a5e4d50 | |||
| 7b5e1d99da | |||
| 4347dc52c3 | |||
| 144fa7d7c4 |
@@ -28,19 +28,20 @@ jobs:
|
||||
env:
|
||||
PUBLIC_SVGL_VERSION: v5
|
||||
|
||||
svgs-size:
|
||||
check-svgs:
|
||||
runs-on: ubuntu-latest
|
||||
name: 📦 SVGs Size
|
||||
name: 📦 Check SVGs
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: Install utility dependencies
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
working-directory: ./utils/check-size
|
||||
|
||||
- name: Check svgs size
|
||||
run: pnpm start
|
||||
working-directory: ./utils/check-size
|
||||
- name: Check SVGs size
|
||||
run: pnpm check:size
|
||||
|
||||
- name: Check unused SVGs
|
||||
run: pnpm check:data
|
||||
|
||||
@@ -12,10 +12,8 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm 10
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Install global dependencies
|
||||
run: pnpm install
|
||||
|
||||
+1
-2
@@ -15,7 +15,7 @@ RUN pnpm install --frozen-lockfile
|
||||
FROM base AS builder
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
ENV PUBLIC_SVGL_VERSION=beta
|
||||
RUN pnpm run check:size
|
||||
RUN pnpm run build:prod
|
||||
|
||||
# Production image
|
||||
@@ -29,7 +29,6 @@ COPY package.json ./
|
||||
|
||||
# Set production environment
|
||||
ENV NODE_ENV=production
|
||||
ENV PUBLIC_SVGL_VERSION=beta
|
||||
|
||||
# Expose port
|
||||
EXPOSE 3000
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div align="center">
|
||||
<a href="https://svgl.app">
|
||||
<img src="static/images/readme.png">
|
||||
<img src="static/images/screenshot_dark.png">
|
||||
</a>
|
||||
<p></p>
|
||||
</div>
|
||||
@@ -10,25 +10,29 @@
|
||||
Explore
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="https://github.com/pheralb/svgl/issues/new?assignees=&labels=request&projects=&template=request-svg.yml&title=%5B%F0%9F%94%94+Request+SVG%5D%3A+">
|
||||
Request logo
|
||||
<a href="https://github.com/sponsors/pheralb">
|
||||
Sponsor this project
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="#-getting-started">
|
||||
Submit logo
|
||||
Getting Started
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="#-extensions">
|
||||
<a href="https://svgl.app/extensions" target="_blank">
|
||||
Extensions
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="https://svgl.app/api">
|
||||
API
|
||||
<a href="#️-stack">
|
||||
Stack
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="#%EF%B8%8F-contributing">
|
||||
<a href="#️-contributing">
|
||||
Contributing
|
||||
</a>
|
||||
<span> ✦ </span>
|
||||
<a href="#️-license">
|
||||
License
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</p>
|
||||
@@ -48,50 +52,51 @@
|
||||
|
||||
## 📦 Extensions
|
||||
|
||||
A list of extensions that use the [svgl API](https://svgl.app/api), created by the community:
|
||||
A list of extensions that use the [**SVGL API**](https://svgl.app/docs/api), created by the community:
|
||||
|
||||
| | Extension | Description | Created by | Link |
|
||||
| ---------------------------------------------------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/svgl.svg" height="25" /> | SVGL CLI | A CLI for easily adding SVG icons to your project. | [sujjeee](https://twitter.com/sujjeeee) | [GitHub Repository](https://github.com/sujjeee/svgls) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/react_light.svg" height="25" /> | SVGL for React | An open-source NPM package that offers a SVGL Logos for React. | [ridemountainpig](https://x.com/ridemountainpig) | [GitHub Repository](https://github.com/ridemountainpig/svgl-react?tab=readme-ov-file#svgl-react) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/vue.svg" height="25" /> | SVGL for Vue | An open-source NPM package that offers a SVGL Logos for Vue. | [selemondev](https://x.com/selemondev) | [GitHub Repository](https://github.com/selemondev/svgl-vue?tab=readme-ov-file#--svgl-vue--) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/svelte.svg" height="25" /> | SVGL for Svelte | An open-source NPM package that offers a SVGL Logos for Svelte. | [selemondev](https://x.com/selemondev) | [GitHub Repository](https://github.com/selemondev/svgl-svelte#--svgl-svelte--) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/figma.svg" height="25" /> | SVGL for Figma | Add svgs from svgl to your Figma project. | [quilljou](https://twitter.com/quillzhou) | [Figma Plugin](https://www.figma.com/community/plugin/1320306989350693206/svgl) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/powertoys.svg" height="25" /> | SVGL for PowerToys | Search & copy SVG logos in PowerToys Run. | [SameerJS6](https://x.com/Sameerjs6) | [Website](https://svgl.sameerjs.com/) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/raycast.svg" height="25" /> | SVGL for Raycast | Search SVG logos via svgl. | [1weiho](https://twitter.com/1weiho) | [Raycast Store](https://www.raycast.com/1weiho/svgl) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/vscode.svg" height="25" /> | SVGL for VSCode | SVGL directly in your VSCode. | [girlazote](https://twitter.com/girlazote) | [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl) |
|
||||
| <img src="https://svgl-badge.vercel.app/api/Library/Svgl?theme=light" height="25" /> | SVGL Badge | A beautiful badges with svgl SVG logos. | [ridemountainpig](https://twitter.com/ridemountainpig) | [Website](https://svgl-badge.vercel.app/) |
|
||||
| <img src="https://github.com/serafimcloud/21st/blob/main/apps/web/public/icon.png?raw=true" height="25" /> | Magic | AI extension for Cursor & other IDEs | [serafimcloud](https://x.com/serafimcloud) | [Website](https://21st.dev/magic) |
|
||||
| <img src="/static/library/powershell.svg" height="25" /> | SVGL for PowerShell | PowerShell extension to quickly get svgl logos anywhere | [Bart Spaans](https://bsky.app/profile/bartspaans.bsky.social) | [GitHub](https://github.com/spaansba/SVGL-PowerShell) |
|
||||
| <img src="/static/library/FlowLauncher.svg" height="25"> | SVGL for Flow Launcher | Search & copy SVG logos in Flow Launcher | [AF_Askar](https://x.com/Askar_AF) | [GitHub](https://github.com/abo3skr2019/SVGl-plugin) |
|
||||
| | Extension | Description | Created by | Link |
|
||||
| ---------------------------------------------------------------------------------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/svgl.svg" height="25" /> | SVGL CLI | A CLI for easily adding SVG icons to your project. | [sujjeee](https://twitter.com/sujjeeee) | [GitHub Repository](https://github.com/sujjeee/svgls) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/framer_dark.svg" height="25" /> | SVGL for Framer | Our SVGL plugin for Framer simplifies the use of SVG-based colourful logos. Easily import and easy to use. | [Krishna Singh](https://x.com/krishnasinghdev) | [Framer Marketplace](https://www.framer.com/marketplace/plugins/svgl/) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/react_light.svg" height="25" /> | SVGL for React | An open-source NPM package that offers a SVGL Logos for React. | [ridemountainpig](https://x.com/ridemountainpig) | [GitHub Repository](https://github.com/ridemountainpig/svgl-react?tab=readme-ov-file#svgl-react) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/vue.svg" height="25" /> | SVGL for Vue | An open-source NPM package that offers a SVGL Logos for Vue. | [selemondev](https://x.com/selemondev) | [GitHub Repository](https://github.com/selemondev/svgl-vue?tab=readme-ov-file#--svgl-vue--) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/svelte.svg" height="25" /> | SVGL for Svelte | An open-source NPM package that offers a SVGL Logos for Svelte. | [selemondev](https://x.com/selemondev) | [GitHub Repository](https://github.com/selemondev/svgl-svelte#--svgl-svelte--) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/figma.svg" height="25" /> | SVGL for Figma | Add svgs from svgl to your Figma project. | [quilljou](https://twitter.com/quillzhou) | [Figma Plugin](https://www.figma.com/community/plugin/1320306989350693206/svgl) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/powertoys.svg" height="25" /> | SVGL for PowerToys | Search & copy SVG logos in PowerToys Run. | [SameerJS6](https://x.com/Sameerjs6) | [Website](https://svgl.sameerjs.com/) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/raycast.svg" height="25" /> | SVGL for Raycast | Search SVG logos via svgl. | [1weiho](https://twitter.com/1weiho) | [Raycast Store](https://www.raycast.com/1weiho/svgl) |
|
||||
| <img src="https://github.com/pheralb/svgl/blob/main/static/library/vscode.svg" height="25" /> | SVGL for VSCode | SVGL directly in your VSCode. | [girlazote](https://twitter.com/girlazote) | [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl) |
|
||||
| <img src="https://svgl-badge.vercel.app/api/Library/Svgl?theme=light" height="25" /> | SVGL Badge | A beautiful badges with svgl SVG logos. | [ridemountainpig](https://twitter.com/ridemountainpig) | [Website](https://svgl-badge.vercel.app/) |
|
||||
| <img src="https://github.com/serafimcloud/21st/blob/main/apps/web/public/icon.png?raw=true" height="25" /> | Magic | AI extension for Cursor & other IDEs | [serafimcloud](https://x.com/serafimcloud) | [Website](https://21st.dev/magic) |
|
||||
| <img src="/static/library/powershell.svg" height="25" /> | SVGL for PowerShell | PowerShell extension to quickly get svgl logos anywhere | [Bart Spaans](https://bsky.app/profile/bartspaans.bsky.social) | [GitHub Repository](https://github.com/spaansba/SVGL-PowerShell) |
|
||||
| <img src="/static/library/FlowLauncher.svg" height="25"> | SVGL for Flow Launcher | Search & copy SVG logos in Flow Launcher | [AF_Askar](https://x.com/Askar_AF) | [GitHub Repository](https://github.com/abo3skr2019/SVGl-plugin) |
|
||||
|
||||
## 🛠️ Stack
|
||||
|
||||
- [**Sveltekit**](https://kit.svelte.dev/) - Web development, streamlined.
|
||||
- [**Sveltekit** + **Svelte 5**](https://kit.svelte.dev/) - Web development, streamlined.
|
||||
- [**Typescript**](https://www.typescriptlang.org/) - JavaScript with syntax for types.
|
||||
- [**mdsvex**](https://mdsvex.com/) - Markdown for Svelte apps.
|
||||
- [**Content-Collections**](https://www.content-collections.dev/) - Transform your content into type-safe data collections and say goodbye to manual data fetching and parsing.
|
||||
- [**Shiki**](https://github.com/shikijs/shiki) - A beautiful Syntax Highlighter.
|
||||
- [**Tailwindcss**](https://tailwindcss.com/) - A utility-first CSS framework for rapidly building custom designs.
|
||||
- [**Tailwind CSS**](https://tailwindcss.com/) - A utility-first CSS framework for rapidly building custom designs.
|
||||
- [**bits-ui**](https://www.bits-ui.com) - A collection of headless components for Svelte.
|
||||
- [**clsx**](https://github.com/lukeed/clsx) + [**tailwind-merge**](https://github.com/dcastil/tailwind-merge) inspired by [shadcn/ui](https://ui.shadcn.com) - A tiny utility for constructing `className` strings conditionally.
|
||||
- [**Prettier**](https://prettier.io/) + [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) - An opinionated code formatter.
|
||||
- [**Lucide Icons**](https://lucide.dev/) + [**phosphor-svelte**](https://github.com/haruaki07/phosphor-svelte) - A clean and friendly icons libraries.
|
||||
- [**Lucide Icons**](https://lucide.dev/) - Beautiful &
|
||||
consistent icons.
|
||||
- [**svelte-sonner**](https://github.com/wobsoriano/svelte-sonner) - An opinionated toast component for Svelte.
|
||||
- [**@svgr/core**](https://react-svgr.com/) - Node.js utility to transform SVGs into React components.
|
||||
- [**Hono**](https://hono.dev/) - Fast, lightweight, built on Web Standards. Support for any JavaScript runtime.
|
||||
- [**@upstash/redis** + **@upstash/ratelimit**](https://upstash.com/) - Serverless Redis for developers.
|
||||
- [**Vitest**](https://vitest.dev/) - Blazing Fast Unit Test Framework.
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Before submitting the SVG, **make sure that you have permission** or that the license of the SVG allows you to add it to svgl. If you are not sure, please contact the company or author.
|
||||
> Before submitting an SVG, ensure you have the right to use it and that its license permits adding it to svgl. If you are uncertain, please contact the author or the company.
|
||||
|
||||
You will need:
|
||||
|
||||
- [Node.js 18+ (recommended 20 LTS)](https://nodejs.org/en/).
|
||||
- [Node.js 20+](https://nodejs.org/en/).
|
||||
- [Git](https://git-scm.com/).
|
||||
|
||||
1. [Fork](https://github.com/pheralb/svgl/fork) this repository and clone it locally:
|
||||
1. [**Fork this repository**](https://github.com/pheralb/svgl/fork) and clone it locally:
|
||||
|
||||
```bash
|
||||
git clone git@github.com:your_username/svgl.git
|
||||
@@ -128,7 +133,7 @@ pnpm install
|
||||
}
|
||||
```
|
||||
|
||||
- **Logo + wordmark** version:
|
||||
- **Simple logo + wordmark**:
|
||||
|
||||
```ts
|
||||
{
|
||||
@@ -140,7 +145,35 @@ pnpm install
|
||||
}
|
||||
```
|
||||
|
||||
- **Logo + wordmark** & **light + dark mode**:
|
||||
- **Logo (light & dark mode)**:
|
||||
|
||||
```ts
|
||||
{
|
||||
title: 'Title',
|
||||
category: 'Category',
|
||||
route: {
|
||||
light: '/library/your_logo_light.svg',
|
||||
dark: '/library/your_logo_dark.svg'
|
||||
},
|
||||
url: 'Website'
|
||||
}
|
||||
```
|
||||
|
||||
- **Wordmark (light & dark mode)**:
|
||||
|
||||
```ts
|
||||
{
|
||||
title: 'Title',
|
||||
category: 'Category',
|
||||
wordmark: {
|
||||
light: '/library/your_logo_light.svg',
|
||||
dark: '/library/your_logo_dark.svg'
|
||||
},
|
||||
url: 'Website'
|
||||
}
|
||||
```
|
||||
|
||||
- **Full example with all properties**:
|
||||
|
||||
```ts
|
||||
{
|
||||
@@ -151,14 +184,14 @@ pnpm install
|
||||
dark: '/library/your_logo_dark.svg'
|
||||
},
|
||||
wordmark: {
|
||||
light: '/library/your_wordmark-logo_light.svg',
|
||||
dark: '/library/your_wordmark-logo_dark.svg'
|
||||
light: '/library/your_logo_wordmark_light.svg',
|
||||
dark: '/library/your_logo_wordmark_dark.svg'
|
||||
},
|
||||
url: 'Website'
|
||||
}
|
||||
```
|
||||
|
||||
- **Add brand guidelines**:
|
||||
- **Add brand guidelines** (where to find the images, how to use it, colors, fonts...):
|
||||
|
||||
```ts
|
||||
{
|
||||
@@ -176,17 +209,36 @@ pnpm install
|
||||
> - 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.
|
||||
> - You can add multiple categories to the same logo, for example: `category: ['Social', 'Design']`.
|
||||
|
||||
And create a pull request with your logo 🚀.
|
||||
And create a pull request with your logo ✨.
|
||||
|
||||
5. (Optional) If you want to run the [API](https://svgl.app/api) locally, you will need to create a `.dev.vars` file in the [`/api-routes`](https://github.com/pheralb/svgl/tree/main/api-routes) folder with the following variables:
|
||||
## 🧑🚀 Getting Started with API
|
||||
|
||||
> [!WARNING]
|
||||
> This section is how to run API locally. For all API endpoints, check the [**API documentation**](https://svgl.app/api).
|
||||
|
||||
1. Go to the [**`api-routes`**](https://github.com/pheralb/svgl/tree/main/api-routes) folder and install the dependencies with [pnpm](https://pnpm.io/):
|
||||
|
||||
```bash
|
||||
cd api-routes
|
||||
pnpm install
|
||||
```
|
||||
|
||||
2. Create a `.dev.vars` env file in the `api-routes` folder with the following variables:
|
||||
|
||||
```bash
|
||||
# .dev.vars
|
||||
SVGL_API_REQUESTS = 1
|
||||
UPSTASH_REDIS_URL = ""
|
||||
UPSTASH_REDIS_TOKEN = ""
|
||||
```
|
||||
|
||||
- [Create a Upstash account](https://console.upstash.com/).
|
||||
- [Create a Upstash Redis Database](https://upstash.com/docs/redis/overall/getstarted).
|
||||
|
||||
3. Run the development server:
|
||||
|
||||
```bash
|
||||
SVGL_API_REQUESTS = 1
|
||||
UPSTASH_REDIS_URL = ""
|
||||
UPSTASH_REDIS_TOKEN = ""
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## ✌️ Contributing
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "@pheralb/svgl-api",
|
||||
"name": "@svgl/api",
|
||||
"author": "@pheralb_",
|
||||
"version": "1.0.1",
|
||||
"description": "SVGL API built with Hono & Cloudflare.",
|
||||
"version": "1.1.0",
|
||||
"description": "SVGL API built with Hono & Cloudflare",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@@ -10,11 +10,12 @@
|
||||
"deploy": "wrangler deploy --minify src/index.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@upstash/ratelimit": "2.0.6",
|
||||
"hono": "4.8.12"
|
||||
"@upstash/ratelimit": "2.0.7",
|
||||
"@upstash/redis": "1.35.6",
|
||||
"hono": "4.10.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "4.20250805.0",
|
||||
"wrangler": "4.28.0"
|
||||
"@cloudflare/workers-types": "4.20251109.0",
|
||||
"wrangler": "4.46.0"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+79
-100
@@ -9,18 +9,21 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@upstash/ratelimit':
|
||||
specifier: 2.0.6
|
||||
version: 2.0.6(@upstash/redis@1.34.0)
|
||||
specifier: 2.0.7
|
||||
version: 2.0.7(@upstash/redis@1.35.6)
|
||||
'@upstash/redis':
|
||||
specifier: 1.35.6
|
||||
version: 1.35.6
|
||||
hono:
|
||||
specifier: 4.8.12
|
||||
version: 4.8.12
|
||||
specifier: 4.10.4
|
||||
version: 4.10.4
|
||||
devDependencies:
|
||||
'@cloudflare/workers-types':
|
||||
specifier: 4.20250805.0
|
||||
version: 4.20250805.0
|
||||
specifier: 4.20251109.0
|
||||
version: 4.20251109.0
|
||||
wrangler:
|
||||
specifier: 4.28.0
|
||||
version: 4.28.0(@cloudflare/workers-types@4.20250805.0)
|
||||
specifier: 4.46.0
|
||||
version: 4.46.0(@cloudflare/workers-types@4.20251109.0)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -28,47 +31,47 @@ packages:
|
||||
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
|
||||
'@cloudflare/unenv-preset@2.6.0':
|
||||
resolution: {integrity: sha512-h7Txw0WbDuUbrvZwky6+x7ft+U/Gppfn/rWx6IdR+e9gjygozRJnV26Y2TOr3yrIFa6OsZqqR2lN+jWTrakHXg==}
|
||||
'@cloudflare/unenv-preset@2.7.9':
|
||||
resolution: {integrity: sha512-Drm7qlTKnvncEv+DANiQNEonq0H0LyIsoFZYJ6tJ8OhAoy5udIE8yp6BsVDYcIjcYLIybp4M7c/P7ly/56SoHg==}
|
||||
peerDependencies:
|
||||
unenv: 2.0.0-rc.19
|
||||
workerd: ^1.20250802.0
|
||||
unenv: 2.0.0-rc.24
|
||||
workerd: ^1.20250927.0
|
||||
peerDependenciesMeta:
|
||||
workerd:
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workerd-darwin-64@1.20250803.0':
|
||||
resolution: {integrity: sha512-6QciMnJp1p3F1qUiN0LaLfmw7SuZA/gfUBOe8Ft81pw16JYZ3CyiqIKPJvc1SV8jgDx8r+gz/PRi1NwOMt329A==}
|
||||
'@cloudflare/workerd-darwin-64@1.20251105.0':
|
||||
resolution: {integrity: sha512-nztUP35wTtUKM+681dBWtUNSySNWELTV+LY43oWy7ZhK19/iBJPQoFY7xpvF7zy4qOOShtise259B65DS4/71Q==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@cloudflare/workerd-darwin-arm64@1.20250803.0':
|
||||
resolution: {integrity: sha512-DoIgghDowtqoNhL6OoN/F92SKtrk7mRQKc4YSs/Dst8IwFZq+pCShOlWfB0MXqHKPSoiz5xLSrUKR9H6gQMPvw==}
|
||||
'@cloudflare/workerd-darwin-arm64@1.20251105.0':
|
||||
resolution: {integrity: sha512-WS/dvPYTW/+gs8s0UvDqDY7wcuIAg/hUpjrMNGepr+Mo38vMU39FYhJQOly99oJCXxMluQqAnRKg09b/9Gr+Rg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@cloudflare/workerd-linux-64@1.20250803.0':
|
||||
resolution: {integrity: sha512-mYdz4vNWX3+PoqRjssepVQqgh42IBiSrl+wb7vbh7VVWUVzBnQKtW3G+UFiBF62hohCLexGIEi7L0cFfRlcKSQ==}
|
||||
'@cloudflare/workerd-linux-64@1.20251105.0':
|
||||
resolution: {integrity: sha512-RdHRHo/hpjR6sNw529FkmslVSz/K3Pb1+i3fIoqUrHCrZOUYzFyz3nLeZh4EYaAhcztLWiSTwBv54bcl4sG3wA==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@cloudflare/workerd-linux-arm64@1.20250803.0':
|
||||
resolution: {integrity: sha512-RmrtUYLRUg6djKU7Z6yebS6YGJVnaDVY6bbXca+2s26vw4ibJDOTPLuBHFQF62Grw3fAfsNbjQh5i14vG2mqUg==}
|
||||
'@cloudflare/workerd-linux-arm64@1.20251105.0':
|
||||
resolution: {integrity: sha512-5zkxQCqLjwrqZVVJh92J2Drv6xifkP8kN2ltjHdwZQlVzfDW48d7tAtCm1ZooUv204ixvZFarusCfL+IRjExZg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@cloudflare/workerd-windows-64@1.20250803.0':
|
||||
resolution: {integrity: sha512-uLV8gdudz36o9sUaAKbBxxTwZwLFz1KyW7QpBvOo4+r3Ib8yVKXGiySIMWGD7A0urSMrjf3e5LlLcJKgZUOjMA==}
|
||||
'@cloudflare/workerd-windows-64@1.20251105.0':
|
||||
resolution: {integrity: sha512-6BpkfjBIbGR+4FBOcZGcWDLM0XQuoI6R9Dublj/BKf4pv0/xJ4zHdnaYUb5NIlC75L55Ouqw0CEJasoKlMjgnw==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@cloudflare/workers-types@4.20250805.0':
|
||||
resolution: {integrity: sha512-HOt0lqFiw5WzhvxH/IViMAWI/zwzokCSx33DlRnJqECT9khskK9X4Jrw/+IiAprJ5YloiFxK8Xn1oGbsabdUWg==}
|
||||
'@cloudflare/workers-types@4.20251109.0':
|
||||
resolution: {integrity: sha512-/wMfoS6NmoY0GgKVoRUp4x0yiZM0eNXwXTTzM7gFJKcm+0NtZmzUzgXj6xpShkfWSrmug0mX7BbyaFMAMHFlPA==}
|
||||
|
||||
'@cspotcode/source-map-support@0.8.1':
|
||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||
@@ -362,13 +365,13 @@ packages:
|
||||
resolution: {integrity: sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ==}
|
||||
engines: {node: '>=16.0.0'}
|
||||
|
||||
'@upstash/ratelimit@2.0.6':
|
||||
resolution: {integrity: sha512-Uak5qklMfzFN5RXltxY6IXRENu+Hgmo9iEgMPOlUs2etSQas2N+hJfbHw37OUy4vldLRXeD0OzL+YRvO2l5acg==}
|
||||
'@upstash/ratelimit@2.0.7':
|
||||
resolution: {integrity: sha512-qNQW4uBPKVk8c4wFGj2S/vfKKQxXx1taSJoSGBN36FeiVBBKHQgsjPbKUijZ9Xu5FyVK+pfiXWKIsQGyoje8Fw==}
|
||||
peerDependencies:
|
||||
'@upstash/redis': ^1.34.3
|
||||
|
||||
'@upstash/redis@1.34.0':
|
||||
resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==}
|
||||
'@upstash/redis@1.35.6':
|
||||
resolution: {integrity: sha512-aSEIGJgJ7XUfTYvhQcQbq835re7e/BXjs8Janq6Pvr6LlmTZnyqwT97RziZLO/8AVUL037RLXqqiQC6kCt+5pA==}
|
||||
|
||||
acorn-walk@8.3.2:
|
||||
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
|
||||
@@ -400,12 +403,6 @@ packages:
|
||||
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
crypto-js@4.2.0:
|
||||
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
|
||||
|
||||
defu@6.1.4:
|
||||
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
|
||||
|
||||
detect-libc@2.0.3:
|
||||
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -422,9 +419,6 @@ packages:
|
||||
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
exsolve@1.0.7:
|
||||
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
|
||||
|
||||
fsevents@2.3.3:
|
||||
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
@@ -433,8 +427,8 @@ packages:
|
||||
glob-to-regexp@0.4.1:
|
||||
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
|
||||
|
||||
hono@4.8.12:
|
||||
resolution: {integrity: sha512-MQSKk1Mg7b74k8l+A025LfysnLtXDKkE4pLaSsYRQC5iy85lgZnuyeQ1Wynair9mmECzoLu+FtJtqNZSoogBDQ==}
|
||||
hono@4.10.4:
|
||||
resolution: {integrity: sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg==}
|
||||
engines: {node: '>=16.9.0'}
|
||||
|
||||
is-arrayish@0.3.2:
|
||||
@@ -449,14 +443,11 @@ packages:
|
||||
engines: {node: '>=10.0.0'}
|
||||
hasBin: true
|
||||
|
||||
miniflare@4.20250803.0:
|
||||
resolution: {integrity: sha512-1tmCLfmMw0SqRBF9PPII9CVLQRzOrO7uIBmSng8BMSmtgs2kos7OeoM0sg6KbR9FrvP/zAniLyZuCAMAjuu4fQ==}
|
||||
miniflare@4.20251105.0:
|
||||
resolution: {integrity: sha512-n+lCQbGLPjHFm5EKMohxCl+hLIki9rIlJSU9FkYKdJ62cGacetmTH5IgWUZhUFFM+NqhqZLOuWXTAsoZTm0hog==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
ohash@2.0.11:
|
||||
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
|
||||
|
||||
path-to-regexp@6.3.0:
|
||||
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
|
||||
|
||||
@@ -486,27 +477,27 @@ packages:
|
||||
tslib@2.6.2:
|
||||
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
|
||||
|
||||
ufo@1.6.1:
|
||||
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
|
||||
uncrypto@0.1.3:
|
||||
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
|
||||
|
||||
undici@7.13.0:
|
||||
resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==}
|
||||
undici@7.14.0:
|
||||
resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==}
|
||||
engines: {node: '>=20.18.1'}
|
||||
|
||||
unenv@2.0.0-rc.19:
|
||||
resolution: {integrity: sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==}
|
||||
unenv@2.0.0-rc.24:
|
||||
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
|
||||
|
||||
workerd@1.20250803.0:
|
||||
resolution: {integrity: sha512-oYH29mE/wNolPc32NHHQbySaNorj6+KASUtOvQHySxB5mO1NWdGuNv49woxNCF5971UYceGQndY+OLT+24C3wQ==}
|
||||
workerd@1.20251105.0:
|
||||
resolution: {integrity: sha512-8D1UmsxrRr3Go7enbYCsYoiWeGn66u1WFNojPSgtjp7z8pV2cXskjr05vQ1OOzl7+rg1hDDofnCJqVwChMym8g==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
|
||||
wrangler@4.28.0:
|
||||
resolution: {integrity: sha512-y0yHIuScpok9oSErLqDbxkBChC2+/jZpvqMg2NxOto1JCyUtDUuKljOfcVMaI48d9GuhOCSoWSumYxLAHNxaLA==}
|
||||
wrangler@4.46.0:
|
||||
resolution: {integrity: sha512-WRROO7CL+MW/E44RMT4X7w32qPjufiPpGdey5D6H7iKzzVqfUkTRULxYBfWANiU1yGnsiCXQtu3Ap0G2TmohtA==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@cloudflare/workers-types': ^4.20250803.0
|
||||
'@cloudflare/workers-types': ^4.20251014.0
|
||||
peerDependenciesMeta:
|
||||
'@cloudflare/workers-types':
|
||||
optional: true
|
||||
@@ -538,28 +529,28 @@ snapshots:
|
||||
dependencies:
|
||||
mime: 3.0.0
|
||||
|
||||
'@cloudflare/unenv-preset@2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)':
|
||||
'@cloudflare/unenv-preset@2.7.9(unenv@2.0.0-rc.24)(workerd@1.20251105.0)':
|
||||
dependencies:
|
||||
unenv: 2.0.0-rc.19
|
||||
unenv: 2.0.0-rc.24
|
||||
optionalDependencies:
|
||||
workerd: 1.20250803.0
|
||||
workerd: 1.20251105.0
|
||||
|
||||
'@cloudflare/workerd-darwin-64@1.20250803.0':
|
||||
'@cloudflare/workerd-darwin-64@1.20251105.0':
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workerd-darwin-arm64@1.20250803.0':
|
||||
'@cloudflare/workerd-darwin-arm64@1.20251105.0':
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workerd-linux-64@1.20250803.0':
|
||||
'@cloudflare/workerd-linux-64@1.20251105.0':
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workerd-linux-arm64@1.20250803.0':
|
||||
'@cloudflare/workerd-linux-arm64@1.20251105.0':
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workerd-windows-64@1.20250803.0':
|
||||
'@cloudflare/workerd-windows-64@1.20251105.0':
|
||||
optional: true
|
||||
|
||||
'@cloudflare/workers-types@4.20250805.0': {}
|
||||
'@cloudflare/workers-types@4.20251109.0': {}
|
||||
|
||||
'@cspotcode/source-map-support@0.8.1':
|
||||
dependencies:
|
||||
@@ -747,16 +738,16 @@ snapshots:
|
||||
|
||||
'@upstash/core-analytics@0.0.10':
|
||||
dependencies:
|
||||
'@upstash/redis': 1.34.0
|
||||
'@upstash/redis': 1.35.6
|
||||
|
||||
'@upstash/ratelimit@2.0.6(@upstash/redis@1.34.0)':
|
||||
'@upstash/ratelimit@2.0.7(@upstash/redis@1.35.6)':
|
||||
dependencies:
|
||||
'@upstash/core-analytics': 0.0.10
|
||||
'@upstash/redis': 1.34.0
|
||||
'@upstash/redis': 1.35.6
|
||||
|
||||
'@upstash/redis@1.34.0':
|
||||
'@upstash/redis@1.35.6':
|
||||
dependencies:
|
||||
crypto-js: 4.2.0
|
||||
uncrypto: 0.1.3
|
||||
|
||||
acorn-walk@8.3.2: {}
|
||||
|
||||
@@ -782,10 +773,6 @@ snapshots:
|
||||
|
||||
cookie@1.0.2: {}
|
||||
|
||||
crypto-js@4.2.0: {}
|
||||
|
||||
defu@6.1.4: {}
|
||||
|
||||
detect-libc@2.0.3: {}
|
||||
|
||||
error-stack-parser-es@1.0.5: {}
|
||||
@@ -820,14 +807,12 @@ snapshots:
|
||||
|
||||
exit-hook@2.2.1: {}
|
||||
|
||||
exsolve@1.0.7: {}
|
||||
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
glob-to-regexp@0.4.1: {}
|
||||
|
||||
hono@4.8.12: {}
|
||||
hono@4.10.4: {}
|
||||
|
||||
is-arrayish@0.3.2: {}
|
||||
|
||||
@@ -835,7 +820,7 @@ snapshots:
|
||||
|
||||
mime@3.0.0: {}
|
||||
|
||||
miniflare@4.20250803.0:
|
||||
miniflare@4.20251105.0:
|
||||
dependencies:
|
||||
'@cspotcode/source-map-support': 0.8.1
|
||||
acorn: 8.14.0
|
||||
@@ -844,8 +829,8 @@ snapshots:
|
||||
glob-to-regexp: 0.4.1
|
||||
sharp: 0.33.5
|
||||
stoppable: 1.1.0
|
||||
undici: 7.13.0
|
||||
workerd: 1.20250803.0
|
||||
undici: 7.14.0
|
||||
workerd: 1.20251105.0
|
||||
ws: 8.18.0
|
||||
youch: 4.1.0-beta.10
|
||||
zod: 3.22.3
|
||||
@@ -853,8 +838,6 @@ snapshots:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
|
||||
ohash@2.0.11: {}
|
||||
|
||||
path-to-regexp@6.3.0: {}
|
||||
|
||||
pathe@2.0.3: {}
|
||||
@@ -898,38 +881,34 @@ snapshots:
|
||||
tslib@2.6.2:
|
||||
optional: true
|
||||
|
||||
ufo@1.6.1: {}
|
||||
uncrypto@0.1.3: {}
|
||||
|
||||
undici@7.13.0: {}
|
||||
undici@7.14.0: {}
|
||||
|
||||
unenv@2.0.0-rc.19:
|
||||
unenv@2.0.0-rc.24:
|
||||
dependencies:
|
||||
defu: 6.1.4
|
||||
exsolve: 1.0.7
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
ufo: 1.6.1
|
||||
|
||||
workerd@1.20250803.0:
|
||||
workerd@1.20251105.0:
|
||||
optionalDependencies:
|
||||
'@cloudflare/workerd-darwin-64': 1.20250803.0
|
||||
'@cloudflare/workerd-darwin-arm64': 1.20250803.0
|
||||
'@cloudflare/workerd-linux-64': 1.20250803.0
|
||||
'@cloudflare/workerd-linux-arm64': 1.20250803.0
|
||||
'@cloudflare/workerd-windows-64': 1.20250803.0
|
||||
'@cloudflare/workerd-darwin-64': 1.20251105.0
|
||||
'@cloudflare/workerd-darwin-arm64': 1.20251105.0
|
||||
'@cloudflare/workerd-linux-64': 1.20251105.0
|
||||
'@cloudflare/workerd-linux-arm64': 1.20251105.0
|
||||
'@cloudflare/workerd-windows-64': 1.20251105.0
|
||||
|
||||
wrangler@4.28.0(@cloudflare/workers-types@4.20250805.0):
|
||||
wrangler@4.46.0(@cloudflare/workers-types@4.20251109.0):
|
||||
dependencies:
|
||||
'@cloudflare/kv-asset-handler': 0.4.0
|
||||
'@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)
|
||||
'@cloudflare/unenv-preset': 2.7.9(unenv@2.0.0-rc.24)(workerd@1.20251105.0)
|
||||
blake3-wasm: 2.1.5
|
||||
esbuild: 0.25.4
|
||||
miniflare: 4.20250803.0
|
||||
miniflare: 4.20251105.0
|
||||
path-to-regexp: 6.3.0
|
||||
unenv: 2.0.0-rc.19
|
||||
workerd: 1.20250803.0
|
||||
unenv: 2.0.0-rc.24
|
||||
workerd: 1.20251105.0
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20250805.0
|
||||
'@cloudflare/workers-types': 4.20251109.0
|
||||
fsevents: 2.3.3
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
|
||||
+84
-60
@@ -1,19 +1,23 @@
|
||||
import { Context, Hono } from 'hono';
|
||||
import { env } from 'hono/adapter';
|
||||
import { cors } from 'hono/cors';
|
||||
import { BlankInput, Env } from 'hono/types';
|
||||
import { Ratelimit } from '@upstash/ratelimit';
|
||||
import { Redis } from '@upstash/redis/cloudflare';
|
||||
import type { Context } from "hono";
|
||||
import type { BlankInput, Env } from "hono/types";
|
||||
|
||||
import type { iSVG } from "../../src/types/svg";
|
||||
import type { Category } from "../../src/types/categories";
|
||||
|
||||
import { Hono } from "hono";
|
||||
import { env } from "hono/adapter";
|
||||
import { cors } from "hono/cors";
|
||||
import { Ratelimit } from "@upstash/ratelimit";
|
||||
import { Redis } from "@upstash/redis/cloudflare";
|
||||
|
||||
// 🌿 Import utils:
|
||||
import { addFullUrl } from './utils';
|
||||
import { addFullUrl } from "./utils";
|
||||
import { optimizeSvg } from "../../src/utils/optimizeSvg";
|
||||
|
||||
// 📦 Import data from main app:
|
||||
import { svgsData } from '../../src/data';
|
||||
import { iSVG } from '../../src/types/svg';
|
||||
import { tCategory } from '../../src/types/categories';
|
||||
// 📦 Import data from SVGL src:
|
||||
import { svgsData } from "../../src/data";
|
||||
|
||||
declare module 'hono' {
|
||||
declare module "hono" {
|
||||
interface ContextVariableMap {
|
||||
ratelimit: Ratelimit;
|
||||
}
|
||||
@@ -24,7 +28,7 @@ const fullRouteSvgsData = svgsData.map((svg) => {
|
||||
return {
|
||||
...svg,
|
||||
route: addFullUrl(svg.route),
|
||||
wordmark: svg.wordmark ? addFullUrl(svg.wordmark) : undefined
|
||||
wordmark: svg.wordmark ? addFullUrl(svg.wordmark) : undefined,
|
||||
};
|
||||
}) as iSVG[];
|
||||
|
||||
@@ -34,21 +38,24 @@ const cache = new Map();
|
||||
|
||||
class RedisRateLimiter {
|
||||
static instance: Ratelimit;
|
||||
static getInstance(c: Context<Env, '/api/*', BlankInput>) {
|
||||
static getInstance(c: Context<Env, "/api/*", BlankInput>) {
|
||||
if (!this.instance) {
|
||||
const { UPSTASH_REDIS_URL, UPSTASH_REDIS_TOKEN } = env<{
|
||||
UPSTASH_REDIS_URL: string;
|
||||
UPSTASH_REDIS_TOKEN: string;
|
||||
}>(c);
|
||||
const cleanRedisUrl = UPSTASH_REDIS_URL.replace(/^['"]|['"]$/g, '').trim();
|
||||
const cleanRedisUrl = UPSTASH_REDIS_URL.replace(
|
||||
/^['"]|['"]$/g,
|
||||
"",
|
||||
).trim();
|
||||
const redisClient = new Redis({
|
||||
token: UPSTASH_REDIS_TOKEN,
|
||||
url: cleanRedisUrl
|
||||
url: cleanRedisUrl,
|
||||
});
|
||||
const ratelimit = new Ratelimit({
|
||||
redis: redisClient,
|
||||
limiter: Ratelimit.slidingWindow(5, '5 s'),
|
||||
ephemeralCache: cache
|
||||
limiter: Ratelimit.slidingWindow(5, "5 s"),
|
||||
ephemeralCache: cache,
|
||||
});
|
||||
this.instance = ratelimit;
|
||||
return this.instance;
|
||||
@@ -60,22 +67,22 @@ class RedisRateLimiter {
|
||||
|
||||
app.use(async (c, next) => {
|
||||
const ratelimit = RedisRateLimiter.getInstance(c);
|
||||
c.set('ratelimit', ratelimit);
|
||||
c.set("ratelimit", ratelimit);
|
||||
await next();
|
||||
});
|
||||
|
||||
app.use(cors());
|
||||
|
||||
// 🌱 GET: "/" - Returns all the SVGs data:
|
||||
app.get('/', async (c) => {
|
||||
const limit = c.req.query('limit');
|
||||
const search = c.req.query('search');
|
||||
const ratelimit = c.get('ratelimit');
|
||||
const ip = c.req.raw.headers.get('CF-Connecting-IP');
|
||||
const { success } = await ratelimit.limit(ip ?? 'anonymous');
|
||||
app.get("/", async (c) => {
|
||||
const limit = c.req.query("limit");
|
||||
const search = c.req.query("search");
|
||||
const ratelimit = c.get("ratelimit");
|
||||
const ip = c.req.raw.headers.get("CF-Connecting-IP");
|
||||
const { success } = await ratelimit.limit(ip ?? "anonymous");
|
||||
|
||||
if (!success) {
|
||||
return c.json({ error: '🛑 Too many request' }, 429);
|
||||
return c.json({ error: "🛑 (SVGL - API) Too many request" }, 429);
|
||||
}
|
||||
|
||||
if (limit) {
|
||||
@@ -87,10 +94,10 @@ app.get('/', async (c) => {
|
||||
|
||||
if (search) {
|
||||
const searchResults = fullRouteSvgsData.filter((svg) =>
|
||||
svg.title.toLowerCase().includes(search.toLowerCase())
|
||||
svg.title.toLowerCase().includes(search.toLowerCase()),
|
||||
);
|
||||
if (searchResults.length === 0) {
|
||||
return c.json({ error: 'not found' }, 404);
|
||||
return c.json({ error: "❌ (SVGL - API) SVG not found" }, 404);
|
||||
}
|
||||
return c.json(searchResults);
|
||||
}
|
||||
@@ -99,19 +106,19 @@ app.get('/', async (c) => {
|
||||
});
|
||||
|
||||
// 🌱 GET: "/categories" - Return an array with categories:
|
||||
app.get('/categories', async (c) => {
|
||||
const ratelimit = c.get('ratelimit');
|
||||
const ip = c.req.raw.headers.get('CF-Connecting-IP');
|
||||
const { success } = await ratelimit.limit(ip ?? 'anonymous');
|
||||
app.get("/categories", async (c) => {
|
||||
const ratelimit = c.get("ratelimit");
|
||||
const ip = c.req.raw.headers.get("CF-Connecting-IP");
|
||||
const { success } = await ratelimit.limit(ip ?? "anonymous");
|
||||
|
||||
if (!success) {
|
||||
return c.json({ error: '🛑 Too many request' }, 429);
|
||||
return c.json({ error: "❌ (SVGL - API) Too many request" }, 429);
|
||||
}
|
||||
|
||||
const categoryTotals: Record<string, number> = {};
|
||||
|
||||
fullRouteSvgsData.forEach((svg) => {
|
||||
if (typeof svg.category === 'string') {
|
||||
if (typeof svg.category === "string") {
|
||||
categoryTotals[svg.category] = (categoryTotals[svg.category] || 0) + 1;
|
||||
} else if (Array.isArray(svg.category)) {
|
||||
svg.category.forEach((category) => {
|
||||
@@ -120,62 +127,79 @@ app.get('/categories', async (c) => {
|
||||
}
|
||||
});
|
||||
|
||||
const categories = Object.entries(categoryTotals).map(([category, total]) => ({
|
||||
category,
|
||||
total
|
||||
}));
|
||||
const categories = Object.entries(categoryTotals).map(
|
||||
([category, total]) => ({
|
||||
category,
|
||||
total,
|
||||
}),
|
||||
);
|
||||
|
||||
return c.json(categories);
|
||||
});
|
||||
|
||||
// 🌱 GET: /category/:category - Return an list of svgs by specific category:
|
||||
app.get('/category/:category', async (c) => {
|
||||
const category = c.req.param('category') as string;
|
||||
const targetCategory = category.charAt(0).toUpperCase() + category.slice(1);
|
||||
const ratelimit = c.get('ratelimit');
|
||||
const ip = c.req.raw.headers.get('CF-Connecting-IP');
|
||||
const { success } = await ratelimit.limit(ip ?? 'anonymous');
|
||||
app.get("/category/:category", async (c) => {
|
||||
const category = c.req.param("category") as string;
|
||||
const targeCategory = category.charAt(0).toUpperCase() + category.slice(1);
|
||||
const ratelimit = c.get("ratelimit");
|
||||
const ip = c.req.raw.headers.get("CF-Connecting-IP");
|
||||
const { success } = await ratelimit.limit(ip ?? "anonymous");
|
||||
|
||||
if (!success) {
|
||||
return c.json({ error: '🛑 Too many request' }, 429);
|
||||
return c.json({ error: "🛑 (SVGL - API) Too many request" }, 429);
|
||||
}
|
||||
|
||||
const categorySvgs = fullRouteSvgsData.filter((svg) => {
|
||||
if (typeof svg.category === 'string') {
|
||||
return svg.category === targetCategory;
|
||||
if (typeof svg.category === "string") {
|
||||
return svg.category === targeCategory;
|
||||
}
|
||||
if (Array.isArray(svg.category)) {
|
||||
return svg.category.includes(targetCategory as tCategory);
|
||||
return svg.category.includes(targeCategory as Category);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (categorySvgs.length === 0) {
|
||||
return c.json({ error: 'not found' }, 404);
|
||||
return c.json({ error: "❌ (SVGL - API) Category not found" }, 404);
|
||||
}
|
||||
return c.json(categorySvgs);
|
||||
});
|
||||
|
||||
// 🌱 GET: "/svg/:filename" - Return the SVG file by filename:
|
||||
app.get('/svg/:filename', async (c) => {
|
||||
const fileName = c.req.param('filename') as string;
|
||||
const svgLibrary = 'https://svgl.app/library/';
|
||||
// 🌱 GET: "/svg/:filename" - Return the SVG code file by filename:
|
||||
app.get("/svg/:filename", async (c) => {
|
||||
const fileName = c.req.param("filename") as string;
|
||||
const svgLibrary = "https://svgl.app/library/";
|
||||
|
||||
const ratelimit = c.get('ratelimit');
|
||||
const ip = c.req.raw.headers.get('CF-Connecting-IP');
|
||||
const { success } = await ratelimit.limit(ip ?? 'anonymous');
|
||||
const ratelimit = c.get("ratelimit");
|
||||
const returnNoOptimized = c.req.query("no-optimize");
|
||||
const ip = c.req.raw.headers.get("CF-Connecting-IP");
|
||||
const { success } = await ratelimit.limit(ip ?? "anonymous");
|
||||
|
||||
if (!success) {
|
||||
return c.json({ error: '🛑 Too many request' }, 429);
|
||||
return c.json({ error: "🛑 (SVGL - API) Too many request" }, 429);
|
||||
}
|
||||
|
||||
try {
|
||||
const svg = await fetch(`${svgLibrary}${fileName}`).then((res) => {
|
||||
if (!res.ok) throw new Error('Network response was not ok');
|
||||
if (!res.ok)
|
||||
throw new Error("❌ (SVGL - API) Network response was not ok");
|
||||
return res.text();
|
||||
});
|
||||
return c.body(svg, 200);
|
||||
|
||||
if (returnNoOptimized) {
|
||||
return c.body(svg, 200, {
|
||||
"Content-Type": "image/svg+xml; charset=utf-8",
|
||||
});
|
||||
}
|
||||
|
||||
const optimizedSvg = optimizeSvg({ svgCode: svg });
|
||||
return c.body(optimizedSvg, 200, {
|
||||
"Content-Type": "image/svg+xml; charset=utf-8",
|
||||
});
|
||||
} catch (err) {
|
||||
return c.json({ error: 'not found' }, 404);
|
||||
return c.json(
|
||||
{ error: `❌ (SVGL - API) SVG file not found - ${err}` },
|
||||
404,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
+29
-2
@@ -1,11 +1,20 @@
|
||||
import { z } from "zod";
|
||||
import path from "node:path";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
// Content Collections:
|
||||
import { compileMarkdown } from "@content-collections/markdown";
|
||||
import { defineCollection, defineConfig } from "@content-collections/core";
|
||||
|
||||
// Shiki:
|
||||
// Plugins:
|
||||
import rehypeSlug from "rehype-slug";
|
||||
import rehypeShiki from "@shikijs/rehype/core";
|
||||
import rehypeAutolinkHeadings from "rehype-autolink-headings";
|
||||
|
||||
// Custom Plugins:
|
||||
import { rehypeCopyBtn } from "./src/markdown/rehypeCopyBtn";
|
||||
import { getTableOfContents } from "./src/markdown/generateToC";
|
||||
import { rehypeExternalLinks } from "./src/markdown/rehypeExternalLinks";
|
||||
import { shikiHighlighter, rehypeShikiOptions } from "./src/utils/shiki";
|
||||
|
||||
const docs = defineCollection({
|
||||
@@ -15,15 +24,33 @@ const docs = defineCollection({
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
content: z.string(),
|
||||
}),
|
||||
transform: async (document, context) => {
|
||||
const highlighter = await shikiHighlighter();
|
||||
const filePath = path.join(
|
||||
context.collection.directory,
|
||||
document._meta.filePath,
|
||||
);
|
||||
const { mtimeMs, birthtimeMs } = await fs.stat(filePath);
|
||||
const html = await compileMarkdown(context, document, {
|
||||
rehypePlugins: [[rehypeShiki, highlighter, rehypeShikiOptions]],
|
||||
rehypePlugins: [
|
||||
[rehypeShiki, highlighter, rehypeShikiOptions],
|
||||
rehypeExternalLinks,
|
||||
rehypeSlug,
|
||||
rehypeAutolinkHeadings,
|
||||
rehypeCopyBtn,
|
||||
],
|
||||
});
|
||||
const tableOfContents = getTableOfContents(document.content);
|
||||
return {
|
||||
...document,
|
||||
html,
|
||||
createdAt: new Date(birthtimeMs),
|
||||
updatedAt: new Date(mtimeMs),
|
||||
tableOfContents,
|
||||
rawUrl: `https://svgl.app/api/docs/${document._meta.path}`,
|
||||
documentUrl: `https://svgl.app/docs/${document._meta.path}`,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@ import svelteConfig from "./svelte.config.js";
|
||||
// Ignore files:
|
||||
const gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url));
|
||||
|
||||
export default ts.config(
|
||||
export default [
|
||||
includeIgnoreFile(gitignorePath),
|
||||
js.configs.recommended,
|
||||
...ts.configs.recommended,
|
||||
@@ -24,9 +24,23 @@ export default ts.config(
|
||||
{
|
||||
languageOptions: {
|
||||
globals: { ...globals.browser, ...globals.node },
|
||||
parserOptions: {
|
||||
tsconfigRootDir: fileURLToPath(new URL(".", import.meta.url)),
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
"no-undef": "off",
|
||||
"@typescript-eslint/array-type": "off",
|
||||
"@typescript-eslint/consistent-type-definitions": "off",
|
||||
"@typescript-eslint/consistent-type-imports": [
|
||||
"warn",
|
||||
{ prefer: "type-imports", fixStyle: "inline-type-imports" },
|
||||
],
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
"warn",
|
||||
{ argsIgnorePattern: "^_" },
|
||||
],
|
||||
"@typescript-eslint/require-await": "off",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -46,4 +60,4 @@ export default ts.config(
|
||||
"svelte/no-at-html-tags": "off",
|
||||
},
|
||||
},
|
||||
);
|
||||
];
|
||||
+34
-26
@@ -32,59 +32,67 @@
|
||||
"prepare": "svelte-kit sync || echo ''",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"check:size": "tsx ./utils/check-size.ts",
|
||||
"check:data": "tsx ./utils/check-data.ts",
|
||||
"check:links": " lychee --base . ./src/data/svgs.ts --cache --max-cache-age 3d . --include 'https://svgl.app'",
|
||||
"fix:viewbox": "tsx ./utils/fix-viewbox.ts",
|
||||
"format": "prettier --write \"src/**/*.{ts,js,md,svelte}\" --cache",
|
||||
"format:check": "prettier --check \"src/**/*.{ts,js,md,svelte}\" --cache",
|
||||
"lint": "eslint ./src",
|
||||
"lint:fix": "eslint ./src --fix",
|
||||
"build:shadcn": "shadcn build --output ./static/r",
|
||||
"build:prod": "pnpm build:registry && vite build",
|
||||
"build:registry": "tsx ./generate-registry.ts"
|
||||
"build:registry": "tsx ./utils/generate-registry.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@shikijs/langs": "3.12.0",
|
||||
"@shikijs/themes": "3.12.0",
|
||||
"@shikijs/langs": "3.15.0",
|
||||
"@shikijs/themes": "3.15.0",
|
||||
"fuse.js": "7.1.0",
|
||||
"jszip": "3.10.1",
|
||||
"mode-watcher": "1.1.0",
|
||||
"shadcn": "3.0.0",
|
||||
"shiki": "3.12.0",
|
||||
"shadcn": "3.5.0",
|
||||
"shiki": "3.15.0",
|
||||
"svgo": "4.0.0",
|
||||
"tsx": "4.20.5"
|
||||
"tsx": "4.20.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@content-collections/core": "0.11.0",
|
||||
"@content-collections/core": "0.12.0",
|
||||
"@content-collections/markdown": "0.1.4",
|
||||
"@content-collections/vite": "0.2.7",
|
||||
"@eslint/compat": "1.3.2",
|
||||
"@eslint/js": "9.33.0",
|
||||
"@internationalized/date": "3.8.2",
|
||||
"@lucide/svelte": "0.515.0",
|
||||
"@shikijs/rehype": "3.12.0",
|
||||
"@eslint/compat": "1.4.1",
|
||||
"@eslint/js": "9.39.1",
|
||||
"@internationalized/date": "3.10.0",
|
||||
"@lucide/svelte": "0.553.0",
|
||||
"@shikijs/rehype": "3.15.0",
|
||||
"@sveltejs/adapter-auto": "6.1.0",
|
||||
"@sveltejs/adapter-node": "5.3.1",
|
||||
"@sveltejs/kit": "2.36.1",
|
||||
"@sveltejs/vite-plugin-svelte": "6.1.3",
|
||||
"@tailwindcss/vite": "4.1.12",
|
||||
"@types/node": "24.3.0",
|
||||
"bits-ui": "2.9.4",
|
||||
"@tailwindcss/vite": "4.1.17",
|
||||
"@types/node": "24.3.3",
|
||||
"bits-ui": "2.14.3",
|
||||
"clsx": "2.1.1",
|
||||
"eslint": "9.33.0",
|
||||
"eslint": "9.39.1",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-plugin-svelte": "3.11.0",
|
||||
"globals": "16.3.0",
|
||||
"github-slugger": "2.0.0",
|
||||
"globals": "16.5.0",
|
||||
"prettier": "3.6.2",
|
||||
"prettier-plugin-svelte": "3.4.0",
|
||||
"prettier-plugin-tailwindcss": "0.6.14",
|
||||
"prettier-plugin-tailwindcss": "0.7.1",
|
||||
"rehype-autolink-headings": "7.1.0",
|
||||
"rehype-slug": "6.0.0",
|
||||
"svelte": "5.38.2",
|
||||
"svelte-check": "4.3.1",
|
||||
"svelte-sonner": "1.0.5",
|
||||
"tailwind-merge": "3.3.1",
|
||||
"tailwind-variants": "1.0.0",
|
||||
"tailwindcss": "4.1.12",
|
||||
"tw-animate-css": "1.3.7",
|
||||
"typescript": "5.9.2",
|
||||
"svelte-sonner": "1.0.6",
|
||||
"tailwind-merge": "3.4.0",
|
||||
"tailwind-variants": "3.1.1",
|
||||
"tailwindcss": "4.1.17",
|
||||
"tw-animate-css": "1.4.0",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.40.0",
|
||||
"vite": "7.1.3",
|
||||
"zod": "4.1.4"
|
||||
"unist-util-visit": "5.0.0",
|
||||
"vite": "7.2.2",
|
||||
"zod": "4.1.12"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+989
-525
@@ -9,11 +9,11 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@shikijs/langs':
|
||||
specifier: 3.12.0
|
||||
version: 3.12.0
|
||||
specifier: 3.15.0
|
||||
version: 3.15.0
|
||||
'@shikijs/themes':
|
||||
specifier: 3.12.0
|
||||
version: 3.12.0
|
||||
specifier: 3.15.0
|
||||
version: 3.15.0
|
||||
fuse.js:
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0
|
||||
@@ -24,78 +24,81 @@ importers:
|
||||
specifier: 1.1.0
|
||||
version: 1.1.0(svelte@5.38.2)
|
||||
shadcn:
|
||||
specifier: 3.0.0
|
||||
version: 3.0.0(@types/node@24.3.0)(typescript@5.9.2)
|
||||
specifier: 3.5.0
|
||||
version: 3.5.0(@types/node@24.3.3)(typescript@5.9.3)
|
||||
shiki:
|
||||
specifier: 3.12.0
|
||||
version: 3.12.0
|
||||
specifier: 3.15.0
|
||||
version: 3.15.0
|
||||
svgo:
|
||||
specifier: 4.0.0
|
||||
version: 4.0.0
|
||||
tsx:
|
||||
specifier: 4.20.5
|
||||
version: 4.20.5
|
||||
specifier: 4.20.6
|
||||
version: 4.20.6
|
||||
devDependencies:
|
||||
'@content-collections/core':
|
||||
specifier: 0.11.0
|
||||
version: 0.11.0(typescript@5.9.2)
|
||||
specifier: 0.12.0
|
||||
version: 0.12.0(typescript@5.9.3)
|
||||
'@content-collections/markdown':
|
||||
specifier: 0.1.4
|
||||
version: 0.1.4(@content-collections/core@0.11.0(typescript@5.9.2))
|
||||
version: 0.1.4(@content-collections/core@0.12.0(typescript@5.9.3))
|
||||
'@content-collections/vite':
|
||||
specifier: 0.2.7
|
||||
version: 0.2.7(@content-collections/core@0.11.0(typescript@5.9.2))(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
version: 0.2.7(@content-collections/core@0.12.0(typescript@5.9.3))(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@eslint/compat':
|
||||
specifier: 1.3.2
|
||||
version: 1.3.2(eslint@9.33.0(jiti@2.5.1))
|
||||
specifier: 1.4.1
|
||||
version: 1.4.1(eslint@9.39.1(jiti@2.6.1))
|
||||
'@eslint/js':
|
||||
specifier: 9.33.0
|
||||
version: 9.33.0
|
||||
specifier: 9.39.1
|
||||
version: 9.39.1
|
||||
'@internationalized/date':
|
||||
specifier: 3.8.2
|
||||
version: 3.8.2
|
||||
specifier: 3.10.0
|
||||
version: 3.10.0
|
||||
'@lucide/svelte':
|
||||
specifier: 0.515.0
|
||||
version: 0.515.0(svelte@5.38.2)
|
||||
specifier: 0.553.0
|
||||
version: 0.553.0(svelte@5.38.2)
|
||||
'@shikijs/rehype':
|
||||
specifier: 3.12.0
|
||||
version: 3.12.0
|
||||
specifier: 3.15.0
|
||||
version: 3.15.0
|
||||
'@sveltejs/adapter-auto':
|
||||
specifier: 6.1.0
|
||||
version: 6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))
|
||||
version: 6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))
|
||||
'@sveltejs/adapter-node':
|
||||
specifier: 5.3.1
|
||||
version: 5.3.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))
|
||||
version: 5.3.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))
|
||||
'@sveltejs/kit':
|
||||
specifier: 2.36.1
|
||||
version: 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
version: 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: 6.1.3
|
||||
version: 6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
version: 6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@tailwindcss/vite':
|
||||
specifier: 4.1.12
|
||||
version: 4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
specifier: 4.1.17
|
||||
version: 4.1.17(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@types/node':
|
||||
specifier: 24.3.0
|
||||
version: 24.3.0
|
||||
specifier: 24.3.3
|
||||
version: 24.3.3
|
||||
bits-ui:
|
||||
specifier: 2.9.4
|
||||
version: 2.9.4(@internationalized/date@3.8.2)(svelte@5.38.2)
|
||||
specifier: 2.14.3
|
||||
version: 2.14.3(@internationalized/date@3.10.0)(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)
|
||||
clsx:
|
||||
specifier: 2.1.1
|
||||
version: 2.1.1
|
||||
eslint:
|
||||
specifier: 9.33.0
|
||||
version: 9.33.0(jiti@2.5.1)
|
||||
specifier: 9.39.1
|
||||
version: 9.39.1(jiti@2.6.1)
|
||||
eslint-config-prettier:
|
||||
specifier: 10.1.8
|
||||
version: 10.1.8(eslint@9.33.0(jiti@2.5.1))
|
||||
version: 10.1.8(eslint@9.39.1(jiti@2.6.1))
|
||||
eslint-plugin-svelte:
|
||||
specifier: 3.11.0
|
||||
version: 3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2)
|
||||
version: 3.11.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.38.2)
|
||||
github-slugger:
|
||||
specifier: 2.0.0
|
||||
version: 2.0.0
|
||||
globals:
|
||||
specifier: 16.3.0
|
||||
version: 16.3.0
|
||||
specifier: 16.5.0
|
||||
version: 16.5.0
|
||||
prettier:
|
||||
specifier: 3.6.2
|
||||
version: 3.6.2
|
||||
@@ -103,41 +106,50 @@ importers:
|
||||
specifier: 3.4.0
|
||||
version: 3.4.0(prettier@3.6.2)(svelte@5.38.2)
|
||||
prettier-plugin-tailwindcss:
|
||||
specifier: 0.6.14
|
||||
version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2)
|
||||
specifier: 0.7.1
|
||||
version: 0.7.1(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2)
|
||||
rehype-autolink-headings:
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0
|
||||
rehype-slug:
|
||||
specifier: 6.0.0
|
||||
version: 6.0.0
|
||||
svelte:
|
||||
specifier: 5.38.2
|
||||
version: 5.38.2
|
||||
svelte-check:
|
||||
specifier: 4.3.1
|
||||
version: 4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2)
|
||||
version: 4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.3)
|
||||
svelte-sonner:
|
||||
specifier: 1.0.5
|
||||
version: 1.0.5(svelte@5.38.2)
|
||||
specifier: 1.0.6
|
||||
version: 1.0.6(svelte@5.38.2)
|
||||
tailwind-merge:
|
||||
specifier: 3.3.1
|
||||
version: 3.3.1
|
||||
specifier: 3.4.0
|
||||
version: 3.4.0
|
||||
tailwind-variants:
|
||||
specifier: 1.0.0
|
||||
version: 1.0.0(tailwindcss@4.1.12)
|
||||
specifier: 3.1.1
|
||||
version: 3.1.1(tailwind-merge@3.4.0)(tailwindcss@4.1.17)
|
||||
tailwindcss:
|
||||
specifier: 4.1.12
|
||||
version: 4.1.12
|
||||
specifier: 4.1.17
|
||||
version: 4.1.17
|
||||
tw-animate-css:
|
||||
specifier: 1.3.7
|
||||
version: 1.3.7
|
||||
specifier: 1.4.0
|
||||
version: 1.4.0
|
||||
typescript:
|
||||
specifier: 5.9.2
|
||||
version: 5.9.2
|
||||
specifier: 5.9.3
|
||||
version: 5.9.3
|
||||
typescript-eslint:
|
||||
specifier: 8.40.0
|
||||
version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
version: 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
unist-util-visit:
|
||||
specifier: 5.0.0
|
||||
version: 5.0.0
|
||||
vite:
|
||||
specifier: 7.1.3
|
||||
version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
specifier: 7.2.2
|
||||
version: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
zod:
|
||||
specifier: 4.1.4
|
||||
version: 4.1.4
|
||||
specifier: 4.1.12
|
||||
version: 4.1.12
|
||||
|
||||
packages:
|
||||
|
||||
@@ -165,6 +177,10 @@ packages:
|
||||
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/generator@7.28.5':
|
||||
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-annotate-as-pure@7.27.3':
|
||||
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -179,6 +195,12 @@ packages:
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
|
||||
'@babel/helper-create-class-features-plugin@7.28.5':
|
||||
resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
|
||||
'@babel/helper-globals@7.28.0':
|
||||
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -187,6 +209,10 @@ packages:
|
||||
resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-member-expression-to-functions@7.28.5':
|
||||
resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-module-imports@7.27.1':
|
||||
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -223,6 +249,10 @@ packages:
|
||||
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-validator-identifier@7.28.5':
|
||||
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-validator-option@7.27.1':
|
||||
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -236,18 +266,47 @@ packages:
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
|
||||
'@babel/parser@7.28.5':
|
||||
resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
|
||||
'@babel/plugin-syntax-jsx@7.27.1':
|
||||
resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/plugin-syntax-typescript@7.27.1':
|
||||
resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/plugin-transform-modules-commonjs@7.27.1':
|
||||
resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/plugin-transform-typescript@7.28.0':
|
||||
resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/plugin-transform-typescript@7.28.5':
|
||||
resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/preset-typescript@7.28.5':
|
||||
resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
|
||||
'@babel/template@7.27.2':
|
||||
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -256,10 +315,18 @@ packages:
|
||||
resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/traverse@7.28.5':
|
||||
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/types@7.28.2':
|
||||
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/types@7.28.5':
|
||||
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@bundled-es-modules/cookie@2.0.1':
|
||||
resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
|
||||
|
||||
@@ -269,8 +336,8 @@ packages:
|
||||
'@bundled-es-modules/tough-cookie@0.1.6':
|
||||
resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==}
|
||||
|
||||
'@content-collections/core@0.11.0':
|
||||
resolution: {integrity: sha512-k6g6AESyLLIYNu4KiBUFAPAq01mqeAZ/2QLmp97iBZLOURWfFrvo3zDGBPtCrXtKYgkRlWxOyLRpIjKqD6aNjw==}
|
||||
'@content-collections/core@0.12.0':
|
||||
resolution: {integrity: sha512-fAweH9JtME6edGzSDavHrDTxyt2jLzikw+I75yKOd/QBmxuAQrK/cFRqxmDznbdm6m3AZnpDPvh63IQ4jpvYvw==}
|
||||
peerDependencies:
|
||||
typescript: ^5.0.2
|
||||
|
||||
@@ -300,164 +367,320 @@ packages:
|
||||
peerDependencies:
|
||||
'@noble/ciphers': ^1.0.0
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.12':
|
||||
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [aix]
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.9':
|
||||
resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [aix]
|
||||
|
||||
'@esbuild/android-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-arm@0.25.12':
|
||||
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-arm@0.25.9':
|
||||
resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-x64@0.25.12':
|
||||
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-x64@0.25.9':
|
||||
resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/darwin-x64@0.25.12':
|
||||
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/darwin-x64@0.25.9':
|
||||
resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.12':
|
||||
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.9':
|
||||
resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/linux-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-arm@0.25.12':
|
||||
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-arm@0.25.9':
|
||||
resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ia32@0.25.12':
|
||||
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ia32@0.25.9':
|
||||
resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-loong64@0.25.12':
|
||||
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-loong64@0.25.9':
|
||||
resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.12':
|
||||
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.9':
|
||||
resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.12':
|
||||
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.9':
|
||||
resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.12':
|
||||
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.9':
|
||||
resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-s390x@0.25.12':
|
||||
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-s390x@0.25.9':
|
||||
resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-x64@0.25.12':
|
||||
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-x64@0.25.9':
|
||||
resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.12':
|
||||
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.9':
|
||||
resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.12':
|
||||
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.9':
|
||||
resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openharmony-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@esbuild/openharmony-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@esbuild/sunos-x64@0.25.12':
|
||||
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
|
||||
'@esbuild/sunos-x64@0.25.9':
|
||||
resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
|
||||
'@esbuild/win32-arm64@0.25.12':
|
||||
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-arm64@0.25.9':
|
||||
resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-ia32@0.25.12':
|
||||
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-ia32@0.25.9':
|
||||
resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-x64@0.25.12':
|
||||
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-x64@0.25.9':
|
||||
resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@eslint-community/eslint-utils@4.7.0':
|
||||
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
|
||||
'@eslint-community/eslint-utils@4.9.0':
|
||||
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
||||
@@ -466,8 +689,8 @@ packages:
|
||||
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
|
||||
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
||||
|
||||
'@eslint/compat@1.3.2':
|
||||
resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==}
|
||||
'@eslint/compat@1.4.1':
|
||||
resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.40 || 9
|
||||
@@ -475,32 +698,32 @@ packages:
|
||||
eslint:
|
||||
optional: true
|
||||
|
||||
'@eslint/config-array@0.21.0':
|
||||
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
|
||||
'@eslint/config-array@0.21.1':
|
||||
resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/config-helpers@0.3.1':
|
||||
resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==}
|
||||
'@eslint/config-helpers@0.4.2':
|
||||
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/core@0.15.2':
|
||||
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
|
||||
'@eslint/core@0.17.0':
|
||||
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/eslintrc@3.3.1':
|
||||
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/js@9.33.0':
|
||||
resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==}
|
||||
'@eslint/js@9.39.1':
|
||||
resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/object-schema@2.1.6':
|
||||
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
|
||||
'@eslint/object-schema@2.1.7':
|
||||
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/plugin-kit@0.3.5':
|
||||
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
|
||||
'@eslint/plugin-kit@0.4.1':
|
||||
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@floating-ui/core@1.7.3':
|
||||
@@ -563,8 +786,8 @@ packages:
|
||||
'@types/node':
|
||||
optional: true
|
||||
|
||||
'@internationalized/date@3.8.2':
|
||||
resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
|
||||
'@internationalized/date@3.10.0':
|
||||
resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==}
|
||||
|
||||
'@isaacs/balanced-match@4.0.1':
|
||||
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
|
||||
@@ -574,10 +797,6 @@ packages:
|
||||
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
|
||||
engines: {node: 20 || >=22}
|
||||
|
||||
'@isaacs/fs-minipass@4.0.1':
|
||||
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.13':
|
||||
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
|
||||
|
||||
@@ -594,8 +813,8 @@ packages:
|
||||
'@jridgewell/trace-mapping@0.3.30':
|
||||
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
|
||||
|
||||
'@lucide/svelte@0.515.0':
|
||||
resolution: {integrity: sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA==}
|
||||
'@lucide/svelte@0.553.0':
|
||||
resolution: {integrity: sha512-uudJd5NF1zrsO0C2dmCo5lzctqGWNxQKUxM+HErUKyG2oCI2rSGllcsSjn6JfLaHUVy+sPESKa5Dsctm4mZHOQ==}
|
||||
peerDependencies:
|
||||
svelte: ^5
|
||||
|
||||
@@ -782,26 +1001,26 @@ packages:
|
||||
'@sec-ant/readable-stream@0.4.1':
|
||||
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
|
||||
|
||||
'@shikijs/core@3.12.0':
|
||||
resolution: {integrity: sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==}
|
||||
'@shikijs/core@3.15.0':
|
||||
resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==}
|
||||
|
||||
'@shikijs/engine-javascript@3.12.0':
|
||||
resolution: {integrity: sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==}
|
||||
'@shikijs/engine-javascript@3.15.0':
|
||||
resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==}
|
||||
|
||||
'@shikijs/engine-oniguruma@3.12.0':
|
||||
resolution: {integrity: sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==}
|
||||
'@shikijs/engine-oniguruma@3.15.0':
|
||||
resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==}
|
||||
|
||||
'@shikijs/langs@3.12.0':
|
||||
resolution: {integrity: sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==}
|
||||
'@shikijs/langs@3.15.0':
|
||||
resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==}
|
||||
|
||||
'@shikijs/rehype@3.12.0':
|
||||
resolution: {integrity: sha512-qxZwugfCQUMECTmUOCGiG5cNHHTxxGk3esirD7mwwdSxl344KlN/6M9/anev+3uBFVs9UDNShjsMAla8egkCuw==}
|
||||
'@shikijs/rehype@3.15.0':
|
||||
resolution: {integrity: sha512-U+tqD1oxL+85N8FaW5XYIlMZ8KAa2g9IdplEZxPWflGRJf2gQRiBMMrpdG1USz3PN350YnMUHWcz9Twt3wJjXQ==}
|
||||
|
||||
'@shikijs/themes@3.12.0':
|
||||
resolution: {integrity: sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==}
|
||||
'@shikijs/themes@3.15.0':
|
||||
resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==}
|
||||
|
||||
'@shikijs/types@3.12.0':
|
||||
resolution: {integrity: sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==}
|
||||
'@shikijs/types@3.15.0':
|
||||
resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==}
|
||||
|
||||
'@shikijs/vscode-textmate@10.0.2':
|
||||
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
|
||||
@@ -859,65 +1078,65 @@ packages:
|
||||
'@swc/helpers@0.5.17':
|
||||
resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
|
||||
|
||||
'@tailwindcss/node@4.1.12':
|
||||
resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==}
|
||||
'@tailwindcss/node@4.1.17':
|
||||
resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.12':
|
||||
resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
|
||||
'@tailwindcss/oxide-android-arm64@4.1.17':
|
||||
resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.12':
|
||||
resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.17':
|
||||
resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.12':
|
||||
resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.17':
|
||||
resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.12':
|
||||
resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.17':
|
||||
resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
|
||||
resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
|
||||
resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
|
||||
resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==}
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
|
||||
resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
|
||||
resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.17':
|
||||
resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
|
||||
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.17':
|
||||
resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
|
||||
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.17':
|
||||
resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
|
||||
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.17':
|
||||
resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
cpu: [wasm32]
|
||||
bundledDependencies:
|
||||
@@ -928,24 +1147,24 @@ packages:
|
||||
- '@emnapi/wasi-threads'
|
||||
- tslib
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
|
||||
resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
|
||||
resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
|
||||
resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.17':
|
||||
resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide@4.1.12':
|
||||
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
|
||||
'@tailwindcss/oxide@4.1.17':
|
||||
resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
|
||||
engines: {node: '>= 10'}
|
||||
|
||||
'@tailwindcss/vite@4.1.12':
|
||||
resolution: {integrity: sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==}
|
||||
'@tailwindcss/vite@4.1.17':
|
||||
resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==}
|
||||
peerDependencies:
|
||||
vite: ^5.2.0 || ^6 || ^7
|
||||
|
||||
@@ -973,8 +1192,8 @@ packages:
|
||||
'@types/ms@2.1.0':
|
||||
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
||||
|
||||
'@types/node@24.3.0':
|
||||
resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==}
|
||||
'@types/node@24.3.3':
|
||||
resolution: {integrity: sha512-GKBNHjoNw3Kra1Qg5UXttsY5kiWMEfoHq2TmXb+b1rcm6N7B3wTrFYIf/oSZ1xNQ+hVVijgLkiDZh7jRRsh+Gw==}
|
||||
|
||||
'@types/resolve@1.20.2':
|
||||
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
||||
@@ -1019,6 +1238,12 @@ packages:
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.46.4':
|
||||
resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
'@typescript-eslint/type-utils@8.40.0':
|
||||
resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
@@ -1030,6 +1255,10 @@ packages:
|
||||
resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/types@8.46.4':
|
||||
resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.40.0':
|
||||
resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
@@ -1115,8 +1344,12 @@ packages:
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
bits-ui@2.9.4:
|
||||
resolution: {integrity: sha512-Cqn685P6DDuEyBZT/CWMyS5+8JAnYbctvoEVPcmiut+HUpG3SozVgjoDaUib5VG4ZYUKEi1FPwHxiXo9c6J0PA==}
|
||||
baseline-browser-mapping@2.8.25:
|
||||
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
|
||||
hasBin: true
|
||||
|
||||
bits-ui@2.14.3:
|
||||
resolution: {integrity: sha512-Dkpenu6F5WUfdDJn5D8ALkTaAM+7sUCszKjzav5TWAzsq1fj2tcqKYJcUm82OS+JlgcolI7LOkrqIXzKnt56RA==}
|
||||
engines: {node: '>=20'}
|
||||
peerDependencies:
|
||||
'@internationalized/date': ^3.8.1
|
||||
@@ -1139,8 +1372,8 @@ packages:
|
||||
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
browserslist@4.25.3:
|
||||
resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==}
|
||||
browserslist@4.28.0:
|
||||
resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
|
||||
@@ -1164,8 +1397,8 @@ packages:
|
||||
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
caniuse-lite@1.0.30001737:
|
||||
resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
|
||||
caniuse-lite@1.0.30001754:
|
||||
resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==}
|
||||
|
||||
ccount@2.0.1:
|
||||
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
||||
@@ -1191,10 +1424,6 @@ packages:
|
||||
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
||||
engines: {node: '>= 14.16.0'}
|
||||
|
||||
chownr@3.0.0:
|
||||
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
cli-cursor@5.0.0:
|
||||
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -1352,8 +1581,8 @@ packages:
|
||||
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
devalue@5.1.1:
|
||||
resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
|
||||
devalue@5.4.2:
|
||||
resolution: {integrity: sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==}
|
||||
|
||||
devlop@1.1.0:
|
||||
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
||||
@@ -1390,8 +1619,8 @@ packages:
|
||||
ee-first@1.1.1:
|
||||
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||
|
||||
electron-to-chromium@1.5.209:
|
||||
resolution: {integrity: sha512-Xoz0uMrim9ZETCQt8UgM5FxQF9+imA7PBpokoGcZloA1uw2LeHzTlip5cb5KOAsXZLjh/moN2vReN3ZjJmjI9A==}
|
||||
electron-to-chromium@1.5.249:
|
||||
resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==}
|
||||
|
||||
emoji-regex@10.4.0:
|
||||
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
|
||||
@@ -1434,6 +1663,11 @@ packages:
|
||||
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
esbuild@0.25.12:
|
||||
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
esbuild@0.25.9:
|
||||
resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -1478,8 +1712,8 @@ packages:
|
||||
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
eslint@9.33.0:
|
||||
resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==}
|
||||
eslint@9.39.1:
|
||||
resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -1684,6 +1918,9 @@ packages:
|
||||
get-tsconfig@4.10.1:
|
||||
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
|
||||
|
||||
github-slugger@2.0.0:
|
||||
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
|
||||
|
||||
glob-parent@5.1.2:
|
||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -1696,8 +1933,8 @@ packages:
|
||||
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
globals@16.3.0:
|
||||
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
|
||||
globals@16.5.0:
|
||||
resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
gopd@1.2.0:
|
||||
@@ -1733,6 +1970,12 @@ packages:
|
||||
hast-util-from-parse5@8.0.3:
|
||||
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
|
||||
|
||||
hast-util-heading-rank@3.0.0:
|
||||
resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
|
||||
|
||||
hast-util-is-element@3.0.0:
|
||||
resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
|
||||
|
||||
hast-util-parse-selector@4.0.0:
|
||||
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
|
||||
|
||||
@@ -1893,8 +2136,8 @@ packages:
|
||||
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
jiti@2.5.1:
|
||||
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
|
||||
jiti@2.6.1:
|
||||
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
|
||||
hasBin: true
|
||||
|
||||
js-tokens@4.0.0:
|
||||
@@ -1961,68 +2204,74 @@ packages:
|
||||
lie@3.3.0:
|
||||
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
|
||||
lightningcss-android-arm64@1.30.2:
|
||||
resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
lightningcss-darwin-arm64@1.30.2:
|
||||
resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
lightningcss-darwin-x64@1.30.1:
|
||||
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
|
||||
lightningcss-darwin-x64@1.30.2:
|
||||
resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
lightningcss-freebsd-x64@1.30.1:
|
||||
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
|
||||
lightningcss-freebsd-x64@1.30.2:
|
||||
resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
lightningcss-linux-arm-gnueabihf@1.30.1:
|
||||
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
|
||||
lightningcss-linux-arm-gnueabihf@1.30.2:
|
||||
resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-arm64-gnu@1.30.1:
|
||||
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
|
||||
lightningcss-linux-arm64-gnu@1.30.2:
|
||||
resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-arm64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
|
||||
lightningcss-linux-arm64-musl@1.30.2:
|
||||
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-x64-gnu@1.30.1:
|
||||
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
|
||||
lightningcss-linux-x64-gnu@1.30.2:
|
||||
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-x64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
|
||||
lightningcss-linux-x64-musl@1.30.2:
|
||||
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-win32-arm64-msvc@1.30.1:
|
||||
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
|
||||
lightningcss-win32-arm64-msvc@1.30.2:
|
||||
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
lightningcss-win32-x64-msvc@1.30.1:
|
||||
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
|
||||
lightningcss-win32-x64-msvc@1.30.2:
|
||||
resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
lightningcss@1.30.1:
|
||||
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
|
||||
lightningcss@1.30.2:
|
||||
resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
||||
lilconfig@2.1.0:
|
||||
@@ -2049,8 +2298,12 @@ packages:
|
||||
lru-cache@5.1.1:
|
||||
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
|
||||
|
||||
magic-string@0.30.17:
|
||||
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
||||
lz-string@1.5.0:
|
||||
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
|
||||
hasBin: true
|
||||
|
||||
magic-string@0.30.21:
|
||||
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
|
||||
|
||||
math-intrinsics@1.1.0:
|
||||
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
|
||||
@@ -2183,19 +2436,6 @@ packages:
|
||||
minimist@1.2.8:
|
||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||
|
||||
minipass@7.1.2:
|
||||
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minizlib@3.0.2:
|
||||
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
|
||||
engines: {node: '>= 18'}
|
||||
|
||||
mkdirp@3.0.1:
|
||||
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
mode-watcher@1.1.0:
|
||||
resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==}
|
||||
peerDependencies:
|
||||
@@ -2247,8 +2487,8 @@ packages:
|
||||
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
node-releases@2.0.19:
|
||||
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
|
||||
node-releases@2.0.27:
|
||||
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
|
||||
|
||||
npm-run-path@4.0.1:
|
||||
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
|
||||
@@ -2428,9 +2668,9 @@ packages:
|
||||
prettier: ^3.0.0
|
||||
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
|
||||
|
||||
prettier-plugin-tailwindcss@0.6.14:
|
||||
resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==}
|
||||
engines: {node: '>=14.21.3'}
|
||||
prettier-plugin-tailwindcss@0.7.1:
|
||||
resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==}
|
||||
engines: {node: '>=20.19'}
|
||||
peerDependencies:
|
||||
'@ianvs/prettier-plugin-sort-imports': '*'
|
||||
'@prettier/plugin-hermes': '*'
|
||||
@@ -2442,14 +2682,12 @@ packages:
|
||||
prettier: ^3.0
|
||||
prettier-plugin-astro: '*'
|
||||
prettier-plugin-css-order: '*'
|
||||
prettier-plugin-import-sort: '*'
|
||||
prettier-plugin-jsdoc: '*'
|
||||
prettier-plugin-marko: '*'
|
||||
prettier-plugin-multiline-arrays: '*'
|
||||
prettier-plugin-organize-attributes: '*'
|
||||
prettier-plugin-organize-imports: '*'
|
||||
prettier-plugin-sort-imports: '*'
|
||||
prettier-plugin-style-order: '*'
|
||||
prettier-plugin-svelte: '*'
|
||||
peerDependenciesMeta:
|
||||
'@ianvs/prettier-plugin-sort-imports':
|
||||
@@ -2470,8 +2708,6 @@ packages:
|
||||
optional: true
|
||||
prettier-plugin-css-order:
|
||||
optional: true
|
||||
prettier-plugin-import-sort:
|
||||
optional: true
|
||||
prettier-plugin-jsdoc:
|
||||
optional: true
|
||||
prettier-plugin-marko:
|
||||
@@ -2484,8 +2720,6 @@ packages:
|
||||
optional: true
|
||||
prettier-plugin-sort-imports:
|
||||
optional: true
|
||||
prettier-plugin-style-order:
|
||||
optional: true
|
||||
prettier-plugin-svelte:
|
||||
optional: true
|
||||
|
||||
@@ -2563,9 +2797,15 @@ packages:
|
||||
regex@6.0.1:
|
||||
resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
|
||||
|
||||
rehype-autolink-headings@7.1.0:
|
||||
resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
|
||||
|
||||
rehype-raw@7.0.0:
|
||||
resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
|
||||
|
||||
rehype-slug@6.0.0:
|
||||
resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
|
||||
|
||||
rehype-stringify@10.0.1:
|
||||
resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
|
||||
|
||||
@@ -2629,10 +2869,14 @@ packages:
|
||||
peerDependencies:
|
||||
svelte: ^5.7.0
|
||||
|
||||
runed@0.29.2:
|
||||
resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==}
|
||||
runed@0.35.1:
|
||||
resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==}
|
||||
peerDependencies:
|
||||
'@sveltejs/kit': ^2.21.0
|
||||
svelte: ^5.7.0
|
||||
peerDependenciesMeta:
|
||||
'@sveltejs/kit':
|
||||
optional: true
|
||||
|
||||
sade@1.8.1:
|
||||
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
|
||||
@@ -2683,8 +2927,8 @@ packages:
|
||||
setprototypeof@1.2.0:
|
||||
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
|
||||
|
||||
shadcn@3.0.0:
|
||||
resolution: {integrity: sha512-GhMwMwcxR3GpDO2ctocvyetQ7BJAxSakaznBtYM/1mPRTjN0I0TAZCGSXdfj0VXOW4PaHbFEHsyUCnFcEf/1Ag==}
|
||||
shadcn@3.5.0:
|
||||
resolution: {integrity: sha512-5f9tn7gHOiI8CqJ8LGrUEmX6dOivGgSbHkMCeOMCzxHZy9cPwyuRXt7ZyjwukO8QH9kGqi6oiKOpfvTXNGBP4g==}
|
||||
hasBin: true
|
||||
|
||||
shebang-command@2.0.0:
|
||||
@@ -2695,8 +2939,8 @@ packages:
|
||||
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
shiki@3.12.0:
|
||||
resolution: {integrity: sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==}
|
||||
shiki@3.15.0:
|
||||
resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
|
||||
|
||||
side-channel-list@1.0.0:
|
||||
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
|
||||
@@ -2822,32 +3066,32 @@ packages:
|
||||
svelte: ^4.0.0 || ^5.0.0-next.0
|
||||
typescript: '>=5.0.0'
|
||||
|
||||
svelte-eslint-parser@1.3.1:
|
||||
resolution: {integrity: sha512-0Iztj5vcOVOVkhy1pbo5uA9r+d3yaVoE5XPc9eABIWDOSJZ2mOsZ4D+t45rphWCOr0uMw3jtSG2fh2e7GvKnPg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
svelte-eslint-parser@1.4.0:
|
||||
resolution: {integrity: sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.18.3}
|
||||
peerDependencies:
|
||||
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
|
||||
peerDependenciesMeta:
|
||||
svelte:
|
||||
optional: true
|
||||
|
||||
svelte-sonner@1.0.5:
|
||||
resolution: {integrity: sha512-9dpGPFqKb/QWudYqGnEz93vuY+NgCEvyNvxoCLMVGw6sDN/3oVeKV1xiEirW2E1N3vJEyj5imSBNOGltQHA7mg==}
|
||||
svelte-sonner@1.0.6:
|
||||
resolution: {integrity: sha512-cOB6fKVPnJ/wuqHV4dqoTJ/l/g7n3V8goUHqnhIV2wyv55DdoCI1D3VQSBIs7Iy8pkH5ZaNPB8T53jFfXE/6og==}
|
||||
peerDependencies:
|
||||
svelte: ^5.0.0
|
||||
|
||||
svelte-toolbelt@0.10.6:
|
||||
resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==}
|
||||
engines: {node: '>=18', pnpm: '>=8.7.0'}
|
||||
peerDependencies:
|
||||
svelte: ^5.30.2
|
||||
|
||||
svelte-toolbelt@0.7.1:
|
||||
resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==}
|
||||
engines: {node: '>=18', pnpm: '>=8.7.0'}
|
||||
peerDependencies:
|
||||
svelte: ^5.0.0
|
||||
|
||||
svelte-toolbelt@0.9.3:
|
||||
resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==}
|
||||
engines: {node: '>=18', pnpm: '>=8.7.0'}
|
||||
peerDependencies:
|
||||
svelte: ^5.30.2
|
||||
|
||||
svelte@5.38.2:
|
||||
resolution: {integrity: sha512-iAcp/oFAWauVSGILdD67n7DiwgLHXZzWZIdzl7araRxu72jUr7PFAo2Iie7gXt0IbnlYvhxCb9GT3ZJUquO3PA==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -2860,29 +3104,26 @@ packages:
|
||||
tabbable@6.2.0:
|
||||
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
|
||||
|
||||
tailwind-merge@3.0.2:
|
||||
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
|
||||
tailwind-merge@3.4.0:
|
||||
resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
|
||||
|
||||
tailwind-merge@3.3.1:
|
||||
resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
|
||||
|
||||
tailwind-variants@1.0.0:
|
||||
resolution: {integrity: sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==}
|
||||
tailwind-variants@3.1.1:
|
||||
resolution: {integrity: sha512-ftLXe3krnqkMHsuBTEmaVUXYovXtPyTK7ckEfDRXS8PBZx0bAUas+A0jYxuKA5b8qg++wvQ3d2MQ7l/xeZxbZQ==}
|
||||
engines: {node: '>=16.x', pnpm: '>=7.x'}
|
||||
peerDependencies:
|
||||
tailwind-merge: '>=3.0.0'
|
||||
tailwindcss: '*'
|
||||
peerDependenciesMeta:
|
||||
tailwind-merge:
|
||||
optional: true
|
||||
|
||||
tailwindcss@4.1.12:
|
||||
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
|
||||
tailwindcss@4.1.17:
|
||||
resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
|
||||
|
||||
tapable@2.2.2:
|
||||
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar@7.4.3:
|
||||
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
tiny-invariant@1.3.3:
|
||||
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
|
||||
|
||||
@@ -2893,6 +3134,10 @@ packages:
|
||||
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
||||
tinyglobby@0.2.15:
|
||||
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
@@ -2931,13 +3176,13 @@ packages:
|
||||
tslib@2.8.1:
|
||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||
|
||||
tsx@4.20.5:
|
||||
resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==}
|
||||
tsx@4.20.6:
|
||||
resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
tw-animate-css@1.3.7:
|
||||
resolution: {integrity: sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A==}
|
||||
tw-animate-css@1.4.0:
|
||||
resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
|
||||
|
||||
type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
@@ -2962,8 +3207,8 @@ packages:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <6.0.0'
|
||||
|
||||
typescript@5.9.2:
|
||||
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
|
||||
typescript@5.9.3:
|
||||
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
@@ -3004,8 +3249,8 @@ packages:
|
||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
update-browserslist-db@1.1.3:
|
||||
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
|
||||
update-browserslist-db@1.1.4:
|
||||
resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
@@ -3032,8 +3277,8 @@ packages:
|
||||
vfile@6.0.3:
|
||||
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
||||
|
||||
vite@7.1.3:
|
||||
resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
|
||||
vite@7.2.2:
|
||||
resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -3119,10 +3364,6 @@ packages:
|
||||
yallist@3.1.1:
|
||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||
|
||||
yallist@5.0.0:
|
||||
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
yaml@1.10.2:
|
||||
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -3167,8 +3408,8 @@ packages:
|
||||
zod@3.25.76:
|
||||
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
|
||||
|
||||
zod@4.1.4:
|
||||
resolution: {integrity: sha512-2YqJuWkU6IIK9qcE4k1lLLhyZ6zFw7XVRdQGpV97jEIZwTrscUw+DY31Xczd8nwaoksyJUIxCojZXwckJovWxA==}
|
||||
zod@4.1.12:
|
||||
resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==}
|
||||
|
||||
zwitch@2.0.4:
|
||||
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
||||
@@ -3223,6 +3464,14 @@ snapshots:
|
||||
'@jridgewell/trace-mapping': 0.3.30
|
||||
jsesc: 3.1.0
|
||||
|
||||
'@babel/generator@7.28.5':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.5
|
||||
'@babel/types': 7.28.5
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.30
|
||||
jsesc: 3.1.0
|
||||
|
||||
'@babel/helper-annotate-as-pure@7.27.3':
|
||||
dependencies:
|
||||
'@babel/types': 7.28.2
|
||||
@@ -3231,7 +3480,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.28.0
|
||||
'@babel/helper-validator-option': 7.27.1
|
||||
browserslist: 4.25.3
|
||||
browserslist: 4.28.0
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.1
|
||||
|
||||
@@ -3248,6 +3497,19 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-annotate-as-pure': 7.27.3
|
||||
'@babel/helper-member-expression-to-functions': 7.28.5
|
||||
'@babel/helper-optimise-call-expression': 7.27.1
|
||||
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3)
|
||||
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||
'@babel/traverse': 7.28.5
|
||||
semver: 6.3.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-globals@7.28.0': {}
|
||||
|
||||
'@babel/helper-member-expression-to-functions@7.27.1':
|
||||
@@ -3257,6 +3519,13 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-member-expression-to-functions@7.28.5':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.28.5
|
||||
'@babel/types': 7.28.5
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-module-imports@7.27.1':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.28.3
|
||||
@@ -3299,6 +3568,8 @@ snapshots:
|
||||
|
||||
'@babel/helper-validator-identifier@7.27.1': {}
|
||||
|
||||
'@babel/helper-validator-identifier@7.28.5': {}
|
||||
|
||||
'@babel/helper-validator-option@7.27.1': {}
|
||||
|
||||
'@babel/helpers@7.28.3':
|
||||
@@ -3310,11 +3581,28 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/types': 7.28.2
|
||||
|
||||
'@babel/parser@7.28.5':
|
||||
dependencies:
|
||||
'@babel/types': 7.28.5
|
||||
|
||||
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
|
||||
'@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
|
||||
'@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3)
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
@@ -3326,6 +3614,28 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-annotate-as-pure': 7.27.3
|
||||
'@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.3)
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
|
||||
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/preset-typescript@7.28.5(@babel/core@7.28.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/helper-plugin-utils': 7.27.1
|
||||
'@babel/helper-validator-option': 7.27.1
|
||||
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3)
|
||||
'@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3)
|
||||
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.3)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/template@7.27.2':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
@@ -3344,11 +3654,28 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/traverse@7.28.5':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/generator': 7.28.5
|
||||
'@babel/helper-globals': 7.28.0
|
||||
'@babel/parser': 7.28.5
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/types': 7.28.5
|
||||
debug: 4.4.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/types@7.28.2':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
|
||||
'@babel/types@7.28.5':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.28.5
|
||||
|
||||
'@bundled-es-modules/cookie@2.0.1':
|
||||
dependencies:
|
||||
cookie: 0.7.2
|
||||
@@ -3362,29 +3689,28 @@ snapshots:
|
||||
'@types/tough-cookie': 4.0.5
|
||||
tough-cookie: 4.1.4
|
||||
|
||||
'@content-collections/core@0.11.0(typescript@5.9.2)':
|
||||
'@content-collections/core@0.12.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.0.0
|
||||
camelcase: 8.0.0
|
||||
chokidar: 4.0.3
|
||||
esbuild: 0.25.9
|
||||
esbuild: 0.25.12
|
||||
gray-matter: 4.0.3
|
||||
p-limit: 6.2.0
|
||||
picomatch: 4.0.3
|
||||
pluralize: 8.0.0
|
||||
serialize-javascript: 6.0.2
|
||||
tinyglobby: 0.2.14
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
yaml: 2.8.1
|
||||
zod: 3.25.76
|
||||
|
||||
'@content-collections/integrations@0.3.0(@content-collections/core@0.11.0(typescript@5.9.2))':
|
||||
'@content-collections/integrations@0.3.0(@content-collections/core@0.12.0(typescript@5.9.3))':
|
||||
dependencies:
|
||||
'@content-collections/core': 0.11.0(typescript@5.9.2)
|
||||
'@content-collections/core': 0.12.0(typescript@5.9.3)
|
||||
|
||||
'@content-collections/markdown@0.1.4(@content-collections/core@0.11.0(typescript@5.9.2))':
|
||||
'@content-collections/markdown@0.1.4(@content-collections/core@0.12.0(typescript@5.9.3))':
|
||||
dependencies:
|
||||
'@content-collections/core': 0.11.0(typescript@5.9.2)
|
||||
'@content-collections/core': 0.12.0(typescript@5.9.3)
|
||||
rehype-raw: 7.0.0
|
||||
rehype-stringify: 10.0.1
|
||||
remark-parse: 11.0.0
|
||||
@@ -3393,11 +3719,11 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@content-collections/vite@0.2.7(@content-collections/core@0.11.0(typescript@5.9.2))(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))':
|
||||
'@content-collections/vite@0.2.7(@content-collections/core@0.12.0(typescript@5.9.3))(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@content-collections/core': 0.11.0(typescript@5.9.2)
|
||||
'@content-collections/integrations': 0.3.0(@content-collections/core@0.11.0(typescript@5.9.2))
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
'@content-collections/core': 0.12.0(typescript@5.9.3)
|
||||
'@content-collections/integrations': 0.3.0(@content-collections/core@0.12.0(typescript@5.9.3))
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
|
||||
'@dotenvx/dotenvx@1.49.0':
|
||||
dependencies:
|
||||
@@ -3415,106 +3741,188 @@ snapshots:
|
||||
dependencies:
|
||||
'@noble/ciphers': 1.3.0
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ia32@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ia32@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-loong64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-loong64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-s390x@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-s390x@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openharmony-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openharmony-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/sunos-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/sunos-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-arm64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-arm64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-ia32@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-ia32@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-x64@0.25.12':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-x64@0.25.9':
|
||||
optional: true
|
||||
|
||||
'@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))':
|
||||
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))':
|
||||
dependencies:
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
eslint-visitor-keys: 3.4.3
|
||||
|
||||
'@eslint-community/regexpp@4.12.1': {}
|
||||
|
||||
'@eslint/compat@1.3.2(eslint@9.33.0(jiti@2.5.1))':
|
||||
optionalDependencies:
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
|
||||
'@eslint/config-array@0.21.0':
|
||||
'@eslint/compat@1.4.1(eslint@9.39.1(jiti@2.6.1))':
|
||||
dependencies:
|
||||
'@eslint/object-schema': 2.1.6
|
||||
'@eslint/core': 0.17.0
|
||||
optionalDependencies:
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
|
||||
'@eslint/config-array@0.21.1':
|
||||
dependencies:
|
||||
'@eslint/object-schema': 2.1.7
|
||||
debug: 4.4.1
|
||||
minimatch: 3.1.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@eslint/config-helpers@0.3.1': {}
|
||||
'@eslint/config-helpers@0.4.2':
|
||||
dependencies:
|
||||
'@eslint/core': 0.17.0
|
||||
|
||||
'@eslint/core@0.15.2':
|
||||
'@eslint/core@0.17.0':
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
@@ -3532,13 +3940,13 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@eslint/js@9.33.0': {}
|
||||
'@eslint/js@9.39.1': {}
|
||||
|
||||
'@eslint/object-schema@2.1.6': {}
|
||||
'@eslint/object-schema@2.1.7': {}
|
||||
|
||||
'@eslint/plugin-kit@0.3.5':
|
||||
'@eslint/plugin-kit@0.4.1':
|
||||
dependencies:
|
||||
'@eslint/core': 0.15.2
|
||||
'@eslint/core': 0.17.0
|
||||
levn: 0.4.1
|
||||
|
||||
'@floating-ui/core@1.7.3':
|
||||
@@ -3565,17 +3973,17 @@ snapshots:
|
||||
|
||||
'@humanwhocodes/retry@0.4.3': {}
|
||||
|
||||
'@inquirer/confirm@5.1.16(@types/node@24.3.0)':
|
||||
'@inquirer/confirm@5.1.16(@types/node@24.3.3)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.2.0(@types/node@24.3.0)
|
||||
'@inquirer/type': 3.0.8(@types/node@24.3.0)
|
||||
'@inquirer/core': 10.2.0(@types/node@24.3.3)
|
||||
'@inquirer/type': 3.0.8(@types/node@24.3.3)
|
||||
optionalDependencies:
|
||||
'@types/node': 24.3.0
|
||||
'@types/node': 24.3.3
|
||||
|
||||
'@inquirer/core@10.2.0(@types/node@24.3.0)':
|
||||
'@inquirer/core@10.2.0(@types/node@24.3.3)':
|
||||
dependencies:
|
||||
'@inquirer/figures': 1.0.13
|
||||
'@inquirer/type': 3.0.8(@types/node@24.3.0)
|
||||
'@inquirer/type': 3.0.8(@types/node@24.3.3)
|
||||
ansi-escapes: 4.3.2
|
||||
cli-width: 4.1.0
|
||||
mute-stream: 2.0.0
|
||||
@@ -3583,15 +3991,15 @@ snapshots:
|
||||
wrap-ansi: 6.2.0
|
||||
yoctocolors-cjs: 2.1.3
|
||||
optionalDependencies:
|
||||
'@types/node': 24.3.0
|
||||
'@types/node': 24.3.3
|
||||
|
||||
'@inquirer/figures@1.0.13': {}
|
||||
|
||||
'@inquirer/type@3.0.8(@types/node@24.3.0)':
|
||||
'@inquirer/type@3.0.8(@types/node@24.3.3)':
|
||||
optionalDependencies:
|
||||
'@types/node': 24.3.0
|
||||
'@types/node': 24.3.3
|
||||
|
||||
'@internationalized/date@3.8.2':
|
||||
'@internationalized/date@3.10.0':
|
||||
dependencies:
|
||||
'@swc/helpers': 0.5.17
|
||||
|
||||
@@ -3601,10 +4009,6 @@ snapshots:
|
||||
dependencies:
|
||||
'@isaacs/balanced-match': 4.0.1
|
||||
|
||||
'@isaacs/fs-minipass@4.0.1':
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.13':
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
@@ -3624,7 +4028,7 @@ snapshots:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
'@lucide/svelte@0.515.0(svelte@5.38.2)':
|
||||
'@lucide/svelte@0.553.0(svelte@5.38.2)':
|
||||
dependencies:
|
||||
svelte: 5.38.2
|
||||
|
||||
@@ -3692,7 +4096,7 @@ snapshots:
|
||||
estree-walker: 2.0.2
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
is-reference: 1.2.1
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.21
|
||||
picomatch: 4.0.3
|
||||
optionalDependencies:
|
||||
rollup: 4.46.4
|
||||
@@ -3783,42 +4187,42 @@ snapshots:
|
||||
|
||||
'@sec-ant/readable-stream@0.4.1': {}
|
||||
|
||||
'@shikijs/core@3.12.0':
|
||||
'@shikijs/core@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
'@shikijs/vscode-textmate': 10.0.2
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-to-html: 9.0.5
|
||||
|
||||
'@shikijs/engine-javascript@3.12.0':
|
||||
'@shikijs/engine-javascript@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
'@shikijs/vscode-textmate': 10.0.2
|
||||
oniguruma-to-es: 4.3.3
|
||||
|
||||
'@shikijs/engine-oniguruma@3.12.0':
|
||||
'@shikijs/engine-oniguruma@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
'@shikijs/vscode-textmate': 10.0.2
|
||||
|
||||
'@shikijs/langs@3.12.0':
|
||||
'@shikijs/langs@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
|
||||
'@shikijs/rehype@3.12.0':
|
||||
'@shikijs/rehype@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-to-string: 3.0.1
|
||||
shiki: 3.12.0
|
||||
shiki: 3.15.0
|
||||
unified: 11.0.5
|
||||
unist-util-visit: 5.0.0
|
||||
|
||||
'@shikijs/themes@3.12.0':
|
||||
'@shikijs/themes@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/types': 3.15.0
|
||||
|
||||
'@shikijs/types@3.12.0':
|
||||
'@shikijs/types@3.15.0':
|
||||
dependencies:
|
||||
'@shikijs/vscode-textmate': 10.0.2
|
||||
'@types/hast': 3.0.4
|
||||
@@ -3833,56 +4237,56 @@ snapshots:
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
|
||||
'@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))':
|
||||
'@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))':
|
||||
dependencies:
|
||||
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
|
||||
'@sveltejs/adapter-node@5.3.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))':
|
||||
'@sveltejs/adapter-node@5.3.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))':
|
||||
dependencies:
|
||||
'@rollup/plugin-commonjs': 28.0.6(rollup@4.46.4)
|
||||
'@rollup/plugin-json': 6.1.0(rollup@4.46.4)
|
||||
'@rollup/plugin-node-resolve': 16.0.1(rollup@4.46.4)
|
||||
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
rollup: 4.46.4
|
||||
|
||||
'@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))':
|
||||
'@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.0.0
|
||||
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
|
||||
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
'@types/cookie': 0.6.0
|
||||
acorn: 8.15.0
|
||||
cookie: 0.6.0
|
||||
devalue: 5.1.1
|
||||
devalue: 5.4.2
|
||||
esm-env: 1.2.2
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.21
|
||||
mrmime: 2.0.1
|
||||
sade: 1.8.1
|
||||
set-cookie-parser: 2.7.1
|
||||
sirv: 3.0.1
|
||||
svelte: 5.38.2
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
|
||||
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))':
|
||||
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
debug: 4.4.1
|
||||
svelte: 5.38.2
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))':
|
||||
'@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
debug: 4.4.1
|
||||
deepmerge: 4.3.1
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.21
|
||||
svelte: 5.38.2
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
vitefu: 1.1.1(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -3890,76 +4294,73 @@ snapshots:
|
||||
dependencies:
|
||||
tslib: 2.8.1
|
||||
|
||||
'@tailwindcss/node@4.1.12':
|
||||
'@tailwindcss/node@4.1.17':
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
enhanced-resolve: 5.18.3
|
||||
jiti: 2.5.1
|
||||
lightningcss: 1.30.1
|
||||
magic-string: 0.30.17
|
||||
jiti: 2.6.1
|
||||
lightningcss: 1.30.2
|
||||
magic-string: 0.30.21
|
||||
source-map-js: 1.2.1
|
||||
tailwindcss: 4.1.12
|
||||
tailwindcss: 4.1.17
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.12':
|
||||
'@tailwindcss/oxide-android-arm64@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.12':
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.12':
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.12':
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.17':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide@4.1.12':
|
||||
dependencies:
|
||||
detect-libc: 2.0.4
|
||||
tar: 7.4.3
|
||||
'@tailwindcss/oxide@4.1.17':
|
||||
optionalDependencies:
|
||||
'@tailwindcss/oxide-android-arm64': 4.1.12
|
||||
'@tailwindcss/oxide-darwin-arm64': 4.1.12
|
||||
'@tailwindcss/oxide-darwin-x64': 4.1.12
|
||||
'@tailwindcss/oxide-freebsd-x64': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm64-musl': 4.1.12
|
||||
'@tailwindcss/oxide-linux-x64-gnu': 4.1.12
|
||||
'@tailwindcss/oxide-linux-x64-musl': 4.1.12
|
||||
'@tailwindcss/oxide-wasm32-wasi': 4.1.12
|
||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
|
||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
|
||||
'@tailwindcss/oxide-android-arm64': 4.1.17
|
||||
'@tailwindcss/oxide-darwin-arm64': 4.1.17
|
||||
'@tailwindcss/oxide-darwin-x64': 4.1.17
|
||||
'@tailwindcss/oxide-freebsd-x64': 4.1.17
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
|
||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
|
||||
'@tailwindcss/oxide-linux-arm64-musl': 4.1.17
|
||||
'@tailwindcss/oxide-linux-x64-gnu': 4.1.17
|
||||
'@tailwindcss/oxide-linux-x64-musl': 4.1.17
|
||||
'@tailwindcss/oxide-wasm32-wasi': 4.1.17
|
||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
|
||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.17
|
||||
|
||||
'@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1))':
|
||||
'@tailwindcss/vite@4.1.17(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@tailwindcss/node': 4.1.12
|
||||
'@tailwindcss/oxide': 4.1.12
|
||||
tailwindcss: 4.1.12
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
'@tailwindcss/node': 4.1.17
|
||||
'@tailwindcss/oxide': 4.1.17
|
||||
tailwindcss: 4.1.17
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
|
||||
'@ts-morph/common@0.27.0':
|
||||
dependencies:
|
||||
@@ -3987,7 +4388,7 @@ snapshots:
|
||||
|
||||
'@types/ms@2.1.0': {}
|
||||
|
||||
'@types/node@24.3.0':
|
||||
'@types/node@24.3.3':
|
||||
dependencies:
|
||||
undici-types: 7.10.0
|
||||
|
||||
@@ -3999,41 +4400,41 @@ snapshots:
|
||||
|
||||
'@types/unist@3.0.3': {}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
'@typescript-eslint/scope-manager': 8.40.0
|
||||
'@typescript-eslint/type-utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/type-utils': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 8.40.0
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
graphemer: 1.4.0
|
||||
ignore: 7.0.5
|
||||
natural-compare: 1.4.0
|
||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||
typescript: 5.9.2
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/parser@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 8.40.0
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 8.40.0
|
||||
debug: 4.4.1
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/project-service@8.40.0(typescript@5.9.2)':
|
||||
'@typescript-eslint/project-service@8.40.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
|
||||
'@typescript-eslint/types': 8.46.4
|
||||
debug: 4.4.1
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -4042,28 +4443,34 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/visitor-keys': 8.40.0
|
||||
|
||||
'@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)':
|
||||
'@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
|
||||
'@typescript-eslint/type-utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)':
|
||||
dependencies:
|
||||
typescript: 5.9.3
|
||||
|
||||
'@typescript-eslint/type-utils@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
debug: 4.4.1
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||
typescript: 5.9.2
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/types@8.40.0': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)':
|
||||
'@typescript-eslint/types@8.46.4': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/project-service': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/project-service': 8.40.0(typescript@5.9.3)
|
||||
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.3)
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/visitor-keys': 8.40.0
|
||||
debug: 4.4.1
|
||||
@@ -4071,19 +4478,19 @@ snapshots:
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
semver: 7.7.2
|
||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||
typescript: 5.9.2
|
||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
|
||||
'@typescript-eslint/utils@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
|
||||
'@typescript-eslint/scope-manager': 8.40.0
|
||||
'@typescript-eslint/types': 8.40.0
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -4146,16 +4553,20 @@ snapshots:
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
bits-ui@2.9.4(@internationalized/date@3.8.2)(svelte@5.38.2):
|
||||
baseline-browser-mapping@2.8.25: {}
|
||||
|
||||
bits-ui@2.14.3(@internationalized/date@3.10.0)(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2):
|
||||
dependencies:
|
||||
'@floating-ui/core': 1.7.3
|
||||
'@floating-ui/dom': 1.7.4
|
||||
'@internationalized/date': 3.8.2
|
||||
'@internationalized/date': 3.10.0
|
||||
esm-env: 1.2.2
|
||||
runed: 0.29.2(svelte@5.38.2)
|
||||
runed: 0.35.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)
|
||||
svelte: 5.38.2
|
||||
svelte-toolbelt: 0.9.3(svelte@5.38.2)
|
||||
svelte-toolbelt: 0.10.6(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)
|
||||
tabbable: 6.2.0
|
||||
transitivePeerDependencies:
|
||||
- '@sveltejs/kit'
|
||||
|
||||
body-parser@2.2.0:
|
||||
dependencies:
|
||||
@@ -4186,12 +4597,13 @@ snapshots:
|
||||
dependencies:
|
||||
fill-range: 7.1.1
|
||||
|
||||
browserslist@4.25.3:
|
||||
browserslist@4.28.0:
|
||||
dependencies:
|
||||
caniuse-lite: 1.0.30001737
|
||||
electron-to-chromium: 1.5.209
|
||||
node-releases: 2.0.19
|
||||
update-browserslist-db: 1.1.3(browserslist@4.25.3)
|
||||
baseline-browser-mapping: 2.8.25
|
||||
caniuse-lite: 1.0.30001754
|
||||
electron-to-chromium: 1.5.249
|
||||
node-releases: 2.0.27
|
||||
update-browserslist-db: 1.1.4(browserslist@4.28.0)
|
||||
|
||||
bytes@3.1.2: {}
|
||||
|
||||
@@ -4209,7 +4621,7 @@ snapshots:
|
||||
|
||||
camelcase@8.0.0: {}
|
||||
|
||||
caniuse-lite@1.0.30001737: {}
|
||||
caniuse-lite@1.0.30001754: {}
|
||||
|
||||
ccount@2.0.1: {}
|
||||
|
||||
@@ -4230,8 +4642,6 @@ snapshots:
|
||||
dependencies:
|
||||
readdirp: 4.1.2
|
||||
|
||||
chownr@3.0.0: {}
|
||||
|
||||
cli-cursor@5.0.0:
|
||||
dependencies:
|
||||
restore-cursor: 5.1.0
|
||||
@@ -4287,14 +4697,14 @@ snapshots:
|
||||
object-assign: 4.1.1
|
||||
vary: 1.1.2
|
||||
|
||||
cosmiconfig@9.0.0(typescript@5.9.2):
|
||||
cosmiconfig@9.0.0(typescript@5.9.3):
|
||||
dependencies:
|
||||
env-paths: 2.2.1
|
||||
import-fresh: 3.3.1
|
||||
js-yaml: 4.1.0
|
||||
parse-json: 5.2.0
|
||||
optionalDependencies:
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
|
||||
cross-spawn@7.0.6:
|
||||
dependencies:
|
||||
@@ -4350,7 +4760,7 @@ snapshots:
|
||||
|
||||
detect-libc@2.0.4: {}
|
||||
|
||||
devalue@5.1.1: {}
|
||||
devalue@5.4.2: {}
|
||||
|
||||
devlop@1.1.0:
|
||||
dependencies:
|
||||
@@ -4393,7 +4803,7 @@ snapshots:
|
||||
|
||||
ee-first@1.1.1: {}
|
||||
|
||||
electron-to-chromium@1.5.209: {}
|
||||
electron-to-chromium@1.5.249: {}
|
||||
|
||||
emoji-regex@10.4.0: {}
|
||||
|
||||
@@ -4424,6 +4834,35 @@ snapshots:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
|
||||
esbuild@0.25.12:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.25.12
|
||||
'@esbuild/android-arm': 0.25.12
|
||||
'@esbuild/android-arm64': 0.25.12
|
||||
'@esbuild/android-x64': 0.25.12
|
||||
'@esbuild/darwin-arm64': 0.25.12
|
||||
'@esbuild/darwin-x64': 0.25.12
|
||||
'@esbuild/freebsd-arm64': 0.25.12
|
||||
'@esbuild/freebsd-x64': 0.25.12
|
||||
'@esbuild/linux-arm': 0.25.12
|
||||
'@esbuild/linux-arm64': 0.25.12
|
||||
'@esbuild/linux-ia32': 0.25.12
|
||||
'@esbuild/linux-loong64': 0.25.12
|
||||
'@esbuild/linux-mips64el': 0.25.12
|
||||
'@esbuild/linux-ppc64': 0.25.12
|
||||
'@esbuild/linux-riscv64': 0.25.12
|
||||
'@esbuild/linux-s390x': 0.25.12
|
||||
'@esbuild/linux-x64': 0.25.12
|
||||
'@esbuild/netbsd-arm64': 0.25.12
|
||||
'@esbuild/netbsd-x64': 0.25.12
|
||||
'@esbuild/openbsd-arm64': 0.25.12
|
||||
'@esbuild/openbsd-x64': 0.25.12
|
||||
'@esbuild/openharmony-arm64': 0.25.12
|
||||
'@esbuild/sunos-x64': 0.25.12
|
||||
'@esbuild/win32-arm64': 0.25.12
|
||||
'@esbuild/win32-ia32': 0.25.12
|
||||
'@esbuild/win32-x64': 0.25.12
|
||||
|
||||
esbuild@0.25.9:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.25.9
|
||||
@@ -4459,23 +4898,23 @@ snapshots:
|
||||
|
||||
escape-string-regexp@4.0.0: {}
|
||||
|
||||
eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)):
|
||||
eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)):
|
||||
dependencies:
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
|
||||
eslint-plugin-svelte@3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2):
|
||||
eslint-plugin-svelte@3.11.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.38.2):
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
esutils: 2.0.3
|
||||
globals: 16.3.0
|
||||
globals: 16.5.0
|
||||
known-css-properties: 0.37.0
|
||||
postcss: 8.5.6
|
||||
postcss-load-config: 3.1.4(postcss@8.5.6)
|
||||
postcss-safe-parser: 7.0.1(postcss@8.5.6)
|
||||
semver: 7.7.2
|
||||
svelte-eslint-parser: 1.3.1(svelte@5.38.2)
|
||||
svelte-eslint-parser: 1.4.0(svelte@5.38.2)
|
||||
optionalDependencies:
|
||||
svelte: 5.38.2
|
||||
transitivePeerDependencies:
|
||||
@@ -4490,21 +4929,20 @@ snapshots:
|
||||
|
||||
eslint-visitor-keys@4.2.1: {}
|
||||
|
||||
eslint@9.33.0(jiti@2.5.1):
|
||||
eslint@9.39.1(jiti@2.6.1):
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
|
||||
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@eslint/config-array': 0.21.0
|
||||
'@eslint/config-helpers': 0.3.1
|
||||
'@eslint/core': 0.15.2
|
||||
'@eslint/config-array': 0.21.1
|
||||
'@eslint/config-helpers': 0.4.2
|
||||
'@eslint/core': 0.17.0
|
||||
'@eslint/eslintrc': 3.3.1
|
||||
'@eslint/js': 9.33.0
|
||||
'@eslint/plugin-kit': 0.3.5
|
||||
'@eslint/js': 9.39.1
|
||||
'@eslint/plugin-kit': 0.4.1
|
||||
'@humanfs/node': 0.16.6
|
||||
'@humanwhocodes/module-importer': 1.0.1
|
||||
'@humanwhocodes/retry': 0.4.3
|
||||
'@types/estree': 1.0.8
|
||||
'@types/json-schema': 7.0.15
|
||||
ajv: 6.12.6
|
||||
chalk: 4.1.2
|
||||
cross-spawn: 7.0.6
|
||||
@@ -4528,7 +4966,7 @@ snapshots:
|
||||
natural-compare: 1.4.0
|
||||
optionator: 0.9.4
|
||||
optionalDependencies:
|
||||
jiti: 2.5.1
|
||||
jiti: 2.6.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -4761,6 +5199,8 @@ snapshots:
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
github-slugger@2.0.0: {}
|
||||
|
||||
glob-parent@5.1.2:
|
||||
dependencies:
|
||||
is-glob: 4.0.3
|
||||
@@ -4771,7 +5211,7 @@ snapshots:
|
||||
|
||||
globals@14.0.0: {}
|
||||
|
||||
globals@16.3.0: {}
|
||||
globals@16.5.0: {}
|
||||
|
||||
gopd@1.2.0: {}
|
||||
|
||||
@@ -4807,6 +5247,14 @@ snapshots:
|
||||
vfile-location: 5.0.3
|
||||
web-namespaces: 2.0.1
|
||||
|
||||
hast-util-heading-rank@3.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
|
||||
hast-util-is-element@3.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
|
||||
hast-util-parse-selector@4.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
@@ -4967,7 +5415,7 @@ snapshots:
|
||||
|
||||
isexe@3.1.1: {}
|
||||
|
||||
jiti@2.5.1: {}
|
||||
jiti@2.6.1: {}
|
||||
|
||||
js-tokens@4.0.0: {}
|
||||
|
||||
@@ -5026,50 +5474,54 @@ snapshots:
|
||||
dependencies:
|
||||
immediate: 3.0.6
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
lightningcss-android-arm64@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-darwin-x64@1.30.1:
|
||||
lightningcss-darwin-arm64@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-freebsd-x64@1.30.1:
|
||||
lightningcss-darwin-x64@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm-gnueabihf@1.30.1:
|
||||
lightningcss-freebsd-x64@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm64-gnu@1.30.1:
|
||||
lightningcss-linux-arm-gnueabihf@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm64-musl@1.30.1:
|
||||
lightningcss-linux-arm64-gnu@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-x64-gnu@1.30.1:
|
||||
lightningcss-linux-arm64-musl@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-x64-musl@1.30.1:
|
||||
lightningcss-linux-x64-gnu@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-win32-arm64-msvc@1.30.1:
|
||||
lightningcss-linux-x64-musl@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss-win32-x64-msvc@1.30.1:
|
||||
lightningcss-win32-arm64-msvc@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss@1.30.1:
|
||||
lightningcss-win32-x64-msvc@1.30.2:
|
||||
optional: true
|
||||
|
||||
lightningcss@1.30.2:
|
||||
dependencies:
|
||||
detect-libc: 2.0.4
|
||||
optionalDependencies:
|
||||
lightningcss-darwin-arm64: 1.30.1
|
||||
lightningcss-darwin-x64: 1.30.1
|
||||
lightningcss-freebsd-x64: 1.30.1
|
||||
lightningcss-linux-arm-gnueabihf: 1.30.1
|
||||
lightningcss-linux-arm64-gnu: 1.30.1
|
||||
lightningcss-linux-arm64-musl: 1.30.1
|
||||
lightningcss-linux-x64-gnu: 1.30.1
|
||||
lightningcss-linux-x64-musl: 1.30.1
|
||||
lightningcss-win32-arm64-msvc: 1.30.1
|
||||
lightningcss-win32-x64-msvc: 1.30.1
|
||||
lightningcss-android-arm64: 1.30.2
|
||||
lightningcss-darwin-arm64: 1.30.2
|
||||
lightningcss-darwin-x64: 1.30.2
|
||||
lightningcss-freebsd-x64: 1.30.2
|
||||
lightningcss-linux-arm-gnueabihf: 1.30.2
|
||||
lightningcss-linux-arm64-gnu: 1.30.2
|
||||
lightningcss-linux-arm64-musl: 1.30.2
|
||||
lightningcss-linux-x64-gnu: 1.30.2
|
||||
lightningcss-linux-x64-musl: 1.30.2
|
||||
lightningcss-win32-arm64-msvc: 1.30.2
|
||||
lightningcss-win32-x64-msvc: 1.30.2
|
||||
|
||||
lilconfig@2.1.0: {}
|
||||
|
||||
@@ -5092,7 +5544,9 @@ snapshots:
|
||||
dependencies:
|
||||
yallist: 3.1.1
|
||||
|
||||
magic-string@0.30.17:
|
||||
lz-string@1.5.0: {}
|
||||
|
||||
magic-string@0.30.21:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
@@ -5305,14 +5759,6 @@ snapshots:
|
||||
|
||||
minimist@1.2.8: {}
|
||||
|
||||
minipass@7.1.2: {}
|
||||
|
||||
minizlib@3.0.2:
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
mkdirp@3.0.1: {}
|
||||
|
||||
mode-watcher@1.1.0(svelte@5.38.2):
|
||||
dependencies:
|
||||
runed: 0.25.0(svelte@5.38.2)
|
||||
@@ -5325,12 +5771,12 @@ snapshots:
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2):
|
||||
msw@2.10.5(@types/node@24.3.3)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@bundled-es-modules/cookie': 2.0.1
|
||||
'@bundled-es-modules/statuses': 1.0.1
|
||||
'@bundled-es-modules/tough-cookie': 0.1.6
|
||||
'@inquirer/confirm': 5.1.16(@types/node@24.3.0)
|
||||
'@inquirer/confirm': 5.1.16(@types/node@24.3.3)
|
||||
'@mswjs/interceptors': 0.39.6
|
||||
'@open-draft/deferred-promise': 2.2.0
|
||||
'@open-draft/until': 2.1.0
|
||||
@@ -5346,7 +5792,7 @@ snapshots:
|
||||
type-fest: 4.41.0
|
||||
yargs: 17.7.2
|
||||
optionalDependencies:
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
|
||||
@@ -5366,7 +5812,7 @@ snapshots:
|
||||
fetch-blob: 3.2.0
|
||||
formdata-polyfill: 4.0.10
|
||||
|
||||
node-releases@2.0.19: {}
|
||||
node-releases@2.0.27: {}
|
||||
|
||||
npm-run-path@4.0.1:
|
||||
dependencies:
|
||||
@@ -5526,7 +5972,7 @@ snapshots:
|
||||
prettier: 3.6.2
|
||||
svelte: 5.38.2
|
||||
|
||||
prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2):
|
||||
prettier-plugin-tailwindcss@0.7.1(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2):
|
||||
dependencies:
|
||||
prettier: 3.6.2
|
||||
optionalDependencies:
|
||||
@@ -5611,12 +6057,29 @@ snapshots:
|
||||
dependencies:
|
||||
regex-utilities: 2.3.0
|
||||
|
||||
rehype-autolink-headings@7.1.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
'@ungap/structured-clone': 1.3.0
|
||||
hast-util-heading-rank: 3.0.0
|
||||
hast-util-is-element: 3.0.0
|
||||
unified: 11.0.5
|
||||
unist-util-visit: 5.0.0
|
||||
|
||||
rehype-raw@7.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-raw: 9.1.0
|
||||
vfile: 6.0.3
|
||||
|
||||
rehype-slug@6.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
github-slugger: 2.0.0
|
||||
hast-util-heading-rank: 3.0.0
|
||||
hast-util-to-string: 3.0.1
|
||||
unist-util-visit: 5.0.0
|
||||
|
||||
rehype-stringify@10.0.1:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
@@ -5716,10 +6179,14 @@ snapshots:
|
||||
esm-env: 1.2.2
|
||||
svelte: 5.38.2
|
||||
|
||||
runed@0.29.2(svelte@5.38.2):
|
||||
runed@0.35.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2):
|
||||
dependencies:
|
||||
dequal: 2.0.3
|
||||
esm-env: 1.2.2
|
||||
lz-string: 1.5.0
|
||||
svelte: 5.38.2
|
||||
optionalDependencies:
|
||||
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1))
|
||||
|
||||
sade@1.8.1:
|
||||
dependencies:
|
||||
@@ -5777,16 +6244,18 @@ snapshots:
|
||||
|
||||
setprototypeof@1.2.0: {}
|
||||
|
||||
shadcn@3.0.0(@types/node@24.3.0)(typescript@5.9.2):
|
||||
shadcn@3.5.0(@types/node@24.3.3)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@antfu/ni': 25.0.0
|
||||
'@babel/core': 7.28.3
|
||||
'@babel/parser': 7.28.3
|
||||
'@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3)
|
||||
'@babel/preset-typescript': 7.28.5(@babel/core@7.28.3)
|
||||
'@dotenvx/dotenvx': 1.49.0
|
||||
'@modelcontextprotocol/sdk': 1.17.4
|
||||
browserslist: 4.28.0
|
||||
commander: 14.0.0
|
||||
cosmiconfig: 9.0.0(typescript@5.9.2)
|
||||
cosmiconfig: 9.0.0(typescript@5.9.3)
|
||||
dedent: 1.6.0
|
||||
deepmerge: 4.3.1
|
||||
diff: 8.0.2
|
||||
@@ -5796,7 +6265,7 @@ snapshots:
|
||||
fuzzysort: 3.1.0
|
||||
https-proxy-agent: 7.0.6
|
||||
kleur: 4.1.5
|
||||
msw: 2.10.5(@types/node@24.3.0)(typescript@5.9.2)
|
||||
msw: 2.10.5(@types/node@24.3.3)(typescript@5.9.3)
|
||||
node-fetch: 3.3.2
|
||||
ora: 8.2.0
|
||||
postcss: 8.5.6
|
||||
@@ -5819,14 +6288,14 @@ snapshots:
|
||||
|
||||
shebang-regex@3.0.0: {}
|
||||
|
||||
shiki@3.12.0:
|
||||
shiki@3.15.0:
|
||||
dependencies:
|
||||
'@shikijs/core': 3.12.0
|
||||
'@shikijs/engine-javascript': 3.12.0
|
||||
'@shikijs/engine-oniguruma': 3.12.0
|
||||
'@shikijs/langs': 3.12.0
|
||||
'@shikijs/themes': 3.12.0
|
||||
'@shikijs/types': 3.12.0
|
||||
'@shikijs/core': 3.15.0
|
||||
'@shikijs/engine-javascript': 3.15.0
|
||||
'@shikijs/engine-oniguruma': 3.15.0
|
||||
'@shikijs/langs': 3.15.0
|
||||
'@shikijs/themes': 3.15.0
|
||||
'@shikijs/types': 3.15.0
|
||||
'@shikijs/vscode-textmate': 10.0.2
|
||||
'@types/hast': 3.0.4
|
||||
|
||||
@@ -5941,7 +6410,7 @@ snapshots:
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2):
|
||||
svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.30
|
||||
chokidar: 4.0.3
|
||||
@@ -5949,11 +6418,11 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
sade: 1.8.1
|
||||
svelte: 5.38.2
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- picomatch
|
||||
|
||||
svelte-eslint-parser@1.3.1(svelte@5.38.2):
|
||||
svelte-eslint-parser@1.4.0(svelte@5.38.2):
|
||||
dependencies:
|
||||
eslint-scope: 8.4.0
|
||||
eslint-visitor-keys: 4.2.1
|
||||
@@ -5964,11 +6433,20 @@ snapshots:
|
||||
optionalDependencies:
|
||||
svelte: 5.38.2
|
||||
|
||||
svelte-sonner@1.0.5(svelte@5.38.2):
|
||||
svelte-sonner@1.0.6(svelte@5.38.2):
|
||||
dependencies:
|
||||
runed: 0.28.0(svelte@5.38.2)
|
||||
svelte: 5.38.2
|
||||
|
||||
svelte-toolbelt@0.10.6(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2):
|
||||
dependencies:
|
||||
clsx: 2.1.1
|
||||
runed: 0.35.1(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.38.2)
|
||||
style-to-object: 1.0.9
|
||||
svelte: 5.38.2
|
||||
transitivePeerDependencies:
|
||||
- '@sveltejs/kit'
|
||||
|
||||
svelte-toolbelt@0.7.1(svelte@5.38.2):
|
||||
dependencies:
|
||||
clsx: 2.1.1
|
||||
@@ -5976,13 +6454,6 @@ snapshots:
|
||||
style-to-object: 1.0.9
|
||||
svelte: 5.38.2
|
||||
|
||||
svelte-toolbelt@0.9.3(svelte@5.38.2):
|
||||
dependencies:
|
||||
clsx: 2.1.1
|
||||
runed: 0.29.2(svelte@5.38.2)
|
||||
style-to-object: 1.0.9
|
||||
svelte: 5.38.2
|
||||
|
||||
svelte@5.38.2:
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
@@ -5997,7 +6468,7 @@ snapshots:
|
||||
esrap: 2.1.0
|
||||
is-reference: 3.0.3
|
||||
locate-character: 3.0.0
|
||||
magic-string: 0.30.17
|
||||
magic-string: 0.30.21
|
||||
zimmerframe: 1.1.2
|
||||
|
||||
svgo@4.0.0:
|
||||
@@ -6012,28 +6483,18 @@ snapshots:
|
||||
|
||||
tabbable@6.2.0: {}
|
||||
|
||||
tailwind-merge@3.0.2: {}
|
||||
tailwind-merge@3.4.0: {}
|
||||
|
||||
tailwind-merge@3.3.1: {}
|
||||
|
||||
tailwind-variants@1.0.0(tailwindcss@4.1.12):
|
||||
tailwind-variants@3.1.1(tailwind-merge@3.4.0)(tailwindcss@4.1.17):
|
||||
dependencies:
|
||||
tailwind-merge: 3.0.2
|
||||
tailwindcss: 4.1.12
|
||||
tailwindcss: 4.1.17
|
||||
optionalDependencies:
|
||||
tailwind-merge: 3.4.0
|
||||
|
||||
tailwindcss@4.1.12: {}
|
||||
tailwindcss@4.1.17: {}
|
||||
|
||||
tapable@2.2.2: {}
|
||||
|
||||
tar@7.4.3:
|
||||
dependencies:
|
||||
'@isaacs/fs-minipass': 4.0.1
|
||||
chownr: 3.0.0
|
||||
minipass: 7.1.2
|
||||
minizlib: 3.0.2
|
||||
mkdirp: 3.0.1
|
||||
yallist: 5.0.0
|
||||
|
||||
tiny-invariant@1.3.3: {}
|
||||
|
||||
tinyexec@1.0.1: {}
|
||||
@@ -6043,6 +6504,11 @@ snapshots:
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
|
||||
tinyglobby@0.2.15:
|
||||
dependencies:
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
dependencies:
|
||||
is-number: 7.0.0
|
||||
@@ -6062,9 +6528,9 @@ snapshots:
|
||||
|
||||
trough@2.2.0: {}
|
||||
|
||||
ts-api-utils@2.1.0(typescript@5.9.2):
|
||||
ts-api-utils@2.1.0(typescript@5.9.3):
|
||||
dependencies:
|
||||
typescript: 5.9.2
|
||||
typescript: 5.9.3
|
||||
|
||||
ts-morph@26.0.0:
|
||||
dependencies:
|
||||
@@ -6079,14 +6545,14 @@ snapshots:
|
||||
|
||||
tslib@2.8.1: {}
|
||||
|
||||
tsx@4.20.5:
|
||||
tsx@4.20.6:
|
||||
dependencies:
|
||||
esbuild: 0.25.9
|
||||
get-tsconfig: 4.10.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
tw-animate-css@1.3.7: {}
|
||||
tw-animate-css@1.4.0: {}
|
||||
|
||||
type-check@0.4.0:
|
||||
dependencies:
|
||||
@@ -6102,18 +6568,18 @@ snapshots:
|
||||
media-typer: 1.1.0
|
||||
mime-types: 3.0.1
|
||||
|
||||
typescript-eslint@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2):
|
||||
typescript-eslint@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||
eslint: 9.33.0(jiti@2.5.1)
|
||||
typescript: 5.9.2
|
||||
'@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
'@typescript-eslint/parser': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3)
|
||||
'@typescript-eslint/utils': 8.40.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||
eslint: 9.39.1(jiti@2.6.1)
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
typescript@5.9.2: {}
|
||||
typescript@5.9.3: {}
|
||||
|
||||
undici-types@7.10.0: {}
|
||||
|
||||
@@ -6158,9 +6624,9 @@ snapshots:
|
||||
|
||||
unpipe@1.0.0: {}
|
||||
|
||||
update-browserslist-db@1.1.3(browserslist@4.25.3):
|
||||
update-browserslist-db@1.1.4(browserslist@4.28.0):
|
||||
dependencies:
|
||||
browserslist: 4.25.3
|
||||
browserslist: 4.28.0
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
@@ -6192,25 +6658,25 @@ snapshots:
|
||||
'@types/unist': 3.0.3
|
||||
vfile-message: 4.0.3
|
||||
|
||||
vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1):
|
||||
vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1):
|
||||
dependencies:
|
||||
esbuild: 0.25.9
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
postcss: 8.5.6
|
||||
rollup: 4.46.4
|
||||
tinyglobby: 0.2.14
|
||||
tinyglobby: 0.2.15
|
||||
optionalDependencies:
|
||||
'@types/node': 24.3.0
|
||||
'@types/node': 24.3.3
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.5.1
|
||||
lightningcss: 1.30.1
|
||||
tsx: 4.20.5
|
||||
jiti: 2.6.1
|
||||
lightningcss: 1.30.2
|
||||
tsx: 4.20.6
|
||||
yaml: 2.8.1
|
||||
|
||||
vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)):
|
||||
vitefu@1.1.1(vite@7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)):
|
||||
optionalDependencies:
|
||||
vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.5)(yaml@2.8.1)
|
||||
vite: 7.2.2(@types/node@24.3.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)(yaml@2.8.1)
|
||||
|
||||
web-namespaces@2.0.1: {}
|
||||
|
||||
@@ -6244,8 +6710,6 @@ snapshots:
|
||||
|
||||
yallist@3.1.1: {}
|
||||
|
||||
yallist@5.0.0: {}
|
||||
|
||||
yaml@1.10.2: {}
|
||||
|
||||
yaml@2.8.1: {}
|
||||
@@ -6278,6 +6742,6 @@ snapshots:
|
||||
|
||||
zod@3.25.76: {}
|
||||
|
||||
zod@4.1.4: {}
|
||||
zod@4.1.12: {}
|
||||
|
||||
zwitch@2.0.4: {}
|
||||
|
||||
+35
-9
@@ -11,17 +11,17 @@
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/svg+xml"
|
||||
href="%sveltekit.assets%/images/logo.svg"
|
||||
href="%sveltekit.assets%/images/svgl_svg.svg"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/ico"
|
||||
href="%sveltekit.assets%/images/logo_ico.ico"
|
||||
href="%sveltekit.assets%/images/svgl_ico.ico"
|
||||
/>
|
||||
|
||||
<!-- OG -->
|
||||
<!-- OG Images -->
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="svgl" />
|
||||
<meta property="og:title" content="SVGL" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="A beautiful library with SVG logos"
|
||||
@@ -29,12 +29,12 @@
|
||||
<meta property="og:url" content="https://svgl.app" />
|
||||
<meta
|
||||
property="og:image"
|
||||
content="https://svgl.app/images/screenshot.png"
|
||||
content="https://svgl.app/images/screenshot_dark.png"
|
||||
/>
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="Svgl" />
|
||||
<meta name="twitter:title" content="SVGL" />
|
||||
<meta
|
||||
name="twitter:description"
|
||||
content="A beautiful library with SVG logos"
|
||||
@@ -42,15 +42,41 @@
|
||||
<meta name="twitter:creator" content="@pheralb_" />
|
||||
<meta
|
||||
name="twitter:image"
|
||||
content="https://svgl.app/images/screenshot.png"
|
||||
content="https://svgl.app/images/screenshot_dark.png"
|
||||
/>
|
||||
|
||||
<!-- Preload Fonts -->
|
||||
<link
|
||||
rel="preload"
|
||||
href="%sveltekit.assets%/fonts/InterVariable.woff2"
|
||||
as="font"
|
||||
type="font/woff2"
|
||||
crossorigin="anonymous"
|
||||
/>
|
||||
<link
|
||||
rel="preload"
|
||||
href="%sveltekit.assets%/fonts/GeistMono.woff2"
|
||||
as="font"
|
||||
type="font/woff2"
|
||||
crossorigin="anonymous"
|
||||
/>
|
||||
|
||||
<!-- Manifest -->
|
||||
<link rel="manifest" href="%sveltekit.assets%/manifest.json" />
|
||||
|
||||
<!-- Analytics -->
|
||||
<script
|
||||
defer
|
||||
src="https://umami.pheralb.dev/script.js"
|
||||
data-website-id="c0310f77-a87c-4c80-ba04-c6767cf94507"
|
||||
></script>
|
||||
|
||||
<!-- Title -->
|
||||
<title>A beautiful library with SVG logos - Svgl</title>
|
||||
<title>A beautiful library with SVG logos - SVGL</title>
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body
|
||||
class="overscroll-none bg-neutral-100 font-sans tracking-tight text-black antialiased selection:bg-neutral-300 dark:bg-neutral-950 dark:text-white dark:selection:bg-neutral-700"
|
||||
class="overscroll-none bg-neutral-100 font-sans text-black antialiased selection:bg-neutral-300 dark:bg-neutral-950 dark:text-white dark:selection:bg-neutral-700"
|
||||
data-sveltekit-preload-data="hover"
|
||||
>
|
||||
<div style="display: contents">%sveltekit.body%</div>
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
$props();
|
||||
</script>
|
||||
|
||||
<div class={cn("container mx-auto px-4", className)}>
|
||||
<div class={cn("container mx-auto px-6 lg:px-4", className)}>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
<script lang="ts">
|
||||
import type { Component } from "svelte";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { clipboard } from "@/utils/clipboard";
|
||||
|
||||
import * as DropdownMenu from "@/components/ui/dropdown-menu";
|
||||
import { Button, buttonVariants } from "@/components/ui/button";
|
||||
|
||||
import CopyIcon from "@lucide/svelte/icons/copy";
|
||||
import Openai from "@/components/logos/openai.svelte";
|
||||
import Claude from "@/components/logos/claude.svelte";
|
||||
import CheckCheck from "@lucide/svelte/icons/check-check";
|
||||
import ChevronDown from "@lucide/svelte/icons/chevron-down";
|
||||
import ArrowUpRight from "@lucide/svelte/icons/arrow-up-right";
|
||||
import Markdown from "./logos/markdown.svelte";
|
||||
|
||||
interface DocumentSettingsProps {
|
||||
documentContent: string;
|
||||
documentUrl: string;
|
||||
rawUrl: string;
|
||||
}
|
||||
|
||||
let isCopied = $state<boolean>(false);
|
||||
let settingsOpen = $state<boolean>(false);
|
||||
let { documentContent, documentUrl, rawUrl }: DocumentSettingsProps =
|
||||
$props();
|
||||
|
||||
const handleCopyPage = () => {
|
||||
clipboard(documentContent);
|
||||
isCopied = true;
|
||||
setTimeout(() => {
|
||||
isCopied = false;
|
||||
}, 2000);
|
||||
};
|
||||
|
||||
interface AiOption {
|
||||
name: string;
|
||||
href: string;
|
||||
icon: Component;
|
||||
}
|
||||
|
||||
const aiPrompt = `The following is a documentation page from SVGL, a web app with SVG logos: ${documentUrl}. Help me understand how to use it. Be ready to explain concepts, give examples, or help debug based on it.`;
|
||||
|
||||
const aiOptions: AiOption[] = [
|
||||
{
|
||||
name: "ChatGPT",
|
||||
href: `https://chatgpt.com/?q=${encodeURIComponent(aiPrompt)}`,
|
||||
icon: Openai,
|
||||
},
|
||||
{
|
||||
name: "Claude",
|
||||
href: `https://claude.ai/new?q=${encodeURIComponent(aiPrompt)}`,
|
||||
icon: Claude,
|
||||
},
|
||||
];
|
||||
</script>
|
||||
|
||||
{#snippet LinkItem({ href, icon, name }: AiOption)}
|
||||
<DropdownMenu.Item>
|
||||
{#snippet child({ props })}
|
||||
{@const Icon = icon}
|
||||
<a {href} target="_blank" {...props}>
|
||||
<div class="flex items-center space-x-2">
|
||||
<Icon size={14} />
|
||||
<span>{name}</span>
|
||||
<ArrowUpRight size={12} class="opacity-50" />
|
||||
</div>
|
||||
</a>
|
||||
{/snippet}
|
||||
</DropdownMenu.Item>
|
||||
{/snippet}
|
||||
|
||||
<div class="flex items-center">
|
||||
<Button
|
||||
size="sm"
|
||||
variant="outline"
|
||||
class="rounded-r-none border-r-0 px-2 md:px-3"
|
||||
onclick={handleCopyPage}
|
||||
>
|
||||
{#if isCopied}
|
||||
<CheckCheck size={14} />
|
||||
{:else}
|
||||
<CopyIcon size={14} />
|
||||
{/if}
|
||||
<span class="hidden md:block">Copy Page</span>
|
||||
</Button>
|
||||
<DropdownMenu.Root bind:open={settingsOpen}>
|
||||
<DropdownMenu.Trigger
|
||||
class={cn(
|
||||
buttonVariants({ variant: "outline", size: "sm" }),
|
||||
"rounded-l-none px-2",
|
||||
)}
|
||||
>
|
||||
<ChevronDown
|
||||
size={14}
|
||||
class={cn(
|
||||
"transition-transform duration-200",
|
||||
settingsOpen ? "rotate-180" : "rotate-0",
|
||||
)}
|
||||
/>
|
||||
</DropdownMenu.Trigger>
|
||||
<DropdownMenu.Content side="bottom" align="end" sideOffset={6}>
|
||||
<DropdownMenu.Group>
|
||||
{@render LinkItem({
|
||||
href: rawUrl,
|
||||
icon: Markdown,
|
||||
name: "View as Markdown",
|
||||
})}
|
||||
{#each aiOptions as option (option.name)}
|
||||
{@render LinkItem(option)}
|
||||
{/each}
|
||||
</DropdownMenu.Group>
|
||||
</DropdownMenu.Content>
|
||||
</DropdownMenu.Root>
|
||||
</div>
|
||||
@@ -0,0 +1,66 @@
|
||||
<script lang="ts">
|
||||
import type { Extension } from "@/types/extensions";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import ArrowUpRightIcon from "@lucide/svelte/icons/arrow-up-right";
|
||||
|
||||
interface ExtensionProps {
|
||||
data: Extension;
|
||||
}
|
||||
|
||||
let { data }: ExtensionProps = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
class={cn(
|
||||
"relative h-48 max-h-48",
|
||||
"rounded-md transition-shadow hover:shadow-sm",
|
||||
"bg-white dark:bg-neutral-900",
|
||||
"border border-neutral-200 dark:border-neutral-800",
|
||||
"flex flex-col",
|
||||
)}
|
||||
>
|
||||
<div class="p-4">
|
||||
<div class="mb-4 flex items-center justify-between">
|
||||
<img
|
||||
src={data.image}
|
||||
alt={data.name}
|
||||
class="h-8 w-8 rounded-md object-contain"
|
||||
/>
|
||||
<a
|
||||
href={data.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class={buttonVariants({ variant: "outline" })}
|
||||
>
|
||||
<span>Install</span>
|
||||
<ArrowUpRightIcon
|
||||
size={12}
|
||||
strokeWidth={2}
|
||||
class="text-neutral-600 dark:text-neutral-400"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<p class="mb-1 font-medium">{data.name}</p>
|
||||
<p
|
||||
title={data.description}
|
||||
class="truncate text-sm text-pretty text-neutral-700 dark:text-neutral-300"
|
||||
>
|
||||
{data.description}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
class="absolute bottom-0 flex w-full items-center justify-end gap-1 border-t border-neutral-200 bg-neutral-100/60 px-4 py-2 text-sm dark:border-neutral-800 dark:bg-neutral-800/40"
|
||||
>
|
||||
<span>Created by</span>
|
||||
<a
|
||||
href={data.created_by.socialUrl}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="font-medium text-pretty decoration-neutral-400 underline-offset-2 transition-colors hover:text-neutral-600 hover:underline dark:decoration-neutral-600 dark:hover:text-neutral-400"
|
||||
>
|
||||
{data.created_by.name}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,40 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { globals } from "@/globals";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import Github from "@/components/logos/github.svelte";
|
||||
|
||||
async function getGithubStarCount() {
|
||||
try {
|
||||
const res = await fetch(globals.apiGithub.url);
|
||||
const data = await res.json();
|
||||
return data.repo?.stars ?? globals.apiGithub.fallback;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return globals.apiGithub.fallback;
|
||||
}
|
||||
}
|
||||
|
||||
let stars = $state(globals.apiGithub.fallback);
|
||||
|
||||
onMount(async () => {
|
||||
stars = await getGithubStarCount();
|
||||
});
|
||||
</script>
|
||||
|
||||
<a
|
||||
target="_blank"
|
||||
title="pheralb/svgl Repository"
|
||||
href={globals.githubUrl}
|
||||
class={cn(
|
||||
buttonVariants({ variant: "ghost" }),
|
||||
"w-fit hover:bg-neutral-200 dark:hover:bg-neutral-800",
|
||||
)}
|
||||
>
|
||||
<Github size={20} />
|
||||
<span class="text-neutral-600 dark:text-neutral-400">
|
||||
{stars >= 1000 ? `${(stars / 1000).toFixed(1)}k` : stars.toLocaleString()}
|
||||
</span>
|
||||
</a>
|
||||
@@ -2,13 +2,21 @@
|
||||
import type { Snippet } from "svelte";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let { className, children }: { className?: string; children?: Snippet } =
|
||||
$props();
|
||||
interface GridProps {
|
||||
columns?: "default" | "4" | "3" | "2";
|
||||
className?: string;
|
||||
children?: Snippet;
|
||||
}
|
||||
|
||||
let { className, columns, children }: GridProps = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
class={cn(
|
||||
"grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-5",
|
||||
"grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5",
|
||||
columns === "4" && "lg:grid-cols-3 xl:grid-cols-4",
|
||||
columns === "3" && "lg:grid-cols-2 xl:grid-cols-3",
|
||||
columns === "2" && "md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-2",
|
||||
className,
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -4,80 +4,63 @@
|
||||
import { mode } from "mode-watcher";
|
||||
import ModeToggle from "@/components/modeToggle.svelte";
|
||||
|
||||
import Svgl from "@/components/logos/svgl.svelte";
|
||||
import Github from "@/components/logos/github.svelte";
|
||||
import Twitter from "@/components/logos/twitter.svelte";
|
||||
|
||||
import { Separator } from "@/components/ui/separator";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import SvglVersion from "@/components/svglVersion.svelte";
|
||||
import SendIcon from "@/components/ui/moving-icons/send-icon.svelte";
|
||||
|
||||
interface HeaderProps {
|
||||
githubStars: number;
|
||||
}
|
||||
|
||||
let { githubStars }: HeaderProps = $props();
|
||||
|
||||
const headerItemsClasses = cn(
|
||||
buttonVariants({ variant: "ghost" }),
|
||||
"hover:bg-neutral-200 dark:hover:bg-neutral-800",
|
||||
);
|
||||
import SidebarMobileMenu from "@/components/layout/sidebarMobileMenu.svelte";
|
||||
import SettingsMenu from "@/components/settings/settingsMenu.svelte";
|
||||
import GithubLink from "@/components/githubLink.svelte";
|
||||
import HomeLink from "@/components/layout/homeLink.svelte";
|
||||
</script>
|
||||
|
||||
<header
|
||||
class="sticky top-0 w-full bg-neutral-100 px-4 py-4 dark:bg-neutral-950"
|
||||
class="sticky top-0 z-50 w-full bg-neutral-100 px-2 py-3 md:px-4 md:py-4 dark:bg-neutral-950"
|
||||
>
|
||||
<nav class="flex w-full items-center justify-between">
|
||||
<div class="flex items-center space-x-3">
|
||||
<a
|
||||
href="/"
|
||||
class="flex items-center space-x-2.5 transition-colors hover:text-neutral-700 dark:hover:text-neutral-300"
|
||||
>
|
||||
<Svgl size={28} />
|
||||
<h2 class="font-onest text-xl font-medium tracking-tight">svgl</h2>
|
||||
</a>
|
||||
<SvglVersion />
|
||||
<div class="flex items-center space-x-2">
|
||||
<SidebarMobileMenu className="md:hidden" />
|
||||
<HomeLink />
|
||||
</div>
|
||||
<div class="flex h-8 items-center">
|
||||
<div class="flex items-center space-x-0.5">
|
||||
<div class="flex h-5 items-center space-x-2.5">
|
||||
<div class="flex items-center space-x-1.5">
|
||||
<a
|
||||
target="_blank"
|
||||
title="X/Twitter"
|
||||
href={globals.twitterUrl}
|
||||
class={cn(headerItemsClasses, "h-9 w-9")}
|
||||
class={cn(
|
||||
buttonVariants({ variant: "ghost", size: "icon" }),
|
||||
"hover:bg-neutral-200 dark:hover:bg-neutral-800",
|
||||
)}
|
||||
>
|
||||
<Twitter size={18} />
|
||||
</a>
|
||||
<ModeToggle className={cn(headerItemsClasses, "h-9 w-9")} />
|
||||
<ModeToggle
|
||||
className={cn(
|
||||
buttonVariants({ variant: "ghost", size: "icon" }),
|
||||
"hover:bg-neutral-200 dark:hover:bg-neutral-800",
|
||||
)}
|
||||
/>
|
||||
<SettingsMenu />
|
||||
</div>
|
||||
<div class="hidden h-5 items-center space-x-2 md:flex">
|
||||
<Separator orientation="vertical" />
|
||||
<GithubLink />
|
||||
<Separator orientation="vertical" />
|
||||
<a
|
||||
target="_blank"
|
||||
href={globals.submitUrl}
|
||||
class={cn(
|
||||
buttonVariants({
|
||||
variant: mode.current === "dark" ? "default" : "radial",
|
||||
}),
|
||||
)}
|
||||
>
|
||||
<SendIcon size={14} />
|
||||
<span>Submit</span>
|
||||
</a>
|
||||
</div>
|
||||
<Separator orientation="vertical" class="mx-2 h-8" />
|
||||
<a
|
||||
target="_blank"
|
||||
title="GitHub Repository"
|
||||
href={globals.githubUrl}
|
||||
class={cn(headerItemsClasses, "h-9 w-fit")}
|
||||
>
|
||||
<Github size={20} />
|
||||
<span class="text-neutral-600 dark:text-neutral-400">
|
||||
{githubStars >= 1000
|
||||
? `${(githubStars / 1000).toFixed(1)}k`
|
||||
: githubStars.toLocaleString()}
|
||||
</span>
|
||||
</a>
|
||||
<Separator orientation="vertical" class="mr-3 ml-2" />
|
||||
<a
|
||||
target="_blank"
|
||||
href={globals.submitUrl}
|
||||
class={cn(
|
||||
buttonVariants({
|
||||
variant: mode.current === "dark" ? "default" : "radial",
|
||||
}),
|
||||
)}
|
||||
>
|
||||
<SendIcon size={14} />
|
||||
<span>Submit</span>
|
||||
</a>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
<script lang="ts">
|
||||
import type { iSVG } from "@/types/svg";
|
||||
|
||||
import { globals } from "@/globals";
|
||||
import { toast } from "svelte-sonner";
|
||||
import { refreshAll } from "$app/navigation";
|
||||
import { clipboard } from "@/utils/clipboard";
|
||||
|
||||
import { getSource } from "@/templates/getSource";
|
||||
|
||||
import Svgl from "@/components/logos/svgl.svelte";
|
||||
import Github from "@/components/logos/github.svelte";
|
||||
import * as ContextMenu from "@/components/ui/context-menu";
|
||||
|
||||
import CopyIcon from "@lucide/svelte/icons/copy";
|
||||
import BugIcon from "@lucide/svelte/icons/bug";
|
||||
import BoxIcon from "@lucide/svelte/icons/box";
|
||||
import HeartHandshakeIcon from "@lucide/svelte/icons/heart-handshake";
|
||||
import ArrowUpRight from "@lucide/svelte/icons/arrow-up-right";
|
||||
|
||||
const svgInfo = {
|
||||
title: "Svgl",
|
||||
category: "Library",
|
||||
route: `/library/svgl.svg`,
|
||||
url: "https://svgl.app",
|
||||
} as iSVG;
|
||||
|
||||
const copySvgToClipboard = async () => {
|
||||
let content = await getSource({
|
||||
url: svgInfo.route as string,
|
||||
optimize: false,
|
||||
});
|
||||
|
||||
await clipboard(content);
|
||||
|
||||
const category = Array.isArray(svgInfo.category)
|
||||
? svgInfo.category.sort().join(" - ")
|
||||
: svgInfo.category;
|
||||
|
||||
toast.success("Copied SVG to clipboard", {
|
||||
description: `${svgInfo.title} - ${category}`,
|
||||
});
|
||||
};
|
||||
|
||||
const gotoUrl = (url: string) => {
|
||||
window.open(url, "_blank");
|
||||
};
|
||||
</script>
|
||||
|
||||
<ContextMenu.Root>
|
||||
<ContextMenu.Trigger>
|
||||
<a
|
||||
href="/"
|
||||
class="flex items-center space-x-2 transition-colors hover:text-neutral-700 dark:hover:text-neutral-300"
|
||||
>
|
||||
<Svgl size={28} />
|
||||
<h2 class="text-xl font-medium tracking-tight">svgl</h2>
|
||||
</a>
|
||||
</ContextMenu.Trigger>
|
||||
<ContextMenu.Content class="w-fit">
|
||||
<ContextMenu.Item onclick={() => copySvgToClipboard()}>
|
||||
<CopyIcon size={14} />
|
||||
<span>Copy SVG</span>
|
||||
</ContextMenu.Item>
|
||||
<ContextMenu.Item
|
||||
onclick={() => gotoUrl(`${globals.githubUrl}/issues/new/choose`)}
|
||||
>
|
||||
<BugIcon size={14} />
|
||||
<span>Create Issue</span>
|
||||
<ArrowUpRight size={10} />
|
||||
</ContextMenu.Item>
|
||||
<ContextMenu.Item onclick={() => gotoUrl(globals.submitUrl)}>
|
||||
<HeartHandshakeIcon size={14} />
|
||||
<span>Contribute</span>
|
||||
<ArrowUpRight size={10} />
|
||||
</ContextMenu.Item>
|
||||
<ContextMenu.Item onclick={() => gotoUrl(globals.githubUrl)}>
|
||||
<Github size={14} />
|
||||
<span>GitHub Repository</span>
|
||||
<ArrowUpRight size={10} />
|
||||
</ContextMenu.Item>
|
||||
</ContextMenu.Content>
|
||||
</ContextMenu.Root>
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import type { tCategory } from "@/types/categories";
|
||||
import type { Category } from "@/types/categories";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { svgs } from "@/data/svgs";
|
||||
@@ -10,7 +10,7 @@
|
||||
import { sidebarBadgeClasses } from "./sidebarBadgeClasses";
|
||||
|
||||
// Get category counts:
|
||||
const categories: tCategory[] = getCategories();
|
||||
const categories: Category[] = getCategories();
|
||||
let categoryCounts: Record<string, number> = {};
|
||||
categories.forEach((category) => {
|
||||
categoryCounts[category] = svgs.filter((svg) =>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { globals } from "@/globals";
|
||||
|
||||
import { page } from "$app/state";
|
||||
import favoritesStore from "@/stores/favorites.store";
|
||||
|
||||
@@ -10,6 +12,9 @@
|
||||
import House from "@lucide/svelte/icons/house";
|
||||
import Heart from "@lucide/svelte/icons/heart";
|
||||
import Cloud from "@lucide/svelte/icons/cloud";
|
||||
import Submit from "@lucide/svelte/icons/send";
|
||||
import Github from "@/components/logos/github.svelte";
|
||||
import Shadcn from "@/components/logos/shadcn.svelte";
|
||||
|
||||
let favorites = $derived($favoritesStore);
|
||||
let favoritesCount = $derived(favoritesStore.getCount(favorites));
|
||||
@@ -49,7 +54,7 @@
|
||||
{/if}
|
||||
</a>
|
||||
<a
|
||||
href="/api"
|
||||
href="/docs/api"
|
||||
data-sveltekit-preload-data
|
||||
class={cn(
|
||||
sidebarItemClasses.base,
|
||||
@@ -60,6 +65,19 @@
|
||||
<Cloud size={16} />
|
||||
<p class="truncate">API</p>
|
||||
</a>
|
||||
<a
|
||||
href="/docs/shadcn-ui"
|
||||
data-sveltekit-preload-data
|
||||
class={cn(
|
||||
sidebarItemClasses.base,
|
||||
"justify-start space-x-3",
|
||||
String(page.url.pathname) === "/docs/shadcn-ui" &&
|
||||
sidebarItemClasses.active,
|
||||
)}
|
||||
>
|
||||
<Shadcn size={14} />
|
||||
<p class="truncate">shadcn/ui</p>
|
||||
</a>
|
||||
<a
|
||||
href="/extensions"
|
||||
data-sveltekit-preload-data
|
||||
@@ -72,3 +90,19 @@
|
||||
<Box size={16} />
|
||||
<p class="truncate">Extensions</p>
|
||||
</a>
|
||||
<a
|
||||
href={globals.submitUrl}
|
||||
target="_blank"
|
||||
class={cn(sidebarItemClasses.base, "flex justify-start space-x-3 md:hidden")}
|
||||
>
|
||||
<Submit size={16} />
|
||||
<p class="truncate">Submit SVG</p>
|
||||
</a>
|
||||
<a
|
||||
href={globals.githubUrl}
|
||||
target="_blank"
|
||||
class={cn(sidebarItemClasses.base, "flex justify-start space-x-3 md:hidden")}
|
||||
>
|
||||
<Github size={16} />
|
||||
<p class="truncate">GitHub Repository</p>
|
||||
</a>
|
||||
|
||||
@@ -4,27 +4,37 @@
|
||||
import { Separator } from "@/components/ui/separator";
|
||||
import ShowCategories from "@/components/layout/showCategories.svelte";
|
||||
import ShowSidebarLinks from "@/components/layout/showSidebarLinks.svelte";
|
||||
import ScrollArea from "@/components/ui/scroll-area/scroll-area.svelte";
|
||||
import ScrollAreaScrollbar from "@/components/ui/scroll-area/scroll-area-scrollbar.svelte";
|
||||
</script>
|
||||
|
||||
<section>
|
||||
<aside
|
||||
class={cn(
|
||||
"fixed left-0 h-[calc(100vh-5.4rem)]",
|
||||
"md:fixed md:left-1 md:h-[calc(100vh-4.5rem)]",
|
||||
"overflow-x-hidden",
|
||||
"w-54 pr-2 pl-3",
|
||||
"flex flex-col space-y-3",
|
||||
"w-54",
|
||||
"hidden flex-col space-y-3 md:flex",
|
||||
"bg-neutral-100 dark:bg-neutral-950",
|
||||
)}
|
||||
>
|
||||
<nav class="flex flex-col space-y-0.5">
|
||||
<nav class="flex flex-col space-y-0.5 px-2">
|
||||
<ShowSidebarLinks />
|
||||
</nav>
|
||||
<Separator orientation="horizontal" />
|
||||
<nav class="flex flex-col space-y-0.5 overflow-y-auto">
|
||||
<ShowCategories />
|
||||
<div class="px-2">
|
||||
<Separator orientation="horizontal" />
|
||||
</div>
|
||||
<nav class="relative flex h-auto flex-col space-y-0.5 overflow-hidden">
|
||||
<ScrollArea
|
||||
maskClassName="before:from-neutral-100 after:from-neutral-100 dark:before:from-neutral-950 dark:after:from-neutral-950"
|
||||
class="flex size-full flex-col gap-y-0.5 overflow-hidden px-2"
|
||||
>
|
||||
<ShowCategories />
|
||||
<ScrollAreaScrollbar orientation="vertical" />
|
||||
</ScrollArea>
|
||||
</nav>
|
||||
</aside>
|
||||
<main class={cn("mr-4 mb-4 ml-56", "overflow-hidden")}>
|
||||
<main class={cn("px-2 md:mr-4 md:ml-56 md:px-0", "overflow-hidden")}>
|
||||
<slot />
|
||||
</main>
|
||||
</section>
|
||||
|
||||
@@ -2,5 +2,5 @@ import { cn } from "@/utils/cn";
|
||||
|
||||
export const sidebarBadgeClasses = cn(
|
||||
"animate-in zoom-in-20 fade-in",
|
||||
"dark:bg-dark rounded-lg border border-neutral-200 bg-white px-2 py-0.5 font-mono text-xs font-medium text-neutral-600 shadow-sm dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-400",
|
||||
"rounded-lg border border-neutral-300 bg-white px-2 py-0.5 font-mono text-xs font-medium text-neutral-600 shadow-sm dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-400 drop-shadow",
|
||||
);
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
import * as Sheet from "@/components/ui/sheet";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import Separator from "@/components/ui/separator/separator.svelte";
|
||||
|
||||
import MenuIcon from "@lucide/svelte/icons/menu";
|
||||
import Svgl from "@/components/logos/svgl.svelte";
|
||||
|
||||
import ShowCategories from "@/components/layout/showCategories.svelte";
|
||||
import ShowSidebarLinks from "@/components/layout/showSidebarLinks.svelte";
|
||||
import ScrollArea from "@/components/ui/scroll-area/scroll-area.svelte";
|
||||
|
||||
interface Props {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
let { className }: Props = $props();
|
||||
</script>
|
||||
|
||||
<Sheet.Root>
|
||||
<Sheet.Trigger
|
||||
title="Open SVGL Menu"
|
||||
class={cn(buttonVariants({ variant: "ghost", size: "icon" }), className)}
|
||||
>
|
||||
<MenuIcon class="size-5" />
|
||||
<span class="sr-only">Open Menu</span>
|
||||
</Sheet.Trigger>
|
||||
<Sheet.Content class="gap-0.5" side="left">
|
||||
<Sheet.Header>
|
||||
<Sheet.Title class="flex items-center space-x-2">
|
||||
<Svgl size={28} />
|
||||
<h2 class="text-xl font-medium tracking-tight">svgl</h2>
|
||||
</Sheet.Title>
|
||||
</Sheet.Header>
|
||||
<ScrollArea
|
||||
class="flex size-full flex-col"
|
||||
viewportClassName="pb-3 px-3 space-y-0.5"
|
||||
maskClassName="before:from-white after:from-white dark:before:from-neutral-900 dark:after:from-neutral-900"
|
||||
>
|
||||
<ShowSidebarLinks />
|
||||
<Separator orientation="horizontal" class="my-3" />
|
||||
<ShowCategories />
|
||||
</ScrollArea>
|
||||
</Sheet.Content>
|
||||
</Sheet.Root>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import type { IconProps } from "@/types/icon";
|
||||
|
||||
let props: IconProps = $props();
|
||||
</script>
|
||||
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid"
|
||||
viewBox="0 0 256 257"
|
||||
width={props.size}
|
||||
height={props.size}
|
||||
>
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="m50.228 170.321 50.357-28.257.843-2.463-.843-1.361h-2.462l-8.426-.518-28.775-.778-24.952-1.037-24.175-1.296-6.092-1.297L0 125.796l.583-3.759 5.12-3.434 7.324.648 16.202 1.101 24.304 1.685 17.629 1.037 26.118 2.722h4.148l.583-1.685-1.426-1.037-1.101-1.037-25.147-17.045-27.22-18.017-14.258-10.37-7.713-5.25-3.888-4.925-1.685-10.758 7-7.713 9.397.649 2.398.648 9.527 7.323 20.35 15.75L94.817 91.9l3.889 3.24 1.555-1.102.195-.777-1.75-2.917-14.453-26.118-15.425-26.572-6.87-11.018-1.814-6.61c-.648-2.723-1.102-4.991-1.102-7.778l7.972-10.823L71.42 0 82.05 1.426l4.472 3.888 6.61 15.101 10.694 23.786 16.591 32.34 4.861 9.592 2.592 8.879.973 2.722h1.685v-1.556l1.36-18.211 2.528-22.36 2.463-28.776.843-8.1 4.018-9.722 7.971-5.25 6.222 2.981 5.12 7.324-.713 4.73-3.046 19.768-5.962 30.98-3.889 20.739h2.268l2.593-2.593 10.499-13.934 17.628-22.036 7.778-8.749 9.073-9.657 5.833-4.601h11.018l8.1 12.055-3.628 12.443-11.342 14.388-9.398 12.184-13.48 18.147-8.426 14.518.778 1.166 2.01-.194 30.46-6.481 16.462-2.982 19.637-3.37 8.88 4.148.971 4.213-3.5 8.62-20.998 5.184-24.628 4.926-36.682 8.685-.454.324.519.648 16.526 1.555 7.065.389h17.304l32.21 2.398 8.426 5.574 5.055 6.805-.843 5.184-12.962 6.611-17.498-4.148-40.83-9.721-14-3.5h-1.944v1.167l11.666 11.406 21.387 19.314 26.767 24.887 1.36 6.157-3.434 4.86-3.63-.518-23.526-17.693-9.073-7.972-20.545-17.304h-1.36v1.814l4.73 6.935 25.017 37.59 1.296 11.536-1.814 3.76-6.481 2.268-7.13-1.297-14.647-20.544-15.1-23.138-12.185-20.739-1.49.843-7.194 77.448-3.37 3.953-7.778 2.981-6.48-4.925-3.436-7.972 3.435-15.749 4.148-20.544 3.37-16.333 3.046-20.285 1.815-6.74-.13-.454-1.49.194-15.295 20.999-23.267 31.433-18.406 19.702-4.407 1.75-7.648-3.954.713-7.064 4.277-6.286 25.47-32.405 15.36-20.092 9.917-11.6-.065-1.686h-.583L44.07 198.125l-12.055 1.555-5.185-4.86.648-7.972 2.463-2.593 20.35-13.999-.064.065Z"
|
||||
/>
|
||||
</svg>
|
||||
@@ -0,0 +1,18 @@
|
||||
<script lang="ts">
|
||||
import type { IconProps } from "@/types/icon";
|
||||
|
||||
let props: IconProps = $props();
|
||||
</script>
|
||||
|
||||
<svg viewBox="0 0 208 128" fill="none" width={props.size} height={props.size}>
|
||||
<g fill="currentColor">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M15 10a5 5 0 0 0-5 5v98a5 5 0 0 0 5 5h178a5 5 0 0 0 5-5V15a5 5 0 0 0-5-5zM0 15A15 15 0 0 1 15 0h178a15 15 0 0 1 15 15v98a15 15 0 0 1-15 15H15a15 15 0 0 1-15-15z"
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
<path
|
||||
d="M30 98V30h20l20 25 20-25h20v68H90V59L70 84 50 59v39zm125 0-30-33h20V30h20v35h20z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
@@ -0,0 +1,18 @@
|
||||
<script lang="ts">
|
||||
import type { IconProps } from "@/types/icon";
|
||||
|
||||
let props: IconProps = $props();
|
||||
</script>
|
||||
|
||||
<svg
|
||||
preserveAspectRatio="xMidYMid"
|
||||
viewBox="0 0 256 260"
|
||||
width={props.size}
|
||||
height={props.size}
|
||||
fill="none"
|
||||
>
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="M239.184 106.203a64.716 64.716 0 0 0-5.576-53.103C219.452 28.459 191 15.784 163.213 21.74A65.586 65.586 0 0 0 52.096 45.22a64.716 64.716 0 0 0-43.23 31.36c-14.31 24.602-11.061 55.634 8.033 76.74a64.665 64.665 0 0 0 5.525 53.102c14.174 24.65 42.644 37.324 70.446 31.36a64.72 64.72 0 0 0 48.754 21.744c28.481.025 53.714-18.361 62.414-45.481a64.767 64.767 0 0 0 43.229-31.36c14.137-24.558 10.875-55.423-8.083-76.483Zm-97.56 136.338a48.397 48.397 0 0 1-31.105-11.255l1.535-.87 51.67-29.825a8.595 8.595 0 0 0 4.247-7.367v-72.85l21.845 12.636c.218.111.37.32.409.563v60.367c-.056 26.818-21.783 48.545-48.601 48.601Zm-104.466-44.61a48.345 48.345 0 0 1-5.781-32.589l1.534.921 51.722 29.826a8.339 8.339 0 0 0 8.441 0l63.181-36.425v25.221a.87.87 0 0 1-.358.665l-52.335 30.184c-23.257 13.398-52.97 5.431-66.404-17.803ZM23.549 85.38a48.499 48.499 0 0 1 25.58-21.333v61.39a8.288 8.288 0 0 0 4.195 7.316l62.874 36.272-21.845 12.636a.819.819 0 0 1-.767 0L41.353 151.53c-23.211-13.454-31.171-43.144-17.804-66.405v.256Zm179.466 41.695-63.08-36.63L161.73 77.86a.819.819 0 0 1 .768 0l52.233 30.184a48.6 48.6 0 0 1-7.316 87.635v-61.391a8.544 8.544 0 0 0-4.4-7.213Zm21.742-32.69-1.535-.922-51.619-30.081a8.39 8.39 0 0 0-8.492 0L99.98 99.808V74.587a.716.716 0 0 1 .307-.665l52.233-30.133a48.652 48.652 0 0 1 72.236 50.391v.205ZM88.061 139.097l-21.845-12.585a.87.87 0 0 1-.41-.614V65.685a48.652 48.652 0 0 1 79.757-37.346l-1.535.87-51.67 29.825a8.595 8.595 0 0 0-4.246 7.367l-.051 72.697Zm11.868-25.58 28.138-16.217 28.188 16.218v32.434l-28.086 16.218-28.188-16.218-.052-32.434Z"
|
||||
/>
|
||||
</svg>
|
||||
@@ -5,70 +5,14 @@
|
||||
</script>
|
||||
|
||||
<svg
|
||||
name="SVGL Logo"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props.size}
|
||||
height={props.size}
|
||||
name="SVGL Logo"
|
||||
viewBox="0 0 512 512"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
class={props.className}
|
||||
>
|
||||
<rect
|
||||
id="svgl__r4"
|
||||
width="512"
|
||||
height="512"
|
||||
x="0"
|
||||
y="0"
|
||||
rx="128"
|
||||
fill="#222"
|
||||
stroke="#FFFFFF"
|
||||
stroke-width="0"
|
||||
stroke-opacity="100%"
|
||||
paint-order="stroke"
|
||||
/><rect
|
||||
width="512"
|
||||
height="512"
|
||||
x="0"
|
||||
y="0"
|
||||
fill="url(#svgl__r6)"
|
||||
rx="128"
|
||||
style="mix-blend-mode: overlay;"
|
||||
/><clipPath id="svgl__clip"><use xlink:href="#svgl__r4" /></clipPath><defs
|
||||
><linearGradient
|
||||
id="svgl__r5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="rotate(135)"
|
||||
style="transform-origin: center center;"
|
||||
><stop stop-color="#222" /><stop
|
||||
offset="1"
|
||||
stop-color="#222222"
|
||||
/></linearGradient
|
||||
><radialGradient
|
||||
id="svgl__r6"
|
||||
cx="0"
|
||||
cy="0"
|
||||
r="1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(256) rotate(90) scale(512)"
|
||||
><stop stop-color="white" /><stop
|
||||
offset="1"
|
||||
stop-color="white"
|
||||
stop-opacity="0"
|
||||
/></radialGradient
|
||||
></defs
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="310"
|
||||
height="310"
|
||||
fill="#e8e8e8"
|
||||
viewBox="0 0 256 256"
|
||||
x="101"
|
||||
y="101"
|
||||
alignment-baseline="middle"
|
||||
style="color: rgb(255, 255, 255);"
|
||||
><path
|
||||
d="M168,32H88A56.06,56.06,0,0,0,32,88v80a56.06,56.06,0,0,0,56,56h48a8.07,8.07,0,0,0,2.53-.41c26.23-8.75,76.31-58.83,85.06-85.06A8.07,8.07,0,0,0,224,136V88A56.06,56.06,0,0,0,168,32ZM48,168V88A40,40,0,0,1,88,48h80a40,40,0,0,1,40,40v40H184a56.06,56.06,0,0,0-56,56v24H88A40,40,0,0,1,48,168Zm96,35.14V184a40,40,0,0,1,40-40h19.14C191,163.5,163.5,191,144,203.14Z"
|
||||
/></svg
|
||||
>
|
||||
fill="currentColor"
|
||||
viewBox="0 0 256 256"
|
||||
><path d="M216,136c-8,24-56,72-80,80V184a48,48,0,0,1,48-48Z" opacity="0.2"
|
||||
></path><path
|
||||
d="M168,32H88A56.06,56.06,0,0,0,32,88v80a56.06,56.06,0,0,0,56,56h48a8.07,8.07,0,0,0,2.53-.41c26.23-8.75,76.31-58.83,85.06-85.06A8.07,8.07,0,0,0,224,136V88A56.06,56.06,0,0,0,168,32ZM48,168V88A40,40,0,0,1,88,48h80a40,40,0,0,1,40,40v40H184a56.06,56.06,0,0,0-56,56v24H88A40,40,0,0,1,48,168Zm96,35.14V184a40,40,0,0,1,40-40h19.14C191,163.5,163.5,191,144,203.14Z"
|
||||
></path>
|
||||
</svg>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import type { IconProps } from "@/types/icon";
|
||||
|
||||
let props: IconProps = $props();
|
||||
</script>
|
||||
|
||||
<svg
|
||||
stroke-linejoin="round"
|
||||
viewBox="0 0 16 16"
|
||||
width={props.size}
|
||||
height={props.size}
|
||||
>
|
||||
<path
|
||||
clip-rule="evenodd"
|
||||
d="M9.50321 5.5H13.2532C13.3123 5.5 13.3704 5.5041 13.4273 5.51203L9.51242 9.42692C9.50424 9.36912 9.5 9.31006 9.5 9.25L9.5 5.5L8 5.5L8 9.25C8 10.7688 9.23122 12 10.75 12H14.5V10.5L10.75 10.5C10.6899 10.5 10.6309 10.4958 10.5731 10.4876L14.4904 6.57028C14.4988 6.62897 14.5032 6.68897 14.5032 6.75V10.5H16.0032V6.75C16.0032 5.23122 14.772 4 13.2532 4H9.50321V5.5ZM0 5V5.00405L5.12525 11.5307C5.74119 12.3151 7.00106 11.8795 7.00106 10.8822V5H5.50106V9.58056L1.90404 5H0Z"
|
||||
fill="currentColor"
|
||||
fill-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
@@ -1,17 +1,32 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
import { toggleMode } from "mode-watcher";
|
||||
|
||||
import SunIcon from "@lucide/svelte/icons/sun";
|
||||
import MoonIcon from "@lucide/svelte/icons/moon";
|
||||
|
||||
import { toggleMode } from "mode-watcher";
|
||||
|
||||
interface Props {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
let { className }: Props = $props();
|
||||
|
||||
const handleKeydown = (event: KeyboardEvent) => {
|
||||
if (event.ctrlKey && event.key === "l") {
|
||||
event.preventDefault();
|
||||
toggleMode();
|
||||
}
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
window.addEventListener("keydown", handleKeydown);
|
||||
return () => {
|
||||
window.removeEventListener("keydown", handleKeydown);
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<button class={className} onclick={toggleMode} title="Mode Toggle">
|
||||
<button class={className} onclick={toggleMode} title="Mode Toggle (Cmd + l)">
|
||||
<SunIcon
|
||||
size={20}
|
||||
strokeWidth={1.5}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<script lang="ts">
|
||||
import type { Snippet } from "svelte";
|
||||
import { cn } from "@/utils/cn";
|
||||
import ScrollArea from "./ui/scroll-area/scroll-area.svelte";
|
||||
import { ScrollAreaScrollbar } from "./ui/scroll-area";
|
||||
|
||||
interface PageCardProps {
|
||||
children: Snippet;
|
||||
@@ -11,20 +13,26 @@
|
||||
let { children, contentCardClass, containerClass }: PageCardProps = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
class={cn(
|
||||
"mt-2.5 overflow-hidden",
|
||||
"rounded-md border border-neutral-200 dark:border-neutral-800",
|
||||
"bg-white dark:bg-neutral-900/40",
|
||||
containerClass,
|
||||
)}
|
||||
>
|
||||
<div class="p-[1px]">
|
||||
<div
|
||||
class={cn(
|
||||
"max-h-[calc(100vh-8.6rem)] min-h-[calc(100vh-8.6rem)] overflow-y-auto",
|
||||
contentCardClass,
|
||||
"overflow-hidden",
|
||||
"rounded-md border border-neutral-200 dark:border-neutral-800",
|
||||
"bg-white dark:bg-neutral-900/40",
|
||||
"shadow-xs",
|
||||
containerClass,
|
||||
)}
|
||||
>
|
||||
{@render children?.()}
|
||||
<ScrollArea
|
||||
maskHeight={50}
|
||||
maskClassName="before:from-transparent after:from-white dark:before:from-[#0f0f0f] dark:after:from-[#0f0f0f]"
|
||||
class={cn(
|
||||
"flex size-full max-h-[calc(100vh-4.5rem)] min-h-[calc(100vh-4.5rem)] flex-col",
|
||||
contentCardClass,
|
||||
)}
|
||||
>
|
||||
<ScrollAreaScrollbar orientation="vertical" class="relative z-99999" />
|
||||
{@render children?.()}
|
||||
</ScrollArea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,41 +2,34 @@
|
||||
import { cn } from "@/utils/cn";
|
||||
import { onMount } from "svelte";
|
||||
|
||||
import { page } from "$app/state";
|
||||
import { goto } from "$app/navigation";
|
||||
|
||||
import { addParams } from "@/utils/searchParams";
|
||||
import SearchIcon from "@lucide/svelte/icons/search";
|
||||
import CommandIcon from "@lucide/svelte/icons/command";
|
||||
import { SvelteURLSearchParams } from "svelte/reactivity";
|
||||
|
||||
interface Props {
|
||||
searchValue: string;
|
||||
onSearch: (value: string) => void;
|
||||
placeholder?: string;
|
||||
iconSize?: number;
|
||||
inputClass?: string;
|
||||
}
|
||||
|
||||
let { searchValue, onSearch, placeholder }: Props = $props();
|
||||
let { searchValue, onSearch, placeholder, iconSize, inputClass }: Props =
|
||||
$props();
|
||||
let inputElement: HTMLInputElement;
|
||||
|
||||
const onInput = (event: Event) => {
|
||||
const param = "search";
|
||||
const value = (event.target as HTMLInputElement).value;
|
||||
onSearch(value);
|
||||
const params = new SvelteURLSearchParams(page.url.searchParams);
|
||||
if (value) {
|
||||
params.set(param, value);
|
||||
} else {
|
||||
params.delete(param);
|
||||
}
|
||||
goto(`?${params.toString()}`, {
|
||||
keepFocus: true,
|
||||
noScroll: true,
|
||||
replaceState: true,
|
||||
addParams({
|
||||
params: {
|
||||
search: value,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleKeydown = (event: KeyboardEvent) => {
|
||||
if (event.ctrlKey && event.key === "k") {
|
||||
if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
|
||||
event.preventDefault();
|
||||
inputElement?.focus();
|
||||
}
|
||||
@@ -52,13 +45,13 @@
|
||||
|
||||
<div class="relative">
|
||||
<SearchIcon
|
||||
size={20}
|
||||
size={iconSize ? iconSize : 20}
|
||||
strokeWidth={2}
|
||||
class={cn(
|
||||
"pointer-events-none absolute top-1/2 left-2.5 -translate-y-1/2 transition-colors",
|
||||
searchValue
|
||||
? "text-black dark:text-white"
|
||||
: "text-neutral-400 dark:text-neutral-600",
|
||||
: "text-neutral-400 dark:text-neutral-500",
|
||||
)}
|
||||
/>
|
||||
<input
|
||||
@@ -67,6 +60,7 @@
|
||||
autocomplete="off"
|
||||
placeholder={placeholder || "Search..."}
|
||||
oninput={onInput}
|
||||
name="search"
|
||||
value={searchValue}
|
||||
class={cn(
|
||||
"overflow-hidden shadow-sm",
|
||||
@@ -75,6 +69,7 @@
|
||||
"bg-white dark:bg-neutral-900",
|
||||
"rounded-md border border-neutral-200 dark:border-neutral-800",
|
||||
"focus:border-neutral-400 focus:outline-none dark:focus:border-neutral-600",
|
||||
inputClass,
|
||||
)}
|
||||
/>
|
||||
{#if !searchValue}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Switch } from "@/components/ui/switch";
|
||||
import { settingsStore } from "@/stores/settings.store";
|
||||
|
||||
let optimize = $derived($settingsStore.optimizeSvgs);
|
||||
|
||||
const handleOptimizeChange = (checked: boolean) => {
|
||||
settingsStore.setOptimizeSvgs(checked);
|
||||
};
|
||||
</script>
|
||||
|
||||
<div class="flex items-center gap-3">
|
||||
<Switch
|
||||
id="optimize"
|
||||
checked={optimize}
|
||||
onCheckedChange={handleOptimizeChange}
|
||||
/>
|
||||
<label for="optimize">Optimize SVGs</label>
|
||||
</div>
|
||||
+14
-8
@@ -1,16 +1,18 @@
|
||||
<script lang="ts">
|
||||
import type { Component } from "svelte";
|
||||
import * as Select from "@/components/ui/select";
|
||||
import { pkgManager, type PackageManager } from "@/stores/pkgManager.store";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
|
||||
import { settingsStore, type PackageManager } from "@/stores/settings.store";
|
||||
|
||||
import Npm from "@/components/logos/npm.svelte";
|
||||
import Pnpm from "@/components/logos/pnpm.svelte";
|
||||
import Yarn from "@/components/logos/yarn.svelte";
|
||||
import Bun from "@/components/logos/bun.svelte";
|
||||
import { buttonVariants } from "./ui/button";
|
||||
|
||||
let pkg = $derived($pkgManager);
|
||||
let pkg = $derived($settingsStore.packageManager);
|
||||
|
||||
const managers = {
|
||||
const managers: Record<PackageManager, { label: string; Icon: Component }> = {
|
||||
npm: { label: "npm", Icon: Npm },
|
||||
pnpm: { label: "pnpm", Icon: Pnpm },
|
||||
yarn: { label: "yarn", Icon: Yarn },
|
||||
@@ -19,18 +21,22 @@
|
||||
</script>
|
||||
|
||||
<Select.Root type="single" bind:value={pkg}>
|
||||
<Select.Trigger class={buttonVariants({ variant: "outline", size: "sm" })}>
|
||||
<Select.Trigger
|
||||
class={buttonVariants({ variant: "outline", class: "justify-between" })}
|
||||
>
|
||||
{#if managers[pkg]}
|
||||
{@const { Icon, label } = managers[pkg]}
|
||||
<Icon size={14} />
|
||||
<span>{label}</span>
|
||||
<div class="flex items-center space-x-2.5">
|
||||
<Icon size={16} />
|
||||
<span>{label}</span>
|
||||
</div>
|
||||
{/if}
|
||||
</Select.Trigger>
|
||||
<Select.Content sideOffset={1.5}>
|
||||
{#each Object.entries(managers) as [value, { Icon, label }] (value)}
|
||||
<Select.Item
|
||||
{value}
|
||||
onclick={() => pkgManager.set(value as PackageManager)}
|
||||
onclick={() => settingsStore.setPackageManager(value as PackageManager)}
|
||||
>
|
||||
<Icon size={16} />
|
||||
<span>{label}</span>
|
||||
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import type { Snippet } from "svelte";
|
||||
|
||||
interface SettingsCardProps {
|
||||
title: string;
|
||||
description: string;
|
||||
children: Snippet;
|
||||
}
|
||||
|
||||
let { title, description, children }: SettingsCardProps = $props();
|
||||
</script>
|
||||
|
||||
<div class="flex flex-col">
|
||||
<h3 class="mb-0.5 font-medium">{title}</h3>
|
||||
<p class="mb-3 text-sm text-neutral-600 dark:text-neutral-400">
|
||||
{description}
|
||||
</p>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { toast } from "svelte-sonner";
|
||||
|
||||
import { settingsStore } from "@/stores/settings.store";
|
||||
import SettingsCard from "@/components/settings/settingsCard.svelte";
|
||||
import SettingsIcon from "@lucide/svelte/icons/settings";
|
||||
|
||||
import * as Dialog from "@/components/ui/dialog";
|
||||
import { Button, buttonVariants } from "@/components/ui/button";
|
||||
import Separator from "@/components/ui/separator/separator.svelte";
|
||||
|
||||
import OptimizeSvgs from "@/components/settings/options/optimizeSvgs.svelte";
|
||||
import SelectPkgManager from "@/components/settings/options/selectPkgManager.svelte";
|
||||
|
||||
const handleResetSettings = () => {
|
||||
settingsStore.reset();
|
||||
toast.success("Settings have been reset to default");
|
||||
};
|
||||
</script>
|
||||
|
||||
<Dialog.Root>
|
||||
<Dialog.Trigger
|
||||
title="Settings"
|
||||
class={cn(
|
||||
buttonVariants({ variant: "ghost", size: "icon" }),
|
||||
"hover:bg-neutral-200 dark:hover:bg-neutral-800",
|
||||
)}
|
||||
>
|
||||
<SettingsIcon size={20} strokeWidth={1.5} />
|
||||
</Dialog.Trigger>
|
||||
<Dialog.Content>
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>Settings</Dialog.Title>
|
||||
<Dialog.Description>Customize your preferences.</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
<Separator />
|
||||
<div class="my-3 flex flex-col space-y-8">
|
||||
<SettingsCard
|
||||
title="Package Manager"
|
||||
description="Select your preferred package manager for all installations commands"
|
||||
>
|
||||
<SelectPkgManager />
|
||||
</SettingsCard>
|
||||
<SettingsCard
|
||||
title="Copy SVGs"
|
||||
description="Use SVGO to optimize your SVGs when you copy source code (including all frameworks)"
|
||||
>
|
||||
<OptimizeSvgs />
|
||||
</SettingsCard>
|
||||
</div>
|
||||
<Dialog.Footer>
|
||||
<Button variant="outline" onclick={handleResetSettings}>
|
||||
<span>Reset</span>
|
||||
</Button>
|
||||
<Dialog.Close class={buttonVariants({ variant: "default" })}>
|
||||
<span>Save</span>
|
||||
</Dialog.Close>
|
||||
</Dialog.Footer>
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
@@ -1,8 +0,0 @@
|
||||
<script>
|
||||
import { PUBLIC_SVGL_VERSION } from "$env/static/public";
|
||||
import Badge from "@/components/ui/badge/badge.svelte";
|
||||
</script>
|
||||
|
||||
{#if PUBLIC_SVGL_VERSION}
|
||||
<Badge variant="outline">{PUBLIC_SVGL_VERSION}</Badge>
|
||||
{/if}
|
||||
@@ -22,7 +22,7 @@
|
||||
<button
|
||||
class={cn(
|
||||
"cursor-pointer transition-colors hover:animate-pulse",
|
||||
"text-neutral-500 hover:text-red-700 dark:text-neutral-400 dark:hover:text-red-400",
|
||||
"text-neutral-500 hover:text-red-700 dark:text-neutral-400 dark:hover:text-red-600",
|
||||
isFavorite && "text-red-500",
|
||||
)}
|
||||
onclick={toggleFavorite}
|
||||
@@ -36,6 +36,9 @@
|
||||
<HeartIcon
|
||||
size={16}
|
||||
strokeWidth={1.8}
|
||||
class={cn(isFavorite && "fill-red-500")}
|
||||
class={cn(
|
||||
isFavorite &&
|
||||
"fill-red-500 text-red-600 dark:fill-red-600 dark:text-red-400",
|
||||
)}
|
||||
/>
|
||||
</button>
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { Button } from "@/components/ui/button";
|
||||
import Shadcn from "@/components/logos/shadcn.svelte";
|
||||
import SelectPkgManager from "@/components/selectPkgManager.svelte";
|
||||
import { globals } from "@/globals";
|
||||
|
||||
import { pkgManager, type PackageManager } from "@/stores/pkgManager.store";
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import CodeBlock from "@/components/codeBlock.svelte";
|
||||
import SetupShadcnRegistry from "@/components/svgs/setupShadcnRegistry.svelte";
|
||||
import ArrowUpRightIcon from "@lucide/svelte/icons/arrow-up-right";
|
||||
|
||||
import { settingsStore, type PackageManager } from "@/stores/settings.store";
|
||||
|
||||
import V0 from "@/components/logos/v0.svelte";
|
||||
import Shadcn from "@/components/logos/shadcn.svelte";
|
||||
|
||||
interface Props {
|
||||
svgTitle: string;
|
||||
@@ -20,7 +23,7 @@
|
||||
bun: "bunx shadcn@latest add",
|
||||
};
|
||||
|
||||
let pkg = $derived($pkgManager);
|
||||
let pkg = $derived($settingsStore.packageManager);
|
||||
let shadcnCommand = $derived(shadcnCommands[pkg]);
|
||||
const svgFormatTitle = svgTitle
|
||||
.toLowerCase()
|
||||
@@ -28,12 +31,29 @@
|
||||
.replace(/[^a-z0-9-]/g, "");
|
||||
</script>
|
||||
|
||||
<div class="flex items-center justify-between space-x-2">
|
||||
<SetupShadcnRegistry>
|
||||
<Button variant="outline" size="sm">
|
||||
<span>Setup Registry</span>
|
||||
</Button>
|
||||
</SetupShadcnRegistry>
|
||||
<SelectPkgManager />
|
||||
<div class="flex w-full items-center space-x-2">
|
||||
<a
|
||||
target="_blank"
|
||||
href="/docs/shadcn-ui"
|
||||
class={buttonVariants({ variant: "outline", class: "w-full" })}
|
||||
>
|
||||
<span>Setup Registry</span>
|
||||
<ArrowUpRightIcon
|
||||
size={14}
|
||||
class="text-neutral-500 dark:text-neutral-400"
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
target="_blank"
|
||||
href={`${globals.v0Url}${globals.registryUrl}${svgFormatTitle}.json`}
|
||||
class={buttonVariants({ variant: "outline", class: "w-full" })}
|
||||
>
|
||||
<span>Open with</span>
|
||||
<V0 size={20} />
|
||||
<ArrowUpRightIcon
|
||||
size={14}
|
||||
class="text-neutral-500 dark:text-neutral-400"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<CodeBlock code={`${shadcnCommand} @svgl/${svgFormatTitle}`} Icon={Shadcn} />
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
import { clipboard } from "@/utils/clipboard";
|
||||
import { getPrefixFromSvgUrl, prefixSvgIds } from "@/utils/prefixSvgIds";
|
||||
import { copyToClipboard as figmaCopyToClipboard } from "@/figma/copy-to-clipboard";
|
||||
import { settingsStore } from "@/stores/settings.store";
|
||||
|
||||
// Icons:
|
||||
import XIcon from "@lucide/svelte/icons/x";
|
||||
@@ -15,6 +16,7 @@
|
||||
|
||||
// UI Components:
|
||||
import { toast } from "svelte-sonner";
|
||||
import { Separator } from "@/components/ui/separator";
|
||||
import * as Tabs from "@/components/ui/tabs";
|
||||
import { Button, buttonVariants } from "@/components/ui/button";
|
||||
import * as Popover from "@/components/ui/popover";
|
||||
@@ -36,6 +38,7 @@
|
||||
import React from "@/components/logos/react.svelte";
|
||||
import Astro from "@/components/logos/astro.svelte";
|
||||
import Svelte from "@/components/logos/svelte.svelte";
|
||||
import Shadcn from "@/components/logos/shadcn.svelte";
|
||||
import Angular from "@/components/logos/angular.svelte";
|
||||
import WebComponents from "@/components/logos/webComponents.svelte";
|
||||
|
||||
@@ -59,6 +62,7 @@
|
||||
// States:
|
||||
let optionsOpen = $state<boolean>(false);
|
||||
let isLoading = $state<boolean>(false);
|
||||
let optimize = $derived($settingsStore.optimizeSvgs);
|
||||
|
||||
const getSvgUrl = () => {
|
||||
let svgUrlToCopy;
|
||||
@@ -105,6 +109,7 @@
|
||||
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -150,13 +155,19 @@
|
||||
const title = svgInfo.title.split(" ").join("");
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
|
||||
}
|
||||
|
||||
const dataComponent = { code: content, typescript: tsx, name: title };
|
||||
const dataComponent = {
|
||||
code: content,
|
||||
typescript: tsx,
|
||||
name: title,
|
||||
optimize,
|
||||
};
|
||||
const { data, error } = await getReactCode(dataComponent);
|
||||
|
||||
if (error || !data) {
|
||||
@@ -186,6 +197,7 @@
|
||||
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -223,6 +235,7 @@
|
||||
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -260,6 +273,7 @@
|
||||
const svgUrlToCopy = getSvgUrl();
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -297,6 +311,7 @@
|
||||
const svgUrlToCopy = getSvgUrl();
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -333,6 +348,7 @@
|
||||
const svgUrlToCopy = getSvgUrl();
|
||||
let content = await getSource({
|
||||
url: svgUrlToCopy,
|
||||
optimize,
|
||||
});
|
||||
|
||||
if (svgUrlToCopy) {
|
||||
@@ -380,42 +396,43 @@
|
||||
<CopyIcon {size} strokeWidth={iconStroke} />
|
||||
{/if}
|
||||
</Popover.Trigger>
|
||||
<Popover.Content class="flex w-fit flex-col space-y-2 p-4" sideOffset={2}>
|
||||
<Popover.Content class="flex flex-col space-y-2 p-4" sideOffset={2}>
|
||||
<Tabs.Root value="source" class="flex w-full flex-col space-y-1">
|
||||
<Tabs.List class="w-fit border-none bg-transparent">
|
||||
<Tabs.Trigger value="source">Source</Tabs.Trigger>
|
||||
<Tabs.Trigger value="shadcn">shadcn/ui</Tabs.Trigger>
|
||||
<div
|
||||
class="ml-3 flex flex-row space-x-1 border-l border-neutral-200 pl-3 dark:border-neutral-800"
|
||||
>
|
||||
<Tabs.Trigger
|
||||
class="px-2.5"
|
||||
value="web-component"
|
||||
title="Web Component"
|
||||
>
|
||||
<Tabs.List
|
||||
class="flex h-auto w-auto flex-col space-y-2 space-x-0 border-0 md:h-9 md:flex-row md:space-y-0 md:space-x-1"
|
||||
>
|
||||
<div class="flex items-center space-x-1">
|
||||
<Tabs.Trigger value="source">Source</Tabs.Trigger>
|
||||
<Tabs.Trigger value="shadcn" title="shadcn/ui">
|
||||
<Shadcn size={18} />
|
||||
</Tabs.Trigger>
|
||||
</div>
|
||||
<div class="flex items-center space-x-1">
|
||||
<Tabs.Trigger value="web-component" title="Web Component">
|
||||
<WebComponents size={21} />
|
||||
</Tabs.Trigger>
|
||||
<Tabs.Trigger class="px-2.5" value="react" title="React">
|
||||
<Tabs.Trigger value="react" title="React">
|
||||
<React size={20} />
|
||||
</Tabs.Trigger>
|
||||
<Tabs.Trigger class="px-2.5" value="vue" title="Vue">
|
||||
<Tabs.Trigger value="vue" title="Vue">
|
||||
<Vue size={20} />
|
||||
</Tabs.Trigger>
|
||||
<Tabs.Trigger class="px-2.5" value="svelte" title="Svelte">
|
||||
<Tabs.Trigger value="svelte" title="Svelte">
|
||||
<Svelte size={20} />
|
||||
</Tabs.Trigger>
|
||||
<Tabs.Trigger class="px-2.5" value="angular" title="Angular">
|
||||
<Tabs.Trigger value="angular" title="Angular">
|
||||
<Angular size={20} />
|
||||
</Tabs.Trigger>
|
||||
<Tabs.Trigger
|
||||
value="astro"
|
||||
title="Astro"
|
||||
class="px-2.5 text-black dark:text-white"
|
||||
class="text-black dark:text-white"
|
||||
>
|
||||
<Astro size={21} />
|
||||
</Tabs.Trigger>
|
||||
</div>
|
||||
</Tabs.List>
|
||||
<Separator class="block md:hidden" />
|
||||
<!-- Source -->
|
||||
<Tabs.Content value="source">
|
||||
<section class="flex flex-col space-y-2">
|
||||
@@ -477,17 +494,6 @@
|
||||
<span>Copy JS</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
variant="outline"
|
||||
class="justify-start"
|
||||
title="Copy as Svelte component"
|
||||
disabled={isLoading}
|
||||
onclick={() => convertSvgSvelteComponent(false)}
|
||||
>
|
||||
<Svelte size={18} />
|
||||
<span>Copy JS</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
variant="outline"
|
||||
class="justify-start"
|
||||
@@ -575,8 +581,8 @@
|
||||
class="mt-1 flex w-full items-center text-center text-[12px] text-neutral-600 dark:text-neutral-400"
|
||||
>
|
||||
<p>
|
||||
Remember to request permission from the creators for the use of the SVG.
|
||||
Modification is not allowed.
|
||||
Please ensure you have permission from the creators before using the
|
||||
SVG. Modifications are not permitted.
|
||||
</p>
|
||||
</div>
|
||||
</Popover.Content>
|
||||
|
||||
@@ -23,7 +23,10 @@
|
||||
let iconSize = 16;
|
||||
let iconStroke = 2;
|
||||
let cardDownloadStyles =
|
||||
"flex w-full h-full flex-col p-4 rounded-md shadow-sm dark:bg-neutral-800/20 bg-neutral-200/10 border border-neutral-200 dark:border-neutral-800 space-y-2";
|
||||
"flex w-full h-full flex-col p-4 rounded-md shadow-sm dark:bg-neutral-800/20 bg-neutral-200/10 border border-neutral-200 dark:border-neutral-800 space-y-1.5";
|
||||
let imgStyles = "my-7 h-10 select-none pointer-events-none";
|
||||
let badgeButtonStyles =
|
||||
"font-mono text-neutral-600 dark:text-neutral-400 text-xs";
|
||||
|
||||
// Functions:
|
||||
const handleDownloadSvg = async (url?: string) => {
|
||||
@@ -109,28 +112,23 @@
|
||||
>
|
||||
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
|
||||
</Dialog.Trigger>
|
||||
<Dialog.Content class="max-w-[630px]">
|
||||
<Dialog.Content>
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>Download {svgInfo.title} SVG</Dialog.Title>
|
||||
<Dialog.Title>Download {svgInfo.title} SVGs</Dialog.Title>
|
||||
<Dialog.Description>
|
||||
This logo has multiple options to download:
|
||||
</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
<div
|
||||
class={cn(
|
||||
"flex h-full flex-col space-y-2 pt-2 pb-0.5",
|
||||
"md:flex-row md:items-center md:justify-center md:space-y-0 md:space-x-2",
|
||||
)}
|
||||
>
|
||||
<div class={cn("flex flex-col gap-4 md:flex-row")}>
|
||||
{#if typeof svgInfo.route === "string"}
|
||||
<div class={cardDownloadStyles}>
|
||||
<img
|
||||
src={isDarkTheme() ? svgInfo.route : svgInfo.route}
|
||||
alt={svgInfo.title}
|
||||
class="my-4 h-8"
|
||||
class={imgStyles}
|
||||
/>
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download logo"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -140,8 +138,11 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Icon logo</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Icon logo</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
</div>
|
||||
{:else}
|
||||
@@ -149,10 +150,10 @@
|
||||
<img
|
||||
src={isDarkTheme() ? svgInfo.route.dark : svgInfo.route.light}
|
||||
alt={svgInfo.title}
|
||||
class="my-4 h-10"
|
||||
class={imgStyles}
|
||||
/>
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Logo with light & dark variants"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -164,12 +165,15 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Light & dark variants</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Light & dark variants</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.zip</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download light variant"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -179,12 +183,15 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Only light variant</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Only light variant</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download dark variant"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -194,8 +201,11 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Only dark variant</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Only dark variant</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -205,10 +215,10 @@
|
||||
<img
|
||||
src={isDarkTheme() ? svgInfo.wordmark : svgInfo.wordmark}
|
||||
alt={svgInfo.title}
|
||||
class="my-4 h-8"
|
||||
class={imgStyles}
|
||||
/>
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download Wordmark logo"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -218,8 +228,11 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Wordmark logo</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Wordmark logo</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -231,10 +244,10 @@
|
||||
? svgInfo.wordmark.dark
|
||||
: svgInfo.wordmark.light}
|
||||
alt={svgInfo.title}
|
||||
class="my-4 h-10"
|
||||
class={imgStyles}
|
||||
/>
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download Wordmark light variant"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -248,12 +261,15 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Light & dark variants</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Light & dark variants</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.zip</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download Wordmark light variant"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -263,12 +279,15 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Wordmark light variant</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Wordmark light variant</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
class="justify-start"
|
||||
class="justify-between"
|
||||
title="Download Wordmark dark variant"
|
||||
variant="outline"
|
||||
onclick={() => {
|
||||
@@ -278,19 +297,24 @@
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DownloadIcon class="mr-2" size={iconSize} />
|
||||
<p>Wordmark dark variant</p>
|
||||
<div class="flex items-center space-x-2">
|
||||
<DownloadIcon size={iconSize} />
|
||||
<p>Wordmark dark variant</p>
|
||||
</div>
|
||||
<span class={badgeButtonStyles}>.svg</span>
|
||||
</Button>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<Dialog.Footer
|
||||
class="mt-3 text-xs text-neutral-600 dark:text-neutral-400"
|
||||
>
|
||||
<p>
|
||||
Remember to request permission from the creators for the use of the
|
||||
SVG. Modification is not allowed.
|
||||
</p>
|
||||
<Dialog.Footer>
|
||||
<div
|
||||
class="mt-2 flex w-full items-center justify-center text-sm text-neutral-600 dark:text-neutral-400"
|
||||
>
|
||||
<p class="w-full text-center text-sm">
|
||||
Please ensure you have permission from the creators before using the
|
||||
SVG. Modifications are not permitted.
|
||||
</p>
|
||||
</div>
|
||||
</Dialog.Footer>
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
<script lang="ts">
|
||||
import type { Snippet } from "svelte";
|
||||
import * as Dialog from "@/components/ui/dialog";
|
||||
import CodeBlock from "@/components/codeBlock.svelte";
|
||||
|
||||
interface Props {
|
||||
children: Snippet;
|
||||
}
|
||||
|
||||
let { children }: Props = $props();
|
||||
|
||||
let registryCode = `
|
||||
"registries": {
|
||||
"@svgl": "https://svgl.app/r/{name}.json"
|
||||
}
|
||||
`;
|
||||
</script>
|
||||
|
||||
<Dialog.Root>
|
||||
<Dialog.Trigger>
|
||||
{@render children()}
|
||||
</Dialog.Trigger>
|
||||
<Dialog.Content class="text-sm">
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>Setup shadcn/ui registry</Dialog.Title>
|
||||
<Dialog.Description>
|
||||
Use the code below to configure the @svgl registry for your project.
|
||||
</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
<p>
|
||||
1. Copy and paste the code into
|
||||
<span class="font-mono">components.json</span>:
|
||||
</p>
|
||||
<CodeBlock code={registryCode} />
|
||||
<p class="mt-2">2. Then use the following command to add SVGs:</p>
|
||||
<CodeBlock code="npx shadcn@latest add @svgl/[svg-name]" />
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
@@ -1,7 +1,9 @@
|
||||
<script lang="ts">
|
||||
import type { iSVG } from "@/types/svg";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { mode } from "mode-watcher";
|
||||
import { getSvgImgUrl } from "@/data";
|
||||
|
||||
// Icons:
|
||||
import XIcon from "@lucide/svelte/icons/x";
|
||||
@@ -32,7 +34,6 @@
|
||||
// States:
|
||||
let wordmarkSvg = $state<boolean>(false);
|
||||
let moreTagsOptions = $state<boolean>(false);
|
||||
let changeThemeMode = $state<boolean>(false);
|
||||
|
||||
// Icon Stroke & Size:
|
||||
let iconStroke = 1.8;
|
||||
@@ -45,13 +46,13 @@
|
||||
|
||||
<div
|
||||
class={cn(
|
||||
"group flex flex-col items-center justify-center px-3.5 py-3",
|
||||
"flex flex-col items-center justify-center px-3.5 py-3",
|
||||
"rounded-md border border-neutral-200 dark:border-neutral-800",
|
||||
"transition-colors duration-100 hover:bg-neutral-100/80 dark:hover:bg-neutral-800/20",
|
||||
"hover:bg-neutral-100/80 dark:hover:bg-neutral-800/20",
|
||||
)}
|
||||
>
|
||||
<!-- Image Options -->
|
||||
<div class="flex w-full items-center justify-end space-x-3">
|
||||
<div class="flex w-full items-center justify-end space-x-3 pb-0.5">
|
||||
{#if svgInfo.brandUrl !== undefined}
|
||||
<a
|
||||
href={svgInfo.brandUrl}
|
||||
@@ -69,69 +70,39 @@
|
||||
<AddToFavorite svg={svgInfo} />
|
||||
</div>
|
||||
<!-- Image -->
|
||||
{#if wordmarkSvg == true && svgInfo.wordmark !== undefined}
|
||||
{#if changeThemeMode}
|
||||
<img
|
||||
class={cn("block", globalImageStyles)}
|
||||
src={typeof svgInfo.wordmark !== "string"
|
||||
? mode.current === "dark"
|
||||
? svgInfo.wordmark?.light || ""
|
||||
: svgInfo.wordmark?.dark || ""
|
||||
: svgInfo.wordmark || ""}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
loading="lazy"
|
||||
/>
|
||||
{:else}
|
||||
<img
|
||||
class={cn("hidden dark:block", globalImageStyles)}
|
||||
src={typeof svgInfo.wordmark !== "string"
|
||||
? svgInfo.wordmark?.dark || ""
|
||||
: svgInfo.wordmark || ""}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
loading="lazy"
|
||||
/>
|
||||
<img
|
||||
class={cn("block dark:hidden", globalImageStyles)}
|
||||
src={typeof svgInfo.wordmark !== "string"
|
||||
? svgInfo.wordmark?.light || ""
|
||||
: svgInfo.wordmark || ""}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
loading="lazy"
|
||||
/>
|
||||
{/if}
|
||||
{:else if changeThemeMode}
|
||||
{#if wordmarkSvg && svgInfo.wordmark !== undefined}
|
||||
<img
|
||||
class={cn("block", globalImageStyles)}
|
||||
src={typeof svgInfo.route !== "string"
|
||||
? mode.current === "dark"
|
||||
? svgInfo.route.light
|
||||
: svgInfo.route.dark
|
||||
: svgInfo.route}
|
||||
loading="lazy"
|
||||
class={cn("hidden dark:block", globalImageStyles)}
|
||||
src={getSvgImgUrl({ url: svgInfo.wordmark, isDark: true })}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
height="40"
|
||||
/>
|
||||
<img
|
||||
loading="lazy"
|
||||
class={cn("block dark:hidden", globalImageStyles)}
|
||||
src={getSvgImgUrl({ url: svgInfo.wordmark, isDark: false })}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
height="40"
|
||||
/>
|
||||
{:else}
|
||||
<img
|
||||
loading="lazy"
|
||||
class={cn("hidden dark:block", globalImageStyles)}
|
||||
src={typeof svgInfo.route !== "string"
|
||||
? svgInfo.route.dark
|
||||
: svgInfo.route}
|
||||
src={getSvgImgUrl({ url: svgInfo.route, isDark: true })}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
loading="lazy"
|
||||
height="40"
|
||||
/>
|
||||
<img
|
||||
loading="lazy"
|
||||
class={cn("block dark:hidden", globalImageStyles)}
|
||||
src={typeof svgInfo.route !== "string"
|
||||
? svgInfo.route.light
|
||||
: svgInfo.route}
|
||||
src={getSvgImgUrl({ url: svgInfo.route, isDark: false })}
|
||||
alt={svgInfo.title}
|
||||
title={svgInfo.title}
|
||||
loading="lazy"
|
||||
height="40"
|
||||
/>
|
||||
{/if}
|
||||
<!-- Title -->
|
||||
@@ -148,14 +119,14 @@
|
||||
href={`/directory/${c.toLowerCase()}`}
|
||||
class={badgeVariants({
|
||||
variant: "outline",
|
||||
class: "cursor-pointer font-mono",
|
||||
class:
|
||||
"cursor-pointer font-mono hover:border-neutral-400 dark:hover:border-neutral-600",
|
||||
})}
|
||||
title={`This icon is part of the ${svgInfo.category} category`}
|
||||
>
|
||||
{c}
|
||||
</a>
|
||||
{/each}
|
||||
|
||||
{#if svgInfo.category.length > maxVisibleCategories}
|
||||
<Popover.Root
|
||||
open={moreTagsOptions}
|
||||
@@ -164,7 +135,8 @@
|
||||
<Popover.Trigger
|
||||
class={badgeVariants({
|
||||
variant: "outline",
|
||||
class: "cursor-pointer font-mono",
|
||||
class:
|
||||
"cursor-pointer font-mono hover:border-neutral-400 dark:hover:border-neutral-600",
|
||||
})}
|
||||
title="More Tags"
|
||||
>
|
||||
@@ -175,11 +147,14 @@
|
||||
{/if}
|
||||
</Popover.Trigger>
|
||||
<Popover.Content class="flex w-auto flex-col space-y-2">
|
||||
<p class="font-medium">More tags:</p>
|
||||
<p class="font-medium">More tags</p>
|
||||
{#each svgInfo.category.slice(maxVisibleCategories) as c (c)}
|
||||
<a
|
||||
href={`/directory/${c.toLowerCase()}`}
|
||||
class={cn(buttonVariants({ variant: "outline" }), "w-full")}
|
||||
class={cn(
|
||||
buttonVariants({ variant: "outline" }),
|
||||
"w-full justify-start",
|
||||
)}
|
||||
>
|
||||
<TagIcon size={15} strokeWidth={1.5} />
|
||||
<span>{c}</span>
|
||||
@@ -193,7 +168,8 @@
|
||||
href={`/directory/${svgInfo.category.toLowerCase()}`}
|
||||
class={badgeVariants({
|
||||
variant: "outline",
|
||||
class: "cursor-pointer font-mono",
|
||||
class:
|
||||
"cursor-pointer font-mono hover:border-neutral-400 dark:hover:border-neutral-600",
|
||||
})}
|
||||
>
|
||||
{svgInfo.category}
|
||||
@@ -221,13 +197,7 @@
|
||||
/>
|
||||
{/if}
|
||||
|
||||
<DownloadSvg
|
||||
{svgInfo}
|
||||
isDarkTheme={() => {
|
||||
const dark = document.documentElement.classList.contains("dark");
|
||||
return dark;
|
||||
}}
|
||||
/>
|
||||
<DownloadSvg {svgInfo} isDarkTheme={() => mode.current === "dark"} />
|
||||
|
||||
<a
|
||||
href={svgInfo.url}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<script lang="ts">
|
||||
import { globals } from "@/globals";
|
||||
|
||||
import { buttonVariants } from "@/components/ui/button";
|
||||
import SearchIcon from "@lucide/svelte/icons/search";
|
||||
import ArrowUpRight from "@lucide/svelte/icons/arrow-up-right";
|
||||
import BoxesIcon from "@/components/ui/moving-icons/boxes-icon.svelte";
|
||||
|
||||
interface Props {
|
||||
svgTitle: string;
|
||||
category?: string;
|
||||
searchGlobally?: boolean;
|
||||
}
|
||||
|
||||
let { svgTitle, category, searchGlobally }: Props = $props();
|
||||
</script>
|
||||
|
||||
<div class="flex w-full flex-col items-center justify-center space-y-4 py-6">
|
||||
<BoxesIcon size={48} strokeWidth={1} />
|
||||
<h2 class="text-xl font-semibold">SVG not found</h2>
|
||||
{#if category}
|
||||
<p class="text-neutral-600 dark:text-neutral-400">
|
||||
"{svgTitle}" not found in "{category}" category
|
||||
</p>
|
||||
{:else}
|
||||
<p class="text-neutral-600 dark:text-neutral-400">
|
||||
"{svgTitle}" not found
|
||||
</p>
|
||||
{/if}
|
||||
<div class="flex items-center justify-center space-x-2">
|
||||
{#if category || searchGlobally}
|
||||
<a
|
||||
href={`/?search=${svgTitle}`}
|
||||
class={buttonVariants({ variant: "outline" })}
|
||||
>
|
||||
<SearchIcon size={14} strokeWidth={1.5} />
|
||||
<span>Search globally</span>
|
||||
</a>
|
||||
{/if}
|
||||
<a
|
||||
target="_blank"
|
||||
href={globals.requestSvgUrl}
|
||||
class={buttonVariants({ variant: "outline" })}
|
||||
>
|
||||
<span>Request SVG</span>
|
||||
<ArrowUpRight size={14} strokeWidth={1.5} />
|
||||
</a>
|
||||
<a
|
||||
target="_blank"
|
||||
href={globals.submitUrl}
|
||||
class={buttonVariants({ variant: "outline" })}
|
||||
>
|
||||
<span>Submit SVG</span>
|
||||
<ArrowUpRight size={14} strokeWidth={1.5} />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,28 @@
|
||||
<script lang="ts">
|
||||
import type { TableOfContentsProps } from "./toc.types";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let { toc, className }: TableOfContentsProps = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
class={cn(
|
||||
"flex flex-col text-sm text-neutral-600 dark:text-neutral-400",
|
||||
className,
|
||||
)}
|
||||
>
|
||||
{#each toc as tocItem (tocItem.id)}
|
||||
<a
|
||||
href={"#" + tocItem.slug}
|
||||
class={cn(
|
||||
"pt-1 pb-1.5 transition-colors hover:text-neutral-900 dark:hover:text-neutral-50",
|
||||
tocItem.level === 2 && "ml-0 font-medium",
|
||||
tocItem.level === 3 &&
|
||||
"border-l border-neutral-200 pl-4 dark:border-neutral-800",
|
||||
tocItem.level === 4 && "ml-8",
|
||||
)}
|
||||
>
|
||||
{tocItem.text}
|
||||
</a>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -0,0 +1,6 @@
|
||||
import type { ToCItem } from "@/markdown/generateToC";
|
||||
|
||||
export interface TableOfContentsProps {
|
||||
toc: ToCItem[];
|
||||
className?: string;
|
||||
}
|
||||
@@ -7,7 +7,7 @@ const buttonVariants = tv({
|
||||
default:
|
||||
"bg-neutral-900 text-neutral-50 shadow hover:bg-neutral-900/90 dark:bg-neutral-800 dark:text-neutral-50 dark:hover:bg-neutral-800/70",
|
||||
radial:
|
||||
"bg-radial-[at_52%_-52%] **:[text-shadow:0_1px_0_var(--color-neutral-950)] border-neutral-950 from-neutral-950/70 to-neutral-950/95 text-white inset-shadow-2xs inset-shadow-white/25 border text-sm shadow-md shadow-neutral-950/30 ring-0 transition-[filter] duration-200 hover:brightness-125 active:brightness-95 dark:border-0",
|
||||
"bg-radial-[at_52%_-52%] **:[text-shadow:0_1px_0_var(--color-neutral-950)] border-neutral-950 from-neutral-950/70 to-neutral-950/95 text-white inset-shadow-2xs inset-shadow-white/25 border text-sm shadow-md shadow-neutral-950/30 ring-0 transition-[filter] duration-200 hover:brightness-125 active:brightness-95 dark:bg-white dark:text-neutral-50 dark:shadow-none dark:border-0",
|
||||
destructive:
|
||||
"bg-red-500 text-neutral-50 shadow-sm hover:bg-red-500/90 dark:bg-red-900 dark:text-neutral-50 dark:hover:bg-red-900/90",
|
||||
outline:
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { Collapsible as CollapsiblePrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
...restProps
|
||||
}: CollapsiblePrimitive.ContentProps = $props();
|
||||
</script>
|
||||
|
||||
<CollapsiblePrimitive.Content
|
||||
bind:ref
|
||||
data-slot="collapsible-content"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { Collapsible as CollapsiblePrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
...restProps
|
||||
}: CollapsiblePrimitive.TriggerProps = $props();
|
||||
</script>
|
||||
|
||||
<CollapsiblePrimitive.Trigger
|
||||
bind:ref
|
||||
data-slot="collapsible-trigger"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Collapsible as CollapsiblePrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
open = $bindable(false),
|
||||
...restProps
|
||||
}: CollapsiblePrimitive.RootProps = $props();
|
||||
</script>
|
||||
|
||||
<CollapsiblePrimitive.Root
|
||||
bind:ref
|
||||
bind:open
|
||||
data-slot="collapsible"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,13 @@
|
||||
import Root from "./collapsible.svelte";
|
||||
import Trigger from "./collapsible-trigger.svelte";
|
||||
import Content from "./collapsible-content.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Content,
|
||||
Trigger,
|
||||
//
|
||||
Root as Collapsible,
|
||||
Content as CollapsibleContent,
|
||||
Trigger as CollapsibleTrigger,
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
<script lang="ts">
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
portalProps,
|
||||
class: className,
|
||||
...restProps
|
||||
}: ContextMenuPrimitive.ContentProps & {
|
||||
portalProps?: ContextMenuPrimitive.PortalProps;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<ContextMenuPrimitive.Portal {...portalProps}>
|
||||
<ContextMenuPrimitive.Content
|
||||
bind:ref
|
||||
data-slot="context-menu-content"
|
||||
class={cn(
|
||||
"z-50 max-h-(--bits-context-menu-content-available-height) min-w-[8rem] origin-(--bits-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-neutral-200 bg-white p-1 text-neutral-950 shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
</ContextMenuPrimitive.Portal>
|
||||
@@ -0,0 +1,12 @@
|
||||
<script lang="ts">
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
|
||||
let { ref = $bindable(null), ...restProps }: ContextMenuPrimitive.GroupProps =
|
||||
$props();
|
||||
</script>
|
||||
|
||||
<ContextMenuPrimitive.Group
|
||||
bind:ref
|
||||
data-slot="context-menu-group"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
inset,
|
||||
variant = "default",
|
||||
...restProps
|
||||
}: ContextMenuPrimitive.ItemProps & {
|
||||
inset?: boolean;
|
||||
variant?: "default" | "destructive";
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<ContextMenuPrimitive.Item
|
||||
bind:ref
|
||||
data-slot="context-menu-item"
|
||||
data-inset={inset}
|
||||
data-variant={variant}
|
||||
class={cn(
|
||||
"relative flex cursor-default items-center gap-2.5 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-neutral-200 data-highlighted:text-neutral-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-neutral-700 data-[variant=destructive]:data-highlighted:bg-neutral-100 data-[variant=destructive]:data-highlighted:text-neutral-700 dark:data-highlighted:bg-neutral-800 dark:data-highlighted:text-neutral-50 dark:data-[variant=destructive]:data-highlighted:bg-neutral-700 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-neutral-500 dark:[&_svg:not([class*='text-'])]:text-neutral-400 data-[variant=destructive]:*:[svg]:text-neutral-700",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,28 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import type { WithElementRef } from "@/types/components";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
inset,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||
inset?: boolean;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="context-menu-label"
|
||||
data-inset={inset}
|
||||
class={cn(
|
||||
"px-2 py-1.5 text-sm font-medium text-neutral-900 data-[inset]:pl-8 dark:text-neutral-100",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: ContextMenuPrimitive.SeparatorProps = $props();
|
||||
</script>
|
||||
|
||||
<ContextMenuPrimitive.Separator
|
||||
bind:ref
|
||||
data-slot="context-menu-separator"
|
||||
class={cn("-mx-1 my-1 h-px bg-neutral-200 dark:bg-neutral-800", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,24 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import type { WithElementRef } from "bits-ui";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
bind:this={ref}
|
||||
data-slot="context-menu-shortcut"
|
||||
class={cn(
|
||||
"ml-auto text-xs tracking-widest text-neutral-400 dark:text-neutral-600",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</span>
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
...restProps
|
||||
}: ContextMenuPrimitive.TriggerProps = $props();
|
||||
</script>
|
||||
|
||||
<ContextMenuPrimitive.Trigger
|
||||
bind:ref
|
||||
data-slot="context-menu-trigger"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,34 @@
|
||||
import { ContextMenu as ContextMenuPrimitive } from "bits-ui";
|
||||
|
||||
import Trigger from "./context-menu-trigger.svelte";
|
||||
import Group from "./context-menu-group.svelte";
|
||||
import Item from "./context-menu-item.svelte";
|
||||
import Content from "./context-menu-content.svelte";
|
||||
import Shortcut from "./context-menu-shortcut.svelte";
|
||||
import Separator from "./context-menu-separator.svelte";
|
||||
import Label from "./context-menu-label.svelte";
|
||||
|
||||
const Sub = ContextMenuPrimitive.Sub;
|
||||
const Root = ContextMenuPrimitive.Root;
|
||||
|
||||
export {
|
||||
Sub,
|
||||
Root,
|
||||
Item,
|
||||
Label,
|
||||
Group,
|
||||
Trigger,
|
||||
Content,
|
||||
Shortcut,
|
||||
Separator,
|
||||
//
|
||||
Root as ContextMenu,
|
||||
Sub as ContextMenuSub,
|
||||
Item as ContextMenuItem,
|
||||
Group as ContextMenuGroup,
|
||||
Content as ContextMenuContent,
|
||||
Trigger as ContextMenuTrigger,
|
||||
Shortcut as ContextMenuShortcut,
|
||||
Separator as ContextMenuSeparator,
|
||||
Label as ContextMenuLabel,
|
||||
};
|
||||
@@ -27,7 +27,8 @@
|
||||
bind:ref
|
||||
data-slot="dialog-content"
|
||||
class={cn(
|
||||
"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-2 rounded-lg border border-neutral-200 bg-white p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg dark:border-neutral-800 dark:bg-neutral-900",
|
||||
"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-2 rounded-lg p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-2xl",
|
||||
"border border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-900",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
@@ -35,7 +36,11 @@
|
||||
{@render children?.()}
|
||||
{#if showCloseButton}
|
||||
<DialogPrimitive.Close
|
||||
class="absolute top-4 right-4 rounded-xs opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:ring-2 focus:ring-neutral-900 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-500 dark:ring-offset-neutral-900 dark:focus:ring-neutral-300 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-400 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
|
||||
title="Close"
|
||||
class={cn(
|
||||
"absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
||||
"ring-offset-white focus:ring-neutral-400 focus:ring-offset-2 data-[state=open]:bg-white data-[state=open]:text-neutral-500 dark:ring-offset-neutral-300 dark:focus:ring-neutral-700 dark:data-[state=open]:bg-neutral-900 dark:data-[state=open]:text-neutral-400",
|
||||
)}
|
||||
>
|
||||
<XIcon />
|
||||
<span class="sr-only">Close</span>
|
||||
|
||||
@@ -12,6 +12,6 @@
|
||||
<DialogPrimitive.Title
|
||||
bind:ref
|
||||
data-slot="dialog-title"
|
||||
class={cn("text-lg leading-none font-semibold", className)}
|
||||
class={cn("text-xl leading-none font-semibold", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
sideOffset = 4,
|
||||
portalProps,
|
||||
class: className,
|
||||
...restProps
|
||||
}: DropdownMenuPrimitive.ContentProps & {
|
||||
portalProps?: DropdownMenuPrimitive.PortalProps;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Portal {...portalProps}>
|
||||
<DropdownMenuPrimitive.Content
|
||||
bind:ref
|
||||
data-slot="dropdown-menu-content"
|
||||
{sideOffset}
|
||||
class={cn(
|
||||
"z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-neutral-200 bg-neutral-50 p-1 text-neutral-950 shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
</DropdownMenuPrimitive.Portal>
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
...restProps
|
||||
}: DropdownMenuPrimitive.GroupProps = $props();
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Group
|
||||
bind:ref
|
||||
data-slot="dropdown-menu-group"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
inset,
|
||||
variant = "default",
|
||||
...restProps
|
||||
}: DropdownMenuPrimitive.ItemProps & {
|
||||
inset?: boolean;
|
||||
variant?: "default" | "destructive";
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Item
|
||||
bind:ref
|
||||
data-slot="dropdown-menu-item"
|
||||
data-inset={inset}
|
||||
data-variant={variant}
|
||||
class={cn(
|
||||
"data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/10 dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 data-[variant=destructive]:data-highlighted:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-neutral-200 data-highlighted:text-neutral-950 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 dark:data-highlighted:bg-neutral-800 dark:data-highlighted:text-neutral-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,25 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import type { WithElementRef } from "@/types/components";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
inset,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||
inset?: boolean;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="dropdown-menu-label"
|
||||
data-inset={inset}
|
||||
class={cn("px-2 py-1.5 text-sm font-semibold data-[inset]:pl-8", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: DropdownMenuPrimitive.SeparatorProps = $props();
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Separator
|
||||
bind:ref
|
||||
data-slot="dropdown-menu-separator"
|
||||
class={cn("-mx-1 my-1 h-px bg-neutral-200 dark:bg-neutral-800", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,24 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import type { WithElementRef } from "@/types/components";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
bind:this={ref}
|
||||
data-slot="dropdown-menu-shortcut"
|
||||
class={cn(
|
||||
"ml-auto text-xs tracking-widest text-neutral-700 dark:text-neutral-300",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</span>
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
...restProps
|
||||
}: DropdownMenuPrimitive.TriggerProps = $props();
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Trigger
|
||||
bind:ref
|
||||
data-slot="dropdown-menu-trigger"
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,33 @@
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
import Item from "./dropdown-menu-item.svelte";
|
||||
import Label from "./dropdown-menu-label.svelte";
|
||||
import Group from "./dropdown-menu-group.svelte";
|
||||
import Trigger from "./dropdown-menu-trigger.svelte";
|
||||
import Content from "./dropdown-menu-content.svelte";
|
||||
import Shortcut from "./dropdown-menu-shortcut.svelte";
|
||||
import Separator from "./dropdown-menu-separator.svelte";
|
||||
|
||||
const Sub = DropdownMenuPrimitive.Sub;
|
||||
const Root = DropdownMenuPrimitive.Root;
|
||||
|
||||
export {
|
||||
Content,
|
||||
Root as DropdownMenu,
|
||||
Content as DropdownMenuContent,
|
||||
Group as DropdownMenuGroup,
|
||||
Item as DropdownMenuItem,
|
||||
Separator as DropdownMenuSeparator,
|
||||
Shortcut as DropdownMenuShortcut,
|
||||
Label as DropdownMenuLabel,
|
||||
Sub as DropdownMenuSub,
|
||||
Trigger as DropdownMenuTrigger,
|
||||
Group,
|
||||
Item,
|
||||
Root,
|
||||
Separator,
|
||||
Shortcut,
|
||||
Sub,
|
||||
Trigger,
|
||||
Label,
|
||||
};
|
||||
@@ -21,7 +21,7 @@
|
||||
{sideOffset}
|
||||
{align}
|
||||
class={cn(
|
||||
"z-50 w-fit max-w-[480px] origin-(--bits-popover-content-transform-origin) rounded-md border border-neutral-200 bg-white p-4 text-neutral-900 shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50",
|
||||
"z-50 w-auto max-w-96 origin-(--bits-popover-content-transform-origin) rounded-md border border-neutral-200 bg-white p-4 text-neutral-900 shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 md:max-w-[480px] dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import Root from "./scroll-area.svelte";
|
||||
import Mask from "./scroll-area-mask.svelte";
|
||||
import Scrollbar from "./scroll-area-scrollbar.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Scrollbar,
|
||||
Mask,
|
||||
Root as ScrollArea,
|
||||
Scrollbar as ScrollAreaScrollbar,
|
||||
Mask as ScrollAreaMask,
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
type Mask = {
|
||||
top: boolean;
|
||||
bottom: boolean;
|
||||
left: boolean;
|
||||
right: boolean;
|
||||
};
|
||||
|
||||
let {
|
||||
showMask,
|
||||
maskHeight,
|
||||
class: className = "",
|
||||
}: {
|
||||
showMask: Mask;
|
||||
maskHeight: number;
|
||||
class?: string;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
aria-hidden="true"
|
||||
style={`--top-fade-height: ${showMask.top ? `${maskHeight}px` : "0px"}; --bottom-fade-height: ${showMask.bottom ? `${maskHeight}px` : "0px"};`}
|
||||
class={cn(
|
||||
"pointer-events-none absolute inset-0 z-10",
|
||||
"before:absolute before:inset-x-0 before:top-0 before:transition-[height,opacity] before:duration-300 before:content-['']",
|
||||
"after:absolute after:inset-x-0 after:bottom-0 after:transition-[height,opacity] after:duration-300 after:content-['']",
|
||||
"before:h-(--top-fade-height) after:h-(--bottom-fade-height)",
|
||||
showMask.top ? "before:opacity-100" : "before:opacity-0",
|
||||
showMask.bottom ? "after:opacity-100" : "after:opacity-0",
|
||||
"before:from-background before:bg-gradient-to-b before:to-transparent",
|
||||
"after:from-background after:bg-gradient-to-t after:to-transparent",
|
||||
className,
|
||||
)}
|
||||
></div>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
style={`--left-fade-width: ${showMask.left ? `${maskHeight}px` : "0px"}; --right-fade-width: ${showMask.right ? `${maskHeight}px` : "0px"};`}
|
||||
class={cn(
|
||||
"pointer-events-none absolute inset-0 z-10",
|
||||
"before:absolute before:inset-y-0 before:left-0 before:transition-[width,opacity] before:duration-300 before:content-['']",
|
||||
"after:absolute after:inset-y-0 after:right-0 after:transition-[width,opacity] after:duration-300 after:content-['']",
|
||||
"before:w-(--left-fade-width) after:w-(--right-fade-width)",
|
||||
showMask.left ? "before:opacity-100" : "before:opacity-0",
|
||||
showMask.right ? "after:opacity-100" : "after:opacity-0",
|
||||
"before:from-background before:bg-gradient-to-r before:to-transparent",
|
||||
"after:from-background after:bg-gradient-to-l after:to-transparent",
|
||||
className,
|
||||
)}
|
||||
></div>
|
||||
@@ -0,0 +1,46 @@
|
||||
<script lang="ts">
|
||||
import type { WithoutChild } from "@/types/components";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { ScrollArea as ScrollAreaPrimitive } from "bits-ui";
|
||||
import { useHasPrimaryTouch } from "@/hooks/use-has-primary-touch";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
orientation = "vertical",
|
||||
children,
|
||||
thumbClassName,
|
||||
...restProps
|
||||
}: WithoutChild<ScrollAreaPrimitive.ScrollbarProps> & {
|
||||
thumbClassName?: string;
|
||||
} = $props();
|
||||
|
||||
const hasPrimaryTouch = useHasPrimaryTouch();
|
||||
</script>
|
||||
|
||||
{#if !$hasPrimaryTouch}
|
||||
<ScrollAreaPrimitive.Scrollbar
|
||||
bind:ref
|
||||
data-slot="scroll-area-scrollbar"
|
||||
{orientation}
|
||||
class={cn(
|
||||
"flex touch-none p-px transition-[colors] duration-150 select-none hover:bg-neutral-200 data-[state=hidden]:animate-out data-[state=hidden]:fade-out-0 data-[state=visible]:animate-in data-[state=visible]:fade-in-0 dark:hover:bg-neutral-900",
|
||||
orientation === "vertical" &&
|
||||
"h-full w-2.5 border-l border-l-transparent",
|
||||
orientation === "horizontal" &&
|
||||
"h-2.5 flex-col border-t border-t-transparent px-1 pr-1.25",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
<ScrollAreaPrimitive.Thumb
|
||||
data-slot="scroll-area-thumb"
|
||||
class={cn(
|
||||
"relative my-0.5 flex-1 rounded-full bg-neutral-300 transition-colors ease-out hover:bg-neutral-500/50 active:bg-neutral-500/75 dark:bg-neutral-800 dark:hover:bg-neutral-700 dark:active:bg-neutral-600",
|
||||
thumbClassName,
|
||||
)}
|
||||
/>
|
||||
</ScrollAreaPrimitive.Scrollbar>
|
||||
{/if}
|
||||
@@ -0,0 +1,144 @@
|
||||
<script lang="ts">
|
||||
import type { WithoutChild } from "@/types/components";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { useHasPrimaryTouch } from "@/hooks/use-has-primary-touch";
|
||||
|
||||
import { Scrollbar } from "./index.js";
|
||||
import ScrollAreaMask from "./scroll-area-mask.svelte";
|
||||
import { ScrollArea as ScrollAreaPrimitive } from "bits-ui";
|
||||
|
||||
type Mask = {
|
||||
top: boolean;
|
||||
bottom: boolean;
|
||||
left: boolean;
|
||||
right: boolean;
|
||||
};
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
orientation = "vertical",
|
||||
scrollbarXClasses = "",
|
||||
scrollbarYClasses = "",
|
||||
children,
|
||||
scrollHideDelay = 0,
|
||||
maskHeight = 30,
|
||||
maskClassName = "",
|
||||
viewportClassName = "",
|
||||
...restProps
|
||||
}: WithoutChild<ScrollAreaPrimitive.RootProps> & {
|
||||
orientation?: "vertical" | "horizontal" | "both" | undefined;
|
||||
scrollbarXClasses?: string | undefined;
|
||||
scrollbarYClasses?: string | undefined;
|
||||
maskHeight?: number;
|
||||
maskClassName?: string;
|
||||
viewportClassName?: string;
|
||||
} = $props();
|
||||
|
||||
let viewportRef: HTMLDivElement | null = $state(null);
|
||||
const showMask = $state<Mask>({
|
||||
top: true,
|
||||
bottom: true,
|
||||
left: true,
|
||||
right: true,
|
||||
});
|
||||
|
||||
const hasPrimaryTouchStore = useHasPrimaryTouch();
|
||||
|
||||
const checkScrollability = () => {
|
||||
const element = viewportRef;
|
||||
if (!element) {
|
||||
return;
|
||||
}
|
||||
|
||||
const {
|
||||
scrollTop,
|
||||
scrollLeft,
|
||||
scrollWidth,
|
||||
clientWidth,
|
||||
scrollHeight,
|
||||
clientHeight,
|
||||
} = element;
|
||||
|
||||
showMask.top = scrollTop > 0;
|
||||
showMask.bottom = scrollTop + clientHeight < scrollHeight - 1;
|
||||
showMask.left = scrollLeft > 0;
|
||||
showMask.right = scrollLeft + clientWidth < scrollWidth - 1;
|
||||
};
|
||||
|
||||
$effect(() => {
|
||||
const element = viewportRef;
|
||||
if (!element) {
|
||||
return;
|
||||
}
|
||||
|
||||
const controller = new AbortController();
|
||||
const { signal } = controller;
|
||||
|
||||
const resizeObserver = new ResizeObserver(checkScrollability);
|
||||
resizeObserver.observe(element);
|
||||
|
||||
element.addEventListener("scroll", checkScrollability, { signal });
|
||||
window.addEventListener("resize", checkScrollability, { signal });
|
||||
|
||||
checkScrollability();
|
||||
|
||||
return () => {
|
||||
controller.abort();
|
||||
resizeObserver.disconnect();
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
{#if $hasPrimaryTouchStore}
|
||||
<div
|
||||
bind:this={ref}
|
||||
role="group"
|
||||
data-slot="scroll-area"
|
||||
aria-roledescription="scroll area"
|
||||
class={cn("relative overflow-hidden", className)}
|
||||
{...restProps}
|
||||
>
|
||||
<div
|
||||
bind:this={viewportRef}
|
||||
data-slot="scroll-area-viewport"
|
||||
class={cn("size-full overflow-auto rounded-[inherit]", viewportClassName)}
|
||||
tabIndex={0}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
|
||||
{#if maskHeight > 0}
|
||||
<ScrollAreaMask {showMask} class={maskClassName} {maskHeight} />{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<ScrollAreaPrimitive.Root
|
||||
bind:ref
|
||||
{scrollHideDelay}
|
||||
data-slot="scroll-area"
|
||||
class={cn("relative", className)}
|
||||
{...restProps}
|
||||
>
|
||||
<ScrollAreaPrimitive.Viewport
|
||||
bind:ref={viewportRef}
|
||||
data-slot="scroll-area-viewport"
|
||||
class={cn("focus-ring size-full rounded-[inherit]", viewportClassName)}
|
||||
>
|
||||
{@render children?.()}
|
||||
</ScrollAreaPrimitive.Viewport>
|
||||
|
||||
{#if maskHeight > 0}
|
||||
<ScrollAreaMask {maskHeight} class={maskClassName} {showMask} />
|
||||
{/if}
|
||||
|
||||
{#if orientation === "vertical" || orientation === "both"}
|
||||
<Scrollbar orientation="vertical" class={scrollbarYClasses} />
|
||||
{/if}
|
||||
|
||||
{#if orientation === "horizontal" || orientation === "both"}
|
||||
<Scrollbar orientation="horizontal" class={scrollbarXClasses} />
|
||||
{/if}
|
||||
<ScrollAreaPrimitive.Corner />
|
||||
</ScrollAreaPrimitive.Root>
|
||||
{/if}
|
||||
@@ -1,7 +1,7 @@
|
||||
import Root from "./separator.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
//
|
||||
Root as Separator,
|
||||
Root,
|
||||
//
|
||||
Root as Separator,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
import Trigger from "./sheet-trigger.svelte";
|
||||
import Close from "./sheet-close.svelte";
|
||||
import Overlay from "./sheet-overlay.svelte";
|
||||
import Content from "./sheet-content.svelte";
|
||||
import Header from "./sheet-header.svelte";
|
||||
import Footer from "./sheet-footer.svelte";
|
||||
import Title from "./sheet-title.svelte";
|
||||
import Description from "./sheet-description.svelte";
|
||||
|
||||
const Root = SheetPrimitive.Root;
|
||||
const Portal = SheetPrimitive.Portal;
|
||||
|
||||
export {
|
||||
Root,
|
||||
Close,
|
||||
Trigger,
|
||||
Portal,
|
||||
Overlay,
|
||||
Content,
|
||||
Header,
|
||||
Footer,
|
||||
Title,
|
||||
Description,
|
||||
//
|
||||
Root as Sheet,
|
||||
Close as SheetClose,
|
||||
Trigger as SheetTrigger,
|
||||
Portal as SheetPortal,
|
||||
Overlay as SheetOverlay,
|
||||
Content as SheetContent,
|
||||
Header as SheetHeader,
|
||||
Footer as SheetFooter,
|
||||
Title as SheetTitle,
|
||||
Description as SheetDescription,
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
|
||||
let { ref = $bindable(null), ...restProps }: SheetPrimitive.CloseProps =
|
||||
$props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Close bind:ref data-slot="sheet-close" {...restProps} />
|
||||
@@ -0,0 +1,45 @@
|
||||
<script lang="ts">
|
||||
import type { Snippet } from "svelte";
|
||||
import type { WithoutChildrenOrChild } from "@/types/components";
|
||||
|
||||
import SheetOverlay from "./sheet-overlay.svelte";
|
||||
import { sheetVariants, type Side } from "./sheet.variants";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
import XIcon from "@lucide/svelte/icons/x";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
side = "right",
|
||||
portalProps,
|
||||
children,
|
||||
...restProps
|
||||
}: WithoutChildrenOrChild<SheetPrimitive.ContentProps> & {
|
||||
portalProps?: SheetPrimitive.PortalProps;
|
||||
side?: Side;
|
||||
children: Snippet;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Portal {...portalProps}>
|
||||
<SheetOverlay />
|
||||
<SheetPrimitive.Content
|
||||
bind:ref
|
||||
data-slot="sheet-content"
|
||||
class={cn(sheetVariants({ side }), className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
<SheetPrimitive.Close
|
||||
class={cn(
|
||||
"ring-offset-neutral-300 focus-visible:ring-neutral-300 dark:ring-offset-neutral-700 dark:focus-visible:ring-neutral-700",
|
||||
"absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none",
|
||||
)}
|
||||
>
|
||||
<XIcon class="size-4" />
|
||||
<span class="sr-only">Close</span>
|
||||
</SheetPrimitive.Close>
|
||||
</SheetPrimitive.Content>
|
||||
</SheetPrimitive.Portal>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: SheetPrimitive.DescriptionProps = $props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Description
|
||||
bind:ref
|
||||
data-slot="sheet-description"
|
||||
class={cn("text-sm text-neutral-700 dark:text-neutral-300", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,21 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import type { WithElementRef } from "@/types/components";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="sheet-footer"
|
||||
class={cn("mt-auto flex flex-col gap-2 p-4", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import type { WithElementRef } from "@/types/components";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="sheet-header"
|
||||
class={cn("flex flex-col gap-1.5 p-4", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: SheetPrimitive.OverlayProps = $props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Overlay
|
||||
bind:ref
|
||||
data-slot="sheet-overlay"
|
||||
class={cn(
|
||||
"fixed inset-0 z-50 bg-neutral-200/50 backdrop-blur-[4px] data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0 dark:bg-neutral-900/50",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
import { cn } from "@/utils/cn";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: SheetPrimitive.TitleProps = $props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Title
|
||||
bind:ref
|
||||
data-slot="sheet-title"
|
||||
class={cn("font-semibold text-neutral-950 dark:text-neutral-50", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
||||
|
||||
let { ref = $bindable(null), ...restProps }: SheetPrimitive.TriggerProps =
|
||||
$props();
|
||||
</script>
|
||||
|
||||
<SheetPrimitive.Trigger bind:ref data-slot="sheet-trigger" {...restProps} />
|
||||
@@ -0,0 +1,22 @@
|
||||
import { tv, type VariantProps } from "tailwind-variants";
|
||||
|
||||
const sheetVariants = tv({
|
||||
base: "bg-white dark:bg-neutral-900 border-neutral-200 dark:border-neutral-800 data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
|
||||
variants: {
|
||||
side: {
|
||||
top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
|
||||
bottom:
|
||||
"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
|
||||
left: "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
|
||||
right:
|
||||
"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
side: "left",
|
||||
},
|
||||
});
|
||||
|
||||
type Side = VariantProps<typeof sheetVariants>["side"];
|
||||
|
||||
export { sheetVariants, type Side };
|
||||
@@ -3,6 +3,8 @@
|
||||
Toaster as Sonner,
|
||||
type ToasterProps as SonnerProps,
|
||||
} from "svelte-sonner";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { mode } from "mode-watcher";
|
||||
|
||||
let { ...restProps }: SonnerProps = $props();
|
||||
@@ -10,12 +12,19 @@
|
||||
|
||||
<Sonner
|
||||
theme={mode.current}
|
||||
class="toaster group"
|
||||
position="bottom-center"
|
||||
toastOptions={{
|
||||
unstyled: true,
|
||||
classes: {
|
||||
toast:
|
||||
"group toast dark:group-[.toaster]:bg-neutral-900 group-[.toaster]:font-sans",
|
||||
description: "group-[.toast]:text-xs font-mono",
|
||||
toast: cn(
|
||||
"w-full max-w-md",
|
||||
"flex items-center gap-3 p-4 rounded-lg shadow-md font-sans",
|
||||
"bg-neutral-50 dark:bg-neutral-900",
|
||||
"border border-neutral-200 dark:border-neutral-800",
|
||||
"text-neutral-900 dark:text-neutral-100",
|
||||
),
|
||||
title: "font-medium",
|
||||
description: "text-sm text-pretty text-neutral-600 dark:text-neutral-400",
|
||||
},
|
||||
}}
|
||||
{...restProps}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import Root from "./switch.svelte";
|
||||
|
||||
export { Root, Root as Switch };
|
||||
@@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import type { WithoutChildrenOrChild } from "@/types/components";
|
||||
|
||||
import { cn } from "@/utils/cn";
|
||||
import { Switch as SwitchPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
checked = $bindable(false),
|
||||
...restProps
|
||||
}: WithoutChildrenOrChild<SwitchPrimitive.RootProps> = $props();
|
||||
</script>
|
||||
|
||||
<SwitchPrimitive.Root
|
||||
bind:ref
|
||||
bind:checked
|
||||
data-slot="switch"
|
||||
class={cn(
|
||||
"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-neutral-500 focus-visible:ring-[3px] focus-visible:ring-neutral-300/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral-900 data-[state=unchecked]:bg-neutral-200 dark:focus-visible:ring-neutral-500/50 dark:data-[state=checked]:bg-neutral-100 dark:data-[state=unchecked]:bg-neutral-700",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
<SwitchPrimitive.Thumb
|
||||
data-slot="switch-thumb"
|
||||
class={cn(
|
||||
"pointer-events-none block size-4 rounded-full bg-white ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0 dark:bg-neutral-900 dark:data-[state=checked]:bg-neutral-900",
|
||||
)}
|
||||
/>
|
||||
</SwitchPrimitive.Root>
|
||||
@@ -13,7 +13,7 @@
|
||||
bind:ref
|
||||
data-slot="tabs-list"
|
||||
class={cn(
|
||||
"inline-flex h-9 items-center justify-center rounded-md border border-neutral-200 bg-white p-1 text-neutral-500 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-400",
|
||||
"inline-flex h-9 items-center justify-center rounded-md border border-neutral-200 bg-white text-neutral-500 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-400",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
bind:ref
|
||||
data-slot="tabs-trigger"
|
||||
class={cn(
|
||||
"inline-flex cursor-pointer items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap ring-offset-white transition-all hover:text-black focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-neutral-200 data-[state=active]:text-neutral-950 data-[state=active]:shadow dark:ring-offset-neutral-950 dark:hover:text-white dark:focus-visible:ring-neutral-300 dark:data-[state=active]:bg-neutral-800 dark:data-[state=active]:text-neutral-50",
|
||||
"inline-flex cursor-pointer items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap ring-offset-white transition-all hover:bg-neutral-200 hover:text-black focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-neutral-200 data-[state=active]:text-neutral-950 data-[state=active]:shadow dark:ring-offset-neutral-950 dark:hover:bg-neutral-800 dark:hover:text-white dark:focus-visible:ring-neutral-300 dark:data-[state=active]:bg-neutral-800 dark:data-[state=active]:text-neutral-50",
|
||||
className,
|
||||
)}
|
||||
{...restProps}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<script lang="ts">
|
||||
import { onNavigate } from "$app/navigation";
|
||||
onNavigate((navigation) => {
|
||||
if (!document.startViewTransition) return;
|
||||
return new Promise((resolve) => {
|
||||
document.startViewTransition(async () => {
|
||||
resolve();
|
||||
await navigation.complete;
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,41 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "@/utils/cn";
|
||||
import Button from "@/components/ui/button/button.svelte";
|
||||
import CheckIcon from "@lucide/svelte/icons/check";
|
||||
import AlertTriangleIcon from "@lucide/svelte/icons/alert-triangle";
|
||||
|
||||
import { warningStore, acceptWarning } from "@/stores/warning.store";
|
||||
</script>
|
||||
|
||||
{#if !$warningStore}
|
||||
<div
|
||||
class={cn(
|
||||
"flex w-full flex-col items-center justify-between space-y-2 px-3 py-4 text-sm md:flex-row md:space-y-0 md:space-x-2 md:py-2",
|
||||
"bg-white dark:bg-neutral-900",
|
||||
"border-b border-neutral-200 dark:border-neutral-800",
|
||||
)}
|
||||
>
|
||||
<div class="flex flex-col items-center gap-2 md:flex-row">
|
||||
<AlertTriangleIcon
|
||||
size={18}
|
||||
strokeWidth={2}
|
||||
class="flex-shrink-0 animate-pulse text-yellow-600 dark:text-yellow-500"
|
||||
/>
|
||||
<p>
|
||||
Each SVG includes a link to its respective product. Permission must be
|
||||
obtained before using a logo. For removal requests,
|
||||
<a
|
||||
href="https://github.com/pheralb/svgl/issues/new"
|
||||
target="_blank"
|
||||
class="underline decoration-neutral-500 underline-offset-4"
|
||||
>
|
||||
please open an issue on GitHub
|
||||
</a>.
|
||||
</p>
|
||||
</div>
|
||||
<Button size="sm" onclick={acceptWarning}>
|
||||
<CheckIcon size={14} strokeWidth={2} />
|
||||
<span>Accept</span>
|
||||
</Button>
|
||||
</div>
|
||||
{/if}
|
||||
+103
-47
@@ -2,14 +2,70 @@ import type { Extension } from "@/types/extensions";
|
||||
|
||||
export const extensions: Extension[] = [
|
||||
{
|
||||
name: "SVGL for Raycast",
|
||||
description: "Search SVG logos via svgl using Raycast.",
|
||||
url: "https://www.raycast.com/1weiho/svgl",
|
||||
name: "SVGL CLI",
|
||||
description: "A CLI for easily adding SVG icons to your project.",
|
||||
url: "https://github.com/sujjeee/svgls",
|
||||
image:
|
||||
"https://github.com/pheralb/svgl/raw/main/static/library/raycast.svg",
|
||||
"https://raw.githubusercontent.com/pheralb/svgl/refs/heads/main/static/images/svgl_svg.svg",
|
||||
created_by: {
|
||||
name: "1weiho",
|
||||
socialUrl: "https://x.com/1weiho",
|
||||
name: "sujjeee",
|
||||
socialUrl: "https://x.com/sujjeeee",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for React",
|
||||
description:
|
||||
"An open-source NPM package that offers a SVGL Logos for React.",
|
||||
url: "https://github.com/ridemountainpig/svgl-react",
|
||||
image:
|
||||
"https://raw.githubusercontent.com/pheralb/svgl/refs/heads/main/static/library/react_light.svg",
|
||||
created_by: {
|
||||
name: "ridemountainpig",
|
||||
socialUrl: "https://x.com/ridemountainpig",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Framer",
|
||||
description:
|
||||
"Import colorful SVG logos, fast and easy using our plugin for Framer.",
|
||||
url: "https://www.framer.com/marketplace/plugins/svgl/",
|
||||
image:
|
||||
"https://raw.githubusercontent.com/pheralb/svgl/refs/heads/main/static/library/framer.svg",
|
||||
created_by: {
|
||||
name: "Krishna Singh",
|
||||
socialUrl: "https://x.com/krishnasinghdev",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Vue",
|
||||
description: "An open-source NPM package that offers a SVGL Logos for Vue.",
|
||||
url: "https://github.com/selemondev/svgl-vue",
|
||||
image:
|
||||
"https://raw.githubusercontent.com/pheralb/svgl/refs/heads/main/static/library/vue.svg",
|
||||
created_by: {
|
||||
name: "selemondev",
|
||||
socialUrl: "https://x.com/selemondev",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Svelte",
|
||||
description:
|
||||
"An open-source NPM package that offers a SVGL Logos for Svelte.",
|
||||
url: "https://github.com/selemondev/svgl-svelte",
|
||||
image: "https://github.com/pheralb/svgl/raw/main/static/library/svelte.svg",
|
||||
created_by: {
|
||||
name: "selemondev",
|
||||
socialUrl: "https://x.com/selemondev",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Figma",
|
||||
description: "Add svgs from svgl to your Figma project.",
|
||||
url: "https://www.figma.com/community/plugin/1320306989350693206/svgl",
|
||||
image: "https://github.com/pheralb/svgl/raw/main/static/library/figma.svg",
|
||||
created_by: {
|
||||
name: "quilljou",
|
||||
socialUrl: "https://x.com/quillzhou",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -20,72 +76,72 @@ export const extensions: Extension[] = [
|
||||
"https://github.com/pheralb/svgl/raw/main/static/library/powertoys.svg",
|
||||
created_by: {
|
||||
name: "SameerJS6",
|
||||
socialUrl: "https://svgl.sameerjs.com/",
|
||||
socialUrl: "https://x.com/Sameerjs6",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for React",
|
||||
description:
|
||||
"An open-source NPM package that offers a collection of high-quality SVGL logos for React.",
|
||||
url: "https://github.com/ridemountainpig/svgl-react?tab=readme-ov-file",
|
||||
name: "SVGL for Raycast",
|
||||
description: "Search SVG logos via svgl.",
|
||||
url: "https://www.raycast.com/1weiho/svgl",
|
||||
image:
|
||||
"https://raw.githubusercontent.com/pheralb/svgl/0d4514c9521688e76c6a1b426f3054a424d96aa5/static/library/react_dark.svg",
|
||||
"https://github.com/pheralb/svgl/raw/main/static/library/raycast.svg",
|
||||
created_by: {
|
||||
name: "ridemountainpig",
|
||||
socialUrl: "https://twitter.com/ridemountainpig",
|
||||
name: "1weiho",
|
||||
socialUrl: "https://x.com/1weiho",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL Badges",
|
||||
description: "A beautiful badges with svgl SVG logos.",
|
||||
name: "SVGL for Visual Studio Code",
|
||||
description: "SVGL directly in your VSCode.",
|
||||
url: "https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl",
|
||||
image: "https://github.com/pheralb/svgl/raw/main/static/library/vscode.svg",
|
||||
created_by: {
|
||||
name: "girlazote",
|
||||
socialUrl: "https://x.com/girlazote",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL Badge",
|
||||
description: "A beautiful badges with SVGL SVGs logos.",
|
||||
url: "https://svgl-badge.vercel.app/",
|
||||
image:
|
||||
"https://camo.githubusercontent.com/b516f0f725ad1827dd854f16ec08626569d02ab827cd06b4f42163e519b813c7/68747470733a2f2f7376676c2d62616467652e76657263656c2e6170702f6170692f4c6962726172792f5376676c3f7468656d653d6c69676874",
|
||||
created_by: {
|
||||
name: "ridemountainpig",
|
||||
socialUrl: "https://twitter.com/ridemountainpig",
|
||||
socialUrl: "https://x.com/ridemountainpig",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Magic",
|
||||
description: "AI extension for Cursor & other IDEs.",
|
||||
name: "SVGL on Magic by 21st",
|
||||
description: "Integrate company logos and icons via SVGL on Magic.",
|
||||
url: "https://21st.dev/magic",
|
||||
image:
|
||||
"https://github.com/serafimcloud/21st/blob/main/apps/web/public/icon.png?raw=true",
|
||||
"https://github.com/serafimcloud/21st/raw/main/apps/web/public/icon.png?raw=true",
|
||||
created_by: {
|
||||
name: "serafim",
|
||||
name: "serafimcloud",
|
||||
socialUrl: "https://x.com/serafimcloud",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "svgls",
|
||||
description: "A CLI for easily adding SVG icons to your project.",
|
||||
url: "https://github.com/sujjeee/svgls",
|
||||
image: "https://github.com/pheralb/svgl/raw/main/static/library/svgl.svg",
|
||||
created_by: {
|
||||
name: "Sujjeee",
|
||||
socialUrl: "https://twitter.com/sujjeeee",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Figma",
|
||||
description: "Add svgs from svgl to your Figma project.",
|
||||
url: "https://www.figma.com/community/plugin/1320306989350693206/svgl",
|
||||
image: "https://github.com/pheralb/svgl/raw/main/static/library/figma.svg",
|
||||
created_by: {
|
||||
name: "Quill",
|
||||
socialUrl: "https://x.com/quillzhou",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for VSCode",
|
||||
description: "SVGL directly in your VSCode.",
|
||||
url: "https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl",
|
||||
name: "SVGL for PowerShell",
|
||||
description: "PowerShell extension to quickly get svgl logos anywhere.",
|
||||
url: "https://github.com/spaansba/SVGL-PowerShell",
|
||||
image:
|
||||
"https://github.com/pheralb/svgl/blob/main/static/library/vscode.svg",
|
||||
"https://github.com/pheralb/svgl/raw/main/static/library/powershell.svg",
|
||||
created_by: {
|
||||
name: "GiR",
|
||||
socialUrl: "https://x.com/girlazote",
|
||||
name: "Bart Spaans",
|
||||
socialUrl: "https://bsky.app/profile/bartspaans.bsky.social",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SVGL for Flow Launcher",
|
||||
description: "Search & copy SVG logos in Flow Launcher.",
|
||||
url: "https://github.com/spaansba/SVGL-Flow-Launcher",
|
||||
image:
|
||||
"https://github.com/pheralb/svgl/raw/main/static/library/FlowLauncher.svg",
|
||||
created_by: {
|
||||
name: "AF_Askar",
|
||||
socialUrl: "https://x.com/Askar_AF",
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
+30
-13
@@ -1,11 +1,19 @@
|
||||
import type { iSVG } from "@/types/svg";
|
||||
import { svgs } from "./svgs";
|
||||
import type { iSVG, ThemeOptions } from "@/types/svg";
|
||||
import type { Category } from "@/types/categories";
|
||||
import type { Extension } from "@/types/extensions";
|
||||
|
||||
import { svgs } from "@/data/svgs";
|
||||
import { extensions } from "@/data/extensions";
|
||||
|
||||
export const svgsData = svgs.map((svg: iSVG, index: number) => {
|
||||
return { id: index, ...svg };
|
||||
}) as iSVG[];
|
||||
|
||||
export const getCategories = () => {
|
||||
export const extensionsData = extensions.map((extension, index) => {
|
||||
return { id: index, ...extension };
|
||||
}) as Extension[];
|
||||
|
||||
export const getCategories = (): Category[] => {
|
||||
const categories = svgs
|
||||
.flatMap((svg) =>
|
||||
Array.isArray(svg.category) ? svg.category : [svg.category],
|
||||
@@ -14,14 +22,23 @@ export const getCategories = () => {
|
||||
return categories;
|
||||
};
|
||||
|
||||
export const getCategoriesForDirectory = () => {
|
||||
const categories = svgs
|
||||
.flatMap((svg) =>
|
||||
Array.isArray(svg.category) ? svg.category : [svg.category],
|
||||
)
|
||||
.filter((category, index, array) => array.indexOf(category) === index)
|
||||
.map((category) => ({
|
||||
slug: category.toLowerCase(),
|
||||
}));
|
||||
return categories;
|
||||
export const getSvgsByCategory = (category: string): iSVG[] =>
|
||||
svgsData.filter((svg: iSVG) => {
|
||||
if (Array.isArray(svg.category)) {
|
||||
return svg.category.some(
|
||||
(categoryItem) => categoryItem.toLowerCase() === category.toLowerCase(),
|
||||
);
|
||||
} else {
|
||||
return svg.category.toLowerCase() === category.toLowerCase();
|
||||
}
|
||||
});
|
||||
|
||||
interface GetSvgImgUrl {
|
||||
url: string | ThemeOptions;
|
||||
isDark: boolean;
|
||||
}
|
||||
|
||||
export const getSvgImgUrl = ({ url, isDark }: GetSvgImgUrl) => {
|
||||
if (typeof url === "string") return url;
|
||||
return isDark ? url.dark : url.light;
|
||||
};
|
||||
|
||||
+556
-87
@@ -1,6 +1,21 @@
|
||||
import type { iSVG } from "@/types/svg";
|
||||
|
||||
export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "NVIDIA",
|
||||
category: ["AI", "Hardware", "Platform"],
|
||||
route: {
|
||||
light: "/library/nvidia-icon-light.svg",
|
||||
dark: "/library/nvidia-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/nvidia-wordmark-light.svg",
|
||||
dark: "/library/nvidia-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.nvidia.com",
|
||||
brandUrl:
|
||||
"https://www.nvidia.com/en-us/about-nvidia/legal-info/logo-brand-usage",
|
||||
},
|
||||
{
|
||||
title: "Google Classroom",
|
||||
category: ["Google", "Education"],
|
||||
@@ -11,8 +26,18 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "Kimi",
|
||||
category: "AI",
|
||||
route: "/library/kimi.svg",
|
||||
url: "https://kimi.ai/",
|
||||
route: "/library/kimi-icon.svg",
|
||||
wordmark: {
|
||||
light: "/library/kimi-wordmark-light.svg",
|
||||
dark: "/library/kimi-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://kimi.ai",
|
||||
},
|
||||
{
|
||||
title: "Zyft",
|
||||
category: "Library",
|
||||
route: "/library/zyft.svg",
|
||||
url: "https://zyft.com",
|
||||
},
|
||||
{
|
||||
title: "Perspective",
|
||||
@@ -84,6 +109,12 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/amazon-q.svg",
|
||||
url: "https://aws.amazon.com/q",
|
||||
},
|
||||
{
|
||||
title: "Mulesoft",
|
||||
category: "Software",
|
||||
route: "/library/mulesoft.svg",
|
||||
url: "https://www.mulesoft.com/",
|
||||
},
|
||||
{
|
||||
title: "UV",
|
||||
category: "Devtool",
|
||||
@@ -103,7 +134,6 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
url: "https://milanote.com",
|
||||
},
|
||||
|
||||
{
|
||||
title: "Together AI",
|
||||
category: "AI",
|
||||
@@ -183,6 +213,13 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/lua.svg",
|
||||
url: "https://lua.org/",
|
||||
},
|
||||
{
|
||||
title: "Mercado Libre",
|
||||
category: ["Marketplace", "Platform"],
|
||||
route: "/library/mercado-libre.svg",
|
||||
wordmark: "/library/mercado-libre-wordmark.svg",
|
||||
url: "https://www.mercadolibre.com",
|
||||
},
|
||||
{
|
||||
title: "Mercado Pago",
|
||||
category: "Payment",
|
||||
@@ -260,14 +297,73 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Nuxt",
|
||||
category: "Framework",
|
||||
category: ["Framework", "Nuxt"],
|
||||
route: "/library/nuxt.svg",
|
||||
url: "https://nuxtjs.org/",
|
||||
url: "https://nuxt.com/",
|
||||
wordmark: {
|
||||
light: "/library/nuxt-wordmark-light.svg",
|
||||
dark: "/library/nuxt-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "Nuxt UI",
|
||||
category: ["Library", "Nuxt"],
|
||||
url: "https://ui.nuxt.com/",
|
||||
route: {
|
||||
light: "/library/nuxt-ui-wordmark-light.svg",
|
||||
dark: "/library/nuxt-ui-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "Nuxt Content",
|
||||
category: ["Library", "Nuxt"],
|
||||
url: "https://content.nuxt.com/",
|
||||
route: {
|
||||
light: "/library/nuxt-content-wordmark-light.svg",
|
||||
dark: "/library/nuxt-content-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "Nuxt Studio",
|
||||
category: ["Library", "Nuxt"],
|
||||
url: "https://studio.nuxt.com/",
|
||||
route: {
|
||||
light: "/library/nuxt-studio-wordmark-light.svg",
|
||||
dark: "/library/nuxt-studio-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "NuxtHub",
|
||||
category: ["Library", "Nuxt"],
|
||||
url: "https://hub.nuxt.com/",
|
||||
route: "/library/nuxthub.svg",
|
||||
wordmark: {
|
||||
light: "/library/nuxthub-wordmark-light.svg",
|
||||
dark: "/library/nuxthub-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "Docus",
|
||||
category: ["Software", "Nuxt"],
|
||||
url: "https://docus.dev/",
|
||||
route: {
|
||||
light: "/library/docus-light.svg",
|
||||
dark: "/library/docus-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/docus-wordmark-light.svg",
|
||||
dark: "/library/docus-wordmark-dark.svg",
|
||||
},
|
||||
brandUrl: "https://nuxt.com/design-kit",
|
||||
},
|
||||
{
|
||||
title: "Visual Studio Code",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/vscode.svg",
|
||||
url: "https://code.visualstudio.com/",
|
||||
brandUrl: "https://code.visualstudio.com/brand",
|
||||
@@ -375,9 +471,10 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "Facebook",
|
||||
category: "Social",
|
||||
route: "/library/facebook.svg",
|
||||
url: "https://www.facebook.com/",
|
||||
brandUrl: "https://about.meta.com/brand/resources/facebook/logo/",
|
||||
route: "/library/facebook-icon.svg",
|
||||
wordmark: "/library/facebook-wordmark.svg",
|
||||
url: "https://www.facebook.com",
|
||||
brandUrl: "https://about.meta.com/brand/resources/facebook/logo",
|
||||
},
|
||||
{
|
||||
title: "Twitter",
|
||||
@@ -438,10 +535,17 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Turborepo",
|
||||
category: ["Library", "Vercel", "Monorepo"],
|
||||
route: "/library/turborepo.svg",
|
||||
url: "https://turborepo.org/",
|
||||
shadcnCommand: "shadcn@canary add https://svgl.app/r/vercel.json",
|
||||
category: ["Library", "Monorepo", "Vercel"],
|
||||
route: {
|
||||
light: "/library/turborepo-icon-light.svg",
|
||||
dark: "/library/turborepo-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/turborepo-wordmark-light.svg",
|
||||
dark: "/library/turborepo-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://turborepo.com",
|
||||
brandUrl: "https://vercel.com/geist/brands",
|
||||
},
|
||||
{
|
||||
title: "Tailwind CSS",
|
||||
@@ -454,6 +558,15 @@ export const svgs: iSVG[] = [
|
||||
brandUrl: "https://tailwindcss.com/brand",
|
||||
url: "https://tailwindcss.com/",
|
||||
},
|
||||
{
|
||||
title: "WakaTime",
|
||||
category: "Devtool",
|
||||
route: {
|
||||
light: "/library/wakatime-dark.svg",
|
||||
dark: "/library/wakatime-light.svg",
|
||||
},
|
||||
url: "https://wakatime.com",
|
||||
},
|
||||
{
|
||||
title: "Styled Components",
|
||||
category: "Library",
|
||||
@@ -489,18 +602,26 @@ export const svgs: iSVG[] = [
|
||||
title: "YouTube",
|
||||
category: ["Google", "Social"],
|
||||
route: "/library/youtube.svg",
|
||||
wordmark: "/library/youtube-wordmark.svg",
|
||||
url: "https://www.youtube.com/",
|
||||
wordmark: {
|
||||
light: "/library/youtube-wordmark-light.svg",
|
||||
dark: "/library/youtube-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.youtube.com",
|
||||
brandUrl: "https://brand.youtube",
|
||||
},
|
||||
{
|
||||
title: "Astro",
|
||||
category: "Framework",
|
||||
route: {
|
||||
light: "/library/astro.svg",
|
||||
dark: "/library/astro_dark.svg",
|
||||
light: "/library/astro-icon-light.svg",
|
||||
dark: "/library/astro-icon-dark.svg",
|
||||
},
|
||||
url: "https://astro.build/",
|
||||
brandUrl: "https://astro.build/press/",
|
||||
wordmark: {
|
||||
light: "/library/astro-wordmark-light.svg",
|
||||
dark: "/library/astro-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://astro.build",
|
||||
brandUrl: "https://astro.build/press",
|
||||
},
|
||||
{
|
||||
title: "Google",
|
||||
@@ -509,6 +630,16 @@ export const svgs: iSVG[] = [
|
||||
wordmark: "/library/google-wordmark.svg",
|
||||
url: "https://www.google.com/",
|
||||
},
|
||||
{
|
||||
title: "Google Play",
|
||||
category: ["Marketplace", "Platform", "Software", "Google"],
|
||||
route: "/library/googleplay.svg",
|
||||
wordmark: {
|
||||
light: "/library/googleplay-wordmark-light.svg",
|
||||
dark: "/library/googleplay-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://play.google.com",
|
||||
},
|
||||
{
|
||||
title: "Framer",
|
||||
category: "Software",
|
||||
@@ -521,8 +652,9 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "Netflix",
|
||||
category: "Entertainment",
|
||||
route: "/library/netflix.svg",
|
||||
url: "https://www.netflix.com/",
|
||||
route: "/library/netflix-icon.svg",
|
||||
wordmark: "/library/netflix-wordmark.svg",
|
||||
url: "https://www.netflix.com",
|
||||
brandUrl: "https://brand.netflix.com/en/assets/logos",
|
||||
},
|
||||
{
|
||||
@@ -557,8 +689,10 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "WhatsApp",
|
||||
category: "Social",
|
||||
route: "/library/whatsapp.svg",
|
||||
url: "https://web.whatsapp.com/",
|
||||
route: "/library/whatsapp-icon.svg",
|
||||
wordmark: "/library/whatsapp-wordmark.svg",
|
||||
url: "https://web.whatsapp.com",
|
||||
brandUrl: "https://www.meta.com/brand/resources/whatsapp/whatsapp-brand",
|
||||
},
|
||||
{
|
||||
title: "Headless UI",
|
||||
@@ -593,9 +727,15 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "MongoDB",
|
||||
category: "Database",
|
||||
route: "/library/mongodb.svg",
|
||||
wordmark: "/library/mongodb-wordmark.svg",
|
||||
url: "https://www.mongodb.com/",
|
||||
route: {
|
||||
light: "/library/mongodb-icon-light.svg",
|
||||
dark: "/library/mongodb-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/mongodb-wordmark-light.svg",
|
||||
dark: "/library/mongodb-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.mongodb.com",
|
||||
brandUrl: "https://www.mongodb.com/company/newsroom/brand-resources",
|
||||
},
|
||||
{
|
||||
@@ -628,7 +768,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Visual Studio",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/visual-studio.svg",
|
||||
url: "https://visualstudio.microsoft.com",
|
||||
},
|
||||
@@ -881,10 +1021,88 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Microsoft Azure",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/azure.svg",
|
||||
url: "https://azure.microsoft.com/",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Access",
|
||||
category: ["Database", "Microsoft"],
|
||||
route: "/library/microsoft-access.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/access",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Clipchamp",
|
||||
category: ["Software", "Design", "Entertainment", "Microsoft"],
|
||||
route: "/library/microsoft-clipchamp.svg",
|
||||
url: "https://clipchamp.com/",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Copilot",
|
||||
category: ["AI", "Software", "Devtool", "Microsoft"],
|
||||
route: "/library/microsoft-copilot.svg",
|
||||
url: "https://copilot.microsoft.com/",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Defender",
|
||||
category: ["Cybersecurity", "Software", "Microsoft"],
|
||||
route: "/library/microsoft-defender.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/microsoft-defender-for-individuals",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Designer",
|
||||
category: ["Design", "AI", "Software", "Microsoft"],
|
||||
route: "/library/microsoft-designer.svg",
|
||||
url: "https://designer.microsoft.com/",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Editor",
|
||||
category: ["Software", "AI", "Microsoft"],
|
||||
route: "/library/microsoft-editor.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/microsoft-editor",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Excel",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft-excel.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/excel",
|
||||
},
|
||||
{
|
||||
title: "Microsoft OneDrive",
|
||||
category: ["Hosting", "Software", "Microsoft"],
|
||||
route: "/library/microsoft-onedrive.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/onedrive/online-cloud-storage",
|
||||
},
|
||||
{
|
||||
title: "Microsoft OneNote",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft-onenote.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/onenote/digital-note-taking-app",
|
||||
},
|
||||
{
|
||||
title: "Microsoft PowerPoint",
|
||||
category: ["Software", "Design", "Microsoft"],
|
||||
route: "/library/microsoft-powerpoint.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/powerpoint",
|
||||
},
|
||||
{
|
||||
title: "Microsoft SharePoint",
|
||||
category: ["Hosting", "Software", "Community", "Microsoft"],
|
||||
route: "/library/microsoft-sharepoint.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/sharepoint/collaboration-software",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Teams",
|
||||
category: ["Software", "Community", "Microsoft"],
|
||||
route: "/library/microsoft-teams.svg",
|
||||
url: "https://www.microsoft.com/microsoft-teams/group-chat-software",
|
||||
},
|
||||
{
|
||||
title: "Microsoft Word",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft-word.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/word",
|
||||
},
|
||||
{
|
||||
title: "Heroku",
|
||||
category: "Software",
|
||||
@@ -956,6 +1174,12 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/auth0.svg",
|
||||
url: "https://auth0.com/",
|
||||
},
|
||||
{
|
||||
title: "Auth.js",
|
||||
category: "Authentication",
|
||||
route: "/library/authjs.svg",
|
||||
url: "https://authjs.dev",
|
||||
},
|
||||
{
|
||||
title: "Fresh",
|
||||
category: "Framework",
|
||||
@@ -1031,8 +1255,16 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "MySQL",
|
||||
category: "Database",
|
||||
route: "/library/mysql.svg",
|
||||
url: "https://www.mysql.com/",
|
||||
route: {
|
||||
light: "/library/mysql-icon-light.svg",
|
||||
dark: "/library/mysql-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/mysql-wordmark-light.svg",
|
||||
dark: "/library/mysql-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.mysql.com",
|
||||
brandUrl: "https://www.mysql.com/about/legal/logos.html",
|
||||
},
|
||||
{
|
||||
title: "Parcel",
|
||||
@@ -1050,6 +1282,10 @@ export const svgs: iSVG[] = [
|
||||
title: "PostgreSQL",
|
||||
category: "Database",
|
||||
route: "/library/postgresql.svg",
|
||||
wordmark: {
|
||||
light: "/library/postgresql-wordmark-light.svg",
|
||||
dark: "/library/postgresql-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.postgresql.org/",
|
||||
},
|
||||
{
|
||||
@@ -1239,9 +1475,15 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
url: "https://www.apple.com",
|
||||
},
|
||||
{
|
||||
title: "App Store",
|
||||
category: ["Marketplace", "Software", "Platform"],
|
||||
route: "/library/appstore.svg",
|
||||
url: "https://www.apple.com/app-store/",
|
||||
},
|
||||
{
|
||||
title: "Windows",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/windows.svg",
|
||||
url: "https://www.microsoft.com/windows",
|
||||
},
|
||||
@@ -1259,9 +1501,17 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Turbopack",
|
||||
category: "Software",
|
||||
route: "/library/turbopack.svg",
|
||||
url: "https://turbo.build/",
|
||||
category: ["Software", "Devtool", "Vercel"],
|
||||
route: {
|
||||
light: "/library/turbopack-icon-light.svg",
|
||||
dark: "/library/turbopack-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/turbopack-wordmark-light.svg",
|
||||
dark: "/library/turbopack-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://nextjs.org/docs/app/api-reference/turbopack",
|
||||
brandUrl: "https://vercel.com/geist/brands",
|
||||
},
|
||||
{
|
||||
title: "Builder",
|
||||
@@ -1414,7 +1664,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Microsoft",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft.svg",
|
||||
url: "https://www.microsoft.com/",
|
||||
},
|
||||
@@ -1613,10 +1863,8 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "Instagram",
|
||||
category: "Social",
|
||||
route: {
|
||||
light: "/library/instagram.svg",
|
||||
dark: "/library/instagram_dark.svg",
|
||||
},
|
||||
route: "/library/instagram-icon.svg",
|
||||
wordmark: "/library/instagram-wordmark.svg",
|
||||
url: "https://www.instagram.com/",
|
||||
brandUrl: "https://about.instagram.com/brand",
|
||||
},
|
||||
@@ -1628,7 +1876,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Microsoft SQL Server ",
|
||||
category: "Database",
|
||||
category: ["Database", "Microsoft"],
|
||||
route: "/library/sql-server.svg",
|
||||
url: "https://www.microsoft.com/en-us/sql-server/",
|
||||
},
|
||||
@@ -1879,7 +2127,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Edge",
|
||||
category: "Browser",
|
||||
category: ["Browser", "Microsoft"],
|
||||
route: "/library/edge.svg",
|
||||
url: "https://www.microsoft.com/en-us/edge",
|
||||
},
|
||||
@@ -1974,12 +2222,6 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/calendly.svg",
|
||||
url: "https://calendly.com/",
|
||||
},
|
||||
{
|
||||
title: "Mintlify",
|
||||
category: "Software",
|
||||
route: "/library/mintlify.svg",
|
||||
url: "https://mintlify.com/",
|
||||
},
|
||||
{
|
||||
title: "Patreon",
|
||||
category: "Social",
|
||||
@@ -2323,12 +2565,6 @@ export const svgs: iSVG[] = [
|
||||
url: "https://www.webflow.com",
|
||||
brandUrl: "https://brand-at.webflow.io/resources",
|
||||
},
|
||||
{
|
||||
title: "Sanity",
|
||||
category: "CMS",
|
||||
route: "/library/sanity.svg",
|
||||
url: "https://www.sanity.io",
|
||||
},
|
||||
{
|
||||
title: "sky",
|
||||
category: "Entertainment",
|
||||
@@ -2359,10 +2595,10 @@ export const svgs: iSVG[] = [
|
||||
url: "https://www.gmail.com",
|
||||
},
|
||||
{
|
||||
title: "Outlook",
|
||||
category: "Software",
|
||||
route: "/library/outlook.svg",
|
||||
url: "https://www.outlook.com",
|
||||
title: "Microsoft Outlook",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft-outlook.svg",
|
||||
url: "https://www.microsoft.com/microsoft-365/outlook/email-and-calendar-software-application",
|
||||
},
|
||||
{
|
||||
title: "Slack",
|
||||
@@ -2675,8 +2911,17 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "TensorFlow",
|
||||
category: "Library",
|
||||
route: "/library/tensorflow.svg",
|
||||
route: {
|
||||
light: "/library/tensorflow-icon-light.svg",
|
||||
dark: "/library/tensorflow-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/tensorflow-wordmark-light.svg",
|
||||
dark: "/library/tensorflow-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.tensorflow.org/",
|
||||
brandUrl:
|
||||
"https://www.tensorflow.org/extras/tensorflow_brand_guidelines.pdf",
|
||||
},
|
||||
{
|
||||
title: "Midday",
|
||||
@@ -2686,7 +2931,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "C#",
|
||||
category: "Language",
|
||||
category: ["Language", "Microsoft"],
|
||||
route: "/library/csharp.svg",
|
||||
url: "https://dotnet.microsoft.com/languages/csharp",
|
||||
},
|
||||
@@ -2785,8 +3030,15 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "TikTok",
|
||||
category: "Social",
|
||||
route: "/library/tiktok.svg",
|
||||
url: "https://www.tiktok.com/",
|
||||
route: {
|
||||
light: "/library/tiktok-icon-light.svg",
|
||||
dark: "/library/tiktok-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/tiktok-wordmark-light.svg",
|
||||
dark: "/library/tiktok-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.tiktok.com",
|
||||
},
|
||||
{
|
||||
title: "Ngrok",
|
||||
@@ -2872,7 +3124,7 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "Microsoft Todo",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/microsoft-todo.svg",
|
||||
url: "https://to-do.office.com/",
|
||||
},
|
||||
@@ -3026,6 +3278,12 @@ export const svgs: iSVG[] = [
|
||||
wordmark: "/library/svg_wordmark.svg",
|
||||
url: "https://www.w3.org/TR/SVG/",
|
||||
},
|
||||
{
|
||||
title: "PDF",
|
||||
category: ["Library", "Design", "Education"],
|
||||
route: "/library/pdf.svg",
|
||||
url: "https://www.adobe.com/acrobat.html",
|
||||
},
|
||||
{
|
||||
title: "Todoist",
|
||||
category: "Software",
|
||||
@@ -3333,13 +3591,13 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
{
|
||||
title: "PowerToys",
|
||||
category: "Software",
|
||||
category: ["Software", "Microsoft"],
|
||||
route: "/library/powertoys.svg",
|
||||
url: "https://learn.microsoft.com/en-us/windows/powertoys/",
|
||||
},
|
||||
{
|
||||
title: "PowerShell",
|
||||
category: "Language",
|
||||
category: ["Language", "Microsoft"],
|
||||
route: "/library/powershell.svg",
|
||||
url: "https://learn.microsoft.com/en-us/powershell/",
|
||||
},
|
||||
@@ -3368,6 +3626,12 @@ export const svgs: iSVG[] = [
|
||||
},
|
||||
url: "https://typegpu.com",
|
||||
},
|
||||
{
|
||||
title: "Microsoft .NET",
|
||||
category: ["Framework", "Library", "Devtool", "Microsoft"],
|
||||
route: "/library/dotnet.svg",
|
||||
url: "https://dotnet.microsoft.com",
|
||||
},
|
||||
{
|
||||
title: "dotenv",
|
||||
category: ["Config", "Library", "Devtool"],
|
||||
@@ -3462,13 +3726,17 @@ export const svgs: iSVG[] = [
|
||||
url: "https://modelcontextprotocol.io/",
|
||||
},
|
||||
{
|
||||
title: "Socket.io",
|
||||
category: "Software",
|
||||
title: "Socket.IO",
|
||||
category: ["Software", "Library"],
|
||||
route: {
|
||||
dark: "/library/socketio-dark.svg",
|
||||
light: "/library/socketio-light.svg",
|
||||
dark: "/library/socketio-icon-dark.svg",
|
||||
light: "/library/socketio-icon-light.svg",
|
||||
},
|
||||
url: "https://socket.io/",
|
||||
wordmark: {
|
||||
light: "/library/socketio-wordmark-light.svg",
|
||||
dark: "/library/socketio-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://socket.io",
|
||||
},
|
||||
{
|
||||
title: "Ant Design",
|
||||
@@ -3596,19 +3864,6 @@ export const svgs: iSVG[] = [
|
||||
brandUrl:
|
||||
"https://www.figma.com/file/YYn36CxVpcT6aPKDXIH9JG/CurseForge-Brandbook?type=design&node-id=0-1&t=dvC0gPtyP36PQdsi-0",
|
||||
},
|
||||
{
|
||||
title: "Cursor",
|
||||
category: ["Software"],
|
||||
route: {
|
||||
light: "/library/cursor_light.svg",
|
||||
dark: "/library/cursor_dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/cursor_wordmark_light.svg",
|
||||
dark: "/library/cursor_wordmark_dark.svg",
|
||||
},
|
||||
url: "https://www.cursor.com",
|
||||
},
|
||||
{
|
||||
title: "Ghostty",
|
||||
category: ["Software"],
|
||||
@@ -3659,6 +3914,12 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/firebase-studio.svg",
|
||||
url: "https://firebase.studio/",
|
||||
},
|
||||
{
|
||||
title: "Dingocoin",
|
||||
category: "Crypto",
|
||||
route: "/library/dingocoin.svg",
|
||||
url: "https://dingocoin.com/",
|
||||
},
|
||||
{
|
||||
title: "HeroUI",
|
||||
category: "Library",
|
||||
@@ -3682,14 +3943,14 @@ export const svgs: iSVG[] = [
|
||||
title: "Clerk",
|
||||
category: ["Software", "Authentication"],
|
||||
route: {
|
||||
light: "/library/clerk-light.svg",
|
||||
dark: "/library/clerk-dark.svg",
|
||||
light: "/library/clerk-icon-light.svg",
|
||||
dark: "/library/clerk-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/clerk-wordmark-light.svg",
|
||||
dark: "/library/clerk-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://clerk.com/",
|
||||
url: "https://clerk.com",
|
||||
brandUrl: "https://clerk.com/design",
|
||||
},
|
||||
{
|
||||
@@ -3778,6 +4039,15 @@ export const svgs: iSVG[] = [
|
||||
route: "/library/google-cloud.svg",
|
||||
url: "https://cloud.google.com/",
|
||||
},
|
||||
{
|
||||
title: "Zulip",
|
||||
category: ["Software", "Social"],
|
||||
route: "/library/zulip.svg",
|
||||
wordmark: "/library/zulip-wordmark.svg",
|
||||
url: "https://zulip.com/",
|
||||
brandUrl:
|
||||
"https://github.com/zulip/zulip/tree/bd29fb3e2691daef570ba5661351922a16782dd2/static/images/logo",
|
||||
},
|
||||
{
|
||||
title: "Effect TS",
|
||||
category: "Library",
|
||||
@@ -3804,8 +4074,30 @@ export const svgs: iSVG[] = [
|
||||
{
|
||||
title: "ESLint",
|
||||
category: "Library",
|
||||
route: "/library/eslint.svg",
|
||||
url: "https://eslint.org/",
|
||||
route: {
|
||||
light: "/library/eslint-icon-light.svg",
|
||||
dark: "/library/eslint-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/eslint-wordmark-light.svg",
|
||||
dark: "/library/eslint-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://eslint.org",
|
||||
brandUrl: "https://eslint.org/branding",
|
||||
},
|
||||
{
|
||||
title: "Apache Kafka",
|
||||
category: "Analytics",
|
||||
route: {
|
||||
light: "/library/apache-kafka-light.svg",
|
||||
dark: "/library/apache-kafka-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/apache-kafka-wordmark-light.svg",
|
||||
dark: "/library/apache-kafka-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://kafka.apache.org/",
|
||||
brandUrl: "https://kafka.apache.org/brand",
|
||||
},
|
||||
{
|
||||
title: "PlainSignal",
|
||||
@@ -3865,4 +4157,181 @@ export const svgs: iSVG[] = [
|
||||
url: "https://ahrefs.com/",
|
||||
brandUrl: "https://ahrefs.com/logo",
|
||||
},
|
||||
{
|
||||
title: "Google Maps",
|
||||
category: "Google",
|
||||
route: "/library/googleMaps.svg",
|
||||
url: "https://www.google.com/maps/",
|
||||
},
|
||||
{
|
||||
title: "WebGL",
|
||||
category: "Library",
|
||||
route: {
|
||||
light: "/library/webgl.svg",
|
||||
dark: "/library/webgl_dark.svg",
|
||||
},
|
||||
url: "https://www.khronos.org/webgl/",
|
||||
brandUrl: "https://www.khronos.org/legal/trademarks/",
|
||||
},
|
||||
{
|
||||
title: "Intello",
|
||||
category: "Platform",
|
||||
route: {
|
||||
light: "/library/intello-dark.svg",
|
||||
dark: "/library/intello-light.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/intello_wordmark_dark.svg",
|
||||
dark: "/library/intello_wordmark_light.svg",
|
||||
},
|
||||
url: "https://intelloai.com/",
|
||||
},
|
||||
{
|
||||
title: "Kilo Code",
|
||||
category: ["AI", "Devtool"],
|
||||
route: {
|
||||
light: "/library/kilocode-light.svg",
|
||||
dark: "/library/kilocode-dark.svg",
|
||||
},
|
||||
url: "https://kilocode.ai/",
|
||||
},
|
||||
{
|
||||
title: "Cursor",
|
||||
category: ["Software"],
|
||||
brandUrl: "https://cursor.com/brand",
|
||||
route: {
|
||||
light: "/library/cursor_light.svg",
|
||||
dark: "/library/cursor_dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/cursor_wordmark_light.svg",
|
||||
dark: "/library/cursor_wordmark_dark.svg",
|
||||
},
|
||||
url: "https://www.cursor.com",
|
||||
},
|
||||
{
|
||||
title: "LottieFiles",
|
||||
category: "Design",
|
||||
route: "/library/lottiefiles.svg",
|
||||
brandUrl: "https://lottiefiles.com/brand-assets",
|
||||
wordmark: {
|
||||
light: "/library/lottiefiles-wordmark-light.svg",
|
||||
dark: "/library/lottiefiles-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://lottiefiles.com/",
|
||||
},
|
||||
{
|
||||
title: "Mintlify",
|
||||
category: "Software",
|
||||
route: "/library/mintlify.svg",
|
||||
wordmark: {
|
||||
light: "/library/mintlify_wordmark_light.svg",
|
||||
dark: "/library/mintlify_wordmark_dark.svg",
|
||||
},
|
||||
url: "https://mintlify.com/",
|
||||
},
|
||||
{
|
||||
title: "Qdrant",
|
||||
category: ["Database", "AI"],
|
||||
route: {
|
||||
light: "/library/qdrant-icon-light.svg",
|
||||
dark: "/library/qdrant-icon-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/qdrant-wordmark-light.svg",
|
||||
dark: "/library/qdrant-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://qdrant.tech/",
|
||||
brandUrl: "https://qdrant.tech/brand-resources/",
|
||||
},
|
||||
{
|
||||
title: "TravelPerk",
|
||||
category: "Software",
|
||||
route: {
|
||||
light: "/library/travelperk-light.svg",
|
||||
dark: "/library/travelperk-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/travelperk-wordmark-light.svg",
|
||||
dark: "/library/travelperk-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.travelperk.com/",
|
||||
brandUrl: "https://www.travelperk.com/media/",
|
||||
},
|
||||
{
|
||||
title: "Sanity",
|
||||
category: ["CMS", "Software"],
|
||||
route: {
|
||||
light: "/library/sanity-light.svg",
|
||||
dark: "/library/sanity-dark.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/sanity-wordmark-light.svg",
|
||||
dark: "/library/sanity-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.sanity.io/",
|
||||
},
|
||||
{
|
||||
title: "Nginx",
|
||||
category: "Software",
|
||||
route: "/library/nginx.svg",
|
||||
url: "https://nginx.org/",
|
||||
},
|
||||
{
|
||||
title: "Soldera",
|
||||
category: ["Platform", "Analytics", "Marketplace", "Software"],
|
||||
route: {
|
||||
light: "/library/soldera-icon-light.svg",
|
||||
dark: "/library/soldera-icon.svg",
|
||||
},
|
||||
wordmark: {
|
||||
light: "/library/soldera-wordmark-light.svg",
|
||||
dark: "/library/soldera-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://www.soldera.org",
|
||||
},
|
||||
{
|
||||
title: "Dribbble",
|
||||
category: ["Design", "Community", "Platform"],
|
||||
route: "/library/dribbble.svg",
|
||||
wordmark: {
|
||||
light: "/library/dribbble-wordmark-light.svg",
|
||||
dark: "/library/dribbble-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://dribbble.com/",
|
||||
},
|
||||
{
|
||||
title: "Paper",
|
||||
category: ["Design", "Software", "Platform"],
|
||||
route: "/library/paper.svg",
|
||||
wordmark: {
|
||||
light: "/library/paper-wordmark-light.svg",
|
||||
dark: "/library/paper-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://paper.design/",
|
||||
},
|
||||
{
|
||||
title: "Dodo Payments",
|
||||
category: ["Software", "Payment"],
|
||||
route: "/library/dodo-payments.svg",
|
||||
wordmark: {
|
||||
light: "/library/dodo-payments-wordmark-light.svg",
|
||||
dark: "/library/dodo-payments-wordmark-dark.svg",
|
||||
},
|
||||
url: "https://dodopayments.com/",
|
||||
brandUrl: "https://dodopayments.com/brand",
|
||||
},
|
||||
{
|
||||
title: 'Formance',
|
||||
category: ['Software', 'Payment'],
|
||||
route: {
|
||||
light: '/library/formance-logo-light.svg',
|
||||
dark: '/library/formance-logo-dark.svg'
|
||||
},
|
||||
wordmark: {
|
||||
light: '/library/formance-wordmark-light.svg',
|
||||
dark: '/library/formance-wordmark-dark.svg'
|
||||
},
|
||||
url: 'https://www.formance.com/'
|
||||
}
|
||||
];
|
||||
|
||||
+54
-51
@@ -11,30 +11,25 @@ SVGL API is a RESTFul API that allows you to get all the information of the SVGs
|
||||
|
||||
The API is currently open to everyone and does not require any authentication. However, to prevent abusive use of the API, there is a limit to the number of requests.
|
||||
|
||||
Don't use the API for create the same product as SVGL. The API is intended to be used for extensions, plugins, or other tools that can help the community.
|
||||
> Don't use the API for create the same product as SVGL. The API is intended to be used for extensions, plugins, or other tools that can help the community.
|
||||
|
||||
## Base URL
|
||||
## Base URLs
|
||||
|
||||
The base URL for the API is:
|
||||
SVGs URL:
|
||||
|
||||
```bash
|
||||
https://api.svgl.app
|
||||
# or
|
||||
```
|
||||
|
||||
Categories URL:
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/categories
|
||||
```
|
||||
|
||||
## Typescript usage
|
||||
## Typescript
|
||||
|
||||
- For categories:
|
||||
|
||||
```ts
|
||||
export interface Category {
|
||||
category: string;
|
||||
total: number;
|
||||
}
|
||||
```
|
||||
|
||||
- For SVGs:
|
||||
You can use the following types for the SVG responses:
|
||||
|
||||
```ts
|
||||
export type ThemeOptions = {
|
||||
@@ -42,27 +37,27 @@ export type ThemeOptions = {
|
||||
light: string;
|
||||
};
|
||||
|
||||
export interface iSVG {
|
||||
id?: number;
|
||||
export interface SVG {
|
||||
id: number;
|
||||
title: string;
|
||||
category: tCategory | tCategory[];
|
||||
category: string | string[];
|
||||
route: string | ThemeOptions;
|
||||
url: string;
|
||||
wordmark?: string | ThemeOptions;
|
||||
brandUrl?: string;
|
||||
url: string;
|
||||
}
|
||||
```
|
||||
|
||||
- `tCategory` is a large list of categories that can be found [here](https://github.com/pheralb/svgl/blob/main/src/types/categories.ts#L1).
|
||||
> If you need types for the `category`, you can find them [here](https://github.com/pheralb/svgl/blob/main/src/types/categories.ts). Change the type of `category` to `Category | Category[]`.
|
||||
|
||||
## Endpoints
|
||||
|
||||
### Get all SVGs
|
||||
|
||||
```bash
|
||||
https://api.svgl.app
|
||||
```
|
||||
|
||||
<p></p>
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
@@ -77,12 +72,12 @@ https://api.svgl.app
|
||||
]
|
||||
```
|
||||
|
||||
### Get all SVGs with limit
|
||||
|
||||
```bash
|
||||
https://api.svgl.app?limit=10
|
||||
```
|
||||
|
||||
<p></p>
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
@@ -97,12 +92,12 @@ https://api.svgl.app?limit=10
|
||||
]
|
||||
```
|
||||
|
||||
### Get SVGs by category
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/category/software
|
||||
```
|
||||
|
||||
<p></p>
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
@@ -117,16 +112,24 @@ https://api.svgl.app/category/software
|
||||
]
|
||||
```
|
||||
|
||||
The list of categories is available [here](https://github.com/pheralb/svgl/blob/main/src/types/categories.ts) (except for the _all_ category).
|
||||
> The list of categories is available [here](https://github.com/pheralb/svgl/blob/main/src/types/categories.ts).
|
||||
|
||||
### Get the SVG code
|
||||
|
||||
Optimized SVG using [svgo](https://github.com/svg/svgo):
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/svg/adobe.svg
|
||||
```
|
||||
|
||||
<p></p>
|
||||
No optimized SVG:
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/svg/adobe.svg?no-optimize
|
||||
```
|
||||
|
||||
```html
|
||||
// Returns:
|
||||
<!-- Returns: -->
|
||||
<svg
|
||||
width="91"
|
||||
height="80"
|
||||
@@ -150,33 +153,12 @@ https://api.svgl.app/svg/adobe.svg
|
||||
</svg>
|
||||
```
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/categories
|
||||
```
|
||||
|
||||
<p></p>
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
{
|
||||
"category": "Software",
|
||||
"total": 97
|
||||
},
|
||||
{
|
||||
"category": "Library",
|
||||
"total": 25
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
### Search SVG by title
|
||||
|
||||
```bash
|
||||
https://api.svgl.app?search=axiom
|
||||
```
|
||||
|
||||
<p></p>
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
@@ -192,3 +174,24 @@ https://api.svgl.app?search=axiom
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### Get the list of categories
|
||||
|
||||
```bash
|
||||
https://api.svgl.app/categories
|
||||
```
|
||||
|
||||
```json
|
||||
// Returns:
|
||||
[
|
||||
{
|
||||
"category": "Software",
|
||||
"total": 97
|
||||
},
|
||||
{
|
||||
"category": "Library",
|
||||
"total": 25
|
||||
}
|
||||
//...
|
||||
]
|
||||
```
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
title: shadcn/ui
|
||||
description: How to use shadcn/ui to add SVGs to your project.
|
||||
---
|
||||
|
||||
## shadcn/ui
|
||||
|
||||
SVGL v5 support [shadcn/ui](https://ui.shadcn.com/) registry 🎉, so you can easily add SVGs to your project using [their CLI](https://ui.shadcn.com/docs/cli). Add the registry config once and you will be able to install any SVG in **`.tsx`** using `npm`, `yarn`, `bun` or `pnpm`.
|
||||
|
||||
## Add registry (optional)
|
||||
|
||||
> If you have already added shadcn/ui in your project, you can skip this step.
|
||||
|
||||
Add the SVGL registry to your `components.json` file:
|
||||
|
||||
```json
|
||||
{
|
||||
"registries": {
|
||||
"@svgl": "https://svgl.app/r/{name}.json"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[shadcn/ui Namespaces](https://ui.shadcn.com/docs/registry/namespace) documentation.
|
||||
|
||||
## Usage
|
||||
|
||||
Add SVGs using the [shadcn/ui CLI](https://ui.shadcn.com/docs/cli/installation):
|
||||
|
||||
```bash
|
||||
npx shadcn@latest add @svgl/sanity
|
||||
# or
|
||||
pnpm dlx shadcn@latest add @svgl/sanity
|
||||
# or
|
||||
yarn dlx shadcn@latest add @svgl/sanity
|
||||
# or
|
||||
bunx shadcn@latest add @svgl/sanity
|
||||
```
|
||||
|
||||
Add multiple SVGs at once:
|
||||
|
||||
```bash
|
||||
pnpm dlx shadcn@latest add @svgl/sanity @svgl/github @svgl/supabase @svgl/vercel
|
||||
```
|
||||
|
||||
## MCP Server
|
||||
|
||||
You can use the [shadcn MCP server](https://ui.shadcn.com/docs/mcp) to browse, search, and add React SVGs from SVGL registry:
|
||||
|
||||
### Prerequisites
|
||||
|
||||
You need to have `@svgl` in your `components.json` file:
|
||||
|
||||
```json
|
||||
{
|
||||
"registries": {
|
||||
"@svgl": "https://svgl.app/r/{name}.json"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Quick Start
|
||||
|
||||
**With Claude Code**:
|
||||
|
||||
```bash
|
||||
pnpm dlx shadcn@latest mcp init --client claude
|
||||
```
|
||||
|
||||
Then, restart Claude Code. You can use `/mcp` command in Claude Code to debug the MCP server.
|
||||
|
||||
**With Cursor**:
|
||||
|
||||
```bash
|
||||
pnpm dlx shadcn@latest mcp init --client cursor
|
||||
```
|
||||
|
||||
Then, open Cursor Settings and Enable the MCP server for shadcn.
|
||||
|
||||
**With VSCode**:
|
||||
|
||||
```bash
|
||||
pnpm dlx shadcn@latest mcp init --client vscode
|
||||
```
|
||||
|
||||
Then, open `.vscode/mcp.json` and click Start next to the shadcn server.
|
||||
|
||||
### Example Prompts
|
||||
|
||||
Here are some example prompts you can use to add SVGs from SVGL registry:
|
||||
|
||||
```
|
||||
Can you add the "GitHub" SVG from SVGL registry?
|
||||
```
|
||||
|
||||
```
|
||||
Please add React, Svelte and Vue SVGs from SVGL registry.
|
||||
```
|
||||
+9
-1
@@ -1,7 +1,15 @@
|
||||
export const globals = {
|
||||
appUrl: "https://svgl.app",
|
||||
githubUrl: "https://github.com/pheralb/svgl",
|
||||
apiGithubUrl: "https://api.github.com/repos/pheralb/svgl",
|
||||
apiGithub: {
|
||||
url: "https://ungh.cc/repos/pheralb/svgl",
|
||||
fallback: 5000,
|
||||
},
|
||||
twitterUrl: "https://x.com/pheralb_",
|
||||
submitUrl:
|
||||
"https://github.com/pheralb/svgl?tab=readme-ov-file#-getting-started",
|
||||
requestSvgUrl:
|
||||
"https://github.com/pheralb/svgl/issues/new?template=request-svg.yml",
|
||||
registryUrl: "https://svgl.app/r/",
|
||||
v0Url: "https://v0.dev/chat/api/open?url=",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import { browser } from "$app/environment";
|
||||
import { writable } from "svelte/store";
|
||||
|
||||
export function useHasPrimaryTouch() {
|
||||
const { subscribe, set } = writable(false);
|
||||
if (!browser) {
|
||||
return {
|
||||
subscribe,
|
||||
destroy: () => {},
|
||||
};
|
||||
}
|
||||
const controller = new AbortController();
|
||||
const { signal } = controller;
|
||||
|
||||
const handleTouch = () => {
|
||||
const hasTouch = "ontouchstart" in window || navigator.maxTouchPoints > 0;
|
||||
const prefersTouch = window.matchMedia("(pointer: coarse)").matches;
|
||||
set(hasTouch && prefersTouch);
|
||||
};
|
||||
|
||||
const mq = window.matchMedia("(pointer: coarse)");
|
||||
mq.addEventListener("change", handleTouch, { signal });
|
||||
window.addEventListener("pointerdown", handleTouch, { signal });
|
||||
|
||||
handleTouch();
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
destroy: () => controller.abort(),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import GithubSlugger from "github-slugger";
|
||||
|
||||
type ToCItem = {
|
||||
id: number;
|
||||
level: number;
|
||||
text: string;
|
||||
slug: string;
|
||||
};
|
||||
|
||||
const getTableOfContents = (markdown: string): ToCItem[] => {
|
||||
const slugger = new GithubSlugger();
|
||||
const regXHeader = /(?:^|\n)(?<flag>#+)\s+(?<content>.+)/g;
|
||||
|
||||
// Delete # from code blocks and inline code:
|
||||
let clean = markdown.replace(/<pre[\s\S]*?<\/pre>/gi, "");
|
||||
clean = clean.replace(/<code[\s\S]*?<\/code>/gi, "");
|
||||
|
||||
return Array.from(clean.matchAll(regXHeader))
|
||||
.map((match, idx): ToCItem | null => {
|
||||
const groups = match.groups;
|
||||
if (
|
||||
groups &&
|
||||
typeof groups.flag === "string" &&
|
||||
typeof groups.content === "string" &&
|
||||
groups.flag.length > 1
|
||||
) {
|
||||
return {
|
||||
id: idx,
|
||||
level: groups.flag.length,
|
||||
text: groups.content,
|
||||
slug: slugger.slug(groups.content),
|
||||
};
|
||||
}
|
||||
return null;
|
||||
})
|
||||
.filter((x): x is ToCItem => x !== null);
|
||||
};
|
||||
|
||||
export { getTableOfContents, type ToCItem };
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user