225 Commits

Author SHA1 Message Date
Pablo Hdez 94e71b14b5 Merge pull request #792 from DexAsHisH/add-wakatime-svg
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 Check SVGs (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
Added WakaTime svg with light and dark mode variants
2025-10-07 17:26:13 +01:00
Ashish Dabral 97af4a1288 Added WakaTime svg with light and dark mode variants 2025-10-07 00:43:32 +05:30
Pablo Hdez 05fd6bbce8 Merge pull request #790 from DexAsHisH/add-onenote-icon
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 Check SVGs (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
Add OneNote svg
2025-10-05 12:15:50 +01:00
Ashish Dabral 469fdb7243 Add OneNote svg 2025-10-05 15:14:50 +05:30
Pablo Hdez fd9b47ee1f Merge pull request #786 from jonahsnider/travelperk
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 Check SVGs (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
Add TravelPerk logo and wordmark
2025-10-03 00:36:00 +01:00
Pablo Hdez 0e7b8cd5ae Merge branch 'main' into travelperk 2025-10-03 00:35:52 +01:00
pheralb ceb5835f21 ⚙️ Create check-data script to detect unused SVGs 2025-10-02 16:32:31 +01:00
pheralb bd6ce410bc 🛠️ Update CI workflow to check SVGs and add data check script 2025-10-02 16:30:46 +01:00
pheralb 488813af2c 🛠️ Add Sanity SVGs data 2025-10-02 16:26:49 +01:00
pheralb a603c09e7e 🧹 Remove unused/duplicate SVGs 2025-10-02 16:26:11 +01:00
Jonah Snider 7a914edbd3 Format
Signed-off-by: Jonah Snider <jonah@jonahsnider.com>
2025-10-01 10:40:50 -07:00
Jonah Snider a8a5cb22fa Add TravelPerk logo and wordmark
Signed-off-by: Jonah Snider <jonah@jonahsnider.com>
2025-10-01 10:39:02 -07:00
Pablo Hdez 19ee5cef58 Merge pull request #785 from genius-wizard-dev/tensorflow
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
Update TensorFlow Using New Icon
2025-09-30 23:58:40 +01:00
Pablo Hdez b89631b84b Merge pull request #784 from genius-wizard-dev/qdrant
Add Qdrant Icon
2025-09-30 23:58:13 +01:00
Nguyễn Thành Thuận dafc5fc8f1 Add TensorFlow SVG assets with light and dark variations
- Updated the TensorFlow entry in svgs.ts to include separate routes for light and dark icons.
- Added new SVG files for TensorFlow light and dark icons.
- Included wordmark SVGs for both light and dark themes.
- Updated brand guidelines URL for TensorFlow.
2025-10-01 00:49:41 +07:00
Nguyễn Thành Thuận aab357095f Refactor SVG files for Qdrant wordmark: optimize paths, update fill colors, and improve structure for better performance and readability. 2025-10-01 00:06:29 +07:00
Nguyễn Thành Thuận a35b66d623 Add Qdrant SVG assets and update svgs.ts
- Added Qdrant icon and wordmark SVGs for both light and dark themes.
- Updated svgs.ts to include Qdrant with appropriate metadata and URLs.
2025-09-30 23:59:38 +07:00
Pablo Hdez 6de7993f85 Merge pull request #782 from ih8sun/feature/improve-macos-searchmenu
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
🛠️Adds native macOS shortcut support for opening the search menu
2025-09-30 17:51:48 +01:00
ih8sun c32dde4b87 🛠️Adds native macOS shortcut support for opening the search menu 2025-09-30 11:44:17 -05:00
pheralb b2de7e96d0 🛠️ Add `appUrl` property in globals 2025-09-30 16:01:00 +01:00
pheralb 8bf76bd4f4 🛠️ Fix font preload reference in app.html 2025-09-30 16:00:42 +01:00
pheralb f9379ffaec 🛠️ Create context-menu for svgl homepage link 2025-09-30 16:00:30 +01:00
pheralb c14555d21f 🎨 Add context-menu UI component 2025-09-30 15:59:33 +01:00
pheralb 5126eed189 🎨 Update font-mono font family 2025-09-30 15:59:12 +01:00
pheralb 7bca58d58b 📦 Update @lucide/svelte dependency 2025-09-30 15:55:54 +01:00
pheralb aa2ed5fc1c 📦 Update Mintlify SVGs 2025-09-30 15:55:33 +01:00
pheralb 07a9198750 🎨 Fix icon color for inactive search state in search component 2025-09-30 12:54:10 +01:00
pheralb dcb2fad6f4 🎨 Update fonts + CSS styles 2025-09-30 12:52:19 +01:00
pheralb ab16011b25 🛠️ Use `import type from SVGProps instead import * from React`
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
🚀 Deploy / ☁️ API (push) Has been cancelled
2025-09-30 00:29:11 +01:00
Pablo Hdez 204b13c445 Merge pull request #778 from ongkristopher/patch-1
Fix clip-path issue on react
2025-09-29 19:05:17 +01:00
Kristopher Pamplona Ong f28f171d3b Fix clip-path issue on react 2025-09-27 04:34:20 +08:00
pheralb 2af89d3578 🛠️ Update `WithoutChild` type import + format scroll-area.ts file
🚀 Deploy / ☁️ API (push) Has been cancelled
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-26 16:10:15 +01:00
Pablo Hdez 0eaf2ab125 Merge pull request #777 from SameerJS6/add-lina
feat: add Lina (Improved ScrollArea)
2025-09-26 16:06:12 +01:00
SameerJS6 95ee98972c Merge branch 'main' of https://github.com/SameerJS6/svgl into add-lina 2025-09-26 09:03:43 +05:30
SameerJS6 dd07e1888d Integrate ScrollArea component into sidebarMobileMenu for enhanced scrolling and layout organization 2025-09-26 09:03:00 +05:30
SameerJS6 7b81780642 Integrate Lina (ScrollArea and ScrollAreaScrollbar) into sidebar layout for improved scrolling and organization of categories 2025-09-26 09:01:11 +05:30
SameerJS6 6264d775cb Refactor PageCard to integrate Lina (ScrollArea) for improved scrolling experience 2025-09-26 09:00:06 +05:30
SameerJS6 e8d42a7055 Introduce ScrollArea components for structured scroll functionality 2025-09-26 08:59:35 +05:30
SameerJS6 4f5137ba6e Add ScrollAreaMask component for customizable scroll masking effects 2025-09-26 08:59:30 +05:30
SameerJS6 c4cfc1017f Add ScrollArea and Scrollbar components for enhanced scroll functionality 2025-09-26 08:59:15 +05:30
SameerJS6 a4232532bd Enhance utility types in cn.ts for improved type safety and flexibility 2025-09-26 08:57:56 +05:30
SameerJS6 3c56cb6b55 Add useHasPrimaryTouch hook to detect primary touch capability 2025-09-26 08:57:46 +05:30
SameerJS6 8ce308ed36 🔧 Update bits-ui to version 2.11.3 and svelte-toolbelt to version 0.10.5 in package.json and pnpm-lock.yaml 2025-09-26 08:55:49 +05:30
pheralb 54c8943e54 📦 Update LottieFiles SVGs + add brand assets for Lottie & Cursor 2025-09-25 18:48:31 +01:00
pheralb fa27a6a752 Merge branch 'main' of github.com:pheralb/svgl 2025-09-25 18:44:27 +01:00
Pablo Hdez ed5c1172b4 Merge pull request #775 from reallynattu/add-lottiefiles-logo
Add LottieFiles logo and wordmark
2025-09-25 18:44:10 +01:00
pheralb a2c29dce99 📦 (api) update wrangler & upstash dependencies 2025-09-25 10:40:26 +01:00
pheralb c50125d79c 🛠️ Add manifest link to app.html 2025-09-25 10:15:30 +01:00
Nattu 437f69de61 Add LottieFiles logo and wordmark
Add LottieFiles design platform logo to the library with both icon and wordmark versions.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 12:14:10 +09:00
pheralb 93aedefe79 🛠️ Update extensions data 2025-09-24 17:49:04 +01:00
pheralb 63b189bce3 🛠️ (API) Remove version specification for pnpm setup in deployment workflow 2025-09-24 17:14:58 +01:00
Pablo Hdez bf855d15e0 Merge pull request #772 from pheralb/dev
 svgl v5
2025-09-24 17:08:06 +01:00
pheralb 9cf1677e51 🛠️ Refactor svgr endpoint, disable optimization with `optimize` property
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-24 17:00:57 +01:00
pheralb 49f860f25f 🛠️ Fix Intello SVG routes + rename svg files 2025-09-24 16:47:23 +01:00
pheralb b7d05a0a56 🛠️ Merge branch 'main' of github.com:pheralb/svgl into dev 2025-09-24 16:43:39 +01:00
pheralb 138b5293ed 📦 Update Cursor SVGs 2025-09-24 16:41:13 +01:00
pheralb 195fae38e7 🔎 Add umami analytics script 2025-09-24 16:36:57 +01:00
pheralb 32a6eb4f4f New OG images + update static files 2025-09-24 15:16:08 +01:00
pheralb c33ef02f36 🐋 Remove env variable from Dockerfile 2025-09-24 14:17:01 +01:00
pheralb 559eb676d9 Add screenshot images 2025-09-24 14:09:30 +01:00
pheralb 45de1a631b 🛠️ Refactor favorites store, improve add/remove functions 2025-09-24 14:09:03 +01:00
pheralb 60314a9648 🛠️ Update GitHub link title, remove unused SvglVersion component, improve search input with name attribute & dialog, popover and tabs improvements 2025-09-24 14:08:07 +01:00
pheralb 26f6bb9061 Add open with v0 support 2025-09-24 13:58:05 +01:00
pheralb 83ec150266 🛠️ Update global layout and styling for header, sidebar, and page cards + improve responsive 2025-09-24 11:25:46 +01:00
pheralb f505eea909 ⚙️ Refactor GitHub star count feature and update layout components 2025-09-22 23:37:03 +01:00
pheralb e5d130b0c5 🛠️ Fixed eslint errors 2025-09-22 19:14:05 +01:00
pheralb c306b57ce7 ️ Initial favorites page - show, delete & clear all SVGs 2025-09-22 19:12:33 +01:00
pheralb 1bf55e6c6e ⚙️ Refactor getInitialSettings(), delete unused functions 2025-09-22 19:11:14 +01:00
pheralb aae0771f18 🎨 Remove lazy loading from images and update sidebar badge classes for consistency 2025-09-22 18:57:20 +01:00
pheralb f749358b97 🛠️ Add warning store & message 2025-09-22 18:53:46 +01:00
pheralb 7c2ae97dd9 🎨 Remove unused font-face declaration 2025-09-21 19:20:12 +01:00
pheralb 50677ca3db 🎨 Update dialog title font size for improved readability 2025-09-21 19:16:56 +01:00
pheralb bf90439c63 🎨 Add switch UI component 2025-09-21 19:16:42 +01:00
pheralb 44fd09efb2 🔧 Refactor import statement for prettier and update formatting method 2025-09-21 19:16:17 +01:00
pheralb 3e507cf7c8 Add settings management with package manager and SVG optimization options 2025-09-21 19:15:11 +01:00
pheralb 0c78255847 🎨 Update container and grid components for improved responsive design 2025-09-18 16:11:30 +01:00
pheralb 8a61650e4b 📄 Update shadcn/ui docs + add shadcn MCP server config 2025-09-18 12:48:44 +01:00
pheralb 4bd69b5ede Create <DocumentSettings /> component and integrate it into the docs page layout 2025-09-18 12:08:46 +01:00
pheralb aef80d6b7d 🎨 Add claude, markdown & openai svelte components 2025-09-18 12:08:16 +01:00
pheralb 452d121ac4 🛠️ Return `rawUrl & documentUrl` properties in content-collections config 2025-09-18 12:04:16 +01:00
pheralb 894aca0d14 🎨 Add dropdown-menu UI component 2025-09-18 12:03:20 +01:00
pheralb b354a61eba Add link to shadcn/ui docs 2025-09-17 15:55:52 +01:00
pheralb 5d45c720b4 Improve `SVG not found` component with category context and update search placeholder 2025-09-17 12:03:56 +01:00
pheralb aeeaacd993 🛠️ Add font preloading, improve sveltekit assets URL 2025-09-17 10:02:24 +01:00
pheralb 077df6f0d5 🛠️ Remove unused font "OnestMedium" and clean up related styles 2025-09-17 10:00:20 +01:00
pheralb 9b9124b220 Add width and height attributes to SVG images for better layout control 2025-09-17 10:00:07 +01:00
pheralb 25ce756481 🐋 Add size check before production build
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-16 14:08:40 +01:00
pheralb 1da589f79d 🛠️ Rename `tCategory to Category` 2025-09-16 14:08:24 +01:00
pheralb 56125d2844 📦 Fixed SVGs, add viewbox property 2025-09-16 14:05:26 +01:00
pheralb 0b93f9b613 🔧 Refactor GitHub Actions workflow to streamline SVG size checking process 2025-09-16 14:04:59 +01:00
pheralb 12038062db Migrate /utils to Typescript + use tsx to run all scripts + improve types 2025-09-16 14:04:49 +01:00
pheralb 2198058131 🛠️ Merge branch 'main' of github.com:pheralb/svgl into dev 2025-09-16 13:46:39 +01:00
pheralb 0f2f026803 🎨 Add SvgNotFound component and integrate it into search results; update globals for SVG request links 2025-09-16 13:45:23 +01:00
pheralb 789fc0ce72 🎨 Design improvements + fixed content page size + improve accessibility 2025-09-16 13:28:44 +01:00
pheralb 5bc3616dec 🎨 Add Table of Contents component and type definitions 2025-09-16 13:27:45 +01:00
pheralb f411ffef8a 🛠️ Refactor API documentation for clarity and consistency; update URLs and TypeScript types 2025-09-16 13:24:13 +01:00
pheralb 3b3d30cd0c 🎨 Add collapsible UI component 2025-09-16 13:20:59 +01:00
pheralb 8e3ea5150a 🛠️ Remove "All" category from Category type definition 2025-09-16 08:39:02 +01:00
pheralb 895052ff7a 🎨 Update code styling for line numbers and add markdown styles 2025-09-16 08:38:51 +01:00
pheralb f2a61200b1 🛠️ (api) Rename query parameter from "raw" to "no-optimize" in SVG retrieval endpoint 2025-09-14 19:00:39 +01:00
pheralb 1c11725e01 🛠️ Update copyBtn styles for rehypeCopyBtn plugin + create generateToC() + return createdAt, updatedAt & tableOfContents 2025-09-14 19:00:20 +01:00
pheralb e7bbd32b56 📦 Add github-slugger dependency 2025-09-14 18:55:01 +01:00
pheralb 70ad2e0088 🎨 New svgl brand assets + update manifest & global app metatags 2025-09-14 18:53:24 +01:00
pheralb a05e849ddb 🛠️ Create rehypeCopyBtn & rehypeExternalLinks with custom types 2025-09-08 17:14:42 +01:00
pheralb 5c88b29387 📝 Update readme, add getting-started with API, improve header links & add framer extension 2025-09-08 12:35:08 +01:00
pheralb 31f2cefaba 📦 Add rehype-autolink-headings, rehype-slug & unist-util-visit dependencies 2025-09-08 12:19:43 +01:00
pheralb de47f2fa03 🛠️ (API) format & fixed eslint errors + improve types + improve error messages + add ?raw property 2025-09-08 12:19:15 +01:00
pheralb 6f7d3c51f9 ⬆️ (API) Upgrade upstash & hono dependencies & types 2025-09-08 11:42:13 +01:00
pheralb 074e9231d1 ⚙️ Merge branch 'main' of github.com:pheralb/svgl into dev 2025-09-07 13:41:21 +01:00
pheralb edb9ece0e3 ⚙️ Upgrade to eslint.config.ts + add typescript-eslint for typesafety + delete deprecated ts.config(), use export default instead 2025-09-06 17:58:30 +01:00
pheralb ea4b598f2f Update Shiki configuration to include JSON and HTML languages
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-05 11:27:00 +01:00
pheralb fff76243ec ⚙️ Improve mode toggle functionality with keyboard shortcut support (CMD + L) 2025-09-05 11:26:44 +01:00
pheralb 9825fc2544 📦 Add SVGL for Framer extension with description and creator details 2025-09-05 11:14:39 +01:00
pheralb 04ffbe9bbb Refactor setup registry component and update documentation for shadcn/ui integration 2025-09-05 11:14:15 +01:00
pheralb bc831bed17 🎨 Initial responsive design + add sidebar menu to header component 2025-09-05 11:14:05 +01:00
pheralb d3e92602c1 📦 Add Sheet UI component 2025-09-05 11:07:09 +01:00
pheralb 3a11cd3d31 ⚙️ Update dialog title to reflect multiple SVG download options 2025-09-05 09:15:00 +01:00
pheralb e465cd7a51 🛠️ Merge branch 'main' of github.com:pheralb/svgl into dev 2025-09-05 09:11:45 +01:00
pheralb 1832eaceca ⚙️ Add getParamValue() function to get searchParam value
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-04 19:18:29 +01:00
pheralb 32558885e6 🛠️ Delete unused displaySvgs state, simplify updateDisplaySvgs utility 2025-09-04 19:17:55 +01:00
pheralb 6ffc890a15 🛠️ Adjust height in sidebar and pageCard components 2025-09-04 18:56:57 +01:00
pheralb aa87b899a6 🛠️ Update radial button variant styles for improved dark mode support 2025-09-04 10:46:02 +01:00
pheralb 26f23f7e5b Add extension page, create extension component for displaying items & add search functionality 2025-09-04 10:45:56 +01:00
pheralb 74e42b00dc 🎨 Refactor grid and header components; improve props handling and layout consistency, update search functions to use new naming convention, and remove unused view transitions component 2025-09-04 10:45:12 +01:00
pheralb 8e27a8053d 🛠️ Remove unnecessary tracking-tight class from body element for improved layout consistency 2025-09-04 09:19:35 +01:00
pheralb 1aadeb5604 🛠️ Update extensions data; add new extensions for various frameworks and improve existing entries 2025-09-04 09:15:17 +01:00
pheralb ec6db6d23b 🛠️ Refactor search functions in searchWithFuse.ts; rename searchWithFuse to searchSvgsWithFuse and add searchExtensionsWithFuse for improved extension searching 2025-09-04 09:15:01 +01:00
pheralb 803e13001a 🛠️ Refactor header component; streamline button classes and improve layout consistency
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-09-01 17:44:16 +01:00
pheralb 77356d3215 🛠️ Refactor SVG filtering logic in load function; ensure base data is used for `searchWithFuse` 2025-09-01 11:49:09 +01:00
pheralb 1591ea3146 🛠️ Refactor svgCard and index files; streamline image handling and improve type definitions 2025-09-01 11:48:51 +01:00
pheralb 2a38b834c3 🛠️ Refactor search handling in search.svelte and +page.svelte; implement custom addParams and deleteParam utility 2025-09-01 11:34:24 +01:00
pheralb e6d441e9f2 🛠️ Refactor load function in +page.ts to use getSvgsByCategory for improved category filtering and sorting logic 2025-09-01 11:27:53 +01:00
pheralb bc34bdc904 🛠️ Update PageCard component to include container and content card classes for improved styling 2025-09-01 11:27:33 +01:00
pheralb 2692c7d34d 🛠️ Rename type tCategory to Category for consistency in type definitions 2025-09-01 11:27:22 +01:00
pheralb 55199765be 🛠️ Improve parseSvgFilename to support firstUpperCase option for component naming
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
2025-08-31 16:35:30 +01:00
pheralb 4cd2c84273 🛠️ Refactor parseSvgFilename function for improved component name formatting; add directory and file existence checks in generate-registry 2025-08-31 16:19:44 +01:00
pheralb 733e136b3a 🛠️ Update registry command & logs 2025-08-31 15:46:43 +01:00
pheralb 2c3fdf79fe 🐋 Initial Dockerfile config with .dockerignore 2025-08-31 15:35:11 +01:00
pheralb 374fb8f2d5 🛠️ Trying nixpacks config for Node & PNPM setup 2025-08-31 14:56:11 +01:00
pheralb 2927e42659 🛠️ Trying nixpacks config for Node & PNPM setup 2025-08-31 14:45:42 +01:00
pheralb d947f7f907 🛠️ Remove nixpacks config file 2025-08-31 14:29:10 +01:00
pheralb d2e418363d 🛠️ Refactor ESLint rules for Svelte components to improve linting accuracy 2025-08-31 14:26:04 +01:00
pheralb 5df7a336ba 🛠️ Fixed eslint errors 2025-08-31 14:25:57 +01:00
pheralb a488bd4c7a 🛠️ Update workflows to use Eslint for linting and set `PUBLIC_SVGL_VERSION` env variable
📦 Build / 🛠️ Build app (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
🧑‍🚀 Check / ⚙️ Linting (push) Has been cancelled
2025-08-31 13:59:13 +01:00
pheralb 411ad69a8f 🛠️ Add nixpacks configuration for PNPM setup and build process 2025-08-31 13:48:10 +01:00
pheralb 68e399d99c 🎨 Design improvements 2025-08-31 13:43:53 +01:00
pheralb d06c87037a 🛠️ Improve svgCard component to support theme-based image rendering 2025-08-31 13:43:31 +01:00
pheralb 73bd5a4f78 🛠️ Create codeBlock UI component + setup shadcn/ui registry 2025-08-31 13:43:17 +01:00
pheralb 26b8f0a2ae 🛠️ Create custom svgl version component 2025-08-30 22:31:51 +01:00
pheralb 85e6bb33b8 🛠️ Update pnpm setup to version 10 in deploy API workflow 2025-08-30 16:26:09 +01:00
pheralb 2f3ef58218 🛠️ Remove version specification for pnpm setup in workflows 2025-08-30 16:25:56 +01:00
pheralb de110ef3f6 📦 Update packageManager field in package.json to specify pnpm version 2025-08-29 15:53:24 +01:00
pheralb dc54f91435 🛠️ Refactor parseReactSvgContent to improve SVG handling and formatting 2025-08-29 14:42:12 +01:00
pheralb dd503d4b64 📦 Delete unused dependencies 2025-08-29 14:42:00 +01:00
pheralb 1844f6bbf0 🛠️ Improve logging format for parseSvgFilename utility 2025-08-29 14:05:25 +01:00
pheralb e2c2ca9c30 📦 Add @sveltejs/adapter-node dependency + config 2025-08-29 14:05:05 +01:00
pheralb 9651440edb 🛠️ Merge branch 'main' of github.com:pheralb/svgl into dev 2025-08-29 13:49:00 +01:00
pheralb 191b1955f4 📄 Initial API docs without svelte components (working) 2025-08-29 13:44:14 +01:00
pheralb 9a9d0440e6 ⚙️ Upgrade pnpm version to 10 in workflows and standardize working directory quotes 2025-08-29 13:43:42 +01:00
pheralb 9d1a9c553d 🎨 Update outline button variant to remove shadow for a cleaner appearance 2025-08-29 12:54:03 +01:00
pheralb 595adb7649 ⚙️ Create pkgManager store for managing package manager selection 2025-08-29 12:46:10 +01:00
pheralb b808f4f70d 🎨 Update popover content styling for improved responsiveness 2025-08-29 12:45:52 +01:00
pheralb 3e282c2057 Initial shadcn/ui integration + improve copySvg component + move addToFavorite 2025-08-29 12:43:17 +01:00
pheralb acabd32b2d ⚙️ Refactor SVG filename parsing and replace toComponentName function 2025-08-29 12:42:22 +01:00
pheralb 47bcca1bdc 🎨 Add select UI component 2025-08-29 12:42:00 +01:00
pheralb 69215ee02c 🛠️ Add bun, npm, pnpm & yarn svelte components 2025-08-29 12:41:42 +01:00
pheralb eb22a7cc00 📦 Add npm & npm-wordmark SVG logos 2025-08-29 12:12:47 +01:00
pheralb c1f1b123e8 🎨 Improve download button styles and add brand assets link in SVG card 2025-08-29 00:15:25 +01:00
pheralb 6ac5318436 🎨 Add shadcn SVG component 2025-08-29 00:14:51 +01:00
pheralb 09291b90fe 🛠️ Refactor sidebar link activation, enhance PageCard and PageHeader components, and improve badge styles 2025-08-29 00:14:31 +01:00
pheralb 62a6dddc34 🛠️ Initial content-collections config + /docs/* route 2025-08-29 00:13:41 +01:00
pheralb 914ee8224f 🎨 Add Shiki light/dark mode styles and line number formatting 2025-08-29 00:12:55 +01:00
pheralb a1d2b142f5 🙈 Add `.content-collections` to gitignore 2025-08-29 00:12:40 +01:00
pheralb 6ef7b23c4b 📦 Add shiki & content-collections dependencies 2025-08-28 18:51:29 +01:00
pheralb 2409996fdd 🛠️ Create shiki utility with highlighter & rehype options 2025-08-28 18:12:38 +01:00
pheralb 33b8d1c30a Add ViewTransitions component to layout for improve navigation 2025-08-28 10:19:51 +01:00
pheralb 1fa52cc69c 🛠️ Fix class name in DialogPrimitive.Title component for consistency 2025-08-28 10:18:26 +01:00
pheralb 1ce0568563 ♻️ Organize SVGs components, create svgs folder 2025-08-28 10:18:18 +01:00
pheralb b85cc58db3 🛠️ Update svgs/svgr API endpoint to use custom parseReact utility with SWC 2025-08-27 19:31:23 +01:00
pheralb 43b6173c0e 🛠️ Add build scripts for shadcn and production 2025-08-27 19:30:26 +01:00
pheralb c50181fa52 🛠️ Refactor SVG optimization and parsing in generate-registry script, use custom utilities 2025-08-27 19:30:14 +01:00
pheralb 146e8fda04 🛠️ Implement SVG optimization utility and update getSource function to use it 2025-08-27 19:29:55 +01:00
pheralb 879f8eb10e Create custom utility to parse SVG code with SWC 2025-08-27 19:29:41 +01:00
pheralb d008538ce1 🧹 Delete tsconfig comments 2025-08-27 18:24:04 +01:00
pheralb 06040d1427 🛠️ Create custom generate-registry script to convert SVGs to TSX + generate shadcn/ui registry 2025-08-27 18:23:43 +01:00
pheralb 6c49a2be2c 📦 Add shadcn, swc & tsx dependencies + build:registry command 2025-08-27 18:19:37 +01:00
pheralb f3a179ecb5 🛠️ Add shadcnCommand property 2025-08-27 18:19:03 +01:00
pheralb 1e414f9f54 🛠️ Fixed apollo SVG path 2025-08-27 18:18:45 +01:00
pheralb d7500fe56e ⚙️ Add `apiGithubUrl` property 2025-08-27 15:33:01 +01:00
pheralb ea5a0b9038 🧹 Clean favorites utility logs 2025-08-27 15:32:45 +01:00
pheralb 1a3efeaede 🚀 Create directory page + fix page components + improve header & sidebar items 2025-08-27 15:32:14 +01:00
pheralb 78cccd21e9 🛠️ Create custom utilityusing Fuse.js for efficient SVG title searching 2025-08-27 14:36:08 +01:00
pheralb da19647abf Create favorite store with localstorage 2025-08-26 11:03:57 +01:00
pheralb cf3918376f 🛠️ Create custom globals config file with app data 2025-08-25 19:07:50 +01:00
pheralb 9c970c0546 ⚙️ Fix type assertion for svgsData to ensure correct typing as iSVG[] 2025-08-25 19:07:15 +01:00
pheralb 0da0ccfc37 🎨 Add new UI components: Container, Grid, Header, ModeToggle, Search, SvgCard & CopySvg, DownloadSvg with improved functionality and styling 2025-08-25 19:07:05 +01:00
pheralb 56d65c0619 🎨 Add separator UI component 2025-08-25 19:06:12 +01:00
pheralb 96ce62705e 🎨 Add radial button variant with custom styles 2025-08-25 19:05:58 +01:00
pheralb 9038d92465 🎨 Initial sidebar UI component 2025-08-25 19:05:47 +01:00
pheralb 60fca6b2ff 🎨 Add badge UI component 2025-08-25 19:04:56 +01:00
pheralb d78acff5a6 🎨 Add sonner UI component 2025-08-25 19:04:40 +01:00
pheralb 110657a028 🔧 Refactor getAstroCode function to use destructured parameters for improved readability 2025-08-25 19:04:23 +01:00
pheralb d563478871 📦 Add angular, astro, github, react, svelte, svgl, twitter, vue & webcomponents svgs 2025-08-25 19:04:10 +01:00
pheralb 5a41f792c3 📦 Add boxes, heart, house & send moving icons 2025-08-25 19:03:20 +01:00
pheralb 502fab1352 🎉 Initial homepage + layout 2025-08-25 19:02:56 +01:00
pheralb e1178a2591 🎨 Add metatags + support for light/dark mode 2025-08-25 14:26:14 +01:00
pheralb 43171151de 📦 Add fuse.js, jszip, mode-watcher & svgo dependencies 2025-08-25 14:25:54 +01:00
pheralb fdd100bf97 ⚙️ Update ESLint rules, add @typescript-eslint/no-unused-vars 2025-08-25 14:25:09 +01:00
pheralb 6761716dca ⚙️ Create clipboard, download, downloadSvg & parse svg utilities 2025-08-25 14:24:44 +01:00
pheralb f53d5418b6 🎨 Add popover UI component 2025-08-21 12:12:17 +01:00
pheralb e4641f01c9 🎨 Add tabs UI component 2025-08-21 12:12:01 +01:00
pheralb 809d763841 🎨 Add dialog UI component 2025-08-21 11:58:55 +01:00
pheralb 313a34cd00 🎨 Add button UI component 2025-08-21 11:58:43 +01:00
pheralb 5d3a51bca9 🎨 Add input UI component 2025-08-21 11:58:34 +01:00
pheralb c34d3bfd65 📦 Add bits-ui, @internationalized/date, @lucide/svelte & tailwind-variants 2025-08-21 11:58:16 +01:00
pheralb 5d2ec852cf ⚙️ Add utility types for component props handling 2025-08-21 11:57:00 +01:00
pheralb 1eff7b8788 🎨 Add new fonts 2025-08-21 11:56:39 +01:00
pheralb e671ae8d02 📦 Add shadcn/ui dependencies 2025-08-21 10:55:32 +01:00
pheralb 257639c1a6 🛠️ Fix import styles 2025-08-21 10:54:08 +01:00
pheralb 42d938aa44 🛠️ Add custom ts alias 2025-08-21 10:53:52 +01:00
pheralb 0ef7c50322 Add initial shadcn configuration files and utilities 2025-08-21 10:53:41 +01:00
pheralb e49dae5460 🛠️ Add prettier & eslint commands 2025-08-21 10:34:51 +01:00
pheralb 1abc7ee26e 🛠️ Fixed eslint errors 2025-08-21 10:31:51 +01:00
pheralb d32667051d 🎨 Improve eslint config structure 2025-08-21 10:31:39 +01:00
pheralb 459457a7e1 Initial commit with Sveltekit + format files 2025-08-21 10:26:07 +01:00
1135 changed files with 20059 additions and 9717 deletions
+19
View File
@@ -0,0 +1,19 @@
Dockerfile
.dockerignore
.git
.gitignore
.gitattributes
README.md
.npmrc
.prettierrc
prettier.config.mjs
.eslintrc.cjs
eslint.config.mjs
.graphqlrc
.editorconfig
.svelte-kit
.vscode
node_modules
build
package
**/.env
-13
View File
@@ -1,13 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
+17 -7
View File
@@ -4,6 +4,7 @@ on:
push:
branches:
- main
- dev
jobs:
build-app:
@@ -12,17 +13,26 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup pnpm 9
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
version: 9
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build app
run: pnpm vite:build
run: pnpm build
env:
UPSTASH_REDIS_TOKEN: ${{ secrets.UPSTASH_REDIS_TOKEN }}
UPSTASH_REDIS_URL: ${{ secrets.UPSTASH_REDIS_URL }}
SVGL_API_REQUESTS: ${{ secrets.SVGL_API_REQUESTS }}
PUBLIC_SVGL_VERSION: v5
+18 -19
View File
@@ -4,45 +4,44 @@ on:
push:
branches:
- main
- next
- dev
pull_request:
branches:
- main
- next
- dev
jobs:
vitest:
lint:
runs-on: ubuntu-latest
name: ⚡ Testing with Vitest
name: ⚙️ Linting
steps:
- uses: actions/checkout@v4
- name: Setup pnpm 9
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: Install dependencies
run: pnpm install
- name: Run Vitest
run: pnpm test
- name: Run Eslint
run: pnpm lint
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 9
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- 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
+3 -5
View File
@@ -12,10 +12,8 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup pnpm 9
uses: pnpm/action-setup@v2
with:
version: 9
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Install global dependencies
run: pnpm install
@@ -25,4 +23,4 @@ jobs:
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
packageManager: pnpm
workingDirectory: 'api-routes'
workingDirectory: "api-routes"
+13 -20
View File
@@ -1,34 +1,27 @@
# Dependencies
node_modules
package-lock.json
yarn.lock
# Folders
# Content Collections
.content-collections
# Output
.output
.vercel
.netlify
.wrangler
/.svelte-kit
/build
dist
/package
.idea/
# Hono
.wrangler
.dev.vars
# Vercel
.vercel
# Logs
# OS
.DS_Store
Thumbs.db
# Environment variables
# Env
.env
.env.*
!.env.example
!.env.test
# Vite files
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
src/figma/dist
# Lychee files
.lycheecache
+7 -11
View File
@@ -1,13 +1,9 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
# Package Managers
package-lock.json
pnpm-lock.yaml
yarn.lock
bun.lock
bun.lockb
# Miscellaneous
/static/
+37
View File
@@ -0,0 +1,37 @@
FROM node:22.17.0-alpine AS base
# Install pnpm
RUN npm install -g pnpm@10.13.1
# Set working directory
WORKDIR /app
# Install dependencies with cache
FROM base AS deps
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
# Build the application
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm run check:size
RUN pnpm run build:prod
# Production image
FROM node:22.17.0-alpine AS runner
WORKDIR /app
# Copy necessary files from builder
COPY --from=builder /app/build ./build
COPY --from=builder /app/node_modules ./node_modules
COPY package.json ./
# Set production environment
ENV NODE_ENV=production
# Expose port
EXPOSE 3000
# Start the server
CMD ["node", "build"]
+94 -42
View File
@@ -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>&nbsp;✦&nbsp;</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>&nbsp;✦&nbsp;</span>
<a href="#-getting-started">
Submit logo
Getting Started
</a>
<span>&nbsp;✦&nbsp;</span>
<a href="#-extensions">
<a href="https://svgl.app/extensions" target="_blank">
Extensions
</a>
<span>&nbsp;✦&nbsp;</span>
<a href="https://svgl.app/api">
API
<a href="#-stack">
Stack
</a>
<span>&nbsp;✦&nbsp;</span>
<a href="#%EF%B8%8F-contributing">
<a href="#-contributing">
Contributing
</a>
<span>&nbsp;✦&nbsp;</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
+7 -6
View File
@@ -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": {
@@ -11,10 +11,11 @@
},
"dependencies": {
"@upstash/ratelimit": "2.0.6",
"hono": "4.8.12"
"@upstash/redis": "1.35.4",
"hono": "4.9.8"
},
"devDependencies": {
"@cloudflare/workers-types": "4.20250805.0",
"wrangler": "4.28.0"
"@cloudflare/workers-types": "4.20250924.0",
"wrangler": "4.40.0"
}
}
+78 -75
View File
@@ -10,17 +10,20 @@ importers:
dependencies:
'@upstash/ratelimit':
specifier: 2.0.6
version: 2.0.6(@upstash/redis@1.34.0)
version: 2.0.6(@upstash/redis@1.35.4)
'@upstash/redis':
specifier: 1.35.4
version: 1.35.4
hono:
specifier: 4.8.12
version: 4.8.12
specifier: 4.9.8
version: 4.9.8
devDependencies:
'@cloudflare/workers-types':
specifier: 4.20250805.0
version: 4.20250805.0
specifier: 4.20250924.0
version: 4.20250924.0
wrangler:
specifier: 4.28.0
version: 4.28.0(@cloudflare/workers-types@4.20250805.0)
specifier: 4.40.0
version: 4.40.0(@cloudflare/workers-types@4.20250924.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.4':
resolution: {integrity: sha512-KIjbu/Dt50zseJIoOOK5y4eYpSojD9+xxkePYVK1Rg9k/p/st4YyMtz1Clju/zrenJHrOH+AAcjNArOPMwH4Bw==}
peerDependencies:
unenv: 2.0.0-rc.19
workerd: ^1.20250802.0
unenv: 2.0.0-rc.21
workerd: ^1.20250912.0
peerDependenciesMeta:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20250803.0':
resolution: {integrity: sha512-6QciMnJp1p3F1qUiN0LaLfmw7SuZA/gfUBOe8Ft81pw16JYZ3CyiqIKPJvc1SV8jgDx8r+gz/PRi1NwOMt329A==}
'@cloudflare/workerd-darwin-64@1.20250924.0':
resolution: {integrity: sha512-/+nWoNDIzdQaQib7MrWYEfeDt1vA40Ah68nXlZGXHonkIqJvkjaTP8dzdKZLuwnQokiV/SpnAXNMH0WGH31XMw==}
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.20250924.0':
resolution: {integrity: sha512-UAjC5mra+WNWy6jMbIDe9orsFmYvvMlfvZdUyn5p3NlQhhU6cc4FkFuXJ/bV+6oVw5hIhlLlFCTnsGatki/uHg==}
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.20250924.0':
resolution: {integrity: sha512-IcwaoZFXGHq+yOBEj91QZH4qU61ws5upE7T43wVcrUAk8VXgxL12IGUVkMCEqfFXTO40PjKZBmK16B2q1HoFow==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20250803.0':
resolution: {integrity: sha512-RmrtUYLRUg6djKU7Z6yebS6YGJVnaDVY6bbXca+2s26vw4ibJDOTPLuBHFQF62Grw3fAfsNbjQh5i14vG2mqUg==}
'@cloudflare/workerd-linux-arm64@1.20250924.0':
resolution: {integrity: sha512-NgKG/cJiRNoJFa8QqweG0/bpkrUYKpR9mA9/qLJcGiwfvJrfK9b+ucw0lCru1BVMlyuS3kWDjagjMWqfujdBkA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20250803.0':
resolution: {integrity: sha512-uLV8gdudz36o9sUaAKbBxxTwZwLFz1KyW7QpBvOo4+r3Ib8yVKXGiySIMWGD7A0urSMrjf3e5LlLcJKgZUOjMA==}
'@cloudflare/workerd-windows-64@1.20250924.0':
resolution: {integrity: sha512-PntewemtjgLO2+8Gjw3G/NowDjpWZNKpKk/n4KmOQaWS9jIRq3IG1LkTqxj/BbMXqa4Oyrywk2kdqspj6QllOw==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
'@cloudflare/workers-types@4.20250805.0':
resolution: {integrity: sha512-HOt0lqFiw5WzhvxH/IViMAWI/zwzokCSx33DlRnJqECT9khskK9X4Jrw/+IiAprJ5YloiFxK8Xn1oGbsabdUWg==}
'@cloudflare/workers-types@4.20250924.0':
resolution: {integrity: sha512-pi/OYCroYdwjFWbkciC5oYzlyimDF4ymNotDK0zpLNq91Ogz1IXnVBAYV7fCFAJ/zIxU0RiIBrJIOll/C0pR9Q==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -367,8 +370,8 @@ packages:
peerDependencies:
'@upstash/redis': ^1.34.3
'@upstash/redis@1.34.0':
resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==}
'@upstash/redis@1.35.4':
resolution: {integrity: sha512-WE1ZnhFyBiIjTDW13GbO6JjkiMVVjw5VsvS8ENmvvJsze/caMQ5paxVD44+U68IUVmkXcbsLSoE+VIYsHtbQEw==}
acorn-walk@8.3.2:
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
@@ -400,9 +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==}
@@ -433,8 +433,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.9.8:
resolution: {integrity: sha512-JW8Bb4RFWD9iOKxg5PbUarBYGM99IcxFl2FPBo2gSJO11jjUDqlP1Bmfyqt8Z/dGhIQ63PMA9LdcLefXyIasyg==}
engines: {node: '>=16.9.0'}
is-arrayish@0.3.2:
@@ -449,8 +449,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
miniflare@4.20250803.0:
resolution: {integrity: sha512-1tmCLfmMw0SqRBF9PPII9CVLQRzOrO7uIBmSng8BMSmtgs2kos7OeoM0sg6KbR9FrvP/zAniLyZuCAMAjuu4fQ==}
miniflare@4.20250924.0:
resolution: {integrity: sha512-eQuWHklTeYYOil7sPPWo7Wrw86I4oac1kGAYfYcjg5dqMgMAiPUHvUWXMlTvW8ON6q33Ew23AsGDirm+Bea9ig==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -489,24 +489,27 @@ packages:
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
undici@7.13.0:
resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==}
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
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.21:
resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==}
workerd@1.20250803.0:
resolution: {integrity: sha512-oYH29mE/wNolPc32NHHQbySaNorj6+KASUtOvQHySxB5mO1NWdGuNv49woxNCF5971UYceGQndY+OLT+24C3wQ==}
workerd@1.20250924.0:
resolution: {integrity: sha512-ovO2vwRCcMOlOm3bNwQQrVb8KDcewE/3rjfbZAYSF535BQQDUZ9dE1kyGBYlGx4W5udH3kqmOr+0YqTBLlycyA==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.28.0:
resolution: {integrity: sha512-y0yHIuScpok9oSErLqDbxkBChC2+/jZpvqMg2NxOto1JCyUtDUuKljOfcVMaI48d9GuhOCSoWSumYxLAHNxaLA==}
wrangler@4.40.0:
resolution: {integrity: sha512-HCPNUz599h9emi6qjppn92kxS6E12QvD0A3K087CZFEysw6lO1saZUdJ8azk0LsYGYDnrkBs5TzUOEfpuccwWA==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20250803.0
'@cloudflare/workers-types': ^4.20250924.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -538,28 +541,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.4(unenv@2.0.0-rc.21)(workerd@1.20250924.0)':
dependencies:
unenv: 2.0.0-rc.19
unenv: 2.0.0-rc.21
optionalDependencies:
workerd: 1.20250803.0
workerd: 1.20250924.0
'@cloudflare/workerd-darwin-64@1.20250803.0':
'@cloudflare/workerd-darwin-64@1.20250924.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20250803.0':
'@cloudflare/workerd-darwin-arm64@1.20250924.0':
optional: true
'@cloudflare/workerd-linux-64@1.20250803.0':
'@cloudflare/workerd-linux-64@1.20250924.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20250803.0':
'@cloudflare/workerd-linux-arm64@1.20250924.0':
optional: true
'@cloudflare/workerd-windows-64@1.20250803.0':
'@cloudflare/workerd-windows-64@1.20250924.0':
optional: true
'@cloudflare/workers-types@4.20250805.0': {}
'@cloudflare/workers-types@4.20250924.0': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@@ -747,16 +750,16 @@ snapshots:
'@upstash/core-analytics@0.0.10':
dependencies:
'@upstash/redis': 1.34.0
'@upstash/redis': 1.35.4
'@upstash/ratelimit@2.0.6(@upstash/redis@1.34.0)':
'@upstash/ratelimit@2.0.6(@upstash/redis@1.35.4)':
dependencies:
'@upstash/core-analytics': 0.0.10
'@upstash/redis': 1.34.0
'@upstash/redis': 1.35.4
'@upstash/redis@1.34.0':
'@upstash/redis@1.35.4':
dependencies:
crypto-js: 4.2.0
uncrypto: 0.1.3
acorn-walk@8.3.2: {}
@@ -782,8 +785,6 @@ snapshots:
cookie@1.0.2: {}
crypto-js@4.2.0: {}
defu@6.1.4: {}
detect-libc@2.0.3: {}
@@ -827,7 +828,7 @@ snapshots:
glob-to-regexp@0.4.1: {}
hono@4.8.12: {}
hono@4.9.8: {}
is-arrayish@0.3.2: {}
@@ -835,7 +836,7 @@ snapshots:
mime@3.0.0: {}
miniflare@4.20250803.0:
miniflare@4.20250924.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -844,8 +845,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.20250924.0
ws: 8.18.0
youch: 4.1.0-beta.10
zod: 3.22.3
@@ -900,9 +901,11 @@ snapshots:
ufo@1.6.1: {}
undici@7.13.0: {}
uncrypto@0.1.3: {}
unenv@2.0.0-rc.19:
undici@7.14.0: {}
unenv@2.0.0-rc.21:
dependencies:
defu: 6.1.4
exsolve: 1.0.7
@@ -910,26 +913,26 @@ snapshots:
pathe: 2.0.3
ufo: 1.6.1
workerd@1.20250803.0:
workerd@1.20250924.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.20250924.0
'@cloudflare/workerd-darwin-arm64': 1.20250924.0
'@cloudflare/workerd-linux-64': 1.20250924.0
'@cloudflare/workerd-linux-arm64': 1.20250924.0
'@cloudflare/workerd-windows-64': 1.20250924.0
wrangler@4.28.0(@cloudflare/workers-types@4.20250805.0):
wrangler@4.40.0(@cloudflare/workers-types@4.20250924.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.4(unenv@2.0.0-rc.21)(workerd@1.20250924.0)
blake3-wasm: 2.1.5
esbuild: 0.25.4
miniflare: 4.20250803.0
miniflare: 4.20250924.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.19
workerd: 1.20250803.0
unenv: 2.0.0-rc.21
workerd: 1.20250924.0
optionalDependencies:
'@cloudflare/workers-types': 4.20250805.0
'@cloudflare/workers-types': 4.20250924.0
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
+84 -60
View File
@@ -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,
);
}
});
+8 -6
View File
@@ -1,14 +1,16 @@
{
"$schema": "https://shadcn-svelte.com/schema.json",
"style": "new-york",
"tailwind": {
"config": "tailwind.config.js",
"css": "src\\app.css",
"css": "src\\styles\\globals.css",
"baseColor": "neutral"
},
"aliases": {
"components": "@/ui",
"utils": "@/utils"
"components": "@/components",
"utils": "@/utils",
"ui": "@/components/ui",
"hooks": "@/hooks",
"lib": "@/lib"
},
"typescript": true
"typescript": true,
"registry": "https://shadcn-svelte.com/registry"
}
+59
View File
@@ -0,0 +1,59 @@
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";
// 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({
name: "docs",
directory: "src/docs",
include: "**/*.md",
schema: z.object({
title: z.string(),
description: 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],
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}`,
};
},
});
export default defineConfig({
collections: [docs],
});
-33
View File
@@ -1,33 +0,0 @@
import js from '@eslint/js';
import ts from 'typescript-eslint';
import svelte from 'eslint-plugin-svelte';
import prettier from 'eslint-config-prettier';
import globals from 'globals';
/** @type {import('eslint').Linter.Config[]} */
export default [
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs['flat/recommended'],
prettier,
...svelte.configs['flat/prettier'],
{
languageOptions: {
globals: {
...globals.browser,
...globals.node
}
}
},
{
files: ['**/*.svelte'],
languageOptions: {
parserOptions: {
parser: ts.parser
}
}
},
{
ignores: ['build/', '.svelte-kit/', 'dist/']
}
];
+63
View File
@@ -0,0 +1,63 @@
import js from "@eslint/js";
import globals from "globals";
import { fileURLToPath } from "node:url";
import { includeIgnoreFile } from "@eslint/compat";
// Plugins:
import ts from "typescript-eslint";
import svelte from "eslint-plugin-svelte";
import prettier from "eslint-config-prettier";
// Svelte Config:
import svelteConfig from "./svelte.config.js";
// Ignore files:
const gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url));
export default [
includeIgnoreFile(gitignorePath),
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs.recommended,
prettier,
...svelte.configs.prettier,
{
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",
},
},
{
files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"],
languageOptions: {
parserOptions: {
projectService: true,
extraFileExtensions: [".svelte"],
parser: ts.parser,
svelteConfig,
},
},
rules: {
"svelte/no-unused-svelte-ignore": "warn",
"svelte/no-useless-mustaches": "warn",
"svelte/require-each-key": "warn",
"svelte/no-at-html-tags": "off",
},
},
];
-51
View File
@@ -1,51 +0,0 @@
import { escapeSvelte } from 'mdsvex';
import { createHighlighter, makeSingletonHighlighter } from 'shiki';
// Markdown Plugins
import remarkGfm from 'remark-gfm';
import rehypeSlug from 'rehype-slug';
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
// Highlighter
const getHighlighter = makeSingletonHighlighter(createHighlighter);
/** @type {import('mdsvex').MdsvexOptions} */
const mdsvexOptions = {
remarkPlugins: [[remarkGfm]],
rehypePlugins: [
[rehypeSlug],
[
rehypeAutolinkHeadings,
{
behavior: 'wrap',
properties: {
className: [
`before:content-['#'] before:absolute before:-ml-[1em] before:text-neutral-100/0 hover:before:text-neutral-200/50 pl-[1em] -ml-[1em]`
]
}
}
]
],
extensions: ['.md'],
highlight: {
highlighter: async (code, lang = 'text') => {
const highlighter = await getHighlighter({
themes: ['github-light', 'github-dark'],
langs: ['javascript', 'typescript', 'bash', 'json', 'html']
});
await highlighter.loadLanguage('javascript', 'typescript', 'bash', 'html');
const html = escapeSvelte(
highlighter.codeToHtml(code, {
lang,
themes: {
light: 'github-light',
dark: 'github-dark'
}
})
);
return `{@html \`${html}\` }`;
}
}
};
export { mdsvexOptions };
+63 -60
View File
@@ -1,11 +1,12 @@
{
"name": "@pheralb/svgl",
"author": "@pheralb_",
"version": "4.6.1",
"version": "5.0.0",
"description": "A beautiful library with SVG logos.",
"private": true,
"license": "MIT",
"type": "module",
"packageManager": "pnpm@10.13.1",
"keywords": [
"svgs",
"logos",
@@ -19,77 +20,79 @@
"type": "git",
"url": "git+https://github.com/pheralb/svgl.git"
},
"pnpm": {
"onlyBuiltDependencies": [
"esbuild"
]
},
"scripts": {
"dev": "vite dev",
"host": "vite dev --host",
"build": "pnpm run prebuild && vite build",
"prebuild": "cd ./utils/check-size && pnpm install && pnpm run start",
"vite:build": "vite build",
"build": "vite build",
"preview": "vite preview",
"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": "cd ./utils/check-size && npm run start",
"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": "cd ./utils/fix-viewbox && npm run start",
"test": "vitest run",
"lint": "prettier --plugin-search-dir . --check . && eslint .",
"format": "prettier --plugin-search-dir . --write .",
"dev:figma": "concurrently -n plugin,svelte 'npm run build:plugin -- --watch --define:SITE_URL=\\\"http://localhost:5173?figma=1\\\"' 'npm run dev'",
"build:plugin": "esbuild src/figma/code.ts --bundle --target=es6 --loader:.svg=text --outfile=src/figma/dist/code.js",
"build:figma": "concurrently -n plugin,svelte 'npm run build:plugin -- --define:SITE_URL=\\\"$npm_package_config_siteURL\\\"' 'npm run build'"
"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 ./utils/generate-registry.ts"
},
"dependencies": {
"@figma/plugin-typings": "1.115.0",
"@svelte-dev/pretty-code": "1.0.0",
"@svgr/core": "8.1.0",
"@svgr/plugin-jsx": "8.1.0",
"@upstash/ratelimit": "2.0.6",
"@upstash/redis": "1.35.3",
"clsx": "2.1.1",
"downloadjs": "1.4.7",
"@shikijs/langs": "3.12.0",
"@shikijs/themes": "3.12.0",
"fuse.js": "7.1.0",
"jszip": "3.10.1",
"lucide-svelte": "0.525.0",
"mode-watcher": "0.5.1",
"rehype-autolink-headings": "7.1.0",
"rehype-slug": "6.0.0",
"remark-gfm": "4.0.1",
"shiki": "3.7.0",
"svelte-sonner": "0.3.28",
"mode-watcher": "1.1.0",
"shadcn": "3.0.0",
"shiki": "3.12.0",
"svgo": "4.0.0",
"tailwind-merge": "2.6.0",
"tailwind-variants": "0.3.1"
"tsx": "4.20.5"
},
"devDependencies": {
"@sveltejs/adapter-auto": "3.2.5",
"@sveltejs/adapter-node": "5.2.5",
"@sveltejs/kit": "2.5.28",
"@sveltejs/vite-plugin-svelte": "3.1.2",
"@tailwindcss/typography": "0.5.16",
"@types/downloadjs": "1.4.6",
"@types/eslint": "9.6.1",
"@types/node": "22.5.5",
"autoprefixer": "10.4.21",
"bits-ui": "0.22.0",
"concurrently": "9.0.1",
"esbuild": "0.24.0",
"eslint": "9.11.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-svelte": "2.44.0",
"globals": "15.9.0",
"mdsvex": "0.12.5",
"postcss": "8.5.3",
"prettier": "3.3.3",
"prettier-plugin-svelte": "3.2.6",
"prettier-plugin-tailwindcss": "0.6.6",
"svelte": "4.2.20",
"svelte-check": "4.0.9",
"sveltekit-search-params": "3.0.0",
"tailwindcss": "3.4.17",
"tslib": "2.7.0",
"typescript": "5.6.2",
"typescript-eslint": "8.6.0",
"vite": "5.4.7",
"vitest": "2.1.1"
"@content-collections/core": "0.11.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.544.0",
"@shikijs/rehype": "3.12.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.11.3",
"clsx": "2.1.1",
"eslint": "9.33.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-svelte": "3.11.0",
"github-slugger": "2.0.0",
"globals": "16.3.0",
"prettier": "3.6.2",
"prettier-plugin-svelte": "3.4.0",
"prettier-plugin-tailwindcss": "0.6.14",
"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",
"typescript-eslint": "8.40.0",
"unist-util-visit": "5.0.0",
"vite": "7.1.3",
"zod": "4.1.4"
}
}
+3435 -2626
View File
@@ -8,515 +8,468 @@ importers:
.:
dependencies:
'@figma/plugin-typings':
specifier: 1.115.0
version: 1.115.0
'@svelte-dev/pretty-code':
specifier: 1.0.0
version: 1.0.0(shikiji@0.10.2)
'@svgr/core':
specifier: 8.1.0
version: 8.1.0(typescript@5.6.2)
'@svgr/plugin-jsx':
specifier: 8.1.0
version: 8.1.0(@svgr/core@8.1.0(typescript@5.6.2))
'@upstash/ratelimit':
specifier: 2.0.6
version: 2.0.6(@upstash/redis@1.35.3)
'@upstash/redis':
specifier: 1.35.3
version: 1.35.3
clsx:
specifier: 2.1.1
version: 2.1.1
downloadjs:
specifier: 1.4.7
version: 1.4.7
'@shikijs/langs':
specifier: 3.12.0
version: 3.12.0
'@shikijs/themes':
specifier: 3.12.0
version: 3.12.0
fuse.js:
specifier: 7.1.0
version: 7.1.0
jszip:
specifier: 3.10.1
version: 3.10.1
lucide-svelte:
specifier: 0.525.0
version: 0.525.0(svelte@4.2.20)
mode-watcher:
specifier: 0.5.1
version: 0.5.1(svelte@4.2.20)
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)
shiki:
specifier: 3.12.0
version: 3.12.0
svgo:
specifier: 4.0.0
version: 4.0.0
tsx:
specifier: 4.20.5
version: 4.20.5
devDependencies:
'@content-collections/core':
specifier: 0.11.0
version: 0.11.0(typescript@5.9.2)
'@content-collections/markdown':
specifier: 0.1.4
version: 0.1.4(@content-collections/core@0.11.0(typescript@5.9.2))
'@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))
'@eslint/compat':
specifier: 1.3.2
version: 1.3.2(eslint@9.33.0(jiti@2.5.1))
'@eslint/js':
specifier: 9.33.0
version: 9.33.0
'@internationalized/date':
specifier: 3.8.2
version: 3.8.2
'@lucide/svelte':
specifier: 0.544.0
version: 0.544.0(svelte@5.38.2)
'@shikijs/rehype':
specifier: 3.12.0
version: 3.12.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)))
'@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)))
'@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))
'@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))
'@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))
'@types/node':
specifier: 24.3.0
version: 24.3.0
bits-ui:
specifier: 2.11.3
version: 2.11.3(@internationalized/date@3.8.2)(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)
eslint-config-prettier:
specifier: 10.1.8
version: 10.1.8(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-svelte:
specifier: 3.11.0
version: 3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2)
github-slugger:
specifier: 2.0.0
version: 2.0.0
globals:
specifier: 16.3.0
version: 16.3.0
prettier:
specifier: 3.6.2
version: 3.6.2
prettier-plugin-svelte:
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)
rehype-autolink-headings:
specifier: 7.1.0
version: 7.1.0
rehype-slug:
specifier: 6.0.0
version: 6.0.0
remark-gfm:
specifier: 4.0.1
version: 4.0.1
shiki:
specifier: 3.7.0
version: 3.7.0
svelte-sonner:
specifier: 0.3.28
version: 0.3.28(svelte@4.2.20)
svgo:
specifier: 4.0.0
version: 4.0.0
tailwind-merge:
specifier: 2.6.0
version: 2.6.0
tailwind-variants:
specifier: 0.3.1
version: 0.3.1(tailwindcss@3.4.17)
devDependencies:
'@sveltejs/adapter-auto':
specifier: 3.2.5
version: 3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))
'@sveltejs/adapter-node':
specifier: 5.2.5
version: 5.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))
'@sveltejs/kit':
specifier: 2.5.28
version: 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@sveltejs/vite-plugin-svelte':
specifier: 3.1.2
version: 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@tailwindcss/typography':
specifier: 0.5.16
version: 0.5.16(tailwindcss@3.4.17)
'@types/downloadjs':
specifier: 1.4.6
version: 1.4.6
'@types/eslint':
specifier: 9.6.1
version: 9.6.1
'@types/node':
specifier: 22.5.5
version: 22.5.5
autoprefixer:
specifier: 10.4.21
version: 10.4.21(postcss@8.5.3)
bits-ui:
specifier: 0.22.0
version: 0.22.0(svelte@4.2.20)
concurrently:
specifier: 9.0.1
version: 9.0.1
esbuild:
specifier: 0.24.0
version: 0.24.0
eslint:
specifier: 9.11.0
version: 9.11.0(jiti@1.21.7)
eslint-config-prettier:
specifier: 9.1.0
version: 9.1.0(eslint@9.11.0(jiti@1.21.7))
eslint-plugin-svelte:
specifier: 2.44.0
version: 2.44.0(eslint@9.11.0(jiti@1.21.7))(svelte@4.2.20)
globals:
specifier: 15.9.0
version: 15.9.0
mdsvex:
specifier: 0.12.5
version: 0.12.5(svelte@4.2.20)
postcss:
specifier: 8.5.3
version: 8.5.3
prettier:
specifier: 3.3.3
version: 3.3.3
prettier-plugin-svelte:
specifier: 3.2.6
version: 3.2.6(prettier@3.3.3)(svelte@4.2.20)
prettier-plugin-tailwindcss:
specifier: 0.6.6
version: 0.6.6(prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20))(prettier@3.3.3)
svelte:
specifier: 4.2.20
version: 4.2.20
specifier: 5.38.2
version: 5.38.2
svelte-check:
specifier: 4.0.9
version: 4.0.9(picomatch@4.0.2)(svelte@4.2.20)(typescript@5.6.2)
sveltekit-search-params:
specifier: 3.0.0
version: 3.0.0(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
specifier: 4.3.1
version: 4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2)
svelte-sonner:
specifier: 1.0.5
version: 1.0.5(svelte@5.38.2)
tailwind-merge:
specifier: 3.3.1
version: 3.3.1
tailwind-variants:
specifier: 1.0.0
version: 1.0.0(tailwindcss@4.1.12)
tailwindcss:
specifier: 3.4.17
version: 3.4.17
tslib:
specifier: 2.7.0
version: 2.7.0
specifier: 4.1.12
version: 4.1.12
tw-animate-css:
specifier: 1.3.7
version: 1.3.7
typescript:
specifier: 5.6.2
version: 5.6.2
specifier: 5.9.2
version: 5.9.2
typescript-eslint:
specifier: 8.6.0
version: 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
specifier: 8.40.0
version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
unist-util-visit:
specifier: 5.0.0
version: 5.0.0
vite:
specifier: 5.4.7
version: 5.4.7(@types/node@22.5.5)
vitest:
specifier: 2.1.1
version: 2.1.1(@types/node@22.5.5)
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)
zod:
specifier: 4.1.4
version: 4.1.4
packages:
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
'@antfu/ni@25.0.0':
resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==}
hasBin: true
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
'@babel/compat-data@7.26.8':
resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
'@babel/compat-data@7.28.0':
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
engines: {node: '>=6.9.0'}
'@babel/core@7.26.9':
resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
'@babel/core@7.28.3':
resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.26.9':
resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==}
'@babel/generator@7.28.3':
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.26.5':
resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
'@babel/helper-annotate-as-pure@7.27.3':
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.25.9':
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
'@babel/helper-compilation-targets@7.27.2':
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-transforms@7.26.0':
resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
'@babel/helper-create-class-features-plugin@7.28.3':
resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
'@babel/helper-globals@7.28.0':
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
'@babel/helper-member-expression-to-functions@7.27.1':
resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.25.9':
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
'@babel/helper-module-imports@7.27.1':
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
'@babel/helpers@7.26.9':
resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==}
'@babel/helper-module-transforms@7.28.3':
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-optimise-call-expression@7.27.1':
resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.26.9':
resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
'@babel/helper-plugin-utils@7.27.1':
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
'@babel/helper-replace-supers@7.27.1':
resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.27.1':
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.27.1':
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
'@babel/helpers@7.28.3':
resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.28.3':
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/template@7.26.9':
resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
'@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-typescript@7.28.0':
resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
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'}
'@babel/traverse@7.26.9':
resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==}
'@babel/traverse@7.28.3':
resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==}
engines: {node: '>=6.9.0'}
'@babel/types@7.26.9':
resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
'@babel/types@7.28.2':
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
'@bundled-es-modules/cookie@2.0.1':
resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
'@esbuild/aix-ppc64@0.24.0':
resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
'@bundled-es-modules/statuses@1.0.1':
resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
'@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==}
peerDependencies:
typescript: ^5.0.2
'@content-collections/integrations@0.3.0':
resolution: {integrity: sha512-He+TXQC94LO/1bNygTioh3J5H0K/mkFVPVkIrM5kHybprvi5bRmGa91ViZ6K6icFAzGH4jFD0iasR56fZcMGTA==}
peerDependencies:
'@content-collections/core': 0.x
'@content-collections/markdown@0.1.4':
resolution: {integrity: sha512-hUi+O9SDmYmn63aiftSw1KtmSZIjc6ger42rfQobBhPx+3n8kTJsWm1Cs//yU5iIAVRKyLX3qrtlheiOPdJT9w==}
peerDependencies:
'@content-collections/core': 0.x
'@content-collections/vite@0.2.7':
resolution: {integrity: sha512-aGKZfv/iRWdQGGYcX5QFypCYgXY/K9dfJYTCX2KaWDxMcYgsvd02v1sX1sPkqenj/94trxzW37dD5oOUgOocQg==}
peerDependencies:
'@content-collections/core': ^0.x
vite: ^5 || ^6 || ^7
'@dotenvx/dotenvx@1.49.0':
resolution: {integrity: sha512-M1cyP6YstFQCjih54SAxCqHLMMi8QqV8tenpgGE48RTXWD7vfMYJiw/6xcCDpS2h28AcLpTsFCZA863Ge9yxzA==}
hasBin: true
'@ecies/ciphers@0.2.4':
resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==}
engines: {bun: '>=1', deno: '>=2', node: '>=16'}
peerDependencies:
'@noble/ciphers': ^1.0.0
'@esbuild/aix-ppc64@0.25.9':
resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
'@esbuild/android-arm64@0.21.5':
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm64@0.24.0':
resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
'@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.21.5':
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
'@esbuild/android-arm@0.24.0':
resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
'@esbuild/android-arm@0.25.9':
resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.21.5':
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
'@esbuild/android-x64@0.24.0':
resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
'@esbuild/android-x64@0.25.9':
resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.21.5':
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-arm64@0.24.0':
resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
'@esbuild/darwin-arm64@0.25.9':
resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.21.5':
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
'@esbuild/darwin-x64@0.24.0':
resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
'@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.21.5':
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-arm64@0.24.0':
resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
'@esbuild/freebsd-arm64@0.25.9':
resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.21.5':
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
'@esbuild/freebsd-x64@0.24.0':
resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
'@esbuild/freebsd-x64@0.25.9':
resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.21.5':
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm64@0.24.0':
resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
'@esbuild/linux-arm64@0.25.9':
resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.21.5':
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
'@esbuild/linux-arm@0.24.0':
resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
'@esbuild/linux-arm@0.25.9':
resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.21.5':
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-ia32@0.24.0':
resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
'@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.21.5':
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-loong64@0.24.0':
resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
'@esbuild/linux-loong64@0.25.9':
resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.21.5':
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-mips64el@0.24.0':
resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
'@esbuild/linux-mips64el@0.25.9':
resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.21.5':
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-ppc64@0.24.0':
resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
'@esbuild/linux-ppc64@0.25.9':
resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.21.5':
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-riscv64@0.24.0':
resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
'@esbuild/linux-riscv64@0.25.9':
resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.21.5':
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-s390x@0.24.0':
resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
'@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.21.5':
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
'@esbuild/linux-x64@0.24.0':
resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
'@esbuild/linux-x64@0.25.9':
resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-x64@0.21.5':
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
cpu: [x64]
'@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.24.0':
resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
'@esbuild/netbsd-x64@0.25.9':
resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-arm64@0.24.0':
resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
'@esbuild/openbsd-arm64@0.25.9':
resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.21.5':
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
'@esbuild/openbsd-x64@0.24.0':
resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
'@esbuild/openbsd-x64@0.25.9':
resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.21.5':
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
'@esbuild/openharmony-arm64@0.25.9':
resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
'@esbuild/sunos-x64@0.24.0':
resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
'@esbuild/sunos-x64@0.25.9':
resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.21.5':
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-arm64@0.24.0':
resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
'@esbuild/win32-arm64@0.25.9':
resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.21.5':
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-ia32@0.24.0':
resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
'@esbuild/win32-ia32@0.25.9':
resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.21.5':
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@esbuild/win32-x64@0.24.0':
resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
'@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.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -525,41 +478,59 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.18.0':
resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
'@eslint/compat@1.3.2':
resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.40 || 9
peerDependenciesMeta:
eslint:
optional: true
'@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.12.0':
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
'@eslint/config-helpers@0.3.1':
resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.0':
resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
'@eslint/core@0.15.2':
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.11.0':
resolution: {integrity: sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==}
'@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==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.2.7':
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
'@eslint/plugin-kit@0.3.5':
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@figma/plugin-typings@1.115.0':
resolution: {integrity: sha512-qAnJuOkZDXKzMacnkugoi9rIIQ9/P3CP0zqsSklXuXhREWsqOTua35Fpkxmp25DHjPqs6tC+eVuVWvKWHHq4pA==}
'@floating-ui/core@1.7.3':
resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
'@floating-ui/core@1.6.9':
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
'@floating-ui/dom@1.7.4':
resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
'@floating-ui/dom@1.6.13':
resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
'@humanfs/node@0.16.6':
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
@@ -569,35 +540,96 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
'@internationalized/date@3.7.0':
resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==}
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@inquirer/confirm@5.1.16':
resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
'@types/node':
optional: true
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
'@inquirer/core@10.2.0':
resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
'@types/node':
optional: true
'@inquirer/figures@1.0.13':
resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==}
engines: {node: '>=18'}
'@inquirer/type@3.0.8':
resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
'@types/node':
optional: true
'@internationalized/date@3.8.2':
resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==}
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
'@isaacs/brace-expansion@5.0.0':
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==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/trace-mapping@0.3.30':
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
'@melt-ui/svelte@0.76.2':
resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==}
'@lucide/svelte@0.544.0':
resolution: {integrity: sha512-9f9O6uxng2pLB01sxNySHduJN3HTl5p0HDu4H26VR51vhZfiMzyOMe9Mhof3XAk4l813eTtl+/DYRvGyoRR+yw==}
peerDependencies:
svelte: '>=3 <5'
svelte: ^5
'@modelcontextprotocol/sdk@1.17.4':
resolution: {integrity: sha512-zq24hfuAmmlNZvik0FLI58uE5sriN0WWsQzIlYnzSuKDAHFqJtBFrl/LfB1NLgJT5Y7dEBzaX4yAKqOPrcetaw==}
engines: {node: '>=18'}
'@mswjs/interceptors@0.39.6':
resolution: {integrity: sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw==}
engines: {node: '>=18'}
'@noble/ciphers@1.3.0':
resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
engines: {node: ^14.21.3 || >=16}
'@noble/curves@1.9.7':
resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
engines: {node: ^14.21.3 || >=16}
'@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -611,15 +643,20 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
'@polka/url@1.0.0-next.28':
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
'@open-draft/logger@0.3.0':
resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==}
'@rollup/plugin-commonjs@28.0.2':
resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
'@rollup/plugin-commonjs@28.0.6':
resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
@@ -636,8 +673,8 @@ packages:
rollup:
optional: true
'@rollup/plugin-node-resolve@15.3.1':
resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==}
'@rollup/plugin-node-resolve@16.0.1':
resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.78.0||^3.0.0||^4.0.0
@@ -645,8 +682,8 @@ packages:
rollup:
optional: true
'@rollup/pluginutils@5.1.4':
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
'@rollup/pluginutils@5.2.0':
resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -654,234 +691,278 @@ packages:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.34.8':
resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
'@rollup/rollup-android-arm-eabi@4.46.4':
resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.34.8':
resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
'@rollup/rollup-android-arm64@4.46.4':
resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.34.8':
resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
'@rollup/rollup-darwin-arm64@4.46.4':
resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.34.8':
resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
'@rollup/rollup-darwin-x64@4.46.4':
resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.34.8':
resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
'@rollup/rollup-freebsd-arm64@4.46.4':
resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.34.8':
resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
'@rollup/rollup-freebsd-x64@4.46.4':
resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
'@rollup/rollup-linux-arm-gnueabihf@4.46.4':
resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
'@rollup/rollup-linux-arm-musleabihf@4.46.4':
resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.34.8':
resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
'@rollup/rollup-linux-arm64-gnu@4.46.4':
resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.34.8':
resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
'@rollup/rollup-linux-arm64-musl@4.46.4':
resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
'@rollup/rollup-linux-loongarch64-gnu@4.46.4':
resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
'@rollup/rollup-linux-ppc64-gnu@4.46.4':
resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
'@rollup/rollup-linux-riscv64-gnu@4.46.4':
resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.34.8':
resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
'@rollup/rollup-linux-riscv64-musl@4.46.4':
resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.46.4':
resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.34.8':
resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
'@rollup/rollup-linux-x64-gnu@4.46.4':
resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.34.8':
resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
'@rollup/rollup-linux-x64-musl@4.46.4':
resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==}
cpu: [x64]
os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.34.8':
resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
'@rollup/rollup-win32-arm64-msvc@4.46.4':
resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.34.8':
resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
'@rollup/rollup-win32-ia32-msvc@4.46.4':
resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.34.8':
resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
'@rollup/rollup-win32-x64-msvc@4.46.4':
resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==}
cpu: [x64]
os: [win32]
'@shikijs/core@3.7.0':
resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==}
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@shikijs/engine-javascript@3.7.0':
resolution: {integrity: sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==}
'@shikijs/core@3.12.0':
resolution: {integrity: sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==}
'@shikijs/engine-oniguruma@3.7.0':
resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==}
'@shikijs/engine-javascript@3.12.0':
resolution: {integrity: sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==}
'@shikijs/langs@3.7.0':
resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==}
'@shikijs/engine-oniguruma@3.12.0':
resolution: {integrity: sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==}
'@shikijs/themes@3.7.0':
resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==}
'@shikijs/langs@3.12.0':
resolution: {integrity: sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==}
'@shikijs/types@3.7.0':
resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==}
'@shikijs/rehype@3.12.0':
resolution: {integrity: sha512-qxZwugfCQUMECTmUOCGiG5cNHHTxxGk3esirD7mwwdSxl344KlN/6M9/anev+3uBFVs9UDNShjsMAla8egkCuw==}
'@shikijs/themes@3.12.0':
resolution: {integrity: sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==}
'@shikijs/types@3.12.0':
resolution: {integrity: sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
'@svelte-dev/pretty-code@1.0.0':
resolution: {integrity: sha512-4dFacn9fv7SNK0kp6VjZeSQd9e7ISihaC3l/I7fB6sAAObZt5hRkbFeU2pM2kUlpjzRPGaYuXlWfYj7dLFvPHA==}
'@sindresorhus/merge-streams@4.0.0':
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@sveltejs/adapter-auto@3.2.5':
resolution: {integrity: sha512-27LR+uKccZ62lgq4N/hvyU2G+hTP9fxWEAfnZcl70HnyfAjMSsGk1z/SjAPXNCD1mVJIE7IFu3TQ8cQ/UH3c0A==}
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
'@sveltejs/acorn-typescript@1.0.5':
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
peerDependencies:
acorn: ^8.9.0
'@sveltejs/adapter-auto@6.1.0':
resolution: {integrity: sha512-shOuLI5D2s+0zTv2ab5M5PqfknXqWbKi+0UwB9yLTRIdzsK1R93JOO8jNhIYSHdW+IYXIYnLniu+JZqXs7h9Wg==}
peerDependencies:
'@sveltejs/kit': ^2.0.0
'@sveltejs/adapter-node@5.2.5':
resolution: {integrity: sha512-FVeysFqeIlKFpDF1Oj38gby34f6uA9FuXnV330Z0RHmSyOR9JzJs70/nFKy1Ue3fWtf7S0RemOrP66Vr9Jcmew==}
'@sveltejs/adapter-node@5.3.1':
resolution: {integrity: sha512-PSoGfa9atkmuixe7jvuS2tsUohVZF20So87ASzfMRGTTNqEd8s48KAodlv3CzHwq9XO/BM8KsQLpqqsr/6dmuA==}
peerDependencies:
'@sveltejs/kit': ^2.4.0
'@sveltejs/kit@2.5.28':
resolution: {integrity: sha512-/O7pvFGBsQPcFa9UrW8eUC5uHTOXLsUp3SN0dY6YmRAL9nfPSrJsSJk//j5vMpinSshzUjteAFcfQTU+04Ka1w==}
'@sveltejs/kit@2.36.1':
resolution: {integrity: sha512-dldNCtSIpaGxQMEfHaUxSPH/k3uU28pTZwtKzfkn8fqpOjWufKlMBeIL7FJ/s93dOrhEq41zaQYkXh+XTgEgVw==}
engines: {node: '>=18.13'}
hasBin: true
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1
'@opentelemetry/api': ^1.0.0
'@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.3
vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@sveltejs/vite-plugin-svelte-inspector@2.1.0':
resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
engines: {node: ^18.0.0 || >=20}
'@sveltejs/vite-plugin-svelte-inspector@5.0.1':
resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==}
engines: {node: ^20.19 || ^22.12 || >=24}
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^3.0.0
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
'@sveltejs/vite-plugin-svelte': ^6.0.0-next.0
svelte: ^5.0.0
vite: ^6.3.0 || ^7.0.0
'@sveltejs/vite-plugin-svelte@3.1.2':
resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
engines: {node: ^18.0.0 || >=20}
'@sveltejs/vite-plugin-svelte@6.1.3':
resolution: {integrity: sha512-3pppgIeIZs6nrQLazzKcdnTJ2IWiui/UucEPXKyFG35TKaHQrfkWBnv6hyJcLxFuR90t+LaoecrqTs8rJKWfSQ==}
engines: {node: ^20.19 || ^22.12 || >=24}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
svelte: ^5.0.0
vite: ^6.3.0 || ^7.0.0
'@svgr/babel-plugin-add-jsx-attribute@8.0.0':
resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
engines: {node: '>=14'}
'@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/oxide-android-arm64@4.1.12':
resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
'@tailwindcss/oxide-darwin-arm64@4.1.12':
resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@tailwindcss/oxide-darwin-x64@4.1.12':
resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@tailwindcss/oxide-freebsd-x64@4.1.12':
resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
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==}
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==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
- '@napi-rs/wasm-runtime'
- '@emnapi/core'
- '@emnapi/runtime'
- '@tybys/wasm-util'
- '@emnapi/wasi-threads'
- tslib
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@tailwindcss/oxide@4.1.12':
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
engines: {node: '>= 10'}
'@tailwindcss/vite@4.1.12':
resolution: {integrity: sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
vite: ^5.2.0 || ^6 || ^7
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-dynamic-title@8.0.0':
resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-em-dimensions@8.0.0':
resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-react-native-svg@8.1.0':
resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-svg-component@8.0.0':
resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
engines: {node: '>=12'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-preset@8.1.0':
resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/core@8.1.0':
resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
engines: {node: '>=14'}
'@svgr/hast-util-to-babel-ast@8.0.0':
resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
engines: {node: '>=14'}
'@svgr/plugin-jsx@8.1.0':
resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
engines: {node: '>=14'}
peerDependencies:
'@svgr/core': '*'
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/typography@0.5.16':
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
'@ts-morph/common@0.27.0':
resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==}
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
@@ -889,14 +970,8 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/downloadjs@1.4.6':
resolution: {integrity: sha512-mp3w70vsaiLRT9ix92fmI9Ob2yJAPZm6tShJtofo2uHbN11G2i6a0ApIEjBl/kv3e9V7Pv7jMjk1bUwYWvMHvA==}
'@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -910,161 +985,126 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@22.5.5':
resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
'@types/node@24.3.0':
resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==}
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
'@types/statuses@2.0.6':
resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
'@types/tough-cookie@4.0.5':
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@typescript-eslint/eslint-plugin@8.6.0':
resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==}
'@typescript-eslint/eslint-plugin@8.40.0':
resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
'@typescript-eslint/parser': ^8.40.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.6.0':
resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==}
'@typescript-eslint/parser@8.40.0':
resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.6.0':
resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.6.0':
resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==}
'@typescript-eslint/project-service@8.40.0':
resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.6.0':
resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==}
'@typescript-eslint/scope-manager@8.40.0':
resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.6.0':
resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==}
'@typescript-eslint/tsconfig-utils@8.40.0':
resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.6.0':
resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==}
'@typescript-eslint/type-utils@8.40.0':
resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.6.0':
resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==}
'@typescript-eslint/types@8.40.0':
resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==}
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}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.40.0':
resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.40.0':
resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@upstash/core-analytics@0.0.10':
resolution: {integrity: sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ==}
engines: {node: '>=16.0.0'}
'@upstash/ratelimit@2.0.6':
resolution: {integrity: sha512-Uak5qklMfzFN5RXltxY6IXRENu+Hgmo9iEgMPOlUs2etSQas2N+hJfbHw37OUy4vldLRXeD0OzL+YRvO2l5acg==}
peerDependencies:
'@upstash/redis': ^1.34.3
'@upstash/redis@1.35.3':
resolution: {integrity: sha512-hSjv66NOuahW3MisRGlSgoszU2uONAY2l5Qo3Sae8OT3/Tng9K+2/cBRuyPBX8egwEGcNNCF9+r0V6grNnhL+w==}
'@vitest/expect@2.1.1':
resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==}
'@vitest/mocker@2.1.1':
resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==}
peerDependencies:
'@vitest/spy': 2.1.1
msw: ^2.3.5
vite: ^5.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
'@vitest/pretty-format@2.1.1':
resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==}
'@vitest/pretty-format@2.1.9':
resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
'@vitest/runner@2.1.1':
resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==}
'@vitest/snapshot@2.1.1':
resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==}
'@vitest/spy@2.1.1':
resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==}
'@vitest/utils@2.1.1':
resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==}
accepts@2.0.0:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-regex@6.1.0:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
ansi-regex@6.2.0:
resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
ansis@4.1.0:
resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==}
engines: {node: '>=14'}
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1073,16 +1113,9 @@ packages:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
autoprefixer@10.4.21:
resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
ast-types@0.16.1:
resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
engines: {node: '>=4'}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -1094,66 +1127,69 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
bits-ui@0.22.0:
resolution: {integrity: sha512-r7Fw1HNgA4YxZBRcozl7oP0bheQ8EHh+kfMBZJgyFISix8t4p/nqDcHLmBgIiJ3T5XjYnJRorYDjIWaCfhb5fw==}
bits-ui@2.11.3:
resolution: {integrity: sha512-XhTuOgcgFatw2qxd+hIlu3EqfYu9R2FFMeJg8srZo3UVKBdOVWHbT0L3GBH46XsaESkTz3aEjU+BiGVoI/2rnQ==}
engines: {node: '>=20'}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0
'@internationalized/date': ^3.8.1
svelte: ^5.33.0
body-parser@2.2.0:
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
engines: {node: '>=18'}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
browserslist@4.24.4:
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
browserslist@4.25.3:
resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
camelcase@8.0.0:
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
engines: {node: '>=16'}
camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
caniuse-lite@1.0.30001700:
resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
caniuse-lite@1.0.30001715:
resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==}
caniuse-lite@1.0.30001737:
resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
chai@5.2.0:
resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
engines: {node: '>=12'}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
chalk@5.6.0:
resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
@@ -1163,18 +1199,26 @@ packages:
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
chokidar@4.0.3:
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'}
cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -1183,8 +1227,8 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
code-red@1.0.4:
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
code-block-writer@13.0.3:
resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -1200,9 +1244,9 @@ packages:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
commander@14.0.0:
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
engines: {node: '>=20'}
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
@@ -1210,23 +1254,38 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
concurrently@9.0.1:
resolution: {integrity: sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg==}
engines: {node: '>=18'}
hasBin: true
content-disposition@1.0.0:
resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
engines: {node: '>= 0.6'}
content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie-signature@1.2.2:
resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
engines: {node: '>=6.6.0'}
cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
cookie@0.7.2:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cosmiconfig@8.3.6:
resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
cors@2.8.5:
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
engines: {node: '>= 0.10'}
cosmiconfig@9.0.0:
resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
@@ -1245,10 +1304,6 @@ packages:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
css-tree@2.3.1:
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-tree@3.1.0:
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
@@ -1266,8 +1321,12 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -1275,12 +1334,16 @@ packages:
supports-color:
optional: true
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
dedent@1.6.0:
resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
babel-plugin-macros:
optional: true
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1289,21 +1352,27 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
detect-libc@2.0.4:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'}
devalue@5.1.1:
resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
diff@8.0.2:
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
engines: {node: '>=0.3.1'}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -1318,38 +1387,67 @@ packages:
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
dotenv@17.2.1:
resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
engines: {node: '>=12'}
downloadjs@1.4.7:
resolution: {integrity: sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
eciesjs@0.4.15:
resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==}
engines: {bun: '>=1', deno: '>=2', node: '>=16'}
electron-to-chromium@1.5.104:
resolution: {integrity: sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==}
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
electron-to-chromium@1.5.209:
resolution: {integrity: sha512-Xoz0uMrim9ZETCQt8UgM5FxQF9+imA7PBpokoGcZloA1uw2LeHzTlip5cb5KOAsXZLjh/moN2vReN3ZjJmjI9A==}
emoji-regex@10.4.0:
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
hasBin: true
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
esbuild@0.24.0:
resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
esbuild@0.25.9:
resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
engines: {node: '>=18'}
hasBin: true
@@ -1357,54 +1455,43 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-compat-utils@0.5.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
eslint-config-prettier@9.1.0:
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
eslint-plugin-svelte@2.44.0:
resolution: {integrity: sha512-wav4MOs02vBb1WjvTCYItwJCxMkuk2Z4p+K/eyjL0N/z7ahXLP+0LtQQjiKc2ezuif7GnZLbD1F3o1VHzSvdVg==}
engines: {node: ^14.17.0 || >=16.0.0}
eslint-plugin-svelte@3.11.0:
resolution: {integrity: sha512-KliWlkieHyEa65aQIkRwUFfHzT5Cn4u3BQQsu3KlkJOs7c1u7ryn84EWaOjEzilbKgttT4OfBURA8Uc4JBSQIw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
eslint: ^8.57.1 || ^9.0.0
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
svelte:
optional: true
eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-scope@8.2.0:
resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
eslint-visitor-keys@4.2.1:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.11.0:
resolution: {integrity: sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==}
eslint@9.33.0:
resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1416,18 +1503,22 @@ packages:
esm-env@1.2.2:
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
espree@10.3.0:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
espree@10.4.0:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
espree@9.6.1:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
esrap@2.1.0:
resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@@ -1439,13 +1530,44 @@ packages:
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
eventsource-parser@3.0.5:
resolution: {integrity: sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==}
engines: {node: '>=20.0.0'}
eventsource@3.0.7:
resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
engines: {node: '>=18.0.0'}
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
execa@9.6.0:
resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
engines: {node: ^18.19.0 || >=20.5.0}
express-rate-limit@7.5.1:
resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==}
engines: {node: '>= 16'}
peerDependencies:
express: '>= 4.11'
express@5.1.0:
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
engines: {node: '>= 18'}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -1462,17 +1584,26 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fastq@1.19.0:
resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
fdir@6.4.3:
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
fetch-blob@3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
figures@6.1.0:
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
engines: {node: '>=18'}
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -1481,6 +1612,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
finalhandler@2.1.0:
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
engines: {node: '>= 0.8'}
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -1492,15 +1627,21 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
focus-trap@7.6.4:
resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
formdata-polyfill@4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
fresh@2.0.0:
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
engines: {node: '>= 0.8'}
fs-extra@11.3.1:
resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==}
engines: {node: '>=14.14'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
@@ -1514,6 +1655,12 @@ packages:
resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
engines: {node: '>=10'}
fuzzysort@3.1.0:
resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==}
fzf@0.5.2:
resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -1522,6 +1669,33 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
get-east-asian-width@1.3.0:
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
engines: {node: '>=18'}
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-own-enumerable-keys@1.0.0:
resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==}
engines: {node: '>=14.16'}
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
get-tsconfig@4.10.1:
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -1533,42 +1707,44 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
globals@15.9.0:
resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==}
globals@16.3.0:
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
engines: {node: '>=18'}
globalyzer@0.1.0:
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
graphql@16.11.0:
resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
gray-matter@4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
hast-util-from-html@2.0.3:
resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
hast-util-from-parse5@8.0.3:
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
@@ -1581,9 +1757,15 @@ packages:
hast-util-parse-selector@4.0.0:
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
hast-util-raw@9.1.0:
resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
hast-util-to-parse5@8.0.0:
resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
hast-util-to-string@3.0.1:
resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
@@ -1593,13 +1775,40 @@ packages:
hastscript@9.0.1:
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
http-errors@2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
human-signals@8.0.1:
resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
engines: {node: '>=18.18.0'}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
ignore@7.0.5:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
@@ -1607,9 +1816,6 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
import-meta-resolve@4.1.0:
resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -1617,17 +1823,24 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
inline-style-parser@0.2.4:
resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -1640,43 +1853,78 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-interactive@2.0.0:
resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
engines: {node: '>=12'}
is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
is-obj@3.0.0:
resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==}
engines: {node: '>=12'}
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
is-promise@4.0.0:
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
is-regexp@3.1.0:
resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==}
engines: {node: '>=12'}
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
is-stream@4.0.1:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
engines: {node: '>=18'}
is-unicode-supported@1.3.0:
resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
engines: {node: '>=12'}
is-unicode-supported@2.1.0:
resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
engines: {node: '>=18'}
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
isexe@3.1.1:
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
engines: {node: '>=16'}
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
jiti@2.5.1:
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
hasBin: true
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@@ -1703,18 +1951,29 @@ packages:
engines: {node: '>=6'}
hasBin: true
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
jszip@3.10.1:
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
known-css-properties@0.34.0:
resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==}
known-css-properties@0.37.0:
resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
@@ -1723,14 +1982,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==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.30.1:
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
lightningcss-freebsd-x64@1.30.1:
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
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==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
lightningcss-linux-arm64-gnu@1.30.1:
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
lightningcss-linux-arm64-musl@1.30.1:
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
lightningcss-linux-x64-gnu@1.30.1:
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
lightningcss-linux-x64-musl@1.30.1:
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
lightningcss-win32-arm64-msvc@1.30.1:
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
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==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
lightningcss@1.30.1:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'}
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@@ -1741,121 +2060,55 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
loupe@3.1.3:
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
log-symbols@6.0.0:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lucide-svelte@0.525.0:
resolution: {integrity: sha512-kfuN6JcCqTfCz2B76aXnyGLAzEBRSYw5GaUspM5RNHQZS5aI5yaKu06fbaofOk8cDvUtY0AUm/zAix7aUX6Q3A==}
peerDependencies:
svelte: ^3 || ^4 || ^5.0.0-next.42
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
mdast-util-from-markdown@2.0.2:
resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
mdast-util-gfm-footnote@2.1.0:
resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
mdast-util-gfm@3.1.0:
resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
mdsvex@0.12.5:
resolution: {integrity: sha512-JQy8CBbGF1IvpxZTmGJigRiD1s2BKfLKS9xCLPKngjHToY8WMYLZ8WFGRpuR6x4C4bxipSuLm2LctwL2fVXaEQ==}
peerDependencies:
svelte: ^3.56.0 || ^4.0.0 || ^5.0.0-next.120
media-typer@1.1.0:
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
engines: {node: '>= 0.8'}
merge-descriptors@2.0.0:
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
engines: {node: '>=18'}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
micromark-core-commonmark@2.0.2:
resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==}
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
@@ -1905,22 +2158,42 @@ packages:
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
micromark-util-subtokenize@2.0.4:
resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
micromark-util-subtokenize@2.1.0:
resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
micromark-util-types@2.0.1:
resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==}
micromark-util-types@2.0.2:
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
micromark@4.0.1:
resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==}
micromark@4.0.2:
resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
mime-types@3.0.1:
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
engines: {node: '>= 0.6'}
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
mimic-function@5.0.1:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
minimatch@10.0.3:
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
engines: {node: 20 || >=22}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -1928,14 +2201,26 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
mode-watcher@0.5.1:
resolution: {integrity: sha512-adEC6T7TMX/kzQlaO/MtiQOSFekZfQu4MC+lXyoceQG+U5sKpJWZ4yKXqw846ExIuWJgedkOIPqAYYRk/xHm+w==}
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:
svelte: ^4.0.0 || ^5.0.0-next.1
svelte: ^5.27.0
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@@ -1948,35 +2233,51 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
msw@2.10.5:
resolution: {integrity: sha512-0EsQCrCI1HbhpBWd89DvmxY6plmvrM96b0sCIztnvcNHQbXn5vqwm1KlXslo6u4wN9LFGLC1WFjjgljcQhe40A==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
typescript: '>= 4.8.x'
peerDependenciesMeta:
typescript:
optional: true
nanoid@5.1.2:
resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==}
engines: {node: ^18 || >=20}
mute-stream@2.0.0:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
engines: {node: ^18.17.0 || >=20.5.0}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
negotiator@1.0.0:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
deprecated: Use your platform's native DOMException instead
node-fetch@3.3.2:
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==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
normalize-range@0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
npm-run-path@6.0.0:
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
engines: {node: '>=18'}
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -1985,9 +2286,28 @@ packages:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
object-treeify@1.1.33:
resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==}
engines: {node: '>= 10'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
@@ -1999,16 +2319,27 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
ora@8.2.0:
resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
engines: {node: '>=18'}
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
p-limit@6.2.0:
resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
engines: {node: '>=18'}
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
package-manager-detector@1.3.0:
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@@ -2021,11 +2352,19 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
parse-numeric-range@1.3.0:
resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
parse-ms@4.0.0:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
parse5@7.2.1:
resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
@@ -2035,26 +2374,19 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
path-key@4.0.0:
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
engines: {node: '>=12'}
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
periscopic@3.1.0:
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
path-to-regexp@8.2.0:
resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
engines: {node: '>=16'}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -2063,29 +2395,17 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
pkce-challenge@5.0.0:
resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
engines: {node: '>=16.20.0'}
pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
postcss-import@15.1.0:
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
postcss-js@4.0.1:
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
postcss-load-config@3.1.4:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
@@ -2099,29 +2419,11 @@ packages:
ts-node:
optional: true
postcss-load-config@4.0.2:
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
postcss-safe-parser@7.0.1:
resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
engines: {node: '>=18.0'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
postcss-safe-parser@6.0.0:
resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.3.3
postcss: ^8.4.31
postcss-scss@4.0.9:
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
@@ -2129,40 +2431,35 @@ packages:
peerDependencies:
postcss: ^8.4.29
postcss-selector-parser@6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
postcss-selector-parser@7.1.0:
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
engines: {node: '>=4'}
postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier-plugin-svelte@3.2.6:
resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==}
prettier-plugin-svelte@3.4.0:
resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==}
peerDependencies:
prettier: ^3.0.0
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
prettier-plugin-tailwindcss@0.6.6:
resolution: {integrity: sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==}
prettier-plugin-tailwindcss@0.6.14:
resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==}
engines: {node: '>=14.21.3'}
peerDependencies:
'@ianvs/prettier-plugin-sort-imports': '*'
'@prettier/plugin-hermes': '*'
'@prettier/plugin-oxc': '*'
'@prettier/plugin-pug': '*'
'@shopify/prettier-plugin-liquid': '*'
'@trivago/prettier-plugin-sort-imports': '*'
'@zackad/prettier-plugin-twig-melody': '*'
'@zackad/prettier-plugin-twig': '*'
prettier: ^3.0
prettier-plugin-astro: '*'
prettier-plugin-css-order: '*'
@@ -2178,13 +2475,17 @@ packages:
peerDependenciesMeta:
'@ianvs/prettier-plugin-sort-imports':
optional: true
'@prettier/plugin-hermes':
optional: true
'@prettier/plugin-oxc':
optional: true
'@prettier/plugin-pug':
optional: true
'@shopify/prettier-plugin-liquid':
optional: true
'@trivago/prettier-plugin-sort-imports':
optional: true
'@zackad/prettier-plugin-twig-melody':
'@zackad/prettier-plugin-twig':
optional: true
prettier-plugin-astro:
optional: true
@@ -2209,45 +2510,71 @@ packages:
prettier-plugin-svelte:
optional: true
prettier@3.3.3:
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
hasBin: true
prism-svelte@0.4.7:
resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==}
prismjs@1.29.0:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
engines: {node: '>=6'}
pretty-ms@9.2.0:
resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
engines: {node: '>=18'}
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
property-information@7.0.0:
resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
property-information@6.5.0:
resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
psl@1.15.0:
resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
qs@6.14.0:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
raw-body@3.0.0:
resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
engines: {node: '>= 0.8'}
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
recast@0.23.11:
resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
engines: {node: '>= 4'}
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -2260,14 +2587,8 @@ packages:
rehype-autolink-headings@7.1.0:
resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
rehype-parse@9.0.1:
resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
rehype-pretty-code@0.12.6:
resolution: {integrity: sha512-AW18s4eXwnb4PGwL0Y8BoUzBJr23epWNXndCKaZ52S4kl/4tsgM+406oCp5NdtPZsB0ItpaY+hCMv3kw58DLrA==}
engines: {node: '>=18'}
peerDependencies:
shikiji: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0
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==}
@@ -2275,45 +2596,75 @@ packages:
rehype-stringify@10.0.1:
resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
remark-rehype@11.1.1:
resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
remark-rehype@11.1.2:
resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
hasBin: true
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rollup@4.34.8:
resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
rollup@4.46.4:
resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
router@2.2.0:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
runed@0.23.4:
resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==}
peerDependencies:
svelte: ^5.7.0
runed@0.25.0:
resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==}
peerDependencies:
svelte: ^5.7.0
runed@0.28.0:
resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==}
peerDependencies:
svelte: ^5.7.0
runed@0.29.2:
resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==}
peerDependencies:
svelte: ^5.7.0
runed@0.31.1:
resolution: {integrity: sha512-v3czcTnO+EJjiPvD4dwIqfTdHLZ8oH0zJheKqAHh9QMViY7Qb29UlAMRpX7ZtHh7AFqV60KmfxaJ9QMy+L1igQ==}
peerDependencies:
svelte: ^5.7.0
sade@1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
@@ -2322,24 +2673,52 @@ packages:
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.7.1:
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
semver@7.7.2:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
send@1.2.0:
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
engines: {node: '>= 18'}
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
serve-static@2.2.0:
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
engines: {node: '>= 18'}
set-cookie-parser@2.7.1:
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
shadcn@3.0.0:
resolution: {integrity: sha512-GhMwMwcxR3GpDO2ctocvyetQ7BJAxSakaznBtYM/1mPRTjN0I0TAZCGSXdfj0VXOW4PaHbFEHsyUCnFcEf/1Ag==}
hasBin: true
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -2348,55 +2727,75 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
shell-quote@1.8.2:
resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
shiki@3.12.0:
resolution: {integrity: sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
shiki@3.7.0:
resolution: {integrity: sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
shikiji-core@0.10.2:
resolution: {integrity: sha512-9Of8HMlF96usXJHmCL3Gd0Fcf0EcyJUF9m8EoAKKd98mHXi0La2AZl1h6PegSFGtiYcBDK/fLuKbDa1l16r1fA==}
deprecated: Deprecated, use @shikijs/core instead
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
shikiji@0.10.2:
resolution: {integrity: sha512-wtZg3T0vtYV2PnqusWQs3mDaJBdCPWxFDrBM/SE5LfrX92gjUvfEMlc+vJnoKY6Z/S44OWaCRzNIsdBRWcTAiw==}
deprecated: Deprecated, use shiki instead
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
sirv@2.0.4:
resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
sirv@3.0.1:
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
engines: {node: '>=18'}
snake-case@3.0.4:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
std-env@3.8.0:
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
statuses@2.0.2:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
stdin-discarder@0.2.2:
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
engines: {node: '>=18'}
strict-event-emitter@0.5.1:
resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
string-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -2404,6 +2803,10 @@ packages:
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
stringify-object@5.0.0:
resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==}
engines: {node: '>=14.16'}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -2412,67 +2815,74 @@ packages:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
strip-bom-string@1.0.0:
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
engines: {node: '>=0.10.0'}
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
strip-final-newline@4.0.0:
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
engines: {node: '>=18'}
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
style-to-object@1.0.9:
resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
svelte-check@4.0.9:
resolution: {integrity: sha512-SVNCz2L+9ZELGli7G0n3B3QE5kdf0u27RtKr2ZivWQhcWIXatZxwM4VrQ6AiA2k9zKp2mk5AxkEhdjbpjv7rEw==}
svelte-check@4.3.1:
resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==}
engines: {node: '>= 18.0.0'}
hasBin: true
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
typescript: '>=5.0.0'
svelte-eslint-parser@0.41.1:
resolution: {integrity: sha512-08ndI6zTghzI8SuJAFpvMbA/haPSGn3xz19pjre19yYMw8Nw/wQJ2PrZBI/L8ijGTgtkWCQQiLLy+Z1tfaCwNA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.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}
peerDependencies:
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
svelte:
optional: true
svelte-hmr@0.16.0:
resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
svelte-sonner@1.0.5:
resolution: {integrity: sha512-9dpGPFqKb/QWudYqGnEz93vuY+NgCEvyNvxoCLMVGw6sDN/3oVeKV1xiEirW2E1N3vJEyj5imSBNOGltQHA7mg==}
peerDependencies:
svelte: ^3.19.0 || ^4.0.0
svelte: ^5.0.0
svelte-sonner@0.3.28:
resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==}
svelte-toolbelt@0.10.5:
resolution: {integrity: sha512-8e+eWTgxw1aiLxhDE8Rb1X6AoLitqpJz+WhAul2W7W58C8KoLoJQf1TgQdFPBiCPJ0Jg5y0Zi1uyua9em4VS0w==}
engines: {node: '>=18', pnpm: '>=8.7.0'}
peerDependencies:
svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1
svelte: ^5.30.2
svelte@4.2.20:
resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==}
engines: {node: '>=16'}
sveltekit-search-params@3.0.0:
resolution: {integrity: sha512-wq1Yo5zITev8ty9CWGmHgvAh+Xb3mCUewyUmvCdv6MJWi+/aZ4o79Y6SjuduDL0Cfd/KYHkqt4f/wQ4FtokSdw==}
svelte-toolbelt@0.7.1:
resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==}
engines: {node: '>=18', pnpm: '>=8.7.0'}
peerDependencies:
'@sveltejs/kit': ^1.0.0 || ^2.0.0
svelte: ^3.55.0 || ^4.0.0 || ^5.0.0
svelte: ^5.0.0
svg-parser@2.0.4:
resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
svelte@5.38.2:
resolution: {integrity: sha512-iAcp/oFAWauVSGILdD67n7DiwgLHXZzWZIdzl7araRxu72jUr7PFAo2Iie7gXt0IbnlYvhxCb9GT3ZJUquO3PA==}
engines: {node: '>=18'}
svgo@4.0.0:
resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
@@ -2482,65 +2892,54 @@ packages:
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
tailwind-merge@2.5.4:
resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==}
tailwind-merge@3.0.2:
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
tailwind-merge@2.6.0:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
tailwind-merge@3.3.1:
resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
tailwind-variants@0.3.1:
resolution: {integrity: sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==}
tailwind-variants@1.0.0:
resolution: {integrity: sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==}
engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies:
tailwindcss: '*'
tailwindcss@3.4.17:
resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
engines: {node: '>=14.0.0'}
hasBin: true
tailwindcss@4.1.12:
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
tapable@2.2.2:
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
engines: {node: '>=6'}
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
tar@7.4.3:
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
engines: {node: '>=18'}
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
tiny-glob@0.2.9:
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
tinyexec@1.0.1:
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tinypool@1.0.2:
resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
engines: {node: ^18.0.0 || >=20.0.0}
tinyrainbow@1.2.0:
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
tinyspy@3.0.2:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
tough-cookie@4.1.4:
resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
engines: {node: '>=6'}
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -2548,77 +2947,97 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.2.0'
typescript: '>=4.8.4'
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
ts-morph@26.0.0:
resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==}
tslib@2.7.0:
resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
tsconfig-paths@4.2.0:
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
engines: {node: '>=6'}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsx@4.20.5:
resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==}
engines: {node: '>=18.0.0'}
hasBin: true
tw-animate-css@1.3.7:
resolution: {integrity: sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A==}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.6.0:
resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==}
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
type-fest@4.41.0:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
type-is@2.0.1:
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
engines: {node: '>= 0.6'}
typescript-eslint@8.40.0:
resolution: {integrity: sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
typescript@5.9.2:
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
engines: {node: '>=14.17'}
hasBin: true
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
undici-types@7.10.0:
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
unicorn-magic@0.3.0:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unist-util-is@4.1.0:
resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
unist-util-visit-parents@3.1.1:
resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
unist-util-visit-parents@6.0.1:
resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
unist-util-visit@2.0.3:
resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
update-browserslist-db@1.1.2:
resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
universalify@0.2.0:
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
engines: {node: '>= 4.0.0'}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -2626,42 +3045,46 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
url-parse@1.5.10:
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
vfile-location@5.0.3:
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
vfile-message@2.0.4:
resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
vfile-message@4.0.2:
resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
vfile-message@4.0.3:
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
vite-node@2.1.1:
resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
vite@5.4.7:
resolution: {integrity: sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==}
engines: {node: ^18.0.0 || >=20.0.0}
vite@7.1.3:
resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0
less: '*'
'@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
less: ^4.0.0
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
@@ -2676,64 +3099,50 @@ packages:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vitefu@0.2.5:
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
vitefu@1.1.1:
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
vite:
optional: true
vitest@2.1.1:
resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
'@vitest/browser': 2.1.1
'@vitest/ui': 2.1.1
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
'@types/node':
optional: true
'@vitest/browser':
optional: true
'@vitest/ui':
optional: true
happy-dom:
optional: true
jsdom:
optional: true
web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
which@4.0.0:
resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
engines: {node: ^16.13.0 || >=18.0.0}
hasBin: true
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrap-ansi@8.1.0:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
@@ -2742,13 +3151,17 @@ 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'}
yaml@2.7.0:
resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
engines: {node: '>= 14'}
yaml@2.8.1:
resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@21.1.1:
@@ -2763,281 +3176,385 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
yocto-queue@1.2.1:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
yoctocolors-cjs@2.1.3:
resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
engines: {node: '>=18'}
yoctocolors@2.1.2:
resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
engines: {node: '>=18'}
zimmerframe@1.1.2:
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
zod-to-json-schema@3.24.6:
resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}
peerDependencies:
zod: ^3.24.1
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zod@4.1.4:
resolution: {integrity: sha512-2YqJuWkU6IIK9qcE4k1lLLhyZ6zFw7XVRdQGpV97jEIZwTrscUw+DY31Xczd8nwaoksyJUIxCojZXwckJovWxA==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
'@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@babel/code-frame@7.26.2':
'@antfu/ni@25.0.0':
dependencies:
'@babel/helper-validator-identifier': 7.25.9
ansis: 4.1.0
fzf: 0.5.2
package-manager-detector: 1.3.0
tinyexec: 1.0.1
'@babel/code-frame@7.27.1':
dependencies:
'@babel/helper-validator-identifier': 7.27.1
js-tokens: 4.0.0
picocolors: 1.1.1
'@babel/compat-data@7.26.8': {}
'@babel/compat-data@7.28.0': {}
'@babel/core@7.26.9':
'@babel/core@7.28.3':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.9
'@babel/helper-compilation-targets': 7.26.5
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9)
'@babel/helpers': 7.26.9
'@babel/parser': 7.26.9
'@babel/template': 7.26.9
'@babel/traverse': 7.26.9
'@babel/types': 7.26.9
'@babel/code-frame': 7.27.1
'@babel/generator': 7.28.3
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3)
'@babel/helpers': 7.28.3
'@babel/parser': 7.28.3
'@babel/template': 7.27.2
'@babel/traverse': 7.28.3
'@babel/types': 7.28.2
convert-source-map: 2.0.0
debug: 4.4.0
debug: 4.4.1
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/generator@7.26.9':
'@babel/generator@7.28.3':
dependencies:
'@babel/parser': 7.26.9
'@babel/types': 7.26.9
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@babel/parser': 7.28.3
'@babel/types': 7.28.2
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
jsesc: 3.1.0
'@babel/helper-compilation-targets@7.26.5':
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
'@babel/compat-data': 7.26.8
'@babel/helper-validator-option': 7.25.9
browserslist: 4.24.4
'@babel/types': 7.28.2
'@babel/helper-compilation-targets@7.27.2':
dependencies:
'@babel/compat-data': 7.28.0
'@babel/helper-validator-option': 7.27.1
browserslist: 4.25.3
lru-cache: 5.1.1
semver: 6.3.1
'@babel/helper-module-imports@7.25.9':
'@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)':
dependencies:
'@babel/traverse': 7.26.9
'@babel/types': 7.26.9
'@babel/core': 7.28.3
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-member-expression-to-functions': 7.27.1
'@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.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)':
'@babel/helper-globals@7.28.0': {}
'@babel/helper-member-expression-to-functions@7.27.1':
dependencies:
'@babel/core': 7.26.9
'@babel/helper-module-imports': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@babel/traverse': 7.26.9
'@babel/traverse': 7.28.3
'@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-option@7.25.9': {}
'@babel/helpers@7.26.9':
'@babel/helper-module-imports@7.27.1':
dependencies:
'@babel/template': 7.26.9
'@babel/types': 7.26.9
'@babel/parser@7.26.9':
dependencies:
'@babel/types': 7.26.9
'@babel/template@7.26.9':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/parser': 7.26.9
'@babel/types': 7.26.9
'@babel/traverse@7.26.9':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.9
'@babel/parser': 7.26.9
'@babel/template': 7.26.9
'@babel/types': 7.26.9
debug: 4.4.0
globals: 11.12.0
'@babel/traverse': 7.28.3
'@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
'@babel/types@7.26.9':
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@babel/core': 7.28.3
'@babel/helper-module-imports': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
'@babel/traverse': 7.28.3
transitivePeerDependencies:
- supports-color
'@esbuild/aix-ppc64@0.21.5':
optional: true
'@esbuild/aix-ppc64@0.24.0':
optional: true
'@esbuild/android-arm64@0.21.5':
optional: true
'@esbuild/android-arm64@0.24.0':
optional: true
'@esbuild/android-arm@0.21.5':
optional: true
'@esbuild/android-arm@0.24.0':
optional: true
'@esbuild/android-x64@0.21.5':
optional: true
'@esbuild/android-x64@0.24.0':
optional: true
'@esbuild/darwin-arm64@0.21.5':
optional: true
'@esbuild/darwin-arm64@0.24.0':
optional: true
'@esbuild/darwin-x64@0.21.5':
optional: true
'@esbuild/darwin-x64@0.24.0':
optional: true
'@esbuild/freebsd-arm64@0.21.5':
optional: true
'@esbuild/freebsd-arm64@0.24.0':
optional: true
'@esbuild/freebsd-x64@0.21.5':
optional: true
'@esbuild/freebsd-x64@0.24.0':
optional: true
'@esbuild/linux-arm64@0.21.5':
optional: true
'@esbuild/linux-arm64@0.24.0':
optional: true
'@esbuild/linux-arm@0.21.5':
optional: true
'@esbuild/linux-arm@0.24.0':
optional: true
'@esbuild/linux-ia32@0.21.5':
optional: true
'@esbuild/linux-ia32@0.24.0':
optional: true
'@esbuild/linux-loong64@0.21.5':
optional: true
'@esbuild/linux-loong64@0.24.0':
optional: true
'@esbuild/linux-mips64el@0.21.5':
optional: true
'@esbuild/linux-mips64el@0.24.0':
optional: true
'@esbuild/linux-ppc64@0.21.5':
optional: true
'@esbuild/linux-ppc64@0.24.0':
optional: true
'@esbuild/linux-riscv64@0.21.5':
optional: true
'@esbuild/linux-riscv64@0.24.0':
optional: true
'@esbuild/linux-s390x@0.21.5':
optional: true
'@esbuild/linux-s390x@0.24.0':
optional: true
'@esbuild/linux-x64@0.21.5':
optional: true
'@esbuild/linux-x64@0.24.0':
optional: true
'@esbuild/netbsd-x64@0.21.5':
optional: true
'@esbuild/netbsd-x64@0.24.0':
optional: true
'@esbuild/openbsd-arm64@0.24.0':
optional: true
'@esbuild/openbsd-x64@0.21.5':
optional: true
'@esbuild/openbsd-x64@0.24.0':
optional: true
'@esbuild/sunos-x64@0.21.5':
optional: true
'@esbuild/sunos-x64@0.24.0':
optional: true
'@esbuild/win32-arm64@0.21.5':
optional: true
'@esbuild/win32-arm64@0.24.0':
optional: true
'@esbuild/win32-ia32@0.21.5':
optional: true
'@esbuild/win32-ia32@0.24.0':
optional: true
'@esbuild/win32-x64@0.21.5':
optional: true
'@esbuild/win32-x64@0.24.0':
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.11.0(jiti@1.21.7))':
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
eslint: 9.11.0(jiti@1.21.7)
'@babel/types': 7.28.2
'@babel/helper-plugin-utils@7.27.1': {}
'@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)':
dependencies:
'@babel/core': 7.28.3
'@babel/helper-member-expression-to-functions': 7.27.1
'@babel/helper-optimise-call-expression': 7.27.1
'@babel/traverse': 7.28.3
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
'@babel/traverse': 7.28.3
'@babel/types': 7.28.2
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.27.1': {}
'@babel/helper-validator-option@7.27.1': {}
'@babel/helpers@7.28.3':
dependencies:
'@babel/template': 7.27.2
'@babel/types': 7.28.2
'@babel/parser@7.28.3':
dependencies:
'@babel/types': 7.28.2
'@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-typescript@7.28.0(@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.3(@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/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/parser': 7.28.3
'@babel/types': 7.28.2
'@babel/traverse@7.28.3':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/generator': 7.28.3
'@babel/helper-globals': 7.28.0
'@babel/parser': 7.28.3
'@babel/template': 7.27.2
'@babel/types': 7.28.2
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
'@bundled-es-modules/cookie@2.0.1':
dependencies:
cookie: 0.7.2
'@bundled-es-modules/statuses@1.0.1':
dependencies:
statuses: 2.0.2
'@bundled-es-modules/tough-cookie@0.1.6':
dependencies:
'@types/tough-cookie': 4.0.5
tough-cookie: 4.1.4
'@content-collections/core@0.11.0(typescript@5.9.2)':
dependencies:
'@standard-schema/spec': 1.0.0
camelcase: 8.0.0
chokidar: 4.0.3
esbuild: 0.25.9
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
yaml: 2.8.1
zod: 3.25.76
'@content-collections/integrations@0.3.0(@content-collections/core@0.11.0(typescript@5.9.2))':
dependencies:
'@content-collections/core': 0.11.0(typescript@5.9.2)
'@content-collections/markdown@0.1.4(@content-collections/core@0.11.0(typescript@5.9.2))':
dependencies:
'@content-collections/core': 0.11.0(typescript@5.9.2)
rehype-raw: 7.0.0
rehype-stringify: 10.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.2
unified: 11.0.5
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))':
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)
'@dotenvx/dotenvx@1.49.0':
dependencies:
commander: 11.1.0
dotenv: 17.2.1
eciesjs: 0.4.15
execa: 5.1.1
fdir: 6.5.0(picomatch@4.0.3)
ignore: 5.3.2
object-treeify: 1.1.33
picomatch: 4.0.3
which: 4.0.0
'@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)':
dependencies:
'@noble/ciphers': 1.3.0
'@esbuild/aix-ppc64@0.25.9':
optional: true
'@esbuild/android-arm64@0.25.9':
optional: true
'@esbuild/android-arm@0.25.9':
optional: true
'@esbuild/android-x64@0.25.9':
optional: true
'@esbuild/darwin-arm64@0.25.9':
optional: true
'@esbuild/darwin-x64@0.25.9':
optional: true
'@esbuild/freebsd-arm64@0.25.9':
optional: true
'@esbuild/freebsd-x64@0.25.9':
optional: true
'@esbuild/linux-arm64@0.25.9':
optional: true
'@esbuild/linux-arm@0.25.9':
optional: true
'@esbuild/linux-ia32@0.25.9':
optional: true
'@esbuild/linux-loong64@0.25.9':
optional: true
'@esbuild/linux-mips64el@0.25.9':
optional: true
'@esbuild/linux-ppc64@0.25.9':
optional: true
'@esbuild/linux-riscv64@0.25.9':
optional: true
'@esbuild/linux-s390x@0.25.9':
optional: true
'@esbuild/linux-x64@0.25.9':
optional: true
'@esbuild/netbsd-arm64@0.25.9':
optional: true
'@esbuild/netbsd-x64@0.25.9':
optional: true
'@esbuild/openbsd-arm64@0.25.9':
optional: true
'@esbuild/openbsd-x64@0.25.9':
optional: true
'@esbuild/openharmony-arm64@0.25.9':
optional: true
'@esbuild/sunos-x64@0.25.9':
optional: true
'@esbuild/win32-arm64@0.25.9':
optional: true
'@esbuild/win32-ia32@0.25.9':
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))':
dependencies:
eslint: 9.33.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.18.0':
'@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':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
debug: 4.4.1
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@eslint/core@0.12.0':
'@eslint/config-helpers@0.3.1': {}
'@eslint/core@0.15.2':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.0':
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.3.0
debug: 4.4.1
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
@@ -3047,71 +3564,135 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.11.0': {}
'@eslint/js@9.33.0': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.2.7':
'@eslint/plugin-kit@0.3.5':
dependencies:
'@eslint/core': 0.12.0
'@eslint/core': 0.15.2
levn: 0.4.1
'@figma/plugin-typings@1.115.0': {}
'@floating-ui/core@1.6.9':
'@floating-ui/core@1.7.3':
dependencies:
'@floating-ui/utils': 0.2.9
'@floating-ui/utils': 0.2.10
'@floating-ui/dom@1.6.13':
'@floating-ui/dom@1.7.4':
dependencies:
'@floating-ui/core': 1.6.9
'@floating-ui/utils': 0.2.9
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
'@floating-ui/utils@0.2.9': {}
'@floating-ui/utils@0.2.10': {}
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.6':
dependencies:
'@humanfs/core': 0.19.1
'@humanwhocodes/retry': 0.3.1
'@humanwhocodes/module-importer@1.0.1': {}
'@humanwhocodes/retry@0.3.1': {}
'@internationalized/date@3.7.0':
dependencies:
'@swc/helpers': 0.5.15
'@humanwhocodes/retry@0.4.3': {}
'@isaacs/cliui@8.0.2':
'@inquirer/confirm@5.1.16(@types/node@24.3.0)':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
strip-ansi: 7.1.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@inquirer/core': 10.2.0(@types/node@24.3.0)
'@inquirer/type': 3.0.8(@types/node@24.3.0)
optionalDependencies:
'@types/node': 24.3.0
'@jridgewell/gen-mapping@0.3.8':
'@inquirer/core@10.2.0(@types/node@24.3.0)':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@inquirer/figures': 1.0.13
'@inquirer/type': 3.0.8(@types/node@24.3.0)
ansi-escapes: 4.3.2
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
'@types/node': 24.3.0
'@inquirer/figures@1.0.13': {}
'@inquirer/type@3.0.8(@types/node@24.3.0)':
optionalDependencies:
'@types/node': 24.3.0
'@internationalized/date@3.8.2':
dependencies:
'@swc/helpers': 0.5.17
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.0':
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
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.25':
'@jridgewell/trace-mapping@0.3.30':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/sourcemap-codec': 1.5.5
'@melt-ui/svelte@0.76.2(svelte@4.2.20)':
'@lucide/svelte@0.544.0(svelte@5.38.2)':
dependencies:
'@floating-ui/core': 1.6.9
'@floating-ui/dom': 1.6.13
'@internationalized/date': 3.7.0
dequal: 2.0.3
focus-trap: 7.6.4
nanoid: 5.1.2
svelte: 4.2.20
svelte: 5.38.2
'@modelcontextprotocol/sdk@1.17.4':
dependencies:
ajv: 6.12.6
content-type: 1.0.5
cors: 2.8.5
cross-spawn: 7.0.6
eventsource: 3.0.7
eventsource-parser: 3.0.5
express: 5.1.0
express-rate-limit: 7.5.1(express@5.1.0)
pkce-challenge: 5.0.0
raw-body: 3.0.0
zod: 3.25.76
zod-to-json-schema: 3.24.6(zod@3.25.76)
transitivePeerDependencies:
- supports-color
'@mswjs/interceptors@0.39.6':
dependencies:
'@open-draft/deferred-promise': 2.2.0
'@open-draft/logger': 0.3.0
'@open-draft/until': 2.1.0
is-node-process: 1.2.0
outvariant: 1.4.3
strict-event-emitter: 0.5.1
'@noble/ciphers@1.3.0': {}
'@noble/curves@1.9.7':
dependencies:
'@noble/hashes': 1.8.0
'@noble/hashes@1.8.0': {}
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -3123,285 +3704,300 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.0
fastq: 1.19.1
'@pkgjs/parseargs@0.11.0':
optional: true
'@open-draft/deferred-promise@2.2.0': {}
'@polka/url@1.0.0-next.28': {}
'@rollup/plugin-commonjs@28.0.2(rollup@4.34.8)':
'@open-draft/logger@0.3.0':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
is-node-process: 1.2.0
outvariant: 1.4.3
'@open-draft/until@2.1.0': {}
'@polka/url@1.0.0-next.29': {}
'@rollup/plugin-commonjs@28.0.6(rollup@4.46.4)':
dependencies:
'@rollup/pluginutils': 5.2.0(rollup@4.46.4)
commondir: 1.0.1
estree-walker: 2.0.2
fdir: 6.4.3(picomatch@4.0.2)
fdir: 6.5.0(picomatch@4.0.3)
is-reference: 1.2.1
magic-string: 0.30.17
picomatch: 4.0.2
picomatch: 4.0.3
optionalDependencies:
rollup: 4.34.8
rollup: 4.46.4
'@rollup/plugin-json@6.1.0(rollup@4.34.8)':
'@rollup/plugin-json@6.1.0(rollup@4.46.4)':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
'@rollup/pluginutils': 5.2.0(rollup@4.46.4)
optionalDependencies:
rollup: 4.34.8
rollup: 4.46.4
'@rollup/plugin-node-resolve@15.3.1(rollup@4.34.8)':
'@rollup/plugin-node-resolve@16.0.1(rollup@4.46.4)':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
'@rollup/pluginutils': 5.2.0(rollup@4.46.4)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.10
optionalDependencies:
rollup: 4.34.8
rollup: 4.46.4
'@rollup/pluginutils@5.1.4(rollup@4.34.8)':
'@rollup/pluginutils@5.2.0(rollup@4.46.4)':
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.2
picomatch: 4.0.3
optionalDependencies:
rollup: 4.34.8
rollup: 4.46.4
'@rollup/rollup-android-arm-eabi@4.34.8':
'@rollup/rollup-android-arm-eabi@4.46.4':
optional: true
'@rollup/rollup-android-arm64@4.34.8':
'@rollup/rollup-android-arm64@4.46.4':
optional: true
'@rollup/rollup-darwin-arm64@4.34.8':
'@rollup/rollup-darwin-arm64@4.46.4':
optional: true
'@rollup/rollup-darwin-x64@4.34.8':
'@rollup/rollup-darwin-x64@4.46.4':
optional: true
'@rollup/rollup-freebsd-arm64@4.34.8':
'@rollup/rollup-freebsd-arm64@4.46.4':
optional: true
'@rollup/rollup-freebsd-x64@4.34.8':
'@rollup/rollup-freebsd-x64@4.46.4':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
'@rollup/rollup-linux-arm-gnueabihf@4.46.4':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
'@rollup/rollup-linux-arm-musleabihf@4.46.4':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.34.8':
'@rollup/rollup-linux-arm64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-arm64-musl@4.34.8':
'@rollup/rollup-linux-arm64-musl@4.46.4':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
'@rollup/rollup-linux-loongarch64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
'@rollup/rollup-linux-ppc64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
'@rollup/rollup-linux-riscv64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.34.8':
'@rollup/rollup-linux-riscv64-musl@4.46.4':
optional: true
'@rollup/rollup-linux-x64-gnu@4.34.8':
'@rollup/rollup-linux-s390x-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-x64-musl@4.34.8':
'@rollup/rollup-linux-x64-gnu@4.46.4':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.34.8':
'@rollup/rollup-linux-x64-musl@4.46.4':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.34.8':
'@rollup/rollup-win32-arm64-msvc@4.46.4':
optional: true
'@rollup/rollup-win32-x64-msvc@4.34.8':
'@rollup/rollup-win32-ia32-msvc@4.46.4':
optional: true
'@shikijs/core@3.7.0':
'@rollup/rollup-win32-x64-msvc@4.46.4':
optional: true
'@sec-ant/readable-stream@0.4.1': {}
'@shikijs/core@3.12.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types': 3.12.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
'@shikijs/engine-javascript@3.7.0':
'@shikijs/engine-javascript@3.12.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types': 3.12.0
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.3
'@shikijs/engine-oniguruma@3.7.0':
'@shikijs/engine-oniguruma@3.12.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types': 3.12.0
'@shikijs/vscode-textmate': 10.0.2
'@shikijs/langs@3.7.0':
'@shikijs/langs@3.12.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types': 3.12.0
'@shikijs/themes@3.7.0':
'@shikijs/rehype@3.12.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types': 3.12.0
'@types/hast': 3.0.4
hast-util-to-string: 3.0.1
shiki: 3.12.0
unified: 11.0.5
unist-util-visit: 5.0.0
'@shikijs/types@3.7.0':
'@shikijs/themes@3.12.0':
dependencies:
'@shikijs/types': 3.12.0
'@shikijs/types@3.12.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
'@shikijs/vscode-textmate@10.0.2': {}
'@svelte-dev/pretty-code@1.0.0(shikiji@0.10.2)':
dependencies:
rehype-pretty-code: 0.12.6(shikiji@0.10.2)
rehype-stringify: 10.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.1
unified: 11.0.5
transitivePeerDependencies:
- shikiji
- supports-color
'@sindresorhus/merge-streams@4.0.0': {}
'@sveltejs/adapter-auto@3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))':
dependencies:
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
import-meta-resolve: 4.1.0
'@standard-schema/spec@1.0.0': {}
'@sveltejs/adapter-node@5.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))':
'@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)':
dependencies:
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
'@rollup/plugin-json': 6.1.0(rollup@4.34.8)
'@rollup/plugin-node-resolve': 15.3.1(rollup@4.34.8)
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
rollup: 4.34.8
acorn: 8.15.0
'@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
'@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)))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@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.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)))':
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))
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))':
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))
'@types/cookie': 0.6.0
acorn: 8.15.0
cookie: 0.6.0
devalue: 5.1.1
esm-env: 1.2.2
import-meta-resolve: 4.1.0
kleur: 4.1.5
magic-string: 0.30.17
mrmime: 2.0.1
sade: 1.8.1
set-cookie-parser: 2.7.1
sirv: 2.0.4
svelte: 4.2.20
tiny-glob: 0.2.9
vite: 5.4.7(@types/node@22.5.5)
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)
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
'@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))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
debug: 4.4.0
svelte: 4.2.20
vite: 5.4.7(@types/node@22.5.5)
'@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))
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)
transitivePeerDependencies:
- supports-color
'@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
'@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))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
debug: 4.4.0
'@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))
debug: 4.4.1
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
svelte: 4.2.20
svelte-hmr: 0.16.0(svelte@4.2.20)
vite: 5.4.7(@types/node@22.5.5)
vitefu: 0.2.5(vite@5.4.7(@types/node@22.5.5))
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))
transitivePeerDependencies:
- supports-color
'@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-preset@8.1.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.9)
'@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.9)
'@svgr/core@8.1.0(typescript@5.6.2)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-preset': 8.1.0(@babel/core@7.26.9)
camelcase: 6.3.0
cosmiconfig: 8.3.6(typescript@5.6.2)
snake-case: 3.0.4
transitivePeerDependencies:
- supports-color
- typescript
'@svgr/hast-util-to-babel-ast@8.0.0':
dependencies:
'@babel/types': 7.26.9
entities: 4.5.0
'@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.6.2))':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-preset': 8.1.0(@babel/core@7.26.9)
'@svgr/core': 8.1.0(typescript@5.6.2)
'@svgr/hast-util-to-babel-ast': 8.0.0
svg-parser: 2.0.4
transitivePeerDependencies:
- supports-color
'@swc/helpers@0.5.15':
'@swc/helpers@0.5.17':
dependencies:
tslib: 2.8.1
'@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)':
'@tailwindcss/node@4.1.12':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.17
'@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.3
jiti: 2.5.1
lightningcss: 1.30.1
magic-string: 0.30.17
source-map-js: 1.2.1
tailwindcss: 4.1.12
'@tailwindcss/oxide-android-arm64@4.1.12':
optional: true
'@tailwindcss/oxide-darwin-arm64@4.1.12':
optional: true
'@tailwindcss/oxide-darwin-x64@4.1.12':
optional: true
'@tailwindcss/oxide-freebsd-x64@4.1.12':
optional: true
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
optional: true
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
optional: true
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
optional: true
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
optional: true
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
optional: true
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
optional: true
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
optional: true
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
optional: true
'@tailwindcss/oxide@4.1.12':
dependencies:
detect-libc: 2.0.4
tar: 7.4.3
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/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))':
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)
'@ts-morph/common@0.27.0':
dependencies:
fast-glob: 3.3.3
minimatch: 10.0.3
path-browserify: 1.0.1
'@types/cookie@0.6.0': {}
@@ -3409,14 +4005,7 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
'@types/downloadjs@1.4.6': {}
'@types/eslint@9.6.1':
dependencies:
'@types/estree': 1.0.6
'@types/json-schema': 7.0.15
'@types/estree@1.0.6': {}
'@types/estree@1.0.8': {}
'@types/hast@3.0.4':
dependencies:
@@ -3430,161 +4019,125 @@ snapshots:
'@types/ms@2.1.0': {}
'@types/node@22.5.5':
'@types/node@24.3.0':
dependencies:
undici-types: 6.19.8
undici-types: 7.10.0
'@types/resolve@1.20.2': {}
'@types/unist@2.0.11': {}
'@types/statuses@2.0.6': {}
'@types/tough-cookie@4.0.5': {}
'@types/unist@3.0.3': {}
'@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@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)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/type-utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.6.0
eslint: 9.11.0(jiti@1.21.7)
'@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@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/visitor-keys': 8.40.0
eslint: 9.33.0(jiti@2.5.1)
graphemer: 1.4.0
ignore: 5.3.2
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.6.0
debug: 4.4.0
eslint: 9.11.0(jiti@1.21.7)
optionalDependencies:
typescript: 5.6.2
'@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/visitor-keys': 8.40.0
debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.6.0':
'@typescript-eslint/project-service@8.40.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/visitor-keys': 8.6.0
'@typescript-eslint/type-utils@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
debug: 4.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2)
'@typescript-eslint/types': 8.40.0
debug: 4.4.1
typescript: 5.9.2
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/types@8.6.0': {}
'@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)':
'@typescript-eslint/scope-manager@8.40.0':
dependencies:
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/visitor-keys': 8.6.0
debug: 4.4.0
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/visitor-keys': 8.40.0
'@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
'@typescript-eslint/type-utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
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)
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
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.40.0': {}
'@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)':
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/types': 8.40.0
'@typescript-eslint/visitor-keys': 8.40.0
debug: 4.4.1
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.1
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
semver: 7.7.2
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@typescript-eslint/utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
eslint: 9.11.0(jiti@1.21.7)
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.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
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@8.6.0':
'@typescript-eslint/visitor-keys@8.40.0':
dependencies:
'@typescript-eslint/types': 8.6.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/types': 8.40.0
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.3.0': {}
'@upstash/core-analytics@0.0.10':
accepts@2.0.0:
dependencies:
'@upstash/redis': 1.35.3
mime-types: 3.0.1
negotiator: 1.0.0
'@upstash/ratelimit@2.0.6(@upstash/redis@1.35.3)':
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
'@upstash/core-analytics': 0.0.10
'@upstash/redis': 1.35.3
acorn: 8.15.0
'@upstash/redis@1.35.3':
dependencies:
uncrypto: 0.1.3
acorn@8.15.0: {}
'@vitest/expect@2.1.1':
dependencies:
'@vitest/spy': 2.1.1
'@vitest/utils': 2.1.1
chai: 5.2.0
tinyrainbow: 1.2.0
'@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5))':
dependencies:
'@vitest/spy': 2.1.1
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
vite: 5.4.7(@types/node@22.5.5)
'@vitest/pretty-format@2.1.1':
dependencies:
tinyrainbow: 1.2.0
'@vitest/pretty-format@2.1.9':
dependencies:
tinyrainbow: 1.2.0
'@vitest/runner@2.1.1':
dependencies:
'@vitest/utils': 2.1.1
pathe: 1.1.2
'@vitest/snapshot@2.1.1':
dependencies:
'@vitest/pretty-format': 2.1.1
magic-string: 0.30.17
pathe: 1.1.2
'@vitest/spy@2.1.1':
dependencies:
tinyspy: 3.0.2
'@vitest/utils@2.1.1':
dependencies:
'@vitest/pretty-format': 2.1.1
loupe: 3.1.3
tinyrainbow: 1.2.0
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
acorn@8.14.0: {}
agent-base@7.1.4: {}
ajv@6.12.6:
dependencies:
@@ -3593,40 +4146,31 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
ansi-regex@5.0.1: {}
ansi-regex@6.1.0: {}
ansi-regex@6.2.0: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@6.2.1: {}
ansis@4.1.0: {}
any-promise@1.3.0: {}
anymatch@3.1.3:
argparse@1.0.10:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
arg@5.0.2: {}
sprintf-js: 1.0.3
argparse@2.0.1: {}
aria-query@5.3.2: {}
assertion-error@2.0.1: {}
autoprefixer@10.4.21(postcss@8.5.3):
ast-types@0.16.1:
dependencies:
browserslist: 4.24.4
caniuse-lite: 1.0.30001715
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.3
postcss-value-parser: 4.2.0
tslib: 2.8.1
axobject-query@4.1.0: {}
@@ -3634,23 +4178,39 @@ snapshots:
balanced-match@1.0.2: {}
binary-extensions@2.3.0: {}
bits-ui@0.22.0(svelte@4.2.20):
bits-ui@2.11.3(@internationalized/date@3.8.2)(svelte@5.38.2):
dependencies:
'@internationalized/date': 3.7.0
'@melt-ui/svelte': 0.76.2(svelte@4.2.20)
nanoid: 5.1.2
svelte: 4.2.20
'@floating-ui/core': 1.7.3
'@floating-ui/dom': 1.7.4
'@internationalized/date': 3.8.2
esm-env: 1.2.2
runed: 0.31.1(svelte@5.38.2)
svelte: 5.38.2
svelte-toolbelt: 0.10.5(svelte@5.38.2)
tabbable: 6.2.0
body-parser@2.2.0:
dependencies:
bytes: 3.1.2
content-type: 1.0.5
debug: 4.4.1
http-errors: 2.0.0
iconv-lite: 0.6.3
on-finished: 2.4.1
qs: 6.14.0
raw-body: 3.0.0
type-is: 2.0.1
transitivePeerDependencies:
- supports-color
boolbase@1.0.0: {}
brace-expansion@1.1.11:
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.0.1:
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -3658,64 +4218,60 @@ snapshots:
dependencies:
fill-range: 7.1.1
browserslist@4.24.4:
browserslist@4.25.3:
dependencies:
caniuse-lite: 1.0.30001700
electron-to-chromium: 1.5.104
caniuse-lite: 1.0.30001737
electron-to-chromium: 1.5.209
node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4)
update-browserslist-db: 1.1.3(browserslist@4.25.3)
cac@6.7.14: {}
bytes@3.1.2: {}
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
camelcase@8.0.0: {}
camelcase@6.3.0: {}
caniuse-lite@1.0.30001700: {}
caniuse-lite@1.0.30001715: {}
caniuse-lite@1.0.30001737: {}
ccount@2.0.1: {}
chai@5.2.0:
dependencies:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
loupe: 3.1.3
pathval: 2.0.0
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
chalk@5.6.0: {}
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
character-entities@2.0.2: {}
check-error@2.1.1: {}
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
chownr@3.0.0: {}
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
cli-spinners@2.9.2: {}
cli-width@4.1.0: {}
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@@ -3724,13 +4280,7 @@ snapshots:
clsx@2.1.1: {}
code-red@1.0.4:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
'@types/estree': 1.0.6
acorn: 8.14.0
estree-walker: 3.0.3
periscopic: 3.1.0
code-block-writer@13.0.3: {}
color-convert@2.0.1:
dependencies:
@@ -3742,36 +4292,41 @@ snapshots:
commander@11.1.0: {}
commander@4.1.1: {}
commander@14.0.0: {}
commondir@1.0.1: {}
concat-map@0.0.1: {}
concurrently@9.0.1:
content-disposition@1.0.0:
dependencies:
chalk: 4.1.2
lodash: 4.17.21
rxjs: 7.8.2
shell-quote: 1.8.2
supports-color: 8.1.1
tree-kill: 1.2.2
yargs: 17.7.2
safe-buffer: 5.2.1
content-type@1.0.5: {}
convert-source-map@2.0.0: {}
cookie-signature@1.2.2: {}
cookie@0.6.0: {}
cookie@0.7.2: {}
core-util-is@1.0.3: {}
cosmiconfig@8.3.6(typescript@5.6.2):
cors@2.8.5:
dependencies:
object-assign: 4.1.1
vary: 1.1.2
cosmiconfig@9.0.0(typescript@5.9.2):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
path-type: 4.0.0
optionalDependencies:
typescript: 5.6.2
typescript: 5.9.2
cross-spawn@7.0.6:
dependencies:
@@ -3792,11 +4347,6 @@ snapshots:
mdn-data: 2.0.28
source-map-js: 1.2.1
css-tree@2.3.1:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.1
css-tree@3.1.0:
dependencies:
mdn-data: 2.12.2
@@ -3810,31 +4360,35 @@ snapshots:
dependencies:
css-tree: 2.2.1
debug@4.4.0:
data-uri-to-buffer@4.0.1: {}
debug@4.4.1:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.0.2:
decode-named-character-reference@1.2.0:
dependencies:
character-entities: 2.0.2
deep-eql@5.0.2: {}
dedent@1.6.0: {}
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
depd@2.0.0: {}
dequal@2.0.3: {}
detect-libc@2.0.4: {}
devalue@5.1.1: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
didyoumean@1.2.2: {}
dlv@1.1.3: {}
diff@8.0.2: {}
dom-serializer@2.0.0:
dependencies:
@@ -3854,147 +4408,143 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
dot-case@3.0.4:
dotenv@17.2.1: {}
dunder-proto@1.0.1:
dependencies:
no-case: 3.0.4
tslib: 2.7.0
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
downloadjs@1.4.7: {}
eciesjs@0.4.15:
dependencies:
'@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0)
'@noble/ciphers': 1.3.0
'@noble/curves': 1.9.7
'@noble/hashes': 1.8.0
eastasianwidth@0.2.0: {}
ee-first@1.1.1: {}
electron-to-chromium@1.5.104: {}
electron-to-chromium@1.5.209: {}
emoji-regex@10.4.0: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
encodeurl@2.0.0: {}
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.2
entities@4.5.0: {}
entities@6.0.1: {}
env-paths@2.2.1: {}
error-ex@1.3.2:
dependencies:
is-arrayish: 0.2.1
esbuild@0.21.5:
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
'@esbuild/android-arm': 0.21.5
'@esbuild/android-arm64': 0.21.5
'@esbuild/android-x64': 0.21.5
'@esbuild/darwin-arm64': 0.21.5
'@esbuild/darwin-x64': 0.21.5
'@esbuild/freebsd-arm64': 0.21.5
'@esbuild/freebsd-x64': 0.21.5
'@esbuild/linux-arm': 0.21.5
'@esbuild/linux-arm64': 0.21.5
'@esbuild/linux-ia32': 0.21.5
'@esbuild/linux-loong64': 0.21.5
'@esbuild/linux-mips64el': 0.21.5
'@esbuild/linux-ppc64': 0.21.5
'@esbuild/linux-riscv64': 0.21.5
'@esbuild/linux-s390x': 0.21.5
'@esbuild/linux-x64': 0.21.5
'@esbuild/netbsd-x64': 0.21.5
'@esbuild/openbsd-x64': 0.21.5
'@esbuild/sunos-x64': 0.21.5
'@esbuild/win32-arm64': 0.21.5
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
es-define-property@1.0.1: {}
esbuild@0.24.0:
es-errors@1.3.0: {}
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
esbuild@0.25.9:
optionalDependencies:
'@esbuild/aix-ppc64': 0.24.0
'@esbuild/android-arm': 0.24.0
'@esbuild/android-arm64': 0.24.0
'@esbuild/android-x64': 0.24.0
'@esbuild/darwin-arm64': 0.24.0
'@esbuild/darwin-x64': 0.24.0
'@esbuild/freebsd-arm64': 0.24.0
'@esbuild/freebsd-x64': 0.24.0
'@esbuild/linux-arm': 0.24.0
'@esbuild/linux-arm64': 0.24.0
'@esbuild/linux-ia32': 0.24.0
'@esbuild/linux-loong64': 0.24.0
'@esbuild/linux-mips64el': 0.24.0
'@esbuild/linux-ppc64': 0.24.0
'@esbuild/linux-riscv64': 0.24.0
'@esbuild/linux-s390x': 0.24.0
'@esbuild/linux-x64': 0.24.0
'@esbuild/netbsd-x64': 0.24.0
'@esbuild/openbsd-arm64': 0.24.0
'@esbuild/openbsd-x64': 0.24.0
'@esbuild/sunos-x64': 0.24.0
'@esbuild/win32-arm64': 0.24.0
'@esbuild/win32-ia32': 0.24.0
'@esbuild/win32-x64': 0.24.0
'@esbuild/aix-ppc64': 0.25.9
'@esbuild/android-arm': 0.25.9
'@esbuild/android-arm64': 0.25.9
'@esbuild/android-x64': 0.25.9
'@esbuild/darwin-arm64': 0.25.9
'@esbuild/darwin-x64': 0.25.9
'@esbuild/freebsd-arm64': 0.25.9
'@esbuild/freebsd-x64': 0.25.9
'@esbuild/linux-arm': 0.25.9
'@esbuild/linux-arm64': 0.25.9
'@esbuild/linux-ia32': 0.25.9
'@esbuild/linux-loong64': 0.25.9
'@esbuild/linux-mips64el': 0.25.9
'@esbuild/linux-ppc64': 0.25.9
'@esbuild/linux-riscv64': 0.25.9
'@esbuild/linux-s390x': 0.25.9
'@esbuild/linux-x64': 0.25.9
'@esbuild/netbsd-arm64': 0.25.9
'@esbuild/netbsd-x64': 0.25.9
'@esbuild/openbsd-arm64': 0.25.9
'@esbuild/openbsd-x64': 0.25.9
'@esbuild/openharmony-arm64': 0.25.9
'@esbuild/sunos-x64': 0.25.9
'@esbuild/win32-arm64': 0.25.9
'@esbuild/win32-ia32': 0.25.9
'@esbuild/win32-x64': 0.25.9
escalade@3.2.0: {}
escape-html@1.0.3: {}
escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
eslint-compat-utils@0.5.1(eslint@9.11.0(jiti@1.21.7)):
eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)):
dependencies:
eslint: 9.11.0(jiti@1.21.7)
semver: 7.7.1
eslint: 9.33.0(jiti@2.5.1)
eslint-config-prettier@9.1.0(eslint@9.11.0(jiti@1.21.7)):
eslint-plugin-svelte@3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2):
dependencies:
eslint: 9.11.0(jiti@1.21.7)
eslint-plugin-svelte@2.44.0(eslint@9.11.0(jiti@1.21.7))(svelte@4.2.20):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@jridgewell/sourcemap-codec': 1.5.0
eslint: 9.11.0(jiti@1.21.7)
eslint-compat-utils: 0.5.1(eslint@9.11.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
'@jridgewell/sourcemap-codec': 1.5.5
eslint: 9.33.0(jiti@2.5.1)
esutils: 2.0.3
known-css-properties: 0.34.0
postcss: 8.5.3
postcss-load-config: 3.1.4(postcss@8.5.3)
postcss-safe-parser: 6.0.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
semver: 7.7.1
svelte-eslint-parser: 0.41.1(svelte@4.2.20)
globals: 16.3.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)
optionalDependencies:
svelte: 4.2.20
svelte: 5.38.2
transitivePeerDependencies:
- ts-node
eslint-scope@7.2.2:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-scope@8.2.0:
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.2.0: {}
eslint-visitor-keys@4.2.1: {}
eslint@9.11.0(jiti@1.21.7):
eslint@9.33.0(jiti@2.5.1):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.18.0
'@eslint/eslintrc': 3.3.0
'@eslint/js': 9.11.0
'@eslint/plugin-kit': 0.2.7
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.33.0
'@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.3.1
'@nodelib/fs.walk': 1.2.8
'@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
debug: 4.4.0
debug: 4.4.1
escape-string-regexp: 4.0.0
eslint-scope: 8.2.0
eslint-visitor-keys: 4.2.0
espree: 10.3.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
esquery: 1.6.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -4004,37 +4554,34 @@ snapshots:
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
strip-ansi: 6.0.1
text-table: 0.2.0
optionalDependencies:
jiti: 1.21.7
jiti: 2.5.1
transitivePeerDependencies:
- supports-color
esm-env@1.2.2: {}
espree@10.3.0:
espree@10.4.0:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.2.0
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
espree@9.6.1:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
esrap@2.1.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
@@ -4043,12 +4590,83 @@ snapshots:
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
esutils@2.0.3: {}
etag@1.8.1: {}
eventsource-parser@3.0.5: {}
eventsource@3.0.7:
dependencies:
eventsource-parser: 3.0.5
execa@5.1.1:
dependencies:
cross-spawn: 7.0.6
get-stream: 6.0.1
human-signals: 2.1.0
is-stream: 2.0.1
merge-stream: 2.0.0
npm-run-path: 4.0.1
onetime: 5.1.2
signal-exit: 3.0.7
strip-final-newline: 2.0.0
execa@9.6.0:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
cross-spawn: 7.0.6
figures: 6.1.0
get-stream: 9.0.1
human-signals: 8.0.1
is-plain-obj: 4.1.0
is-stream: 4.0.1
npm-run-path: 6.0.0
pretty-ms: 9.2.0
signal-exit: 4.1.0
strip-final-newline: 4.0.0
yoctocolors: 2.1.2
express-rate-limit@7.5.1(express@5.1.0):
dependencies:
express: 5.1.0
express@5.1.0:
dependencies:
accepts: 2.0.0
body-parser: 2.2.0
content-disposition: 1.0.0
content-type: 1.0.5
cookie: 0.7.2
cookie-signature: 1.2.2
debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
finalhandler: 2.1.0
fresh: 2.0.0
http-errors: 2.0.0
merge-descriptors: 2.0.0
mime-types: 3.0.1
on-finished: 2.4.1
once: 1.4.0
parseurl: 1.3.3
proxy-addr: 2.0.7
qs: 6.14.0
range-parser: 1.2.1
router: 2.2.0
send: 1.2.0
serve-static: 2.2.0
statuses: 2.0.2
type-is: 2.0.1
vary: 1.1.2
transitivePeerDependencies:
- supports-color
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
@@ -4065,13 +4683,22 @@ snapshots:
fast-levenshtein@2.0.6: {}
fastq@1.19.0:
fastq@1.19.1:
dependencies:
reusify: 1.1.0
fdir@6.4.3(picomatch@4.0.2):
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.2
picomatch: 4.0.3
fetch-blob@3.2.0:
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
figures@6.1.0:
dependencies:
is-unicode-supported: 2.1.0
file-entry-cache@8.0.0:
dependencies:
@@ -4081,6 +4708,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
finalhandler@2.1.0:
dependencies:
debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
on-finished: 2.4.1
parseurl: 1.3.3
statuses: 2.0.2
transitivePeerDependencies:
- supports-color
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -4093,16 +4731,19 @@ snapshots:
flatted@3.3.3: {}
focus-trap@7.6.4:
formdata-polyfill@4.0.10:
dependencies:
tabbable: 6.2.0
fetch-blob: 3.2.0
foreground-child@3.3.1:
forwarded@0.2.0: {}
fresh@2.0.0: {}
fs-extra@11.3.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
fraction.js@4.3.7: {}
graceful-fs: 4.2.11
jsonfile: 6.2.0
universalify: 2.0.1
fsevents@2.3.3:
optional: true
@@ -4111,10 +4752,47 @@ snapshots:
fuse.js@7.1.0: {}
fuzzysort@3.1.0: {}
fzf@0.5.2: {}
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
get-east-asian-width@1.3.0: {}
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
function-bind: 1.1.2
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.2
math-intrinsics: 1.1.0
get-own-enumerable-keys@1.0.0: {}
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
get-stream@6.0.1: {}
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
is-stream: 4.0.1
get-tsconfig@4.10.1:
dependencies:
resolve-pkg-maps: 1.0.0
github-slugger@2.0.0: {}
glob-parent@5.1.2:
@@ -4125,49 +4803,40 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob@10.4.5:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
globals@11.12.0: {}
globals@14.0.0: {}
globals@15.9.0: {}
globals@16.3.0: {}
globalyzer@0.1.0: {}
gopd@1.2.0: {}
globrex@0.1.2: {}
graceful-fs@4.2.11: {}
graphemer@1.4.0: {}
graphql@16.11.0: {}
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.1
kind-of: 6.0.3
section-matter: 1.0.0
strip-bom-string: 1.0.0
has-flag@4.0.0: {}
has-symbols@1.1.0: {}
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
hast-util-from-html@2.0.3:
dependencies:
'@types/hast': 3.0.4
devlop: 1.1.0
hast-util-from-parse5: 8.0.3
parse5: 7.2.1
vfile: 6.0.3
vfile-message: 4.0.2
hast-util-from-parse5@8.0.3:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
devlop: 1.1.0
hastscript: 9.0.1
property-information: 7.0.0
property-information: 7.1.0
vfile: 6.0.3
vfile-location: 5.0.3
web-namespaces: 2.0.1
@@ -4184,6 +4853,22 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
hast-util-raw@9.1.0:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.0
hast-util-from-parse5: 8.0.3
hast-util-to-parse5: 8.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
parse5: 7.3.0
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
vfile: 6.0.3
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
@@ -4193,11 +4878,21 @@ snapshots:
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
property-information: 7.0.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
hast-util-to-parse5@8.0.0:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
property-information: 6.5.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-to-string@3.0.1:
dependencies:
'@types/hast': 3.0.4
@@ -4211,13 +4906,40 @@ snapshots:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
hast-util-parse-selector: 4.0.0
property-information: 7.0.0
property-information: 7.1.0
space-separated-tokens: 2.0.2
headers-polyfill@4.0.3: {}
html-void-elements@3.0.0: {}
http-errors@2.0.0:
dependencies:
depd: 2.0.0
inherits: 2.0.4
setprototypeof: 1.2.0
statuses: 2.0.1
toidentifier: 1.0.1
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.4
debug: 4.4.1
transitivePeerDependencies:
- supports-color
human-signals@2.1.0: {}
human-signals@8.0.1: {}
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
ignore@5.3.2: {}
ignore@7.0.5: {}
immediate@3.0.6: {}
import-fresh@3.3.1:
@@ -4225,22 +4947,22 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
import-meta-resolve@4.1.0: {}
imurmurhash@0.1.4: {}
inherits@2.0.4: {}
is-arrayish@0.2.1: {}
inline-style-parser@0.2.4: {}
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
ipaddr.js@1.9.1: {}
is-arrayish@0.2.1: {}
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
is-extendable@0.1.1: {}
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
@@ -4249,36 +4971,53 @@ snapshots:
dependencies:
is-extglob: 2.1.1
is-interactive@2.0.0: {}
is-module@1.0.0: {}
is-node-process@1.2.0: {}
is-number@7.0.0: {}
is-path-inside@3.0.3: {}
is-obj@3.0.0: {}
is-plain-obj@4.1.0: {}
is-promise@4.0.0: {}
is-reference@1.2.1:
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.8
is-reference@3.0.3:
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.8
is-regexp@3.1.0: {}
is-stream@2.0.1: {}
is-stream@4.0.1: {}
is-unicode-supported@1.3.0: {}
is-unicode-supported@2.1.0: {}
isarray@1.0.0: {}
isexe@2.0.0: {}
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
isexe@3.1.1: {}
jiti@1.21.7: {}
jiti@2.5.1: {}
js-tokens@4.0.0: {}
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
@@ -4295,6 +5034,12 @@ snapshots:
json5@2.2.3: {}
jsonfile@6.2.0:
dependencies:
universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
jszip@3.10.1:
dependencies:
lie: 3.3.0
@@ -4306,9 +5051,13 @@ snapshots:
dependencies:
json-buffer: 3.0.1
kind-of@6.0.3: {}
kleur@3.0.3: {}
kleur@4.1.5: {}
known-css-properties@0.34.0: {}
known-css-properties@0.37.0: {}
levn@0.4.1:
dependencies:
@@ -4319,9 +5068,52 @@ snapshots:
dependencies:
immediate: 3.0.6
lilconfig@2.1.0: {}
lightningcss-darwin-arm64@1.30.1:
optional: true
lilconfig@3.1.3: {}
lightningcss-darwin-x64@1.30.1:
optional: true
lightningcss-freebsd-x64@1.30.1:
optional: true
lightningcss-linux-arm-gnueabihf@1.30.1:
optional: true
lightningcss-linux-arm64-gnu@1.30.1:
optional: true
lightningcss-linux-arm64-musl@1.30.1:
optional: true
lightningcss-linux-x64-gnu@1.30.1:
optional: true
lightningcss-linux-x64-musl@1.30.1:
optional: true
lightningcss-win32-arm64-msvc@1.30.1:
optional: true
lightningcss-win32-x64-msvc@1.30.1:
optional: true
lightningcss@1.30.1:
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
lilconfig@2.1.0: {}
lines-and-columns@1.2.4: {}
@@ -4331,124 +5123,40 @@ snapshots:
dependencies:
p-locate: 5.0.0
lodash.castarray@4.4.0: {}
lodash.isplainobject@4.0.6: {}
lodash.merge@4.6.2: {}
lodash@4.17.21: {}
longest-streak@3.1.0: {}
loupe@3.1.3: {}
lower-case@2.0.2:
log-symbols@6.0.0:
dependencies:
tslib: 2.7.0
lru-cache@10.4.3: {}
chalk: 5.6.0
is-unicode-supported: 1.3.0
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
lucide-svelte@0.525.0(svelte@4.2.20):
dependencies:
svelte: 4.2.20
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/sourcemap-codec': 1.5.5
markdown-table@3.0.4: {}
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
math-intrinsics@1.1.0: {}
mdast-util-from-markdown@2.0.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
decode-named-character-reference: 1.0.2
decode-named-character-reference: 1.2.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.1
micromark: 4.0.2
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
'@types/mdast': 4.0.4
ccount: 2.0.1
devlop: 1.1.0
mdast-util-find-and-replace: 3.0.2
micromark-util-character: 2.1.1
mdast-util-gfm-footnote@2.1.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
mdast-util-from-markdown: 2.0.2
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.0
mdast-util-to-hast@13.2.0:
dependencies:
'@types/hast': 3.0.4
@@ -4461,43 +5169,25 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
mdast-util-to-markdown@2.1.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
unist-util-visit: 5.0.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
mdn-data@2.12.2: {}
mdsvex@0.12.5(svelte@4.2.20):
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 2.0.11
prism-svelte: 0.4.7
prismjs: 1.29.0
svelte: 4.2.20
unist-util-visit: 2.0.3
vfile-message: 2.0.4
media-typer@1.1.0: {}
merge-descriptors@2.0.0: {}
merge-stream@2.0.0: {}
merge2@1.4.1: {}
micromark-core-commonmark@2.0.2:
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.0.2
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
@@ -4510,104 +5200,46 @@ snapshots:
micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-subtokenize: 2.0.4
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.1.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.2
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.1
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-chunked@2.0.1:
dependencies:
@@ -4617,12 +5249,12 @@ snapshots:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
@@ -4630,7 +5262,7 @@ snapshots:
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.0.2
decode-named-character-reference: 1.2.0
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
@@ -4645,7 +5277,7 @@ snapshots:
micromark-util-resolve-all@2.0.1:
dependencies:
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-sanitize-uri@2.0.1:
dependencies:
@@ -4653,24 +5285,24 @@ snapshots:
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-subtokenize@2.0.4:
micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
micromark-util-symbol@2.0.1: {}
micromark-util-types@2.0.1: {}
micromark-util-types@2.0.2: {}
micromark@4.0.1:
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
debug: 4.4.0
decode-named-character-reference: 1.0.2
debug: 4.4.1
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.2
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
@@ -4680,9 +5312,9 @@ snapshots:
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-subtokenize: 2.0.4
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
transitivePeerDependencies:
- supports-color
@@ -4691,19 +5323,43 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
mime-db@1.54.0: {}
mime-types@3.0.1:
dependencies:
mime-db: 1.54.0
mimic-fn@2.1.0: {}
mimic-function@5.0.1: {}
minimatch@10.0.3:
dependencies:
'@isaacs/brace-expansion': 5.0.0
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
brace-expansion: 1.1.12
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
brace-expansion: 2.0.2
minimist@1.2.8: {}
minipass@7.1.2: {}
mode-watcher@0.5.1(svelte@4.2.20):
minizlib@3.0.2:
dependencies:
svelte: 4.2.20
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)
svelte: 5.38.2
svelte-toolbelt: 0.7.1(svelte@5.38.2)
mri@1.2.0: {}
@@ -4711,28 +5367,57 @@ snapshots:
ms@2.1.3: {}
mz@2.7.0:
msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2):
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
'@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)
'@mswjs/interceptors': 0.39.6
'@open-draft/deferred-promise': 2.2.0
'@open-draft/until': 2.1.0
'@types/cookie': 0.6.0
'@types/statuses': 2.0.6
graphql: 16.11.0
headers-polyfill: 4.0.3
is-node-process: 1.2.0
outvariant: 1.4.3
path-to-regexp: 6.3.0
picocolors: 1.1.1
strict-event-emitter: 0.5.1
type-fest: 4.41.0
yargs: 17.7.2
optionalDependencies:
typescript: 5.9.2
transitivePeerDependencies:
- '@types/node'
nanoid@3.3.8: {}
mute-stream@2.0.0: {}
nanoid@5.1.2: {}
nanoid@3.3.11: {}
natural-compare@1.4.0: {}
no-case@3.0.4:
negotiator@1.0.0: {}
node-domexception@1.0.0: {}
node-fetch@3.3.2:
dependencies:
lower-case: 2.0.2
tslib: 2.7.0
data-uri-to-buffer: 4.0.1
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
node-releases@2.0.19: {}
normalize-path@3.0.0: {}
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
normalize-range@0.1.2: {}
npm-run-path@6.0.0:
dependencies:
path-key: 4.0.0
unicorn-magic: 0.3.0
nth-check@2.1.1:
dependencies:
@@ -4740,7 +5425,25 @@ snapshots:
object-assign@4.1.1: {}
object-hash@3.0.0: {}
object-inspect@1.13.4: {}
object-treeify@1.1.33: {}
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
once@1.4.0:
dependencies:
wrappy: 1.0.2
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
oniguruma-parser@0.12.1: {}
@@ -4759,15 +5462,33 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
ora@8.2.0:
dependencies:
chalk: 5.6.0
cli-cursor: 5.0.0
cli-spinners: 2.9.2
is-interactive: 2.0.0
is-unicode-supported: 2.1.0
log-symbols: 6.0.0
stdin-discarder: 0.2.2
string-width: 7.2.0
strip-ansi: 7.1.0
outvariant@1.4.3: {}
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
p-limit@6.2.0:
dependencies:
yocto-queue: 1.2.1
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
package-json-from-dist@1.0.1: {}
package-manager-detector@1.3.0: {}
pako@1.0.11: {}
@@ -4777,137 +5498,130 @@ snapshots:
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.26.2
'@babel/code-frame': 7.27.1
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse-numeric-range@1.3.0: {}
parse-ms@4.0.0: {}
parse5@7.2.1:
parse5@7.3.0:
dependencies:
entities: 4.5.0
entities: 6.0.1
parseurl@1.3.3: {}
path-browserify@1.0.1: {}
path-exists@4.0.0: {}
path-key@3.1.1: {}
path-key@4.0.0: {}
path-parse@1.0.7: {}
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
minipass: 7.1.2
path-to-regexp@6.3.0: {}
path-type@4.0.0: {}
pathe@1.1.2: {}
pathval@2.0.0: {}
periscopic@3.1.0:
dependencies:
'@types/estree': 1.0.6
estree-walker: 3.0.3
is-reference: 3.0.3
path-to-regexp@8.2.0: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {}
picomatch@4.0.2: {}
picomatch@4.0.3: {}
pify@2.3.0: {}
pkce-challenge@5.0.0: {}
pirates@4.0.6: {}
pluralize@8.0.0: {}
postcss-import@15.1.0(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.10
postcss-js@4.0.1(postcss@8.5.3):
dependencies:
camelcase-css: 2.0.1
postcss: 8.5.3
postcss-load-config@3.1.4(postcss@8.5.3):
postcss-load-config@3.1.4(postcss@8.5.6):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.2
optionalDependencies:
postcss: 8.5.3
postcss: 8.5.6
postcss-load-config@4.0.2(postcss@8.5.3):
postcss-safe-parser@7.0.1(postcss@8.5.6):
dependencies:
lilconfig: 3.1.3
yaml: 2.7.0
optionalDependencies:
postcss: 8.5.3
postcss: 8.5.6
postcss-nested@6.2.0(postcss@8.5.3):
postcss-scss@4.0.9(postcss@8.5.6):
dependencies:
postcss: 8.5.3
postcss-selector-parser: 6.1.2
postcss: 8.5.6
postcss-safe-parser@6.0.0(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-scss@4.0.9(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-selector-parser@6.0.10:
postcss-selector-parser@7.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-selector-parser@6.1.2:
postcss@8.5.6:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
postcss@8.5.3:
dependencies:
nanoid: 3.3.8
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20):
prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2):
dependencies:
prettier: 3.3.3
svelte: 4.2.20
prettier: 3.6.2
svelte: 5.38.2
prettier-plugin-tailwindcss@0.6.6(prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20))(prettier@3.3.3):
prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2):
dependencies:
prettier: 3.3.3
prettier: 3.6.2
optionalDependencies:
prettier-plugin-svelte: 3.2.6(prettier@3.3.3)(svelte@4.2.20)
prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.38.2)
prettier@3.3.3: {}
prettier@3.6.2: {}
prism-svelte@0.4.7: {}
prismjs@1.29.0: {}
pretty-ms@9.2.0:
dependencies:
parse-ms: 4.0.0
process-nextick-args@2.0.1: {}
property-information@7.0.0: {}
prompts@2.4.2:
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
property-information@6.5.0: {}
property-information@7.1.0: {}
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
ipaddr.js: 1.9.1
psl@1.15.0:
dependencies:
punycode: 2.3.1
punycode@2.3.1: {}
qs@6.14.0:
dependencies:
side-channel: 1.1.0
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
read-cache@1.0.0:
randombytes@2.1.0:
dependencies:
pify: 2.3.0
safe-buffer: 5.2.1
range-parser@1.2.1: {}
raw-body@3.0.0:
dependencies:
bytes: 3.1.2
http-errors: 2.0.0
iconv-lite: 0.6.3
unpipe: 1.0.0
readable-stream@2.3.8:
dependencies:
@@ -4919,12 +5633,16 @@ snapshots:
string_decoder: 1.1.1
util-deprecate: 1.0.2
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
readdirp@4.1.2: {}
recast@0.23.11:
dependencies:
ast-types: 0.16.1
esprima: 4.0.1
source-map: 0.6.1
tiny-invariant: 1.3.3
tslib: 2.8.1
regex-recursion@6.0.2:
dependencies:
regex-utilities: 2.3.0
@@ -4944,21 +5662,11 @@ snapshots:
unified: 11.0.5
unist-util-visit: 5.0.0
rehype-parse@9.0.1:
rehype-raw@7.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-from-html: 2.0.3
unified: 11.0.5
rehype-pretty-code@0.12.6(shikiji@0.10.2):
dependencies:
'@types/hast': 3.0.4
hast-util-to-string: 3.0.1
parse-numeric-range: 1.3.0
rehype-parse: 9.0.1
shikiji: 0.10.2
unified: 11.0.5
unist-util-visit: 5.0.0
hast-util-raw: 9.1.0
vfile: 6.0.3
rehype-slug@6.0.0:
dependencies:
@@ -4974,27 +5682,16 @@ snapshots:
hast-util-to-html: 9.0.5
unified: 11.0.5
remark-gfm@4.0.1:
dependencies:
'@types/mdast': 4.0.4
mdast-util-gfm: 3.1.0
micromark-extension-gfm: 3.0.0
remark-parse: 11.0.0
remark-stringify: 11.0.0
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.2
micromark-util-types: 2.0.1
micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-rehype@11.1.1:
remark-rehype@11.1.2:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
@@ -5002,56 +5699,91 @@ snapshots:
unified: 11.0.5
vfile: 6.0.3
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
require-directory@2.1.1: {}
requires-port@1.0.0: {}
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
resolve@1.22.10:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
reusify@1.1.0: {}
rollup@4.34.8:
rollup@4.46.4:
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.34.8
'@rollup/rollup-android-arm64': 4.34.8
'@rollup/rollup-darwin-arm64': 4.34.8
'@rollup/rollup-darwin-x64': 4.34.8
'@rollup/rollup-freebsd-arm64': 4.34.8
'@rollup/rollup-freebsd-x64': 4.34.8
'@rollup/rollup-linux-arm-gnueabihf': 4.34.8
'@rollup/rollup-linux-arm-musleabihf': 4.34.8
'@rollup/rollup-linux-arm64-gnu': 4.34.8
'@rollup/rollup-linux-arm64-musl': 4.34.8
'@rollup/rollup-linux-loongarch64-gnu': 4.34.8
'@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
'@rollup/rollup-linux-riscv64-gnu': 4.34.8
'@rollup/rollup-linux-s390x-gnu': 4.34.8
'@rollup/rollup-linux-x64-gnu': 4.34.8
'@rollup/rollup-linux-x64-musl': 4.34.8
'@rollup/rollup-win32-arm64-msvc': 4.34.8
'@rollup/rollup-win32-ia32-msvc': 4.34.8
'@rollup/rollup-win32-x64-msvc': 4.34.8
'@rollup/rollup-android-arm-eabi': 4.46.4
'@rollup/rollup-android-arm64': 4.46.4
'@rollup/rollup-darwin-arm64': 4.46.4
'@rollup/rollup-darwin-x64': 4.46.4
'@rollup/rollup-freebsd-arm64': 4.46.4
'@rollup/rollup-freebsd-x64': 4.46.4
'@rollup/rollup-linux-arm-gnueabihf': 4.46.4
'@rollup/rollup-linux-arm-musleabihf': 4.46.4
'@rollup/rollup-linux-arm64-gnu': 4.46.4
'@rollup/rollup-linux-arm64-musl': 4.46.4
'@rollup/rollup-linux-loongarch64-gnu': 4.46.4
'@rollup/rollup-linux-ppc64-gnu': 4.46.4
'@rollup/rollup-linux-riscv64-gnu': 4.46.4
'@rollup/rollup-linux-riscv64-musl': 4.46.4
'@rollup/rollup-linux-s390x-gnu': 4.46.4
'@rollup/rollup-linux-x64-gnu': 4.46.4
'@rollup/rollup-linux-x64-musl': 4.46.4
'@rollup/rollup-win32-arm64-msvc': 4.46.4
'@rollup/rollup-win32-ia32-msvc': 4.46.4
'@rollup/rollup-win32-x64-msvc': 4.46.4
fsevents: 2.3.3
router@2.2.0:
dependencies:
debug: 4.4.1
depd: 2.0.0
is-promise: 4.0.0
parseurl: 1.3.3
path-to-regexp: 8.2.0
transitivePeerDependencies:
- supports-color
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
rxjs@7.8.2:
runed@0.23.4(svelte@5.38.2):
dependencies:
tslib: 2.7.0
esm-env: 1.2.2
svelte: 5.38.2
runed@0.25.0(svelte@5.38.2):
dependencies:
esm-env: 1.2.2
svelte: 5.38.2
runed@0.28.0(svelte@5.38.2):
dependencies:
esm-env: 1.2.2
svelte: 5.38.2
runed@0.29.2(svelte@5.38.2):
dependencies:
esm-env: 1.2.2
svelte: 5.38.2
runed@0.31.1(svelte@5.38.2):
dependencies:
esm-env: 1.2.2
svelte: 5.38.2
sade@1.8.1:
dependencies:
@@ -5059,63 +5791,164 @@ snapshots:
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
safer-buffer@2.1.2: {}
sax@1.4.1: {}
section-matter@1.0.0:
dependencies:
extend-shallow: 2.0.1
kind-of: 6.0.3
semver@6.3.1: {}
semver@7.7.1: {}
semver@7.7.2: {}
send@1.2.0:
dependencies:
debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
fresh: 2.0.0
http-errors: 2.0.0
mime-types: 3.0.1
ms: 2.1.3
on-finished: 2.4.1
range-parser: 1.2.1
statuses: 2.0.2
transitivePeerDependencies:
- supports-color
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
serve-static@2.2.0:
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
send: 1.2.0
transitivePeerDependencies:
- supports-color
set-cookie-parser@2.7.1: {}
setimmediate@1.0.5: {}
setprototypeof@1.2.0: {}
shadcn@3.0.0(@types/node@24.3.0)(typescript@5.9.2):
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)
'@dotenvx/dotenvx': 1.49.0
'@modelcontextprotocol/sdk': 1.17.4
commander: 14.0.0
cosmiconfig: 9.0.0(typescript@5.9.2)
dedent: 1.6.0
deepmerge: 4.3.1
diff: 8.0.2
execa: 9.6.0
fast-glob: 3.3.3
fs-extra: 11.3.1
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)
node-fetch: 3.3.2
ora: 8.2.0
postcss: 8.5.6
prompts: 2.4.2
recast: 0.23.11
stringify-object: 5.0.0
ts-morph: 26.0.0
tsconfig-paths: 4.2.0
zod: 3.25.76
zod-to-json-schema: 3.24.6(zod@3.25.76)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- typescript
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
shell-quote@1.8.2: {}
shiki@3.7.0:
shiki@3.12.0:
dependencies:
'@shikijs/core': 3.7.0
'@shikijs/engine-javascript': 3.7.0
'@shikijs/engine-oniguruma': 3.7.0
'@shikijs/langs': 3.7.0
'@shikijs/themes': 3.7.0
'@shikijs/types': 3.7.0
'@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/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
shikiji-core@0.10.2: {}
shikiji@0.10.2:
side-channel-list@1.0.0:
dependencies:
shikiji-core: 0.10.2
es-errors: 1.3.0
object-inspect: 1.13.4
siginfo@2.0.0: {}
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
sirv@2.0.4:
sirv@3.0.1:
dependencies:
'@polka/url': 1.0.0-next.28
'@polka/url': 1.0.0-next.29
mrmime: 2.0.1
totalist: 3.0.1
snake-case@3.0.4:
dependencies:
dot-case: 3.0.4
tslib: 2.7.0
sisteransi@1.0.5: {}
source-map-js@1.2.1: {}
source-map@0.6.1: {}
space-separated-tokens@2.0.2: {}
stackback@0.0.2: {}
sprintf-js@1.0.3: {}
std-env@3.8.0: {}
statuses@2.0.1: {}
statuses@2.0.2: {}
stdin-discarder@0.2.2: {}
strict-event-emitter@0.5.1: {}
string-width@4.2.3:
dependencies:
@@ -5123,10 +5956,10 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string-width@5.1.2:
string-width@7.2.0:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
emoji-regex: 10.4.0
get-east-asian-width: 1.3.0
strip-ansi: 7.1.0
string_decoder@1.1.1:
@@ -5138,93 +5971,98 @@ snapshots:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
stringify-object@5.0.0:
dependencies:
get-own-enumerable-keys: 1.0.0
is-obj: 3.0.0
is-regexp: 3.1.0
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
strip-ansi@7.1.0:
dependencies:
ansi-regex: 6.1.0
ansi-regex: 6.2.0
strip-bom-string@1.0.0: {}
strip-bom@3.0.0: {}
strip-final-newline@2.0.0: {}
strip-final-newline@4.0.0: {}
strip-json-comments@3.1.1: {}
sucrase@3.35.0:
style-to-object@1.0.9:
dependencies:
'@jridgewell/gen-mapping': 0.3.8
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
inline-style-parser: 0.2.4
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
supports-preserve-symlinks-flag@1.0.0: {}
svelte-check@4.0.9(picomatch@4.0.2)(svelte@4.2.20)(typescript@5.6.2):
svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/trace-mapping': 0.3.30
chokidar: 4.0.3
fdir: 6.4.3(picomatch@4.0.2)
fdir: 6.5.0(picomatch@4.0.3)
picocolors: 1.1.1
sade: 1.8.1
svelte: 4.2.20
typescript: 5.6.2
svelte: 5.38.2
typescript: 5.9.2
transitivePeerDependencies:
- picomatch
svelte-eslint-parser@0.41.1(svelte@4.2.20):
svelte-eslint-parser@1.3.1(svelte@5.38.2):
dependencies:
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
postcss: 8.5.3
postcss-scss: 4.0.9(postcss@8.5.3)
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
postcss: 8.5.6
postcss-scss: 4.0.9(postcss@8.5.6)
postcss-selector-parser: 7.1.0
optionalDependencies:
svelte: 4.2.20
svelte: 5.38.2
svelte-hmr@0.16.0(svelte@4.2.20):
svelte-sonner@1.0.5(svelte@5.38.2):
dependencies:
svelte: 4.2.20
runed: 0.28.0(svelte@5.38.2)
svelte: 5.38.2
svelte-sonner@0.3.28(svelte@4.2.20):
svelte-toolbelt@0.10.5(svelte@5.38.2):
dependencies:
svelte: 4.2.20
clsx: 2.1.1
runed: 0.29.2(svelte@5.38.2)
style-to-object: 1.0.9
svelte: 5.38.2
svelte@4.2.20:
svelte-toolbelt@0.7.1(svelte@5.38.2):
dependencies:
'@ampproject/remapping': 2.3.0
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@types/estree': 1.0.6
acorn: 8.14.0
clsx: 2.1.1
runed: 0.23.4(svelte@5.38.2)
style-to-object: 1.0.9
svelte: 5.38.2
svelte@5.38.2:
dependencies:
'@jridgewell/remapping': 2.3.5
'@jridgewell/sourcemap-codec': 1.5.5
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
'@types/estree': 1.0.8
acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
code-red: 1.0.4
css-tree: 2.3.1
estree-walker: 3.0.3
clsx: 2.1.1
esm-env: 1.2.2
esrap: 2.1.0
is-reference: 3.0.3
locate-character: 3.0.0
magic-string: 0.30.17
periscopic: 3.1.0
sveltekit-search-params@3.0.0(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)):
dependencies:
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
svelte: 4.2.20
transitivePeerDependencies:
- supports-color
- vite
svg-parser@2.0.4: {}
zimmerframe: 1.1.2
svgo@4.0.0:
dependencies:
@@ -5238,109 +6076,112 @@ snapshots:
tabbable@6.2.0: {}
tailwind-merge@2.5.4: {}
tailwind-merge@3.0.2: {}
tailwind-merge@2.6.0: {}
tailwind-merge@3.3.1: {}
tailwind-variants@0.3.1(tailwindcss@3.4.17):
tailwind-variants@1.0.0(tailwindcss@4.1.12):
dependencies:
tailwind-merge: 2.5.4
tailwindcss: 3.4.17
tailwind-merge: 3.0.2
tailwindcss: 4.1.12
tailwindcss@3.4.17:
tailwindcss@4.1.12: {}
tapable@2.2.2: {}
tar@7.4.3:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.3
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.7
lilconfig: 3.1.3
micromatch: 4.0.8
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.1
postcss: 8.5.3
postcss-import: 15.1.0(postcss@8.5.3)
postcss-js: 4.0.1(postcss@8.5.3)
postcss-load-config: 4.0.2(postcss@8.5.3)
postcss-nested: 6.2.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
resolve: 1.22.10
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
'@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
text-table@0.2.0: {}
tiny-invariant@1.3.3: {}
thenify-all@1.6.0:
tinyexec@1.0.1: {}
tinyglobby@0.2.14:
dependencies:
thenify: 3.3.1
thenify@3.3.1:
dependencies:
any-promise: 1.3.0
tiny-glob@0.2.9:
dependencies:
globalyzer: 0.1.0
globrex: 0.1.2
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
tinypool@1.0.2: {}
tinyrainbow@1.2.0: {}
tinyspy@3.0.2: {}
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
toidentifier@1.0.1: {}
totalist@3.0.1: {}
tree-kill@1.2.2: {}
tough-cookie@4.1.4:
dependencies:
psl: 1.15.0
punycode: 2.3.1
universalify: 0.2.0
url-parse: 1.5.10
trim-lines@3.0.1: {}
trough@2.2.0: {}
ts-api-utils@1.4.3(typescript@5.6.2):
ts-api-utils@2.1.0(typescript@5.9.2):
dependencies:
typescript: 5.6.2
typescript: 5.9.2
ts-interface-checker@0.1.13: {}
ts-morph@26.0.0:
dependencies:
'@ts-morph/common': 0.27.0
code-block-writer: 13.0.3
tslib@2.7.0: {}
tsconfig-paths@4.2.0:
dependencies:
json5: 2.2.3
minimist: 1.2.8
strip-bom: 3.0.0
tslib@2.8.1: {}
tsx@4.20.5:
dependencies:
esbuild: 0.25.9
get-tsconfig: 4.10.1
optionalDependencies:
fsevents: 2.3.3
tw-animate-css@1.3.7: {}
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2):
type-fest@0.21.3: {}
type-fest@4.41.0: {}
type-is@2.0.1:
dependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/parser': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
content-type: 1.0.5
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):
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
transitivePeerDependencies:
- eslint
- supports-color
typescript@5.6.2: {}
typescript@5.9.2: {}
uncrypto@0.1.3: {}
undici-types@7.10.0: {}
undici-types@6.19.8: {}
unicorn-magic@0.3.0: {}
unified@11.0.5:
dependencies:
@@ -5352,8 +6193,6 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
unist-util-is@4.1.0: {}
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -5362,39 +6201,30 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position@2.0.3:
dependencies:
'@types/unist': 2.0.11
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-visit-parents@3.1.1:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 4.1.0
unist-util-visit-parents@6.0.1:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.0
unist-util-visit@2.0.3:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 4.1.0
unist-util-visit-parents: 3.1.1
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
update-browserslist-db@1.1.2(browserslist@4.24.4):
universalify@0.2.0: {}
universalify@2.0.1: {}
unpipe@1.0.0: {}
update-browserslist-db@1.1.3(browserslist@4.25.3):
dependencies:
browserslist: 4.24.4
browserslist: 4.25.3
escalade: 3.2.0
picocolors: 1.1.1
@@ -5402,19 +6232,21 @@ snapshots:
dependencies:
punycode: 2.3.1
url-parse@1.5.10:
dependencies:
querystringify: 2.2.0
requires-port: 1.0.0
util-deprecate@1.0.2: {}
vary@1.1.2: {}
vfile-location@5.0.3:
dependencies:
'@types/unist': 3.0.3
vfile: 6.0.3
vfile-message@2.0.4:
dependencies:
'@types/unist': 2.0.11
unist-util-stringify-position: 2.0.3
vfile-message@4.0.2:
vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
@@ -5422,104 +6254,65 @@ snapshots:
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.3
vfile-message: 4.0.2
vfile-message: 4.0.3
vite-node@2.1.1(@types/node@22.5.5):
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):
dependencies:
cac: 6.7.14
debug: 4.4.0
pathe: 1.1.2
vite: 5.4.7(@types/node@22.5.5)
transitivePeerDependencies:
- '@types/node'
- less
- lightningcss
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
vite@5.4.7(@types/node@22.5.5):
dependencies:
esbuild: 0.21.5
postcss: 8.5.3
rollup: 4.34.8
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
optionalDependencies:
'@types/node': 22.5.5
'@types/node': 24.3.0
fsevents: 2.3.3
jiti: 2.5.1
lightningcss: 1.30.1
tsx: 4.20.5
yaml: 2.8.1
vitefu@0.2.5(vite@5.4.7(@types/node@22.5.5)):
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)):
optionalDependencies:
vite: 5.4.7(@types/node@22.5.5)
vitest@2.1.1(@types/node@22.5.5):
dependencies:
'@vitest/expect': 2.1.1
'@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5))
'@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.1
'@vitest/snapshot': 2.1.1
'@vitest/spy': 2.1.1
'@vitest/utils': 2.1.1
chai: 5.2.0
debug: 4.4.0
magic-string: 0.30.17
pathe: 1.1.2
std-env: 3.8.0
tinybench: 2.9.0
tinyexec: 0.3.2
tinypool: 1.0.2
tinyrainbow: 1.2.0
vite: 5.4.7(@types/node@22.5.5)
vite-node: 2.1.1(@types/node@22.5.5)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.5.5
transitivePeerDependencies:
- less
- lightningcss
- msw
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
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)
web-namespaces@2.0.1: {}
web-streams-polyfill@3.3.3: {}
which@2.0.2:
dependencies:
isexe: 2.0.0
why-is-node-running@2.3.0:
which@4.0.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
isexe: 3.1.1
word-wrap@1.2.5: {}
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
wrappy@1.0.2: {}
y18n@5.0.8: {}
yallist@3.1.1: {}
yallist@5.0.0: {}
yaml@1.10.2: {}
yaml@2.7.0: {}
yaml@2.8.1: {}
yargs-parser@21.1.1: {}
@@ -5535,4 +6328,20 @@ snapshots:
yocto-queue@0.1.0: {}
yocto-queue@1.2.1: {}
yoctocolors-cjs@2.1.3: {}
yoctocolors@2.1.2: {}
zimmerframe@1.1.2: {}
zod-to-json-schema@3.24.6(zod@3.25.76):
dependencies:
zod: 3.25.76
zod@3.25.76: {}
zod@4.1.4: {}
zwitch@2.0.4: {}
-6
View File
@@ -1,6 +0,0 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {}
}
};
+13 -10
View File
@@ -1,12 +1,15 @@
/** @type {import("prettier").Config} */
const config = {
useTabs: false,
singleQuote: true,
trailingComma: 'none',
printWidth: 100,
plugins: ['prettier-plugin-svelte', 'prettier-plugin-tailwindcss'],
pluginSearchDirs: ['.'],
overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }]
/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').PluginOptions} */
const prettierConfig = {
plugins: ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
tailwindStylesheet: "./src/styles/globals.css",
overrides: [
{
files: "*.svelte",
options: {
parser: "svelte",
},
},
],
};
export default config;
export default prettierConfig;
+2 -1
View File
@@ -1,10 +1,11 @@
// See https://kit.svelte.dev/docs/types#app
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
+58 -12
View File
@@ -8,31 +8,77 @@
<meta name="description" content="A beautiful library with SVG logos" />
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="%sveltekit.assets%/images/logo.svg" />
<link rel="icon" type="image/ico" href="%sveltekit.assets%/images/logo_ico.ico" />
<link
rel="icon"
type="image/svg+xml"
href="%sveltekit.assets%/images/svgl_svg.svg"
/>
<link
rel="icon"
type="image/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:description" content="A beautiful library with SVG logos" />
<meta property="og:title" content="SVGL" />
<meta
property="og:description"
content="A beautiful library with SVG logos"
/>
<meta property="og:url" content="https://svgl.app" />
<meta property="og:image" content="https://svgl.app/images/screenshot.png" />
<meta
property="og:image"
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:description" content="A beautiful library with SVG logos" />
<meta name="twitter:title" content="SVGL" />
<meta
name="twitter:description"
content="A beautiful library with SVG logos"
/>
<meta name="twitter:creator" content="@pheralb_" />
<meta name="twitter:image" content="https://svgl.app/images/screenshot.png" />
<meta
name="twitter:image"
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 text-black antialiased selection:bg-neutral-300 dark:bg-neutral-950 dark:text-white dark:selection:bg-neutral-700"
data-sveltekit-preload-data="hover"
class="min-h-screen scroll-smooth overscroll-none bg-white font-sans text-mini antialiased [text-rendering:optimizeLegibility;] selection:bg-neutral-200 dark:bg-dark dark:text-white dark:selection:bg-neutral-700"
>
<div>%sveltekit.body%</div>
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
+67
View File
@@ -0,0 +1,67 @@
<script lang="ts">
import type { Component } from "svelte";
import { cn } from "@/utils/cn";
import CopyIcon from "@lucide/svelte/icons/copy";
import CheckIcon from "@lucide/svelte/icons/check";
import { clipboard } from "@/utils/clipboard";
interface Props {
code: string;
className?: string;
Icon?: Component;
copyDuration?: number;
}
let { Icon, className, code, copyDuration = 2000 }: Props = $props();
let copied = $state(false);
let timeoutId: ReturnType<typeof setTimeout> | null = null;
const handleCopy = async () => {
await clipboard(code);
if (timeoutId) {
clearTimeout(timeoutId);
}
copied = true;
timeoutId = setTimeout(() => {
copied = false;
timeoutId = null;
}, copyDuration);
};
$effect(() => {
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
};
});
</script>
<div
class={cn(
"relative flex items-center space-x-2 rounded-md border border-neutral-200 p-2.5 dark:border-neutral-800",
className,
)}
>
<button
class="absolute right-2 transition-colors hover:text-neutral-600 dark:hover:text-neutral-400"
onclick={handleCopy}
disabled={copied}
title={copied ? "Copied" : "Copy code"}
>
{#if copied}
<CheckIcon size={14} />
{:else}
<CopyIcon size={14} />
{/if}
</button>
{#if Icon}
<Icon size={14} class="text-neutral-500" />
{/if}
<code class="pr-8 font-mono text-sm select-all">
{code}
</code>
</div>
+10 -2
View File
@@ -1,3 +1,11 @@
<div class="container mx-auto px-6 pt-4 xl:px-[18px]">
<slot />
<script lang="ts">
import type { Snippet } from "svelte";
import { cn } from "@/utils/cn";
let { className, children }: { className?: string; children?: Snippet } =
$props();
</script>
<div class={cn("container mx-auto px-6 lg:px-4", className)}>
{@render children?.()}
</div>
+116
View File
@@ -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>
-298
View File
@@ -1,298 +0,0 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
import JSZip from 'jszip';
import download from 'downloadjs';
import { toast } from 'svelte-sonner';
import { DownloadIcon } from 'lucide-svelte';
import { getSource } from '@/templates/getSource';
import {
Dialog,
DialogTrigger,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription,
DialogFooter
} from '@/ui/dialog';
import { buttonStyles } from '@/ui/styles';
import { cn } from '@/utils/cn';
import { getPrefixFromSvgUrl, prefixSvgIds } from '@/utils/prefixSvgIds';
// Props:
export let svgInfo: iSVG;
export let isDarkTheme: () => boolean;
// Shared:
let iconStroke = 1.8;
let iconSize = 16;
let mainDownloadStyles =
'flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40';
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';
// Functions:
const downloadSvg = async (url?: string) => {
let content = await getSource({
url: url
});
if (url) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(url));
}
download(content || '', url?.split('/').pop() || '', 'image/svg+xml');
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success(`Downloading...`, {
description: `${svgInfo.title} - ${category}`
});
};
// Download all variants:
const downloadAllVariants = async ({
lightRoute,
darkRoute,
isWordmark
}: {
lightRoute: string;
darkRoute: string;
isWordmark?: boolean;
}) => {
const zip = new JSZip();
let lightSvg = await getSource({
url: lightRoute
});
let darkSvg = await getSource({
url: darkRoute
});
lightSvg = prefixSvgIds(
lightSvg,
svgInfo.title.toLowerCase() + (isWordmark ? '_wordmark_light' : '_light')
);
darkSvg = prefixSvgIds(
darkSvg,
svgInfo.title.toLowerCase() + (isWordmark ? '_wordmark_dark' : '_dark')
);
if (isWordmark) {
zip.file(`${svgInfo.title}_wordmark_light.svg`, lightSvg);
zip.file(`${svgInfo.title}_wordmark_dark.svg`, darkSvg);
} else {
zip.file(`${svgInfo.title}_light.svg`, lightSvg);
zip.file(`${svgInfo.title}_dark.svg`, darkSvg);
}
zip.generateAsync({ type: 'blob' }).then((content) => {
download(
content,
isWordmark ? `${svgInfo.title}_wordmark_light_dark.zip` : `${svgInfo.title}_light_dark.zip`,
'application/zip'
);
});
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success('Downloading light & dark variants...', {
description: isWordmark
? `${svgInfo.title} - Wordmark - ${category}`
: `${svgInfo.title} - ${category}`
});
};
</script>
{#if typeof svgInfo.route === 'string' && svgInfo.wordmark === undefined}
<button
title="Download Light & Dark variants"
class={mainDownloadStyles}
on:click={() => {
if (typeof svgInfo.route === 'string') {
downloadSvg(svgInfo.route);
return;
}
}}
>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</button>
{:else}
<Dialog>
<DialogTrigger title="Download SVG" class={mainDownloadStyles}>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</DialogTrigger>
<DialogContent class="max-w-[630px]">
<DialogHeader>
<DialogTitle>Download {svgInfo.title} SVG</DialogTitle>
<DialogDescription>This logo has multiple options to download:</DialogDescription>
</DialogHeader>
<div
class={cn(
'flex h-full flex-col space-y-2 pb-0.5 pt-4',
'md:flex-row md:items-center md:justify-center md:space-x-2 md:space-y-0'
)}
>
{#if typeof svgInfo.route === 'string'}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.route : svgInfo.route}
alt={svgInfo.title}
class="my-4 h-8"
/>
<button
title="Download logo"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route === 'string') {
downloadSvg(svgInfo.route);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
<p>Icon logo</p>
</button>
</div>
{:else}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.route.dark : svgInfo.route.light}
alt={svgInfo.title}
class="my-4 h-10"
/>
<button
title="Logo with light & dark variants"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadAllVariants({
lightRoute: svgInfo.route.light,
darkRoute: svgInfo.route.dark
});
}
}}
>
<DownloadIcon size={iconSize} />
<p>Light & dark variants</p>
</button>
<button
title="Download light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadSvg(svgInfo.route.light);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Only light variant
</button>
<button
title="Download dark variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadSvg(svgInfo.route.dark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Only dark variant
</button>
</div>
{/if}
{#if typeof svgInfo.wordmark === 'string' && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.wordmark : svgInfo.wordmark}
alt={svgInfo.title}
class="my-4 h-8"
/>
<button
title="Download Wordmark logo"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark === 'string') {
downloadSvg(svgInfo.wordmark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
<p>Wordmark logo</p>
</button>
</div>
{/if}
{#if typeof svgInfo.wordmark !== 'string' && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.wordmark.dark : svgInfo.wordmark.light}
alt={svgInfo.title}
class="my-4 h-10"
/>
<button
title="Download Wordmark light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadAllVariants({
lightRoute: svgInfo.wordmark?.light || '',
darkRoute: svgInfo.wordmark?.dark || '',
isWordmark: true
});
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Light & dark variants
</button>
<button
title="Download Wordmark light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadSvg(svgInfo.wordmark?.light);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Wordmark light variant
</button>
<button
title="Download Wordmark dark variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadSvg(svgInfo.wordmark?.dark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Wordmark dark variant
</button>
</div>
{/if}
</div>
<DialogFooter 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>
</DialogFooter>
</DialogContent>
</Dialog>
{/if}
-34
View File
@@ -1,34 +0,0 @@
<script lang="ts">
import { cn } from '@/utils/cn';
type methodType = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
export let method: methodType;
export let title: string;
export let description: string;
</script>
<div class={cn('border-2 border-neutral-100 dark:border-neutral-800 rounded-lg', 'p-4 mb-2')}>
<div class="flex items-center space-x-4 mb-4">
<p
class={cn(
'm-0 rounded-md font-medium px-1.5 py-0.5 text-sm leading-5 select-none',
method === 'GET' &&
' text-green-600 dark:text-green-500 bg-green-400/20 dark:bg-green-400/20',
method === 'POST' && ' text-blue-600 dark:text-blue-500 bg-blue-400/20 dark:bg-blue-400/20',
method === 'PUT' &&
' text-yellow-600 dark:text-yellow-500 bg-yellow-400/20 dark:bg-yellow-400/20',
method === 'PATCH' &&
' text-yellow-600 dark:text-yellow-500 bg-yellow-400/20 dark:bg-yellow-400/20',
method === 'DELETE' && ' text-red-600 dark:text-red-500 bg-red-400/20 dark:bg-red-400/20'
)}
>
{method}
</p>
<div class="flex flex-col space-y-0 m-0">
<h3 class="m-0 font-medium">{title}</h3>
<p class="mb-0 font-mono text-sm">{description}</p>
</div>
</div>
<slot />
</div>
+66
View File
@@ -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>
+40
View File
@@ -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>
+21 -2
View File
@@ -1,5 +1,24 @@
<script lang="ts">
import type { Snippet } from "svelte";
import { cn } from "@/utils/cn";
interface GridProps {
columns?: "default" | "4" | "3" | "2";
className?: string;
children?: Snippet;
}
let { className, columns, children }: GridProps = $props();
</script>
<div
class="mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-5"
class={cn(
"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,
)}
>
<slot />
{@render children?.()}
</div>
-54
View File
@@ -1,54 +0,0 @@
<script lang="ts">
import { toast } from 'svelte-sonner';
import * as ContextMenu from '@/ui/context-menu';
import { ArrowUpRightIcon, CopyIcon, StarsIcon } from 'lucide-svelte';
import Logo from './icons/logo.svelte';
import { clipboard } from '@/utils/clipboard';
import GithubIcon from './icons/githubIcon.svelte';
import { getSource } from '@/templates/getSource';
const logoUrl = '/library/svgl.svg';
const copyToClipboard = async () => {
const content = await getSource({
url: logoUrl
});
await clipboard(content);
toast.success('Copied to clipboard', {
description: `Svgl - Library`
});
};
const openUrl = (url: string) => {
window.open(url, '_blank');
};
</script>
<ContextMenu.Root>
<ContextMenu.Trigger class="flex items-center space-x-2">
<a href="/" aria-label="Go to the SVGL v4.1 home page">
<div class="flex items-center space-x-2 opacity-100 transition-opacity hover:opacity-80">
<svelte:component this={Logo} />
<span class="hidden text-xl font-medium tracking-tight md:block">svgl</span>
</div>
</a>
</ContextMenu.Trigger>
<ContextMenu.Content>
<ContextMenu.Item on:click={() => copyToClipboard()}>
<CopyIcon size={16} strokeWidth={1.5} />
<span>Copy as SVG</span>
</ContextMenu.Item>
<ContextMenu.Item on:click={() => openUrl('https://github.com/pheralb/svgl')}>
<GithubIcon iconSize={16} />
<span>Repository</span>
<ArrowUpRightIcon class="text-neutral-400 dark:text-neutral-500" size={14} strokeWidth={2} />
</ContextMenu.Item>
<ContextMenu.Item disabled class="font-mono">
<StarsIcon size={16} strokeWidth={1.5} />
<span>v4.6.1</span>
</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
-48
View File
@@ -1,48 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 242 256"
><g clip-path="url(#a)"
><mask
id="b"
width="242"
height="256"
x="0"
y="0"
maskUnits="userSpaceOnUse"
style="mask-type:luminance"><path fill="#fff" d="M0 0h242v256H0V0Z" /></mask
><g mask="url(#b)"
><path
fill="url(#c)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/><path
fill="url(#d)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/></g
></g
><defs
><linearGradient id="c" x1="53.2" x2="245" y1="231.9" y2="140.7" gradientUnits="userSpaceOnUse"
><stop stop-color="#E40035" /><stop offset=".2" stop-color="#F60A48" /><stop
offset=".4"
stop-color="#F20755"
/><stop offset=".5" stop-color="#DC087D" /><stop offset=".7" stop-color="#9717E7" /><stop
offset="1"
stop-color="#6C00F5"
/></linearGradient
>
<linearGradient id="d" x1="44.5" x2="170" y1="30.7" y2="174" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF31D9" /><stop
offset="1"
stop-color="#FF5BE1"
stop-opacity="0"
/></linearGradient
><clipPath id="a"><path fill="#fff" d="M0 0h242v256H0z" /></clipPath></defs
></svg
>
-18
View File
@@ -1,18 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
width={iconSize || 16}
height={iconSize || 16}
fill="none"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid"
viewBox="0 0 256 256"
><path
d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"
fill="currentColor"
/>
</svg>
-60
View File
@@ -1,60 +0,0 @@
<svg
width="30"
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=""
><rect
id="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><rect
width="512"
height="512"
x="0"
y="0"
fill="url(#r6)"
rx="128"
style="mix-blend-mode: overlay;"
></rect><clipPath id="clip"><use xlink:href="#r4"></use></clipPath><defs
><linearGradient
id="r5"
gradientUnits="userSpaceOnUse"
gradientTransform="rotate(135)"
style="transform-origin: center center;"
><stop stop-color="#222"></stop><stop offset="1" stop-color="#222222"></stop></linearGradient
><radialGradient
id="r6"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256) rotate(90) scale(512)"
><stop stop-color="white"></stop><stop offset="1" stop-color="white" stop-opacity="0"
></stop></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"
></path></svg
></svg
>

Before

Width:  |  Height:  |  Size: 1.7 KiB

-22
View File
@@ -1,22 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
export let className: IconProps['className'];
</script>
<svg
width={iconSize || 28}
height={iconSize || 28}
class={className}
viewBox="0 0 28 28"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M7 18.079V21L0 14L1.46 12.54L7 18.081V18.079ZM9.921 21H7L14 28L15.46 26.54L9.921 21ZM26.535 15.462L27.996 14L13.996 0L12.538 1.466L18.077 7.004H14.73L10.864 3.146L9.404 4.606L11.809 7.01H10.129V17.876H20.994V16.196L23.399 18.6L24.859 17.14L20.994 13.274V9.927L26.535 15.462ZM7.73 6.276L6.265 7.738L7.833 9.304L9.294 7.844L7.73 6.276ZM20.162 18.708L18.702 20.17L20.268 21.738L21.73 20.276L20.162 18.708ZM4.596 9.41L3.134 10.872L7 14.738V11.815L4.596 9.41ZM16.192 21.006H13.268L17.134 24.872L18.596 23.41L16.192 21.006Z"
fill="#FF6363"
/>
</svg>
File diff suppressed because one or more lines are too long
-19
View File
@@ -1,19 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 256 308"
><path
fill="#FF3E00"
d="M239.682 40.707C211.113-.182 154.69-12.301 113.895 13.69L42.247 59.356a82.2 82.2 0 0 0-37.135 55.056a86.57 86.57 0 0 0 8.536 55.576a82.4 82.4 0 0 0-12.296 30.719a87.6 87.6 0 0 0 14.964 66.244c28.574 40.893 84.997 53.007 125.787 27.016l71.648-45.664a82.18 82.18 0 0 0 37.135-55.057a86.6 86.6 0 0 0-8.53-55.577a82.4 82.4 0 0 0 12.29-30.718a87.57 87.57 0 0 0-14.963-66.244"
/><path
fill="#FFF"
d="M106.889 270.841c-23.102 6.007-47.497-3.036-61.103-22.648a52.7 52.7 0 0 1-9.003-39.85a50 50 0 0 1 1.713-6.693l1.35-4.115l3.671 2.697a92.5 92.5 0 0 0 28.036 14.007l2.663.808l-.245 2.659a16.07 16.07 0 0 0 2.89 10.656a17.14 17.14 0 0 0 18.397 6.828a15.8 15.8 0 0 0 4.403-1.935l71.67-45.672a14.92 14.92 0 0 0 6.734-9.977a15.92 15.92 0 0 0-2.713-12.011a17.16 17.16 0 0 0-18.404-6.832a15.8 15.8 0 0 0-4.396 1.933l-27.35 17.434a52.3 52.3 0 0 1-14.553 6.391c-23.101 6.007-47.497-3.036-61.101-22.649a52.68 52.68 0 0 1-9.004-39.849a49.43 49.43 0 0 1 22.34-33.114l71.664-45.677a52.2 52.2 0 0 1 14.563-6.398c23.101-6.007 47.497 3.036 61.101 22.648a52.7 52.7 0 0 1 9.004 39.85a51 51 0 0 1-1.713 6.692l-1.35 4.116l-3.67-2.693a92.4 92.4 0 0 0-28.037-14.013l-2.664-.809l.246-2.658a16.1 16.1 0 0 0-2.89-10.656a17.14 17.14 0 0 0-18.398-6.828a15.8 15.8 0 0 0-4.402 1.935l-71.67 45.674a14.9 14.9 0 0 0-6.73 9.975a15.9 15.9 0 0 0 2.709 12.012a17.16 17.16 0 0 0 18.404 6.832a15.8 15.8 0 0 0 4.402-1.935l27.345-17.427a52.2 52.2 0 0 1 14.552-6.397c23.101-6.006 47.497 3.037 61.102 22.65a52.68 52.68 0 0 1 9.003 39.848a49.45 49.45 0 0 1-22.34 33.12l-71.664 45.673a52.2 52.2 0 0 1-14.563 6.398"
/></svg
>
-16
View File
@@ -1,16 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 256 221"
><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z" /><path
fill="#41B883"
d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z"
/><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z" /></svg
>
+66
View File
@@ -0,0 +1,66 @@
<script lang="ts">
import { cn } from "@/utils/cn";
import { globals } from "@/globals";
import { mode } from "mode-watcher";
import ModeToggle from "@/components/modeToggle.svelte";
import Twitter from "@/components/logos/twitter.svelte";
import { Separator } from "@/components/ui/separator";
import { buttonVariants } from "@/components/ui/button";
import SendIcon from "@/components/ui/moving-icons/send-icon.svelte";
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 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-2">
<SidebarMobileMenu className="md:hidden" />
<HomeLink />
</div>
<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(
buttonVariants({ variant: "ghost", size: "icon" }),
"hover:bg-neutral-200 dark:hover:bg-neutral-800",
)}
>
<Twitter size={18} />
</a>
<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>
</div>
</nav>
</header>
+83
View File
@@ -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>
@@ -0,0 +1,40 @@
<script lang="ts">
import type { Category } from "@/types/categories";
import { cn } from "@/utils/cn";
import { svgs } from "@/data/svgs";
import { page } from "$app/state";
import { getCategories } from "@/data";
import { sidebarItemClasses } from "./sidebarItemClasses";
import { sidebarBadgeClasses } from "./sidebarBadgeClasses";
// Get category counts:
const categories: Category[] = getCategories();
let categoryCounts: Record<string, number> = {};
categories.forEach((category) => {
categoryCounts[category] = svgs.filter((svg) =>
svg.category.includes(category),
).length;
});
</script>
{#each categories.sort() as category (category)}
<a
href={`/directory/${category.toLowerCase()}`}
data-sveltekit-preload-data
class={cn(
sidebarItemClasses.base,
page.url.pathname === `/directory/${category.toLowerCase()}` &&
sidebarItemClasses.active,
"pr-3",
)}
>
<p class="truncate">{category}</p>
<span
class={cn(sidebarBadgeClasses, page.url.pathname && "border-transparent")}
>
{categoryCounts[category]}
</span>
</a>
{/each}
@@ -0,0 +1,108 @@
<script lang="ts">
import { cn } from "@/utils/cn";
import { globals } from "@/globals";
import { page } from "$app/state";
import favoritesStore from "@/stores/favorites.store";
import { sidebarItemClasses } from "./sidebarItemClasses";
import { sidebarBadgeClasses } from "./sidebarBadgeClasses";
import Box from "@lucide/svelte/icons/box";
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));
</script>
<a
href="/"
data-sveltekit-preload-data
class={cn(
sidebarItemClasses.base,
"justify-start space-x-3",
page.url.pathname === "/" && sidebarItemClasses.active,
)}
>
<House size={16} />
<p class="truncate">Home</p>
</a>
<a
href="/favorites"
data-sveltekit-preload-data
class={cn(
sidebarItemClasses.base,
"justify-between",
String(page.url.pathname) === "/favorites" && sidebarItemClasses.active,
)}
>
<div class="flex items-center space-x-3">
<Heart size={16} />
<p class="truncate">Favorites</p>
</div>
{#if favoritesCount > 0}
<span
class={cn(sidebarBadgeClasses, page.url.pathname && "border-transparent")}
>
{favoritesCount}
</span>
{/if}
</a>
<a
href="/docs/api"
data-sveltekit-preload-data
class={cn(
sidebarItemClasses.base,
"justify-start space-x-3",
String(page.url.pathname) === "/docs/api" && sidebarItemClasses.active,
)}
>
<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
class={cn(
sidebarItemClasses.base,
"justify-start space-x-3",
String(page.url.pathname) === "/extensions" && sidebarItemClasses.active,
)}
>
<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>
+40
View File
@@ -0,0 +1,40 @@
<script lang="ts">
import { cn } from "@/utils/cn";
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(
"md:fixed md:left-1 md:h-[calc(100vh-4.5rem)]",
"overflow-x-hidden",
"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 px-2">
<ShowSidebarLinks />
</nav>
<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("px-2 md:mr-4 md:ml-56 md:px-0", "overflow-hidden")}>
<slot />
</main>
</section>
@@ -0,0 +1,6 @@
import { cn } from "@/utils/cn";
export const sidebarBadgeClasses = cn(
"animate-in zoom-in-20 fade-in",
"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,13 @@
import { cn } from "@/utils/cn";
export const sidebarItemClasses = {
base: cn(
"rounded-md px-2 py-1.5 h-8",
"flex w-full items-center justify-between space-x-3 text-sm",
"text-neutral-600 dark:text-neutral-400",
"hover:text-black dark:hover:text-white",
),
active: cn(
"rounded-lg shadow-sm text-black dark:text-white border border-neutral-200 bg-white font-medium dark:border-neutral-800 dark:bg-neutral-800",
),
};
@@ -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>
+67
View File
@@ -0,0 +1,67 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 242 256"
width={props.size}
height={props.size}
>
<g clip-path="url(#angular__a)"
><mask
id="angular__b"
width="242"
height="256"
x="0"
y="0"
maskUnits="userSpaceOnUse"
style="mask-type:luminance"
><path fill="#fff" d="M0 0h242v256H0V0Z" /></mask
><g mask="url(#angular__b)"
><path
fill="url(#angular__c)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/><path
fill="url(#angular__d)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/></g
></g
><defs
><linearGradient
id="angular__c"
x1="53.2"
x2="245"
y1="231.9"
y2="140.7"
gradientUnits="userSpaceOnUse"
><stop stop-color="#E40035" /><stop
offset=".2"
stop-color="#F60A48"
/><stop offset=".4" stop-color="#F20755" /><stop
offset=".5"
stop-color="#DC087D"
/><stop offset=".7" stop-color="#9717E7" /><stop
offset="1"
stop-color="#6C00F5"
/></linearGradient
><linearGradient
id="angular__d"
x1="44.5"
x2="170"
y1="30.7"
y2="174"
gradientUnits="userSpaceOnUse"
><stop stop-color="#FF31D9" /><stop
offset="1"
stop-color="#FF5BE1"
stop-opacity="0"
/></linearGradient
><clipPath id="angular__a"
><path fill="#fff" d="M0 0h242v256H0z" /></clipPath
></defs
></svg
>
@@ -1,14 +1,14 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
import type { IconProps } from "@/types/icon";
export let iconSize: IconProps['size'];
let props: IconProps = $props();
</script>
<svg
viewBox="0 0 256 366"
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
width={props.size}
height={props.size}
preserveAspectRatio="xMidYMid"
><path
fill="currentColor"
+77
View File
@@ -0,0 +1,77 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 80 70"
width={props.size}
height={props.size}
>
<path
d="M71.09 20.74c-.16-.17-.33-.34-.5-.5s-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5A26.46 26.46 0 0 1 75.5 35.7c0 16.57-16.82 30.05-37.5 30.05-11.58 0-21.94-4.23-28.83-10.86l.5.5.5.5.5.5.5.5.5.5.5.5.5.5C19.55 65.3 30.14 69.75 42 69.75c20.68 0 37.5-13.48 37.5-30 0-7.06-3.04-13.75-8.41-19.01Z"
/>
<path
d="M73 35.7c0 15.21-15.67 27.54-35 27.54S3 50.91 3 35.7C3 26.27 9 17.94 18.22 13S33.18 3 38 3s8.94 4.13 19.78 10C67 17.94 73 26.27 73 35.7Z"
style="fill:#fbf0df"
/>
<path
data-name="Bottom Shadow"
d="M73 35.7a21.67 21.67 0 0 0-.8-5.78c-2.73 33.3-43.35 34.9-59.32 24.94A40 40 0 0 0 38 63.24c19.3 0 35-12.35 35-27.54Z"
style="fill:#f6dece"
/>
<path
data-name="Light Shine"
d="M24.53 11.17C29 8.49 34.94 3.46 40.78 3.45A9.29 9.29 0 0 0 38 3c-2.42 0-5 1.25-8.25 3.13-1.13.66-2.3 1.39-3.54 2.15-2.33 1.44-5 3.07-8 4.7C8.69 18.13 3 26.62 3 35.7v1.19c6.06-21.41 17.07-23.04 21.53-25.72Z"
style="fill:#fffefc"
/>
<path
d="M35.12 5.53A16.41 16.41 0 0 1 29.49 18c-.28.25-.06.73.3.59 3.37-1.31 7.92-5.23 6-13.14-.08-.45-.67-.33-.67.08Zm2.27 0A16.24 16.24 0 0 1 39 19c-.12.35.31.65.55.36 2.19-2.8 4.1-8.36-1.62-14.36-.29-.26-.74.14-.54.49Zm2.76-.17A16.42 16.42 0 0 1 47 17.12a.33.33 0 0 0 .65.11c.92-3.49.4-9.44-7.17-12.53-.4-.16-.66.38-.33.62Zm-18.46 10.4a16.94 16.94 0 0 0 10.47-9c.18-.36.75-.22.66.18-1.73 8-7.52 9.67-11.12 9.45-.38.01-.37-.52-.01-.63Z"
style="fill:#ccbea7;fill-rule:evenodd"
/>
<path
d="M38 65.75C17.32 65.75.5 52.27.5 35.7c0-10 6.18-19.33 16.53-24.92 3-1.6 5.57-3.21 7.86-4.62 1.26-.78 2.45-1.51 3.6-2.19C32 1.89 35 .5 38 .5s5.62 1.2 8.9 3.14c1 .57 2 1.19 3.07 1.87 2.49 1.54 5.3 3.28 9 5.27C69.32 16.37 75.5 25.69 75.5 35.7c0 16.57-16.82 30.05-37.5 30.05ZM38 3c-2.42 0-5 1.25-8.25 3.13-1.13.66-2.3 1.39-3.54 2.15-2.33 1.44-5 3.07-8 4.7C8.69 18.13 3 26.62 3 35.7c0 15.19 15.7 27.55 35 27.55S73 50.89 73 35.7c0-9.08-5.69-17.57-15.22-22.7-3.78-2-6.73-3.88-9.12-5.36-1.09-.67-2.09-1.29-3-1.84C42.63 4 40.42 3 38 3Z"
/>
<g>
<path
d="M45.05 43a8.93 8.93 0 0 1-2.92 4.71 6.81 6.81 0 0 1-4 1.88A6.84 6.84 0 0 1 34 47.71 8.93 8.93 0 0 1 31.12 43a.72.72 0 0 1 .8-.81h12.34a.72.72 0 0 1 .79.81Z"
style="fill:#b71422"
data-name="Background"
/><path
data-name="Background"
d="M34 47.79a6.91 6.91 0 0 0 4.12 1.9 6.91 6.91 0 0 0 4.11-1.9 10.63 10.63 0 0 0 1-1.07 6.83 6.83 0 0 0-4.9-2.31 6.15 6.15 0 0 0-5 2.78c.23.21.43.41.67.6Z"
style="fill:#ff6164"
/><path
data-name="Outline"
d="M34.16 47a5.36 5.36 0 0 1 4.19-2.08 6 6 0 0 1 4 1.69c.23-.25.45-.51.66-.77a7 7 0 0 0-4.71-1.93 6.36 6.36 0 0 0-4.89 2.36 9.53 9.53 0 0 0 .75.73Z"
/><path
data-name="Outline"
d="M38.09 50.19a7.42 7.42 0 0 1-4.45-2 9.52 9.52 0 0 1-3.11-5.05 1.2 1.2 0 0 1 .26-1 1.41 1.41 0 0 1 1.13-.51h12.34a1.44 1.44 0 0 1 1.13.51 1.19 1.19 0 0 1 .25 1 9.52 9.52 0 0 1-3.11 5.05 7.42 7.42 0 0 1-4.44 2Zm-6.17-7.4c-.16 0-.2.07-.21.09a8.29 8.29 0 0 0 2.73 4.37A6.23 6.23 0 0 0 38.09 49a6.28 6.28 0 0 0 3.65-1.73 8.3 8.3 0 0 0 2.72-4.37.21.21 0 0 0-.2-.09Z"
/></g
>
<g>
<ellipse
data-name="Right Blush"
cx="53.22"
cy="40.18"
rx="5.85"
ry="3.44"
style="fill:#febbd0"
/><ellipse
data-name="Left Bluch"
cx="22.95"
cy="40.18"
rx="5.85"
ry="3.44"
style="fill:#febbd0"
/><path
d="M25.7 38.8a5.51 5.51 0 1 0-5.5-5.51 5.51 5.51 0 0 0 5.5 5.51Zm24.77 0A5.51 5.51 0 1 0 45 33.29a5.5 5.5 0 0 0 5.47 5.51Z"
style="fill-rule:evenodd"
/><path
d="M24 33.64a2.07 2.07 0 1 0-2.06-2.07A2.07 2.07 0 0 0 24 33.64Zm24.77 0a2.07 2.07 0 1 0-2.06-2.07 2.07 2.07 0 0 0 2.04 2.07Z"
style="fill:#fff;fill-rule:evenodd"
/>
</g>
</svg>
+17
View File
@@ -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>
+20
View File
@@ -0,0 +1,20 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
width={props.size}
height={props.size}
viewBox="0 0 1024 1024"
fill="none"
xmlns="http://www.w3.org/2000/svg"
><path
fill-rule="evenodd"
clip-rule="evenodd"
d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z"
transform="scale(64)"
fill="currentColor"
/>
</svg>
+18
View File
@@ -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>
+18
View File
@@ -0,0 +1,18 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={props.size}
height={props.size}
viewBox="0 0 2500 2500"
>
<path fill="#c00" d="M0 0h2500v2500H0z" />
<path
fill="#fff"
d="M1241.5 268.5h-973v1962.9h972.9V763.5h495v1467.9h495V268.5z"
/>
</svg>
+18
View File
@@ -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>
+101
View File
@@ -0,0 +1,101 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
preserveAspectRatio="xMidYMid meet"
viewBox="76.58987244897958 44 164.00775510204068 164"
width={props.size}
height={props.size}
>
<defs>
<path
d="M237.6 95L187.6 95L187.6 45L237.6 45L237.6 95Z"
id="pnpm__arNRoK435"
/><path
d="M182.59 95L132.59 95L132.59 45L182.59 45L182.59 95Z"
id="pnpm__a3H2WU7Px"
/><path
d="M127.59 95L77.59 95L77.59 45L127.59 45L127.59 95Z"
id="pnpm__b1DInM56vl"
/><path
d="M237.6 150L187.6 150L187.6 100L237.6 100L237.6 150Z"
id="pnpm__a7LFlgQIwu"
/><path
d="M182.59 150L132.59 150L132.59 100L182.59 100L182.59 150Z"
id="pnpm__amwLiZcuo"
/><path
d="M182.59 205L132.59 205L132.59 155L182.59 155L182.59 205Z"
id="pnpm__f3Peu5RWan"
/><path
d="M237.6 205L187.6 205L187.6 155L237.6 155L237.6 205Z"
id="pnpm__a6DXBfqPa"
/><path
d="M127.59 205L77.59 205L77.59 155L127.59 155L127.59 205Z"
id="pnpm__c1GWSTH1z7"
/></defs
><g
><g
><use
xlink:href="#pnpm__arNRoK435"
opacity="1"
fill="#f9ad00"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__a3H2WU7Px"
opacity="1"
fill="#f9ad00"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__b1DInM56vl"
opacity="1"
fill="#f9ad00"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__a7LFlgQIwu"
opacity="1"
fill="#f9ad00"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__amwLiZcuo"
opacity="1"
fill="#4e4e4e"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__f3Peu5RWan"
opacity="1"
fill="#4e4e4e"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__a6DXBfqPa"
opacity="1"
fill="#4e4e4e"
fill-opacity="1"
/></g
><g
><use
xlink:href="#pnpm__c1GWSTH1z7"
opacity="1"
fill="#4e4e4e"
fill-opacity="1"
/></g
></g
>
</svg>
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
width={props.size}
height={props.size}
>
<path fill="none" d="M0 0h256v256H0z" />
<path
fill="none"
stroke="currentColor"
stroke-width="25"
stroke-linecap="round"
d="M208 128l-80 80M192 40L40 192"
/>
</svg>
+20
View File
@@ -0,0 +1,20 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
viewBox="0 0 256 308"
width={props.size}
height={props.size}
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid"
><path
d="M239.682 40.707C211.113-.182 154.69-12.301 113.895 13.69L42.247 59.356a82.198 82.198 0 0 0-37.135 55.056 86.566 86.566 0 0 0 8.536 55.576 82.425 82.425 0 0 0-12.296 30.719 87.596 87.596 0 0 0 14.964 66.244c28.574 40.893 84.997 53.007 125.787 27.016l71.648-45.664a82.182 82.182 0 0 0 37.135-55.057 86.601 86.601 0 0 0-8.53-55.577 82.409 82.409 0 0 0 12.29-30.718 87.573 87.573 0 0 0-14.963-66.244"
fill="#FF3E00"
/><path
d="M106.889 270.841c-23.102 6.007-47.497-3.036-61.103-22.648a52.685 52.685 0 0 1-9.003-39.85 49.978 49.978 0 0 1 1.713-6.693l1.35-4.115 3.671 2.697a92.447 92.447 0 0 0 28.036 14.007l2.663.808-.245 2.659a16.067 16.067 0 0 0 2.89 10.656 17.143 17.143 0 0 0 18.397 6.828 15.786 15.786 0 0 0 4.403-1.935l71.67-45.672a14.922 14.922 0 0 0 6.734-9.977 15.923 15.923 0 0 0-2.713-12.011 17.156 17.156 0 0 0-18.404-6.832 15.78 15.78 0 0 0-4.396 1.933l-27.35 17.434a52.298 52.298 0 0 1-14.553 6.391c-23.101 6.007-47.497-3.036-61.101-22.649a52.681 52.681 0 0 1-9.004-39.849 49.428 49.428 0 0 1 22.34-33.114l71.664-45.677a52.218 52.218 0 0 1 14.563-6.398c23.101-6.007 47.497 3.036 61.101 22.648a52.685 52.685 0 0 1 9.004 39.85 50.559 50.559 0 0 1-1.713 6.692l-1.35 4.116-3.67-2.693a92.373 92.373 0 0 0-28.037-14.013l-2.664-.809.246-2.658a16.099 16.099 0 0 0-2.89-10.656 17.143 17.143 0 0 0-18.398-6.828 15.786 15.786 0 0 0-4.402 1.935l-71.67 45.674a14.898 14.898 0 0 0-6.73 9.975 15.9 15.9 0 0 0 2.709 12.012 17.156 17.156 0 0 0 18.404 6.832 15.841 15.841 0 0 0 4.402-1.935l27.345-17.427a52.147 52.147 0 0 1 14.552-6.397c23.101-6.006 47.497 3.037 61.102 22.65a52.681 52.681 0 0 1 9.003 39.848 49.453 49.453 0 0 1-22.34 33.12l-71.664 45.673a52.218 52.218 0 0 1-14.563 6.398"
fill="#FFF"
/></svg
>
+18
View File
@@ -0,0 +1,18 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
name="SVGL Logo"
xmlns="http://www.w3.org/2000/svg"
width={props.size}
height={props.size}
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>
@@ -1,19 +1,18 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
import type { IconProps } from "@/types/icon";
export let size: IconProps['size'];
export let color: IconProps['color'];
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={size || 16}
height={size || 16}
name="Twitter"
width={props.size}
height={props.size}
fill="none"
viewBox="0 0 1200 1227"
><path
fill={color || 'currentColor'}
>
<path
fill="currentColor"
d="M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"
/>
</svg>
+19
View File
@@ -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>
+23
View File
@@ -0,0 +1,23 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
viewBox="0 0 256 221"
width={props.size}
height={props.size}
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid"
><path
d="M204.8 0H256L128 220.8 0 0h97.92L128 51.2 157.44 0h47.36Z"
fill="#41B883"
/><path
d="m0 0 128 220.8L256 0h-51.2L128 132.48 50.56 0H0Z"
fill="#41B883"
/><path
d="M50.56 0 128 133.12 204.8 0h-47.36L128 51.2 97.92 0H50.56Z"
fill="#35495E"
/></svg
>
+24
View File
@@ -0,0 +1,24 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 128 128"
width={props.size}
height={props.size}
><path
fill="var(--bgcolor, #fff)"
d="m31 12-1 1L2 63l29 51h67l15-26v-2l14-23-15-24v-2L98 12H31zm21 30h21l13 21-13 21H52L40 63z"
/><path fill="#166da5" d="m122 63-12 21-18-21 18-21z" /><path
fill="#8fdb69"
d="M108 88 89 65 78 84l17 26z"
/><path fill="#166da5" d="M108 38 89 61 78 42l17-26z" /><path
d="M63 110 35 63l28-47H33L6 63l27 47z"
/><path fill="#287bbe" d="m50 38 13-22h32l13 22zm28 4h32l11 19H89z" /><path
fill="#ddf021"
d="m50 88 13 22h32l13-22zm28-4h32l11-19H89z"
/></svg
>
+22
View File
@@ -0,0 +1,22 @@
<script lang="ts">
import type { IconProps } from "@/types/icon";
let props: IconProps = $props();
</script>
<svg
id="yarn__Layer_1"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 518 518"
width={props.size}
height={props.size}
>
<path
fill="#2c8ebb"
d="M259 0c143 0 259 116 259 259S402 518 259 518 0 402 0 259 116 0 259 0z"
/>
<path
fill="#fff"
d="M435.2 337.5c-1.8-14.2-13.8-24-29.2-23.8-23 .3-42.3 12.2-55.1 20.1-5 3.1-9.3 5.4-13 7.1.8-11.6.1-26.8-5.9-43.5-7.3-20-17.1-32.3-24.1-39.4 8.1-11.8 19.2-29 24.4-55.6 4.5-22.7 3.1-58-7.2-77.8-2.1-4-5.6-6.9-10-8.1-1.8-.5-5.2-1.5-11.9.4C293.1 96 289.6 93.8 286.9 92c-5.6-3.6-12.2-4.4-18.4-2.1-8.3 3-15.4 11-22.1 25.2-1 2.1-1.9 4.1-2.7 6.1-12.7.9-32.7 5.5-49.6 23.8-2.1 2.3-6.2 4-10.5 5.6h.1c-8.8 3.1-12.8 10.3-17.7 23.3-6.8 18.2.2 36.1 7.1 47.7-9.4 8.4-21.9 21.8-28.5 37.5-8.2 19.4-9.1 38.4-8.8 48.7-7 7.4-17.8 21.3-19 36.9-1.6 21.8 6.3 36.6 9.8 42 1 1.6 2.1 2.9 3.3 4.2-.4 2.7-.5 5.6.1 8.6 1.3 7 5.7 12.7 12.4 16.3 13.2 7 31.6 10 45.8 2.9 5.1 5.4 14.4 10.6 31.3 10.6h1c4.3 0 58.9-2.9 74.8-6.8 7.1-1.7 12-4.7 15.2-7.4 10.2-3.2 38.4-12.8 65-30 18.8-12.2 25.3-14.8 39.3-18.2 13.6-3.3 22.1-15.7 20.4-29.4zm-23.8 14.7c-16 3.8-24.1 7.3-43.9 20.2-30.9 20-64.7 29.3-64.7 29.3s-2.8 4.2-10.9 6.1c-14 3.4-66.7 6.3-71.5 6.4-12.9.1-20.8-3.3-23-8.6-6.7-16 9.6-23 9.6-23s-3.6-2.2-5.7-4.2c-1.9-1.9-3.9-5.7-4.5-4.3-2.5 6.1-3.8 21-10.5 27.7-9.2 9.3-26.6 6.2-36.9.8-11.3-6 .8-20.1.8-20.1s-6.1 3.6-11-3.8c-4.4-6.8-8.5-18.4-7.4-32.7 1.2-16.3 19.4-32.1 19.4-32.1s-3.2-24.1 7.3-48.8c9.5-22.5 35.1-40.6 35.1-40.6s-21.5-23.8-13.5-45.2c5.2-14 7.3-13.9 9-14.5 6-2.3 11.8-4.8 16.1-9.5 21.5-23.2 48.9-18.8 48.9-18.8s13-39.5 25-31.8c3.7 2.4 17 32 17 32s14.2-8.3 15.8-5.2c8.6 16.7 9.6 48.6 5.8 68-6.4 32-22.4 49.2-28.8 60-1.5 2.5 17.2 10.4 29 43.1 10.9 29.9 1.2 55 2.9 57.8.3.5.4.7.4.7s12.5 1 37.6-14.5c13.4-8.3 29.3-17.6 47.4-17.8 17.5-.3 18.4 20.2 5.2 23.4z"
/>
</svg>
+41
View File
@@ -0,0 +1,41 @@
<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";
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 (Cmd + l)">
<SunIcon
size={20}
strokeWidth={1.5}
class="scale-100 rotate-0 !transition-all dark:scale-0 dark:-rotate-90"
/>
<MoonIcon
size={20}
strokeWidth={1.5}
class="absolute scale-0 rotate-90 !transition-all dark:scale-100 dark:rotate-0"
/>
<span class="sr-only">Toggle theme</span>
</button>
-105
View File
@@ -1,105 +0,0 @@
<script lang="ts">
export let currentPath: string;
import { cn } from '@/utils/cn';
import Theme from './theme.svelte';
import { ArrowUpRight, CloudyIcon } from 'lucide-svelte';
import XIcon from './icons/xIcon.svelte';
import GithubIcon from './icons/githubIcon.svelte';
import HeaderLogoLink from './headerLogoLink.svelte';
const externalLinks = [
{
name: 'API',
url: '/api',
icon: CloudyIcon,
external: false,
label: "Go to the SVGL's API section"
},
{
name: 'Extensions',
url: 'https://github.com/pheralb/svgl?tab=readme-ov-file#-extensions',
icon: ArrowUpRight,
external: true,
label: "Go to the SVGL's extensions section"
},
{
name: 'Submit logo',
url: 'https://github.com/pheralb/svgl#-getting-started',
icon: ArrowUpRight,
external: true,
label: "Submit logo and go to the SVGL's getting started section"
}
];
</script>
<nav
class={cn(
'bg-white dark:bg-neutral-900',
'w-full border-b border-neutral-200 px-5 py-4 dark:border-neutral-800',
'sticky top-0 z-50',
'bg-white/90 backdrop-blur-md dark:bg-neutral-900/90'
)}
>
<div class="mx-auto flex items-center justify-between">
<HeaderLogoLink />
<div class="flex items-center space-x-0 md:space-x-7">
<div
class="flex items-center divide-x divide-dashed divide-neutral-300 dark:divide-neutral-700 md:space-x-4"
>
{#each externalLinks as link}
<a
href={link.url}
target={link.external ? '_blank' : ''}
aria-label={link.label ?? link.name}
class={cn(
'group flex items-center pl-2 text-[15px] opacity-80 transition-opacity hover:opacity-100 md:pl-3',
currentPath === link.url &&
'underline decoration-neutral-500 decoration-dotted underline-offset-8'
)}
>
{#if !link.external}
<svelte:component
this={link.icon}
size={16}
strokeWidth={1.5}
class="mr-2"
name={link.name}
/>
{/if}
<span class={cn('hidden md:block', !link.external && 'block')}>{link.name}</span>
{#if link.external}
<svelte:component
this={link.icon}
size={16}
name="External link"
strokeWidth={1.5}
class="ml-1 hidden transition-transform duration-300 group-hover:-translate-y-[1px] group-hover:translate-x-[1px] md:block"
/>
{/if}
</a>
{/each}
</div>
<div class="flex items-center space-x-4">
<a
href="https://twitter.com/pheralb_"
target="_blank"
class="flex items-center space-x-1 opacity-80 transition-opacity hover:opacity-100"
title="Twitter"
>
<XIcon size={16} color="currentColor" />
</a>
<a
href="https://github.com/pheralb/svgl"
target="_blank"
class="flex items-center space-x-1 opacity-80 transition-opacity hover:opacity-100"
title="GitHub"
>
<GithubIcon iconSize={19} />
</a>
<Theme />
</div>
</div>
</div>
</nav>
-29
View File
@@ -1,29 +0,0 @@
<script lang="ts">
import { buttonStyles } from '@/ui/styles';
export let notFoundTerm: string;
import { PackageOpen, ArrowUpRight } from 'lucide-svelte';
</script>
<div class="mt-6 flex w-full flex-col items-center justify-center text-gray-600 dark:text-gray-400">
<PackageOpen size={40} class="mb-4" />
<p class="text-xl mb-1 font-medium">Couldn't find the Icon</p>
<p class="text-md mb-4 font-mono">"{notFoundTerm}"</p>
<div class="flex items-center space-x-1">
<a
href="https://github.com/pheralb/svgl?tab=readme-ov-file#-getting-started"
target="_blank"
class={buttonStyles}
>
<span>Submit logo</span>
<ArrowUpRight size={16} />
</a>
<a
href="https://github.com/pheralb/svgl/issues/new?assignees=pheralb&labels=request&projects=&template=request-svg-.md&title=%5BRequest%5D%3A"
target="_blank"
class={buttonStyles}
>
<span>Request Icon</span>
<ArrowUpRight size={16} />
</a>
</div>
</div>
+38
View File
@@ -0,0 +1,38 @@
<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;
containerClass?: string;
contentCardClass?: string;
}
let { children, contentCardClass, containerClass }: PageCardProps = $props();
</script>
<div class="p-[1px]">
<div
class={cn(
"overflow-hidden",
"rounded-md border border-neutral-200 dark:border-neutral-800",
"bg-white dark:bg-neutral-900/40",
"shadow-xs",
containerClass,
)}
>
<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>
+22
View File
@@ -0,0 +1,22 @@
<script lang="ts">
import type { Snippet } from "svelte";
import { cn } from "@/utils/cn";
interface PageHeaderProps {
children: Snippet;
className?: string;
}
let { children, className }: PageHeaderProps = $props();
</script>
<div
class={cn(
"sticky top-0 z-50 flex h-12.5 items-center justify-between py-1.5 pr-2 pl-3",
"border-b border-neutral-200 dark:border-neutral-800",
"bg-white/80 backdrop-blur-sm dark:bg-neutral-900/40",
className,
)}
>
{@render children?.()}
</div>
+72 -66
View File
@@ -1,77 +1,83 @@
<script lang="ts">
import { page } from '$app/stores';
import { inputStyles } from '@/ui/styles';
import { Command, SearchIcon } from 'lucide-svelte';
export let searchTerm: string;
export let placeholder: string = 'Search...';
export let clearSearch: () => void;
import { X } from 'lucide-svelte';
import { cn } from "@/utils/cn";
import { onMount } from "svelte";
let inputElement;
import { addParams } from "@/utils/searchParams";
import SearchIcon from "@lucide/svelte/icons/search";
import CommandIcon from "@lucide/svelte/icons/command";
function focusInput(node: HTMLElement) {
const handleKeydown = (event: KeyboardEvent) => {
if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
event.preventDefault();
node.focus();
}
};
window.addEventListener('keydown', handleKeydown);
return {
destroy() {
window.removeEventListener('keydown', handleKeydown);
}
};
interface Props {
searchValue: string;
onSearch: (value: string) => void;
placeholder?: string;
iconSize?: number;
inputClass?: string;
}
let searchParams = {} as { [key: string]: string };
let { searchValue, onSearch, placeholder, iconSize, inputClass }: Props =
$props();
let inputElement: HTMLInputElement;
$: {
if ($page) {
searchParams = Object.fromEntries($page.url.searchParams);
if (!searchParams?.search) {
clearSearch();
}
const onInput = (event: Event) => {
const value = (event.target as HTMLInputElement).value;
onSearch(value);
addParams({
params: {
search: value,
},
});
};
const handleKeydown = (event: KeyboardEvent) => {
if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
event.preventDefault();
inputElement?.focus();
}
}
};
onMount(() => {
window.addEventListener("keydown", handleKeydown);
return () => {
window.removeEventListener("keydown", handleKeydown);
};
});
</script>
<div class="sticky top-[63px] z-50">
<div class="relative w-full text-[16px]">
<div class="absolute inset-y-0 left-0 flex items-center pl-3 text-neutral-500">
<div class="pointer-events-none">
<SearchIcon size={20} strokeWidth={searchTerm ? 2.5 : 1.5} />
</div>
<div class="relative">
<SearchIcon
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-500",
)}
/>
<input
bind:this={inputElement}
type="search"
autocomplete="off"
placeholder={placeholder || "Search..."}
oninput={onInput}
name="search"
value={searchValue}
class={cn(
"overflow-hidden shadow-sm",
"w-full py-1.5 pr-3 pl-10",
"text-lg placeholder:text-neutral-400 dark:placeholder:text-neutral-400",
"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}
<div
class="absolute top-1/2 right-2 flex -translate-y-1/2 items-center space-x-1.5 rounded-md p-1 text-sm text-neutral-400 transition-colors hover:text-neutral-600"
>
<CommandIcon size={16} strokeWidth={1.5} />
<span class="select-none">K</span>
</div>
<input
type="text"
{placeholder}
autocomplete="off"
class={inputStyles}
bind:value={searchTerm}
on:input
use:focusInput
bind:this={inputElement}
/>
{#if searchTerm.length > 0}
<div class="absolute inset-y-0 right-0 flex items-center pr-3">
<button
type="button"
class="focus:outline-none focus:ring-1 focus:ring-neutral-300"
on:click={clearSearch}
>
<X size={18} />
</button>
</div>
{:else}
<div class="absolute inset-y-0 right-0 flex items-center pr-4 text-neutral-500">
<div class="flex h-full items-center pointer-events-none gap-x-1 font-mono">
<Command size={16} />
<span>K</span>
</div>
</div>
{/if}
</div>
{/if}
</div>
@@ -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>
@@ -0,0 +1,46 @@
<script lang="ts">
import type { Component } from "svelte";
import * as Select from "@/components/ui/select";
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";
let pkg = $derived($settingsStore.packageManager);
const managers: Record<PackageManager, { label: string; Icon: Component }> = {
npm: { label: "npm", Icon: Npm },
pnpm: { label: "pnpm", Icon: Pnpm },
yarn: { label: "yarn", Icon: Yarn },
bun: { label: "bun", Icon: Bun },
};
</script>
<Select.Root type="single" bind:value={pkg}>
<Select.Trigger
class={buttonVariants({ variant: "outline", class: "justify-between" })}
>
{#if managers[pkg]}
{@const { Icon, label } = managers[pkg]}
<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={() => settingsStore.setPackageManager(value as PackageManager)}
>
<Icon size={16} />
<span>{label}</span>
</Select.Item>
{/each}
</Select.Content>
</Select.Root>
@@ -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>
-239
View File
@@ -1,239 +0,0 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
// Utils:
import { cn } from '@/utils/cn';
// Icons:
import {
LinkIcon,
ChevronsRight,
Baseline,
Sparkles,
EllipsisIcon,
TagIcon,
XIcon,
PaletteIcon
} from 'lucide-svelte';
// Components & styles:
import DownloadSvg from './downloadSvg.svelte';
import CopySvg from './copySvg.svelte';
import { badgeStyles, buttonStyles } from '@/ui/styles';
import * as Popover from '@/ui/popover';
// Figma
import { onMount } from 'svelte';
import { insertSVG as figmaInsertSVG } from '@/figma/insert-svg';
import { getSource } from '@/templates/getSource';
// Props:
export let svgInfo: iSVG;
export let searchTerm: string;
let isInFigma = false;
onMount(() => {
const searchParams = new URLSearchParams(window.location.search);
isInFigma = searchParams.get('figma') === '1';
});
// Wordmark SVG:
let wordmarkSvg = false;
$: {
if (searchTerm) {
wordmarkSvg = false;
}
}
const insertSVG = async (url?: string) => {
const content = (await getSource({
url
})) as string;
figmaInsertSVG(content);
};
// Icon Stroke & Size:
let iconStroke = 1.8;
let iconSize = 16;
// Max Categories:
let maxVisibleCategories = 1;
let moreTagsOptions = false;
// Global Styles:
const globalImageStyles = 'mb-4 mt-2 h-10 select-none pointer-events-none';
const btnStyles =
'flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40';
</script>
<div
class="group flex flex-col items-center justify-center rounded-md border border-neutral-200 p-4 transition-colors duration-100 hover:bg-neutral-100/80 dark:border-neutral-800 dark:hover:bg-neutral-800/20"
>
<!-- Image -->
{#if wordmarkSvg == true && svgInfo.wordmark !== undefined}
<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"
/>
{:else}
<img
class={cn('hidden dark:block', globalImageStyles)}
src={typeof svgInfo.route !== 'string' ? svgInfo.route.dark : svgInfo.route}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
<img
class={cn('block dark:hidden', globalImageStyles)}
src={typeof svgInfo.route !== 'string' ? svgInfo.route.light : svgInfo.route}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
{/if}
<!-- Title -->
<div class="mb-3 flex flex-col items-center justify-center space-y-1">
<p class="select-all truncate text-balance text-center text-[15px] font-medium">
{svgInfo.title}
</p>
<div class="flex items-center justify-center space-x-1">
{#if Array.isArray(svgInfo.category)}
{#each svgInfo.category.slice(0, maxVisibleCategories) as c, index}
<a
href={`/directory/${c.toLowerCase()}`}
class={badgeStyles}
title={`This icon is part of the ${svgInfo.category} category`}>{c}</a
>
{/each}
{#if svgInfo.category.length > maxVisibleCategories}
<Popover.Root
open={moreTagsOptions}
onOpenChange={(isOpen) => (moreTagsOptions = isOpen)}
>
<Popover.Trigger class={badgeStyles} title="More Tags">
{#if moreTagsOptions}
<XIcon size={15} strokeWidth={1.5} />
{:else}
<EllipsisIcon size={15} strokeWidth={1.5} />
{/if}
</Popover.Trigger>
<Popover.Content class="flex flex-col space-y-2">
<p class="font-medium">More tags:</p>
{#each svgInfo.category.slice(maxVisibleCategories) as c}
<a
href={`/directory/${c.toLowerCase()}`}
class={cn(buttonStyles, 'w-full rounded-md')}
>
<TagIcon size={15} strokeWidth={1.5} />
<span>{c}</span>
</a>
{/each}
</Popover.Content>
</Popover.Root>
{/if}
{:else}
<a href={`/directory/${svgInfo.category.toLowerCase()}`} class={badgeStyles}>
{svgInfo.category}
</a>
{/if}
</div>
</div>
<!-- Actions -->
<div class="flex items-center space-x-1">
{#if isInFigma}
<button
title="Insert to figma"
on:click={() => {
const svgHasTheme = typeof svgInfo.route !== 'string';
if (!svgHasTheme) {
insertSVG(
typeof svgInfo.route === 'string'
? svgInfo.route
: "Something went wrong. Couldn't copy the SVG."
);
return;
}
const dark = document.documentElement.classList.contains('dark');
insertSVG(
typeof svgInfo.route !== 'string'
? dark
? svgInfo.route.dark
: svgInfo.route.light
: svgInfo.route
);
}}
class={btnStyles}
>
<ChevronsRight size={iconSize} strokeWidth={iconStroke} />
</button>
{/if}
{#if wordmarkSvg && svgInfo.wordmark !== undefined}
<CopySvg {iconSize} {iconStroke} {svgInfo} isInFigma={false} isWordmarkSvg={true} />
{:else}
<CopySvg {iconSize} {iconStroke} {svgInfo} isInFigma={false} isWordmarkSvg={false} />
{/if}
<DownloadSvg
{svgInfo}
isDarkTheme={() => {
const dark = document.documentElement.classList.contains('dark');
return dark;
}}
/>
<a
href={svgInfo.url}
title="Website"
target="_blank"
rel="noopener noreferrer"
class={btnStyles}
>
<LinkIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{#if svgInfo.wordmark !== undefined}
<button
title={wordmarkSvg ? 'Show logo SVG' : 'Show wordmark SVG'}
on:click={() => {
wordmarkSvg = !wordmarkSvg;
}}
class={btnStyles}
>
{#if wordmarkSvg}
<Sparkles size={iconSize} strokeWidth={iconStroke} />
{:else}
<Baseline size={iconSize} strokeWidth={iconStroke} />
{/if}
</button>
{/if}
{#if svgInfo.brandUrl !== undefined}
<a
href={svgInfo.brandUrl}
title="Brand Assets"
target="_blank"
rel="noopener noreferrer"
class={btnStyles}
>
<PaletteIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{/if}
</div>
</div>
+41
View File
@@ -0,0 +1,41 @@
<script lang="ts">
import type { iSVG } from "@/types/svg";
import { cn } from "@/utils/cn";
import favoritesStore from "@/stores/favorites.store";
import HeartIcon from "@lucide/svelte/icons/heart";
interface Props {
svg: iSVG;
}
let { svg }: Props = $props();
let favorites = $derived($favoritesStore);
let isFavorite = $derived(favoritesStore.isFavorite(svg, favorites));
const toggleFavorite = () => {
favoritesStore.toggleFavorite(svg);
};
</script>
<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-600",
isFavorite && "text-red-500",
)}
onclick={toggleFavorite}
title={isFavorite
? `Delete ${svg.title} from favorites`
: `Add ${svg.title} to favorites`}
aria-label={isFavorite
? `Delete ${svg.title} from favorites`
: `Add ${svg.title} to favorites`}
>
<HeartIcon
size={16}
strokeWidth={1.8}
class={cn(isFavorite && "fill-red-500 dark:fill-red-600")}
/>
</button>
@@ -0,0 +1,59 @@
<script lang="ts">
import { globals } from "@/globals";
import { buttonVariants } from "@/components/ui/button";
import CodeBlock from "@/components/codeBlock.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;
}
let { svgTitle }: Props = $props();
const shadcnCommands: Record<PackageManager, string> = {
npm: "npx shadcn@latest add",
pnpm: "pnpm dlx shadcn@latest add",
yarn: "yarn dlx shadcn@latest add",
bun: "bunx shadcn@latest add",
};
let pkg = $derived($settingsStore.packageManager);
let shadcnCommand = $derived(shadcnCommands[pkg]);
const svgFormatTitle = svgTitle
.toLowerCase()
.replace(/\s+/g, "-")
.replace(/[^a-z0-9-]/g, "");
</script>
<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} />
@@ -1,76 +1,98 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
import { ClipboardIcon, CopyIcon, Loader, X } from 'lucide-svelte';
import { toast } from 'svelte-sonner';
import * as Popover from '@/ui/popover';
import * as Tabs from '@/ui/tabs';
import { buttonStyles } from '@/ui/styles';
import type { iSVG } from "@/types/svg";
// Utils:
import { cn } from '@/utils/cn';
import { clipboard } from '@/utils/clipboard';
import { copyToClipboard as figmaCopyToClipboard } from '@/figma/copy-to-clipboard';
import { getPrefixFromSvgUrl, prefixSvgIds } from '@/utils/prefixSvgIds';
import { cn } from "@/utils/cn";
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";
import CopyIcon from "@lucide/svelte/icons/copy";
import LoaderIcon from "@lucide/svelte/icons/loader";
import ClipboardIcon from "@lucide/svelte/icons/clipboard";
// 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";
// CLIs:
import CopyShadcnCommand from "@/components/svgs/copyShadcnCommand.svelte";
// Templates:
import { getSource } from '@/templates/getSource';
import { getReactCode } from '@/templates/getReactCode';
import { getVueCode } from '@/templates/getVueCode';
import { getSvelteCode } from '@/templates/getSvelteCode';
import { getAngularCode } from '@/templates/getAngularCode';
import { getWebComponent } from '@/templates/getWebComponent';
import { getAstroCode } from '@/templates/getAstroCode';
import { getSource } from "@/templates/getSource";
import { getVueCode } from "@/templates/getVueCode";
import { getReactCode } from "@/templates/getReactCode";
import { getAstroCode } from "@/templates/getAstroCode";
import { getSvelteCode } from "@/templates/getSvelteCode";
import { getAngularCode } from "@/templates/getAngularCode";
import { getWebComponent } from "@/templates/getWebComponent";
//Icons:
import ReactIcon from '@/components/icons/reactIcon.svelte';
import VueIcon from '@/components/icons/vueIcon.svelte';
import SvelteIcon from '@/components/icons/svelteIcon.svelte';
import AngularIcon from '@/components/icons/angularIcon.svelte';
import WebComponentIcon from '@/components/icons/webComponentIcon.svelte';
import AstroIcon from '@/components/icons/astroIcon.svelte';
// SVGs:
import Vue from "@/components/logos/vue.svelte";
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";
// Props:
export let iconSize = 24;
export let iconStroke = 2;
export let isInFigma = false;
export let isWordmarkSvg = false;
export let svgInfo: iSVG;
interface Props {
size?: number;
iconStroke?: number;
isInFigma?: boolean;
isWordmarkSvg?: boolean;
svgInfo: iSVG;
}
// Variables:
let optionsOpen = false;
let isLoading = false;
let {
size = 24,
iconStroke = 2,
isInFigma = false,
isWordmarkSvg = false,
svgInfo,
}: Props = $props();
// States:
let optionsOpen = $state<boolean>(false);
let isLoading = $state<boolean>(false);
let optimize = $derived($settingsStore.optimizeSvgs);
const getSvgUrl = () => {
let svgUrlToCopy;
const dark = document.documentElement.classList.contains('dark');
const dark = document.documentElement.classList.contains("dark");
if (isWordmarkSvg) {
const svgHasTheme = typeof svgInfo.wordmark !== 'string';
const svgHasTheme = typeof svgInfo.wordmark !== "string";
if (!svgHasTheme) {
svgUrlToCopy =
typeof svgInfo.wordmark === 'string'
typeof svgInfo.wordmark === "string"
? svgInfo.wordmark
: "Something went wrong. Couldn't copy the SVG.";
}
svgUrlToCopy =
typeof svgInfo.wordmark !== 'string'
typeof svgInfo.wordmark !== "string"
? dark
? svgInfo.wordmark?.dark
: svgInfo.wordmark?.light
: svgInfo.wordmark;
} else {
const svgHasTheme = typeof svgInfo.route !== 'string';
const svgHasTheme = typeof svgInfo.route !== "string";
if (!svgHasTheme) {
svgUrlToCopy =
typeof svgInfo.route === 'string'
typeof svgInfo.route === "string"
? svgInfo.route
: "Something went wrong. Couldn't copy the SVG.";
}
svgUrlToCopy =
typeof svgInfo.route !== 'string'
typeof svgInfo.route !== "string"
? dark
? svgInfo.route.dark
: svgInfo.route.light
@@ -86,7 +108,8 @@
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -100,25 +123,25 @@
await clipboard(content);
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
? svgInfo.category.sort().join(" - ")
: svgInfo.category;
if (isInFigma) {
toast.success('Ready to paste in Figma', {
description: `${svgInfo.title} - ${category}`
toast.success("Ready to paste in Figma", {
description: `${svgInfo.title} - ${category}`,
});
return;
}
if (isWordmarkSvg) {
toast.success('Copied wordmark SVG to clipboard', {
description: `${svgInfo.title} - ${category}`
toast.success("Copied wordmark SVG to clipboard", {
description: `${svgInfo.title} - ${category}`,
});
return;
}
toast.success('Copied to clipboard', {
description: `${svgInfo.title} - ${category}`
toast.success("Copied to clipboard", {
description: `${svgInfo.title} - ${category}`,
});
};
@@ -129,9 +152,10 @@
isLoading = true;
const title = svgInfo.title.split(' ').join('');
const title = svgInfo.title.split(" ").join("");
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -142,9 +166,9 @@
const { data, error } = await getReactCode(dataComponent);
if (error || !data) {
toast.error('Failed to fetch React component', {
description: `${error ?? ''}`,
duration: 5000
toast.error("Failed to fetch React component", {
description: `${error ?? ""}`,
duration: 5000,
});
isLoading = false;
return;
@@ -152,8 +176,8 @@
await clipboard(data);
toast.success(`Copied as React ${tsx ? 'TSX' : 'JSX'} component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
toast.success(`Copied as React ${tsx ? "TSX" : "JSX"} component`, {
description: `${svgInfo.title} - ${svgInfo.category}`,
});
isLoading = false;
@@ -167,7 +191,8 @@
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -176,7 +201,7 @@
const copyCode = getVueCode({
content: content,
lang: ts ? 'ts' : 'js'
lang: ts ? "ts" : "js",
});
if (copyCode) {
@@ -184,11 +209,11 @@
}
const category = Array.isArray(svgInfo?.category)
? svgInfo.category.sort().join(' - ')
? svgInfo.category.sort().join(" - ")
: svgInfo.category;
toast.success(`Copied as Vue ${ts ? 'TS' : 'JS'} component`, {
description: `${svgInfo?.title} - ${category}`
toast.success(`Copied as Vue ${ts ? "TS" : "JS"} component`, {
description: `${svgInfo?.title} - ${category}`,
});
} catch (err) {
console.error(`Error copying Vue component:`, err);
@@ -204,7 +229,8 @@
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -213,7 +239,7 @@
const copyCode = getSvelteCode({
content: content,
lang: ts ? 'ts' : 'js'
lang: ts ? "ts" : "js",
});
if (copyCode) {
@@ -221,11 +247,11 @@
}
const category = Array.isArray(svgInfo?.category)
? svgInfo.category.sort().join(' - ')
? svgInfo.category.sort().join(" - ")
: svgInfo.category;
toast.success(`Copied as Svelte ${ts ? 'TS' : 'JS'} component`, {
description: `${svgInfo?.title} - ${category}`
toast.success(`Copied as Svelte ${ts ? "TS" : "JS"} component`, {
description: `${svgInfo?.title} - ${category}`,
});
} catch (err) {
console.error(`Error copying Svelte component:`, err);
@@ -238,10 +264,11 @@
isLoading = true;
optionsOpen = false;
const title = svgInfo.title.split(' ').join('');
const title = svgInfo.title.split(" ").join("");
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -249,8 +276,8 @@
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
toast.error("Failed to fetch the SVG content", {
duration: 5000,
});
isLoading = false;
return;
@@ -258,13 +285,13 @@
const angularComponent = getAngularCode({
componentName: title,
svgContent: content
svgContent: content,
});
await clipboard(angularComponent);
toast.success(`Copied as Standalone Angular component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
description: `${svgInfo.title} - ${svgInfo.category}`,
});
isLoading = false;
@@ -275,10 +302,11 @@
isLoading = true;
optionsOpen = false;
const title = svgInfo.title.split(' ').join('');
const title = svgInfo.title.split(" ").join("");
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -286,8 +314,8 @@
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
toast.error("Failed to fetch the SVG content", {
duration: 5000,
});
isLoading = false;
return;
@@ -295,13 +323,13 @@
const webComponentCode = getWebComponent({
name: title,
content: content
content: content,
});
await clipboard(webComponentCode);
toast.success(`Copied as Web Component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
description: `${svgInfo.title} - ${svgInfo.category}`,
});
isLoading = false;
@@ -314,7 +342,8 @@
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
url: svgUrlToCopy,
optimize,
});
if (svgUrlToCopy) {
@@ -322,183 +351,224 @@
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
toast.error("Failed to fetch the SVG content", {
duration: 5000,
});
isLoading = false;
return;
}
const astroComponentCode = getAstroCode({
svgContent: content
svgContent: content,
});
await clipboard(astroComponentCode);
toast.success(`Copied as Astro Component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
description: `${svgInfo.title} - ${svgInfo.category}`,
});
isLoading = false;
};
</script>
<Popover.Root open={optionsOpen} onOpenChange={(isOpen) => (optionsOpen = isOpen)}>
<Popover.Root bind:open={optionsOpen}>
<Popover.Trigger
title="Copy SVG element as svg file, React TSX code, or React JSX code"
class="flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40"
class={cn(
buttonVariants({
variant: "ghost",
size: "icon",
class: "hover:bg-neutral-200",
}),
)}
>
{#if optionsOpen}
<X size={iconSize} strokeWidth={iconStroke} />
<XIcon {size} strokeWidth={iconStroke} />
{:else if isLoading}
<Loader size={iconSize} strokeWidth={iconStroke} class="animate-spin" />
<LoaderIcon {size} strokeWidth={iconStroke} class="animate-spin" />
{:else}
<CopyIcon size={iconSize} strokeWidth={iconStroke} />
<CopyIcon {size} strokeWidth={iconStroke} />
{/if}
</Popover.Trigger>
<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>
<Tabs.Trigger value="source">Source</Tabs.Trigger>
<div
class="ml-3 flex flex-row space-x-0.5 border-l border-dashed border-neutral-200 pl-3 dark:border-neutral-800"
>
<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">
<WebComponentIcon iconSize={21} />
<WebComponents size={21} />
</Tabs.Trigger>
<Tabs.Trigger value="react" title="React">
<ReactIcon iconSize={20} />
<React size={20} />
</Tabs.Trigger>
<Tabs.Trigger value="vue" title="Vue">
<VueIcon iconSize={20} />
<Vue size={20} />
</Tabs.Trigger>
<Tabs.Trigger value="svelte" title="Svelte">
<SvelteIcon iconSize={20} />
<Svelte size={20} />
</Tabs.Trigger>
<Tabs.Trigger value="angular" title="Angular">
<AngularIcon iconSize={20} />
<Angular size={20} />
</Tabs.Trigger>
<Tabs.Trigger value="astro" title="Astro" class="text-black dark:text-white">
<AstroIcon iconSize={21} />
<Tabs.Trigger
value="astro"
title="Astro"
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">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title={isWordmarkSvg ? 'Copy wordmark SVG to clipboard' : 'Copy SVG to clipboard'}
on:click={() => copyToClipboard()}
<Button
variant="outline"
class="justify-start"
title={isWordmarkSvg
? "Copy wordmark SVG to clipboard"
: "Copy SVG to clipboard"}
onclick={() => copyToClipboard()}
>
<ClipboardIcon size={16} strokeWidth={2} />
<span>Copy SVG</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- CLI -->
<Tabs.Content value="shadcn">
<section class="flex flex-col space-y-2">
<CopyShadcnCommand svgTitle={svgInfo.title} />
</section>
</Tabs.Content>
<!-- React -->
<Tabs.Content value="react">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as React component"
disabled={isLoading}
on:click={() => convertSvgReactComponent(true)}
onclick={() => convertSvgReactComponent(true)}
>
<ReactIcon iconSize={18} />
<React size={18} />
<span>Copy TSX</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
</Button>
<Button
variant="outline"
class="justify-start"
title="Copy as React component"
disabled={isLoading}
on:click={() => convertSvgReactComponent(false)}
onclick={() => convertSvgReactComponent(false)}
>
<ReactIcon iconSize={18} />
<React size={18} />
<span>Copy JSX</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- Svelte -->
<Tabs.Content value="svelte">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Svelte component"
disabled={isLoading}
on:click={() => convertSvgSvelteComponent(false)}
onclick={() => convertSvgSvelteComponent(false)}
>
<SvelteIcon iconSize={18} />
<Svelte size={18} />
<span>Copy JS</span>
</button>
</Button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Svelte component"
disabled={isLoading}
on:click={() => convertSvgSvelteComponent(true)}
onclick={() => convertSvgSvelteComponent(true)}
>
<SvelteIcon iconSize={18} />
<Svelte size={18} />
<span>Copy TS</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- Vue -->
<Tabs.Content value="vue">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Vue component"
disabled={isLoading}
on:click={() => convertSvgVueComponent(false)}
onclick={() => convertSvgVueComponent(false)}
>
<VueIcon iconSize={18} />
<Vue size={18} />
<span>Copy JS</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
</Button>
<Button
variant="outline"
class="justify-start"
title="Copy as Vue component"
disabled={isLoading}
on:click={() => convertSvgVueComponent(true)}
onclick={() => convertSvgVueComponent(true)}
>
<VueIcon iconSize={18} />
<Vue size={18} />
<span>Copy TS</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- Angular -->
<Tabs.Content value="angular">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Standalone Component"
disabled={isLoading}
on:click={() => convertSvgAngularComponent()}
onclick={() => convertSvgAngularComponent()}
>
<AngularIcon iconSize={18} />
<Angular size={18} />
<span>Copy Standalone Component</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- Web Component -->
<Tabs.Content value="web-component">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Web Component"
disabled={isLoading}
on:click={() => convertSvgWebComponent()}
onclick={() => convertSvgWebComponent()}
>
<WebComponentIcon iconSize={18} />
<WebComponents size={18} />
<span>Copy Web Component</span>
</button>
</Button>
</section>
</Tabs.Content>
<!-- Astro -->
<Tabs.Content value="astro">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
<Button
variant="outline"
class="justify-start"
title="Copy as Astro Component"
disabled={isLoading}
on:click={() => convertSvgAstroComponent()}
onclick={() => convertSvgAstroComponent()}
>
<AstroIcon iconSize={18} />
<Astro size={18} />
<span>Copy Astro Component</span>
</button>
</Button>
</section>
</Tabs.Content>
</Tabs.Root>
@@ -506,8 +576,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>
+321
View File
@@ -0,0 +1,321 @@
<script lang="ts">
import type { iSVG } from "@/types/svg";
import { toast } from "svelte-sonner";
import DownloadIcon from "@lucide/svelte/icons/download";
// Utils:
import { cn } from "@/utils/cn";
import { downloadAllVariants, downloadSvg } from "@/utils/downloadSvg";
// Components:
import * as Dialog from "@/components/ui/dialog";
import { Button, buttonVariants } from "@/components/ui/button";
// Props:
interface Props {
svgInfo: iSVG;
isDarkTheme: () => boolean;
}
let { svgInfo, isDarkTheme }: Props = $props();
// Shared:
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-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) => {
const result = await downloadSvg({
url: url!,
});
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(" - ")
: svgInfo.category;
if (result) {
toast.success(`Downloading...`, {
description: `${svgInfo.title} - ${category}`,
});
} else {
toast.error(`Error downloading SVG`, {
description: `${svgInfo.title} - ${category}`,
});
}
};
const handleDownloadAllVariants = async ({
lightRoute,
darkRoute,
isWordmark,
}: {
lightRoute: string;
darkRoute: string;
isWordmark?: boolean;
}) => {
const result = await downloadAllVariants({
svgInfo,
lightRoute,
darkRoute,
isWordmark,
});
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(" - ")
: svgInfo.category;
if (result) {
toast.success("Downloading light & dark variants...", {
description: isWordmark
? `${svgInfo.title} - Wordmark - ${category}`
: `${svgInfo.title} - ${category}`,
});
} else {
toast.error(`Error downloading SVG`, {
description: `${svgInfo.title} - ${category}`,
});
}
};
</script>
{#if typeof svgInfo.route === "string" && svgInfo.wordmark === undefined}
<Button
title="Download Light & Dark variants"
variant="ghost"
size="icon"
class="hover:bg-neutral-200"
onclick={() => {
if (typeof svgInfo.route === "string") {
handleDownloadSvg(svgInfo.route);
return;
}
}}
>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</Button>
{:else}
<Dialog.Root>
<Dialog.Trigger
title="Download SVG"
class={cn(
buttonVariants({
size: "icon",
variant: "ghost",
class: "hover:bg-neutral-200",
}),
)}
>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</Dialog.Trigger>
<Dialog.Content>
<Dialog.Header>
<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 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={imgStyles}
/>
<Button
class="justify-between"
title="Download logo"
variant="outline"
onclick={() => {
if (typeof svgInfo.route === "string") {
handleDownloadSvg(svgInfo.route);
return;
}
}}
>
<div class="flex items-center space-x-2">
<DownloadIcon size={iconSize} />
<p>Icon logo</p>
</div>
<span class={badgeButtonStyles}>.svg</span>
</Button>
</div>
{:else}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.route.dark : svgInfo.route.light}
alt={svgInfo.title}
class={imgStyles}
/>
<Button
class="justify-between"
title="Logo with light & dark variants"
variant="outline"
onclick={() => {
if (typeof svgInfo.route !== "string") {
handleDownloadAllVariants({
lightRoute: svgInfo.route.light,
darkRoute: svgInfo.route.dark,
});
}
}}
>
<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-between"
title="Download light variant"
variant="outline"
onclick={() => {
if (typeof svgInfo.route !== "string") {
handleDownloadSvg(svgInfo.route.light);
return;
}
}}
>
<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-between"
title="Download dark variant"
variant="outline"
onclick={() => {
if (typeof svgInfo.route !== "string") {
handleDownloadSvg(svgInfo.route.dark);
return;
}
}}
>
<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}
{#if typeof svgInfo.wordmark === "string" && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.wordmark : svgInfo.wordmark}
alt={svgInfo.title}
class={imgStyles}
/>
<Button
class="justify-between"
title="Download Wordmark logo"
variant="outline"
onclick={() => {
if (typeof svgInfo.wordmark === "string") {
handleDownloadSvg(svgInfo.wordmark);
return;
}
}}
>
<div class="flex items-center space-x-2">
<DownloadIcon size={iconSize} />
<p>Wordmark logo</p>
</div>
<span class={badgeButtonStyles}>.svg</span>
</Button>
</div>
{/if}
{#if typeof svgInfo.wordmark !== "string" && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme()
? svgInfo.wordmark.dark
: svgInfo.wordmark.light}
alt={svgInfo.title}
class={imgStyles}
/>
<Button
class="justify-between"
title="Download Wordmark light variant"
variant="outline"
onclick={() => {
if (typeof svgInfo.wordmark !== "string") {
handleDownloadAllVariants({
lightRoute: svgInfo.wordmark?.light || "",
darkRoute: svgInfo.wordmark?.dark || "",
isWordmark: true,
});
return;
}
}}
>
<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-between"
title="Download Wordmark light variant"
variant="outline"
onclick={() => {
if (typeof svgInfo.wordmark !== "string") {
handleDownloadSvg(svgInfo.wordmark?.light);
return;
}
}}
>
<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-between"
title="Download Wordmark dark variant"
variant="outline"
onclick={() => {
if (typeof svgInfo.wordmark !== "string") {
handleDownloadSvg(svgInfo.wordmark?.dark);
return;
}
}}
>
<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>
<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>
{/if}
+51
View File
@@ -0,0 +1,51 @@
<script lang="ts">
import { page } from "$app/state";
import { goto } from "$app/navigation";
import { SvelteURLSearchParams } from "svelte/reactivity";
import { cn } from "@/utils/cn";
import { buttonVariants } from "@/components/ui/button";
import ArrowUpDownIcon from "@lucide/svelte/icons/arrow-up-down";
import ArrowDownUpIcon from "@lucide/svelte/icons/arrow-down-up";
interface Props {
className?: string;
isSorted: boolean;
onSortedChange: (isSorted: boolean) => void;
}
let { className, isSorted, onSortedChange }: Props = $props();
let sorted = $state<boolean>(isSorted);
const sort = () => {
const newSorted = !sorted;
sorted = newSorted;
const params = new SvelteURLSearchParams(page.url.searchParams);
if (newSorted) {
params.set("sort", "alphabetical");
} else {
params.delete("sort");
}
goto(`?${params.toString()}`, {
keepFocus: true,
noScroll: true,
replaceState: true,
});
onSortedChange(sorted);
};
</script>
<button
class={cn(buttonVariants({ variant: "ghost", class: "px-2.5" }), className)}
onclick={() => sort()}
>
{#if sorted}
<ArrowDownUpIcon size={16} strokeWidth={2} />
{:else}
<ArrowUpDownIcon size={16} strokeWidth={2} />
{/if}
<span>{sorted ? "Sort by latest" : "Sort A-Z"}</span>
</button>
+237
View File
@@ -0,0 +1,237 @@
<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";
import TagIcon from "@lucide/svelte/icons/tag";
import LinkIcon from "@lucide/svelte/icons/link";
import PaletteIcon from "@lucide/svelte/icons/palette";
import SparklesIcon from "@lucide/svelte/icons/sparkles";
import BaselineIcon from "@lucide/svelte/icons/baseline";
import EllipsisIcon from "@lucide/svelte/icons/ellipsis";
// UI Components:
import * as Popover from "@/components/ui/popover";
import { badgeVariants } from "@/components/ui/badge";
import { Button, buttonVariants } from "@/components/ui/button";
// Components:
import CopySvg from "@/components/svgs/copySvg.svelte";
import DownloadSvg from "@/components/svgs/downloadSvg.svelte";
import AddToFavorite from "@/components/svgs/addToFavorite.svelte";
// Props:
interface Props {
svgInfo: iSVG;
}
let { svgInfo }: Props = $props();
// States:
let wordmarkSvg = $state<boolean>(false);
let moreTagsOptions = $state<boolean>(false);
// Icon Stroke & Size:
let iconStroke = 1.8;
let iconSize = 16;
let maxVisibleCategories = 1;
// Global Styles:
const globalImageStyles = "mb-4 mt-1.5 h-10 select-none pointer-events-none";
</script>
<div
class={cn(
"flex flex-col items-center justify-center px-3.5 py-3",
"rounded-md border border-neutral-200 dark:border-neutral-800",
"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">
{#if svgInfo.brandUrl !== undefined}
<a
href={svgInfo.brandUrl}
title="Brand Assets"
target="_blank"
rel="noopener noreferrer"
class={cn(
"cursor-pointer transition-colors",
"text-neutral-500 hover:text-black dark:text-neutral-400 dark:hover:text-white",
)}
>
<PaletteIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{/if}
<AddToFavorite svg={svgInfo} />
</div>
<!-- Image -->
{#if wordmarkSvg && svgInfo.wordmark !== undefined}
<img
loading="lazy"
class={cn("hidden dark:block", globalImageStyles)}
src={getSvgImgUrl({ url: svgInfo.wordmark, isDark: true })}
alt={svgInfo.title}
title={svgInfo.title}
width="140"
height="40"
/>
<img
loading="lazy"
class={cn("block dark:hidden", globalImageStyles)}
src={getSvgImgUrl({ url: svgInfo.wordmark, isDark: false })}
alt={svgInfo.title}
title={svgInfo.title}
width="140"
height="40"
/>
{:else}
<img
loading="lazy"
class={cn("hidden dark:block", globalImageStyles)}
src={getSvgImgUrl({ url: svgInfo.route, isDark: true })}
alt={svgInfo.title}
title={svgInfo.title}
width="140"
height="40"
/>
<img
loading="lazy"
class={cn("block dark:hidden", globalImageStyles)}
src={getSvgImgUrl({ url: svgInfo.route, isDark: false })}
alt={svgInfo.title}
title={svgInfo.title}
width="140"
height="40"
/>
{/if}
<!-- Title -->
<div class="mb-3 flex flex-col items-center justify-center space-y-1">
<p
class="truncate text-center text-[15px] font-medium text-balance select-all"
>
{svgInfo.title}
</p>
<div class="flex items-center justify-center space-x-1">
{#if Array.isArray(svgInfo.category)}
{#each svgInfo.category.slice(0, maxVisibleCategories) as c (c)}
<a
href={`/directory/${c.toLowerCase()}`}
class={badgeVariants({
variant: "outline",
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}
onOpenChange={(isOpen) => (moreTagsOptions = isOpen)}
>
<Popover.Trigger
class={badgeVariants({
variant: "outline",
class:
"cursor-pointer font-mono hover:border-neutral-400 dark:hover:border-neutral-600",
})}
title="More Tags"
>
{#if moreTagsOptions}
<XIcon size={15} strokeWidth={1.5} />
{:else}
<EllipsisIcon size={15} strokeWidth={1.5} />
{/if}
</Popover.Trigger>
<Popover.Content class="flex w-auto flex-col space-y-2">
<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 justify-start",
)}
>
<TagIcon size={15} strokeWidth={1.5} />
<span>{c}</span>
</a>
{/each}
</Popover.Content>
</Popover.Root>
{/if}
{:else}
<a
href={`/directory/${svgInfo.category.toLowerCase()}`}
class={badgeVariants({
variant: "outline",
class:
"cursor-pointer font-mono hover:border-neutral-400 dark:hover:border-neutral-600",
})}
>
{svgInfo.category}
</a>
{/if}
</div>
</div>
<!-- Actions -->
<div class="flex items-center space-x-0.5">
{#if wordmarkSvg && svgInfo.wordmark !== undefined}
<CopySvg
size={iconSize}
{iconStroke}
{svgInfo}
isInFigma={false}
isWordmarkSvg={true}
/>
{:else}
<CopySvg
size={iconSize}
{iconStroke}
{svgInfo}
isInFigma={false}
isWordmarkSvg={false}
/>
{/if}
<DownloadSvg {svgInfo} isDarkTheme={() => mode.current === "dark"} />
<a
href={svgInfo.url}
title="Website"
target="_blank"
rel="noopener noreferrer"
class={buttonVariants({
size: "icon",
variant: "ghost",
class: "hover:bg-neutral-200",
})}
>
<LinkIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{#if svgInfo.wordmark !== undefined}
<Button
title={wordmarkSvg ? "Show logo SVG" : "Show wordmark SVG"}
onclick={() => {
wordmarkSvg = !wordmarkSvg;
}}
variant="ghost"
size="icon"
class="hover:bg-neutral-200"
>
{#if wordmarkSvg}
<SparklesIcon size={iconSize} strokeWidth={iconStroke} />
{:else}
<BaselineIcon size={iconSize} strokeWidth={iconStroke} />
{/if}
</Button>
{/if}
</div>
</div>
+57
View File
@@ -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;
}
-14
View File
@@ -1,14 +0,0 @@
<script lang="ts">
import { toggleMode, mode } from 'mode-watcher';
// Icons:
import { MoonIcon, SunIcon } from 'lucide-svelte';
</script>
<button on:click={toggleMode} aria-label="Toggle dark mode" class="opacity-80 hover:opacity-100">
{#if $mode === 'light'}
<SunIcon size={20} strokeWidth={1.5} />
{:else}
<MoonIcon size={20} strokeWidth={1.5} />
{/if}
</button>
-10
View File
@@ -1,10 +0,0 @@
<script lang="ts">
import { fly } from 'svelte/transition';
export let pathname: string = '';
</script>
{#key pathname}
<div in:fly={{ x: 0, y: 23, duration: 450 }}>
<slot />
</div>
{/key}
+35
View File
@@ -0,0 +1,35 @@
<script lang="ts" module>
import type { VariantProps } from "tailwind-variants";
import { badgeVariants } from "@/components/ui/badge";
export type BadgeVariant = VariantProps<typeof badgeVariants>["variant"];
</script>
<script lang="ts">
import type { HTMLAnchorAttributes } from "svelte/elements";
import type { WithElementRef } from "@/types/components";
import { cn } from "@/utils/cn";
let {
ref = $bindable(null),
href,
class: className,
variant = "default",
children,
...restProps
}: WithElementRef<HTMLAnchorAttributes> & {
variant?: BadgeVariant;
} = $props();
</script>
<svelte:element
this={href ? "a" : "span"}
bind:this={ref}
data-slot="badge"
{href}
class={cn(badgeVariants({ variant }), className)}
{...restProps}
>
{@render children?.()}
</svelte:element>
+34
View File
@@ -0,0 +1,34 @@
import { tv } from "tailwind-variants";
const badgeVariants = tv({
base: "inline-flex items-center cursor-default gap-1.5 font-medium rounded-full border transition-colors hover:text-black dark:hover:text-white ease-in-out",
variants: {
variant: {
default:
"bg-neutral-100 text-neutral-800 border-neutral-200 dark:bg-neutral-800 dark:text-neutral-100 dark:border-neutral-700",
primary:
"bg-neutral-800 text-neutral-50 border-neutral-700 dark:bg-neutral-700 dark:text-neutral-50 dark:border-neutral-600",
secondary:
"bg-neutral-200 text-neutral-700 border-neutral-300 dark:bg-neutral-700 dark:text-neutral-200 dark:border-neutral-600",
success:
"bg-green-100 text-green-800 border-green-200 dark:bg-green-900 dark:text-green-100 dark:border-green-800",
warning:
"bg-amber-100 text-amber-800 border-amber-200 dark:bg-amber-900 dark:text-amber-100 dark:border-amber-800",
danger:
"bg-red-100 text-red-800 border-red-200 dark:bg-red-900 dark:text-red-100 dark:border-red-800",
outline:
"bg-transparent border border-neutral-300 text-neutral-700 dark:border-neutral-800 dark:text-neutral-400",
},
size: {
sm: "text-xs px-2 py-0.5",
md: "text-sm px-2.5 py-0.5",
lg: "text-base px-3 py-1",
},
},
defaultVariants: {
variant: "default",
size: "sm",
},
});
export { badgeVariants };
+2
View File
@@ -0,0 +1,2 @@
export { default as Badge } from "./badge.svelte";
export { badgeVariants } from "./badge.variants";
+60
View File
@@ -0,0 +1,60 @@
<script lang="ts" module>
import type {
HTMLAnchorAttributes,
HTMLButtonAttributes,
} from "svelte/elements";
import type { VariantProps } from "tailwind-variants";
import type { WithElementRef } from "@/types/components";
import { cn } from "@/utils/cn";
import { buttonVariants } from "./button.variants";
export type ButtonVariant = VariantProps<typeof buttonVariants>["variant"];
export type ButtonSize = VariantProps<typeof buttonVariants>["size"];
export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
WithElementRef<HTMLAnchorAttributes> & {
variant?: ButtonVariant;
size?: ButtonSize;
};
</script>
<script lang="ts">
let {
class: className,
variant = "default",
size = "default",
ref = $bindable(null),
href = undefined,
type = "button",
disabled,
children,
...restProps
}: ButtonProps = $props();
</script>
{#if href}
<a
bind:this={ref}
data-slot="button"
class={cn(buttonVariants({ variant, size }), className)}
href={disabled ? undefined : href}
aria-disabled={disabled}
role={disabled ? "link" : undefined}
tabindex={disabled ? -1 : undefined}
{...restProps}
>
{@render children?.()}
</a>
{:else}
<button
bind:this={ref}
data-slot="button"
class={cn(buttonVariants({ variant, size }), className)}
{type}
{disabled}
{...restProps}
>
{@render children?.()}
</button>
{/if}
@@ -0,0 +1,34 @@
import { tv } from "tailwind-variants";
const buttonVariants = tv({
base: "inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-300 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 dark:focus-visible:ring-neutral-700",
variants: {
variant: {
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: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:
"border border-neutral-200 bg-white hover:bg-neutral-100 hover:text-neutral-900 dark:border-neutral-800 dark:bg-neutral-900 dark:hover:bg-neutral-800 dark:hover:text-neutral-50 hover:border-neutral-300 dark:hover:border-neutral-700 shadow-none",
secondary:
"bg-neutral-100 text-neutral-900 shadow-sm hover:bg-neutral-100/80 dark:bg-neutral-800 dark:text-neutral-50 dark:hover:bg-neutral-800/80",
ghost:
"hover:bg-neutral-100 hover:text-neutral-900 dark:hover:bg-neutral-800 dark:hover:text-neutral-50",
link: "text-neutral-900 underline-offset-4 hover:underline dark:text-neutral-50",
},
size: {
default: "h-9 px-4 py-2",
sm: "h-8 rounded-md px-3 text-xs",
lg: "h-10 rounded-md px-8",
icon: "h-9 w-9",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
});
export { buttonVariants };
+17
View File
@@ -0,0 +1,17 @@
import Root, {
type ButtonProps,
type ButtonSize,
type ButtonVariant,
} from "./button.svelte";
import { buttonVariants } from "./button.variants";
export {
Root,
type ButtonProps as Props,
Root as Button,
buttonVariants,
type ButtonProps,
type ButtonSize,
type ButtonVariant,
};
@@ -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}
/>
+13
View File
@@ -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}
/>

Some files were not shown because too many files have changed in this diff Show More