├── .github └── workflows │ └── publish.yml ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── app.d.ts ├── app.html ├── lib │ ├── components │ │ └── Breadcrumbs.svelte │ ├── index.ts │ └── types.ts └── routes │ ├── (group) │ └── groupedRoute │ │ └── +page.svelte │ ├── +layout.svelte │ ├── +page.svelte │ ├── blank │ └── skipBlankContent │ │ └── +page.svelte │ ├── pageDataExample │ ├── +page.server.ts │ ├── +page.svelte │ └── metadataExample │ │ ├── +page.server.ts │ │ └── +page.svelte │ ├── todos │ ├── +page.svelte │ └── [id] │ │ ├── +page.server.ts │ │ ├── +page.svelte │ │ └── tasks │ │ ├── +page.server.ts │ │ └── +page.svelte │ └── types.ts ├── static └── favicon.png ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish Package 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | tags: v[0-9]+.[0-9]+.[0-9]+ 7 | 8 | jobs: 9 | publish: 10 | name: Publish NPM Package 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | # Setup .npmrc file to publish to npm 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: "18.x" 18 | registry-url: "https://registry.npmjs.org" 19 | - run: npm i svelte-kit 20 | - run: npm run package 21 | - run: npm run prepublishOnly 22 | - run: npm publish 23 | env: 24 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /dist 5 | /.svelte-kit 6 | /package 7 | .env 8 | .env.* 9 | !.env.example 10 | vite.config.js.timestamp-* 11 | vite.config.ts.timestamp-* 12 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Zachary Holland 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte-Breadcrumbs 2 | 3 | - [Usage](#usage) 4 | - [Install](#install) 5 | - [Setting up the `Breadcrumb` component](#setting-up-the-breadcrumb-component) 6 | - [Customizing route titles](#customizing-route-titles) 7 | - [Component Docs](#full-component-docs) 8 | 9 | Svelte-Breadcrumbs makes it easy to generate meaningful breadcrumbs by leveraging Svelte's directory structure and [Module Context Exports](https://learn.svelte.dev/tutorial/module-exports). 10 | 11 | For example, when navigating to a route such as `/todos/[id]/edit` with the URL Pathname being `/todos/1/edit` you can immediately generate the breadcrumb `todos > 1 > edit`. 12 | 13 | Replacing the id `1` with meaningful data such as the todo's `name` proves to be slightly more difficulty. The crux of this issue lies in the fact that we are currently on the `/todos/[id]/edit`page, so any breadcrumb ui elements generated in`/todos/[id]/+page.svelte`or breadcrumb data returned in`/todos/[id]/+page.server.ts` will not be immediately available. 14 | 15 | With Svelte-Breadcrumbs, the route id is first split (e.g. `/todos/[id]/edit` -> `['todos', '[id]', 'edit']`) giving us the directory for each route. We then import the `+page.svelte` file from the corresponding directory and access a constant string `pageTitle` or getter function `getPageTitle` that was exported. The getter function is called with the current page's data passed in as a parameter. 16 | 17 | The title is then generated with the following priority, each one acting as a fallback for it's greater: 18 | 19 | 1. Page data `crumbs` property which overrides the entire `crumbs` array 20 | 2. `pageTitle: string` variable in the svelte page's module context 21 | 3. `getPageTitle(data: any) -> string` function in the svelte page's module context 22 | 4. The value in the original URL route path 23 | 24 | Breadcrumb title definition can now exist within the view itself! 25 | 26 | The biggest drawback of this solution is that getter functions have no way of knowing the data that will be provided to them at compile time which can make development a bit tricky. It can be hard to know if a page has the data the getter will need, but this is why the fallbacks exist. 27 | 28 | Another drawback I see is that the glob import in `Breadcrumbs.svelte` may be inefficient, specifically may be storing extra data in memory. This hasn't proven to be an issue for my project, but I'm not completely sure how it would fare in larger projects with more Svelte files... 29 | 30 | ## Usage 31 | 32 | ### Install 33 | 34 | ```bash 35 | $ npm i svelte-breadcrumbs 36 | ``` 37 | 38 | ### Setting up the Breadcrumb component 39 | 40 | In `+layout.svelte`: 41 | 42 | ```svelte 43 | 47 | 48 | {#snippet children({ crumbs })} 49 |
50 | Home 51 | 54 | {#each crumbs as c} 55 | / 56 | 57 | 58 | {c.title} 59 | 60 | 61 | {/each} 62 |
63 | {/snippet} 64 |
65 | ``` 66 | 67 | In the example above, `Breadcrumbs.svelte` will handle grabbing all of the modules itself under the assumption that all Svelte files exist in `/src/routes/`. If your directory structure is different, you can implement this yourself. If you pass a value in the `routeModules` prop the `Breadcrumbs` component will not try to populate it. You will also need to update the path prefix for your Svelte directory. 68 | 69 | ```svelte 70 | 79 | 80 | 81 | 88 | 89 | 90 | ``` 91 | 92 | ### Customizing route titles 93 | 94 | The `Breadcrumbs` component will have access to your Svelte components based on the route id and will be looking for the following exported variables in the [Module Context](https://learn.svelte.dev/tutorial/module-exports): 95 | 96 | - `pageTitle: string` 97 | - `getPageTitle: (data: any) -> string` 98 | 99 | `getPageTitle` will receive the value of `$page.data` passed through in the `Breadcrumbs` prop. (see the `Breadcrumbs` usage above). 100 | 101 | Here is an example: 102 | 103 | ```svelte 104 | 113 | ``` 114 | 115 | ## Types 116 | 117 | ```ts 118 | export type Crumb = { 119 | title?: string; // The default title being the sanitized page inferred from the URL (e.g. Edit) 120 | url?: string; // The URL of this page (e.g. /todos/1/edit) 121 | metadata?: any; // Any metadata you want passed through to the Breadcrumbs component 122 | }; 123 | 124 | // The data we will be grabbing from each +page.svelte file 125 | export type ModuleData = { 126 | pageTitle?: string; 127 | getPageTitle?: (data: any) => string; 128 | }; 129 | ``` 130 | 131 | ## Full Component Docs 132 | 133 | ## Breadcrumbs 134 | 135 | This component will provide an array of `Crumb`s to a single slot. The final `Crumb` will never have a URL as it is the current page. 136 | 137 | ### Props 138 | 139 | #### `routeModules: Record` 140 | 141 | > Optional 142 | 143 | The exported data for each module. If not provided it will be populated on mount with an eager glob import of `"/src/routes/**/*.svelte"` which is SvelteKit specific. 144 | 145 | Completely disable this feature by passing in an empty value as shown below. 146 | 147 | ```svelte 148 | 149 | 150 | 151 | ``` 152 | 153 | #### `relPathToRoutes: string` 154 | 155 | > Optional 156 | 157 | > Default Value: `'/src/routes/'` 158 | 159 | The path to the directory where your Svelte files live. In SvelteKit, if we are on a route `/todo/[id]/` and we have imported the svelte files like so: 160 | 161 | `import.meta.glob("/src/routes/**/*.svelte")` 162 | 163 | it will produce an object with the following: 164 | 165 | ```js 166 | { 167 | '/src/routes/todo/[id]/+page.svelte': ...Promise obj... 168 | } 169 | ``` 170 | 171 | Thus in order to match that file we need to specify the prefix `/src/routes/`. `Breadcrumbs.svelte` will essentially do the following to generate a path to the `+page.svelte` file: 172 | 173 | ```js 174 | relPathToRoutes + routeId + "/+page.svelte"; 175 | ``` 176 | 177 | #### `routeId: string | null | undefined` 178 | 179 | > Optional 180 | 181 | Route id for the current page. In Sveltekit this is `$page.route.id`. 182 | 183 | #### `url: string` 184 | 185 | > Required 186 | 187 | URL for the current page. Used to generate the url that each breadcrumb should link to when clicked on. In SvelteKit this is `$page.url`. 188 | 189 | #### `pageData: any` 190 | 191 | > Optional 192 | 193 | Page Data to pass through to the `getPageTitle` function living in a route's `page.svelte` file 194 | 195 | #### `crumbs: Crumb[]` 196 | 197 | > Optional 198 | 199 | A list of `Crumb`s that will override/bypass any breadcrumb generation via routes. In SvelteKit if you pass `$page.data.crumbs` or something similar you will be able to override any bread crumbs via page loads. 200 | 201 | #### `skipRoutesWithNoPage: bool` 202 | 203 | > Optional 204 | 205 | When set to true, it will completely skip rendering breadcrumbs if there is no page for the route. 206 | 207 | #### `titleSanitizer(title: string) -> string` 208 | 209 | > Optional 210 | 211 | > Default Value: `(title) => title.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());` 212 | 213 | Each title of the generated `Crumb` items will pass through this function. By default it will add spaces and capitalize (e.g. `myTodos` -> `My Todos`). 214 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-breadcrumbs", 3 | "version": "2.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelte-breadcrumbs", 9 | "version": "2.0.0", 10 | "devDependencies": { 11 | "@sveltejs/adapter-auto": "^3.3.1", 12 | "@sveltejs/kit": "^2.7.3", 13 | "@sveltejs/package": "^2.3.7", 14 | "@sveltejs/vite-plugin-svelte": "^4.0.0", 15 | "publint": "^0.2.12", 16 | "svelte": "^5.1.6", 17 | "svelte-check": "^4.0.5", 18 | "tslib": "^2.8.0", 19 | "typescript": "^5.6.3", 20 | "vite": "^5.4.10" 21 | }, 22 | "peerDependencies": { 23 | "svelte": "5.x" 24 | } 25 | }, 26 | "node_modules/@ampproject/remapping": { 27 | "version": "2.3.0", 28 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 29 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 30 | "dev": true, 31 | "license": "Apache-2.0", 32 | "dependencies": { 33 | "@jridgewell/gen-mapping": "^0.3.5", 34 | "@jridgewell/trace-mapping": "^0.3.24" 35 | }, 36 | "engines": { 37 | "node": ">=6.0.0" 38 | } 39 | }, 40 | "node_modules/@esbuild/aix-ppc64": { 41 | "version": "0.21.5", 42 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 43 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 44 | "cpu": [ 45 | "ppc64" 46 | ], 47 | "dev": true, 48 | "license": "MIT", 49 | "optional": true, 50 | "os": [ 51 | "aix" 52 | ], 53 | "engines": { 54 | "node": ">=12" 55 | } 56 | }, 57 | "node_modules/@esbuild/android-arm": { 58 | "version": "0.21.5", 59 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 60 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 61 | "cpu": [ 62 | "arm" 63 | ], 64 | "dev": true, 65 | "license": "MIT", 66 | "optional": true, 67 | "os": [ 68 | "android" 69 | ], 70 | "engines": { 71 | "node": ">=12" 72 | } 73 | }, 74 | "node_modules/@esbuild/android-arm64": { 75 | "version": "0.21.5", 76 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 77 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 78 | "cpu": [ 79 | "arm64" 80 | ], 81 | "dev": true, 82 | "license": "MIT", 83 | "optional": true, 84 | "os": [ 85 | "android" 86 | ], 87 | "engines": { 88 | "node": ">=12" 89 | } 90 | }, 91 | "node_modules/@esbuild/android-x64": { 92 | "version": "0.21.5", 93 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 94 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 95 | "cpu": [ 96 | "x64" 97 | ], 98 | "dev": true, 99 | "license": "MIT", 100 | "optional": true, 101 | "os": [ 102 | "android" 103 | ], 104 | "engines": { 105 | "node": ">=12" 106 | } 107 | }, 108 | "node_modules/@esbuild/darwin-arm64": { 109 | "version": "0.21.5", 110 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 111 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 112 | "cpu": [ 113 | "arm64" 114 | ], 115 | "dev": true, 116 | "license": "MIT", 117 | "optional": true, 118 | "os": [ 119 | "darwin" 120 | ], 121 | "engines": { 122 | "node": ">=12" 123 | } 124 | }, 125 | "node_modules/@esbuild/darwin-x64": { 126 | "version": "0.21.5", 127 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 128 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 129 | "cpu": [ 130 | "x64" 131 | ], 132 | "dev": true, 133 | "license": "MIT", 134 | "optional": true, 135 | "os": [ 136 | "darwin" 137 | ], 138 | "engines": { 139 | "node": ">=12" 140 | } 141 | }, 142 | "node_modules/@esbuild/freebsd-arm64": { 143 | "version": "0.21.5", 144 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 145 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 146 | "cpu": [ 147 | "arm64" 148 | ], 149 | "dev": true, 150 | "license": "MIT", 151 | "optional": true, 152 | "os": [ 153 | "freebsd" 154 | ], 155 | "engines": { 156 | "node": ">=12" 157 | } 158 | }, 159 | "node_modules/@esbuild/freebsd-x64": { 160 | "version": "0.21.5", 161 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 162 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 163 | "cpu": [ 164 | "x64" 165 | ], 166 | "dev": true, 167 | "license": "MIT", 168 | "optional": true, 169 | "os": [ 170 | "freebsd" 171 | ], 172 | "engines": { 173 | "node": ">=12" 174 | } 175 | }, 176 | "node_modules/@esbuild/linux-arm": { 177 | "version": "0.21.5", 178 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 179 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 180 | "cpu": [ 181 | "arm" 182 | ], 183 | "dev": true, 184 | "license": "MIT", 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-arm64": { 194 | "version": "0.21.5", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 196 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 197 | "cpu": [ 198 | "arm64" 199 | ], 200 | "dev": true, 201 | "license": "MIT", 202 | "optional": true, 203 | "os": [ 204 | "linux" 205 | ], 206 | "engines": { 207 | "node": ">=12" 208 | } 209 | }, 210 | "node_modules/@esbuild/linux-ia32": { 211 | "version": "0.21.5", 212 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 213 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 214 | "cpu": [ 215 | "ia32" 216 | ], 217 | "dev": true, 218 | "license": "MIT", 219 | "optional": true, 220 | "os": [ 221 | "linux" 222 | ], 223 | "engines": { 224 | "node": ">=12" 225 | } 226 | }, 227 | "node_modules/@esbuild/linux-loong64": { 228 | "version": "0.21.5", 229 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 230 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 231 | "cpu": [ 232 | "loong64" 233 | ], 234 | "dev": true, 235 | "license": "MIT", 236 | "optional": true, 237 | "os": [ 238 | "linux" 239 | ], 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/@esbuild/linux-mips64el": { 245 | "version": "0.21.5", 246 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 247 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 248 | "cpu": [ 249 | "mips64el" 250 | ], 251 | "dev": true, 252 | "license": "MIT", 253 | "optional": true, 254 | "os": [ 255 | "linux" 256 | ], 257 | "engines": { 258 | "node": ">=12" 259 | } 260 | }, 261 | "node_modules/@esbuild/linux-ppc64": { 262 | "version": "0.21.5", 263 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 264 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 265 | "cpu": [ 266 | "ppc64" 267 | ], 268 | "dev": true, 269 | "license": "MIT", 270 | "optional": true, 271 | "os": [ 272 | "linux" 273 | ], 274 | "engines": { 275 | "node": ">=12" 276 | } 277 | }, 278 | "node_modules/@esbuild/linux-riscv64": { 279 | "version": "0.21.5", 280 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 281 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 282 | "cpu": [ 283 | "riscv64" 284 | ], 285 | "dev": true, 286 | "license": "MIT", 287 | "optional": true, 288 | "os": [ 289 | "linux" 290 | ], 291 | "engines": { 292 | "node": ">=12" 293 | } 294 | }, 295 | "node_modules/@esbuild/linux-s390x": { 296 | "version": "0.21.5", 297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 298 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 299 | "cpu": [ 300 | "s390x" 301 | ], 302 | "dev": true, 303 | "license": "MIT", 304 | "optional": true, 305 | "os": [ 306 | "linux" 307 | ], 308 | "engines": { 309 | "node": ">=12" 310 | } 311 | }, 312 | "node_modules/@esbuild/linux-x64": { 313 | "version": "0.21.5", 314 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 315 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 316 | "cpu": [ 317 | "x64" 318 | ], 319 | "dev": true, 320 | "license": "MIT", 321 | "optional": true, 322 | "os": [ 323 | "linux" 324 | ], 325 | "engines": { 326 | "node": ">=12" 327 | } 328 | }, 329 | "node_modules/@esbuild/netbsd-x64": { 330 | "version": "0.21.5", 331 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 332 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 333 | "cpu": [ 334 | "x64" 335 | ], 336 | "dev": true, 337 | "license": "MIT", 338 | "optional": true, 339 | "os": [ 340 | "netbsd" 341 | ], 342 | "engines": { 343 | "node": ">=12" 344 | } 345 | }, 346 | "node_modules/@esbuild/openbsd-x64": { 347 | "version": "0.21.5", 348 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 349 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 350 | "cpu": [ 351 | "x64" 352 | ], 353 | "dev": true, 354 | "license": "MIT", 355 | "optional": true, 356 | "os": [ 357 | "openbsd" 358 | ], 359 | "engines": { 360 | "node": ">=12" 361 | } 362 | }, 363 | "node_modules/@esbuild/sunos-x64": { 364 | "version": "0.21.5", 365 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 366 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 367 | "cpu": [ 368 | "x64" 369 | ], 370 | "dev": true, 371 | "license": "MIT", 372 | "optional": true, 373 | "os": [ 374 | "sunos" 375 | ], 376 | "engines": { 377 | "node": ">=12" 378 | } 379 | }, 380 | "node_modules/@esbuild/win32-arm64": { 381 | "version": "0.21.5", 382 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 383 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 384 | "cpu": [ 385 | "arm64" 386 | ], 387 | "dev": true, 388 | "license": "MIT", 389 | "optional": true, 390 | "os": [ 391 | "win32" 392 | ], 393 | "engines": { 394 | "node": ">=12" 395 | } 396 | }, 397 | "node_modules/@esbuild/win32-ia32": { 398 | "version": "0.21.5", 399 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 400 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 401 | "cpu": [ 402 | "ia32" 403 | ], 404 | "dev": true, 405 | "license": "MIT", 406 | "optional": true, 407 | "os": [ 408 | "win32" 409 | ], 410 | "engines": { 411 | "node": ">=12" 412 | } 413 | }, 414 | "node_modules/@esbuild/win32-x64": { 415 | "version": "0.21.5", 416 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 417 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 418 | "cpu": [ 419 | "x64" 420 | ], 421 | "dev": true, 422 | "license": "MIT", 423 | "optional": true, 424 | "os": [ 425 | "win32" 426 | ], 427 | "engines": { 428 | "node": ">=12" 429 | } 430 | }, 431 | "node_modules/@jridgewell/gen-mapping": { 432 | "version": "0.3.5", 433 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 434 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 435 | "dev": true, 436 | "license": "MIT", 437 | "dependencies": { 438 | "@jridgewell/set-array": "^1.2.1", 439 | "@jridgewell/sourcemap-codec": "^1.4.10", 440 | "@jridgewell/trace-mapping": "^0.3.24" 441 | }, 442 | "engines": { 443 | "node": ">=6.0.0" 444 | } 445 | }, 446 | "node_modules/@jridgewell/resolve-uri": { 447 | "version": "3.1.2", 448 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 449 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 450 | "dev": true, 451 | "license": "MIT", 452 | "engines": { 453 | "node": ">=6.0.0" 454 | } 455 | }, 456 | "node_modules/@jridgewell/set-array": { 457 | "version": "1.2.1", 458 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 459 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 460 | "dev": true, 461 | "license": "MIT", 462 | "engines": { 463 | "node": ">=6.0.0" 464 | } 465 | }, 466 | "node_modules/@jridgewell/sourcemap-codec": { 467 | "version": "1.5.0", 468 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 469 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 470 | "dev": true, 471 | "license": "MIT" 472 | }, 473 | "node_modules/@jridgewell/trace-mapping": { 474 | "version": "0.3.25", 475 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 476 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 477 | "dev": true, 478 | "license": "MIT", 479 | "dependencies": { 480 | "@jridgewell/resolve-uri": "^3.1.0", 481 | "@jridgewell/sourcemap-codec": "^1.4.14" 482 | } 483 | }, 484 | "node_modules/@polka/url": { 485 | "version": "1.0.0-next.28", 486 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", 487 | "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", 488 | "dev": true, 489 | "license": "MIT" 490 | }, 491 | "node_modules/@rollup/rollup-android-arm-eabi": { 492 | "version": "4.24.3", 493 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", 494 | "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", 495 | "cpu": [ 496 | "arm" 497 | ], 498 | "dev": true, 499 | "license": "MIT", 500 | "optional": true, 501 | "os": [ 502 | "android" 503 | ] 504 | }, 505 | "node_modules/@rollup/rollup-android-arm64": { 506 | "version": "4.24.3", 507 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", 508 | "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", 509 | "cpu": [ 510 | "arm64" 511 | ], 512 | "dev": true, 513 | "license": "MIT", 514 | "optional": true, 515 | "os": [ 516 | "android" 517 | ] 518 | }, 519 | "node_modules/@rollup/rollup-darwin-arm64": { 520 | "version": "4.24.3", 521 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", 522 | "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", 523 | "cpu": [ 524 | "arm64" 525 | ], 526 | "dev": true, 527 | "license": "MIT", 528 | "optional": true, 529 | "os": [ 530 | "darwin" 531 | ] 532 | }, 533 | "node_modules/@rollup/rollup-darwin-x64": { 534 | "version": "4.24.3", 535 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", 536 | "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", 537 | "cpu": [ 538 | "x64" 539 | ], 540 | "dev": true, 541 | "license": "MIT", 542 | "optional": true, 543 | "os": [ 544 | "darwin" 545 | ] 546 | }, 547 | "node_modules/@rollup/rollup-freebsd-arm64": { 548 | "version": "4.24.3", 549 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", 550 | "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", 551 | "cpu": [ 552 | "arm64" 553 | ], 554 | "dev": true, 555 | "license": "MIT", 556 | "optional": true, 557 | "os": [ 558 | "freebsd" 559 | ] 560 | }, 561 | "node_modules/@rollup/rollup-freebsd-x64": { 562 | "version": "4.24.3", 563 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", 564 | "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", 565 | "cpu": [ 566 | "x64" 567 | ], 568 | "dev": true, 569 | "license": "MIT", 570 | "optional": true, 571 | "os": [ 572 | "freebsd" 573 | ] 574 | }, 575 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 576 | "version": "4.24.3", 577 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", 578 | "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", 579 | "cpu": [ 580 | "arm" 581 | ], 582 | "dev": true, 583 | "license": "MIT", 584 | "optional": true, 585 | "os": [ 586 | "linux" 587 | ] 588 | }, 589 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 590 | "version": "4.24.3", 591 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", 592 | "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", 593 | "cpu": [ 594 | "arm" 595 | ], 596 | "dev": true, 597 | "license": "MIT", 598 | "optional": true, 599 | "os": [ 600 | "linux" 601 | ] 602 | }, 603 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 604 | "version": "4.24.3", 605 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", 606 | "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", 607 | "cpu": [ 608 | "arm64" 609 | ], 610 | "dev": true, 611 | "license": "MIT", 612 | "optional": true, 613 | "os": [ 614 | "linux" 615 | ] 616 | }, 617 | "node_modules/@rollup/rollup-linux-arm64-musl": { 618 | "version": "4.24.3", 619 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", 620 | "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", 621 | "cpu": [ 622 | "arm64" 623 | ], 624 | "dev": true, 625 | "license": "MIT", 626 | "optional": true, 627 | "os": [ 628 | "linux" 629 | ] 630 | }, 631 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 632 | "version": "4.24.3", 633 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", 634 | "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", 635 | "cpu": [ 636 | "ppc64" 637 | ], 638 | "dev": true, 639 | "license": "MIT", 640 | "optional": true, 641 | "os": [ 642 | "linux" 643 | ] 644 | }, 645 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 646 | "version": "4.24.3", 647 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", 648 | "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", 649 | "cpu": [ 650 | "riscv64" 651 | ], 652 | "dev": true, 653 | "license": "MIT", 654 | "optional": true, 655 | "os": [ 656 | "linux" 657 | ] 658 | }, 659 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 660 | "version": "4.24.3", 661 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", 662 | "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", 663 | "cpu": [ 664 | "s390x" 665 | ], 666 | "dev": true, 667 | "license": "MIT", 668 | "optional": true, 669 | "os": [ 670 | "linux" 671 | ] 672 | }, 673 | "node_modules/@rollup/rollup-linux-x64-gnu": { 674 | "version": "4.24.3", 675 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", 676 | "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", 677 | "cpu": [ 678 | "x64" 679 | ], 680 | "dev": true, 681 | "license": "MIT", 682 | "optional": true, 683 | "os": [ 684 | "linux" 685 | ] 686 | }, 687 | "node_modules/@rollup/rollup-linux-x64-musl": { 688 | "version": "4.24.3", 689 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", 690 | "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", 691 | "cpu": [ 692 | "x64" 693 | ], 694 | "dev": true, 695 | "license": "MIT", 696 | "optional": true, 697 | "os": [ 698 | "linux" 699 | ] 700 | }, 701 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 702 | "version": "4.24.3", 703 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", 704 | "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", 705 | "cpu": [ 706 | "arm64" 707 | ], 708 | "dev": true, 709 | "license": "MIT", 710 | "optional": true, 711 | "os": [ 712 | "win32" 713 | ] 714 | }, 715 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 716 | "version": "4.24.3", 717 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", 718 | "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", 719 | "cpu": [ 720 | "ia32" 721 | ], 722 | "dev": true, 723 | "license": "MIT", 724 | "optional": true, 725 | "os": [ 726 | "win32" 727 | ] 728 | }, 729 | "node_modules/@rollup/rollup-win32-x64-msvc": { 730 | "version": "4.24.3", 731 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", 732 | "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", 733 | "cpu": [ 734 | "x64" 735 | ], 736 | "dev": true, 737 | "license": "MIT", 738 | "optional": true, 739 | "os": [ 740 | "win32" 741 | ] 742 | }, 743 | "node_modules/@sveltejs/adapter-auto": { 744 | "version": "3.3.1", 745 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz", 746 | "integrity": "sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==", 747 | "dev": true, 748 | "license": "MIT", 749 | "dependencies": { 750 | "import-meta-resolve": "^4.1.0" 751 | }, 752 | "peerDependencies": { 753 | "@sveltejs/kit": "^2.0.0" 754 | } 755 | }, 756 | "node_modules/@sveltejs/kit": { 757 | "version": "2.7.3", 758 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.7.3.tgz", 759 | "integrity": "sha512-Vx7nq5MJ86I8qXYsVidC5PX6xm+uxt8DydvOdmJoyOK7LvGP18OFEG359yY+aa51t6pENvqZAMqAREQQx1OI2Q==", 760 | "dev": true, 761 | "hasInstallScript": true, 762 | "license": "MIT", 763 | "dependencies": { 764 | "@types/cookie": "^0.6.0", 765 | "cookie": "^0.6.0", 766 | "devalue": "^5.1.0", 767 | "esm-env": "^1.0.0", 768 | "import-meta-resolve": "^4.1.0", 769 | "kleur": "^4.1.5", 770 | "magic-string": "^0.30.5", 771 | "mrmime": "^2.0.0", 772 | "sade": "^1.8.1", 773 | "set-cookie-parser": "^2.6.0", 774 | "sirv": "^3.0.0", 775 | "tiny-glob": "^0.2.9" 776 | }, 777 | "bin": { 778 | "svelte-kit": "svelte-kit.js" 779 | }, 780 | "engines": { 781 | "node": ">=18.13" 782 | }, 783 | "peerDependencies": { 784 | "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1", 785 | "svelte": "^4.0.0 || ^5.0.0-next.0", 786 | "vite": "^5.0.3" 787 | } 788 | }, 789 | "node_modules/@sveltejs/package": { 790 | "version": "2.3.7", 791 | "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.3.7.tgz", 792 | "integrity": "sha512-LYgUkde5GUYqOpXbcoCGUpEH4Ctl3Wj4u4CVZBl56dEeLW5fGHE037ZL1qlK0Ky+QD5uUfwONSeGwIOIighFMQ==", 793 | "dev": true, 794 | "license": "MIT", 795 | "dependencies": { 796 | "chokidar": "^4.0.0", 797 | "kleur": "^4.1.5", 798 | "sade": "^1.8.1", 799 | "semver": "^7.5.4", 800 | "svelte2tsx": "~0.7.16" 801 | }, 802 | "bin": { 803 | "svelte-package": "svelte-package.js" 804 | }, 805 | "engines": { 806 | "node": "^16.14 || >=18" 807 | }, 808 | "peerDependencies": { 809 | "svelte": "^3.44.0 || ^4.0.0 || ^5.0.0-next.1" 810 | } 811 | }, 812 | "node_modules/@sveltejs/vite-plugin-svelte": { 813 | "version": "4.0.0", 814 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.0.tgz", 815 | "integrity": "sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==", 816 | "dev": true, 817 | "license": "MIT", 818 | "dependencies": { 819 | "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", 820 | "debug": "^4.3.7", 821 | "deepmerge": "^4.3.1", 822 | "kleur": "^4.1.5", 823 | "magic-string": "^0.30.12", 824 | "vitefu": "^1.0.3" 825 | }, 826 | "engines": { 827 | "node": "^18.0.0 || ^20.0.0 || >=22" 828 | }, 829 | "peerDependencies": { 830 | "svelte": "^5.0.0-next.96 || ^5.0.0", 831 | "vite": "^5.0.0" 832 | } 833 | }, 834 | "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 835 | "version": "3.0.1", 836 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", 837 | "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", 838 | "dev": true, 839 | "license": "MIT", 840 | "dependencies": { 841 | "debug": "^4.3.7" 842 | }, 843 | "engines": { 844 | "node": "^18.0.0 || ^20.0.0 || >=22" 845 | }, 846 | "peerDependencies": { 847 | "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", 848 | "svelte": "^5.0.0-next.96 || ^5.0.0", 849 | "vite": "^5.0.0" 850 | } 851 | }, 852 | "node_modules/@types/cookie": { 853 | "version": "0.6.0", 854 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 855 | "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", 856 | "dev": true, 857 | "license": "MIT" 858 | }, 859 | "node_modules/@types/estree": { 860 | "version": "1.0.6", 861 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 862 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 863 | "dev": true, 864 | "license": "MIT" 865 | }, 866 | "node_modules/acorn": { 867 | "version": "8.14.0", 868 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 869 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 870 | "dev": true, 871 | "license": "MIT", 872 | "bin": { 873 | "acorn": "bin/acorn" 874 | }, 875 | "engines": { 876 | "node": ">=0.4.0" 877 | } 878 | }, 879 | "node_modules/acorn-typescript": { 880 | "version": "1.4.13", 881 | "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", 882 | "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", 883 | "dev": true, 884 | "license": "MIT", 885 | "peerDependencies": { 886 | "acorn": ">=8.9.0" 887 | } 888 | }, 889 | "node_modules/aria-query": { 890 | "version": "5.3.2", 891 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 892 | "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 893 | "dev": true, 894 | "license": "Apache-2.0", 895 | "engines": { 896 | "node": ">= 0.4" 897 | } 898 | }, 899 | "node_modules/axobject-query": { 900 | "version": "4.1.0", 901 | "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 902 | "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 903 | "dev": true, 904 | "license": "Apache-2.0", 905 | "engines": { 906 | "node": ">= 0.4" 907 | } 908 | }, 909 | "node_modules/balanced-match": { 910 | "version": "1.0.2", 911 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 912 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 913 | "dev": true, 914 | "license": "MIT" 915 | }, 916 | "node_modules/brace-expansion": { 917 | "version": "2.0.1", 918 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 919 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 920 | "dev": true, 921 | "license": "MIT", 922 | "dependencies": { 923 | "balanced-match": "^1.0.0" 924 | } 925 | }, 926 | "node_modules/chokidar": { 927 | "version": "4.0.1", 928 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", 929 | "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", 930 | "dev": true, 931 | "license": "MIT", 932 | "dependencies": { 933 | "readdirp": "^4.0.1" 934 | }, 935 | "engines": { 936 | "node": ">= 14.16.0" 937 | }, 938 | "funding": { 939 | "url": "https://paulmillr.com/funding/" 940 | } 941 | }, 942 | "node_modules/cookie": { 943 | "version": "0.6.0", 944 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 945 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 946 | "dev": true, 947 | "license": "MIT", 948 | "engines": { 949 | "node": ">= 0.6" 950 | } 951 | }, 952 | "node_modules/debug": { 953 | "version": "4.3.7", 954 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 955 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 956 | "dev": true, 957 | "license": "MIT", 958 | "dependencies": { 959 | "ms": "^2.1.3" 960 | }, 961 | "engines": { 962 | "node": ">=6.0" 963 | }, 964 | "peerDependenciesMeta": { 965 | "supports-color": { 966 | "optional": true 967 | } 968 | } 969 | }, 970 | "node_modules/dedent-js": { 971 | "version": "1.0.1", 972 | "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", 973 | "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", 974 | "dev": true, 975 | "license": "MIT" 976 | }, 977 | "node_modules/deepmerge": { 978 | "version": "4.3.1", 979 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 980 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 981 | "dev": true, 982 | "license": "MIT", 983 | "engines": { 984 | "node": ">=0.10.0" 985 | } 986 | }, 987 | "node_modules/devalue": { 988 | "version": "5.1.1", 989 | "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", 990 | "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", 991 | "dev": true, 992 | "license": "MIT" 993 | }, 994 | "node_modules/esbuild": { 995 | "version": "0.21.5", 996 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 997 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 998 | "dev": true, 999 | "hasInstallScript": true, 1000 | "license": "MIT", 1001 | "bin": { 1002 | "esbuild": "bin/esbuild" 1003 | }, 1004 | "engines": { 1005 | "node": ">=12" 1006 | }, 1007 | "optionalDependencies": { 1008 | "@esbuild/aix-ppc64": "0.21.5", 1009 | "@esbuild/android-arm": "0.21.5", 1010 | "@esbuild/android-arm64": "0.21.5", 1011 | "@esbuild/android-x64": "0.21.5", 1012 | "@esbuild/darwin-arm64": "0.21.5", 1013 | "@esbuild/darwin-x64": "0.21.5", 1014 | "@esbuild/freebsd-arm64": "0.21.5", 1015 | "@esbuild/freebsd-x64": "0.21.5", 1016 | "@esbuild/linux-arm": "0.21.5", 1017 | "@esbuild/linux-arm64": "0.21.5", 1018 | "@esbuild/linux-ia32": "0.21.5", 1019 | "@esbuild/linux-loong64": "0.21.5", 1020 | "@esbuild/linux-mips64el": "0.21.5", 1021 | "@esbuild/linux-ppc64": "0.21.5", 1022 | "@esbuild/linux-riscv64": "0.21.5", 1023 | "@esbuild/linux-s390x": "0.21.5", 1024 | "@esbuild/linux-x64": "0.21.5", 1025 | "@esbuild/netbsd-x64": "0.21.5", 1026 | "@esbuild/openbsd-x64": "0.21.5", 1027 | "@esbuild/sunos-x64": "0.21.5", 1028 | "@esbuild/win32-arm64": "0.21.5", 1029 | "@esbuild/win32-ia32": "0.21.5", 1030 | "@esbuild/win32-x64": "0.21.5" 1031 | } 1032 | }, 1033 | "node_modules/esm-env": { 1034 | "version": "1.1.4", 1035 | "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.1.4.tgz", 1036 | "integrity": "sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==", 1037 | "dev": true, 1038 | "license": "MIT" 1039 | }, 1040 | "node_modules/esrap": { 1041 | "version": "1.2.2", 1042 | "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", 1043 | "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", 1044 | "dev": true, 1045 | "license": "MIT", 1046 | "dependencies": { 1047 | "@jridgewell/sourcemap-codec": "^1.4.15", 1048 | "@types/estree": "^1.0.1" 1049 | } 1050 | }, 1051 | "node_modules/fdir": { 1052 | "version": "6.4.2", 1053 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", 1054 | "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", 1055 | "dev": true, 1056 | "license": "MIT", 1057 | "peerDependencies": { 1058 | "picomatch": "^3 || ^4" 1059 | }, 1060 | "peerDependenciesMeta": { 1061 | "picomatch": { 1062 | "optional": true 1063 | } 1064 | } 1065 | }, 1066 | "node_modules/fs.realpath": { 1067 | "version": "1.0.0", 1068 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1069 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1070 | "dev": true, 1071 | "license": "ISC" 1072 | }, 1073 | "node_modules/fsevents": { 1074 | "version": "2.3.3", 1075 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1076 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1077 | "dev": true, 1078 | "hasInstallScript": true, 1079 | "license": "MIT", 1080 | "optional": true, 1081 | "os": [ 1082 | "darwin" 1083 | ], 1084 | "engines": { 1085 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1086 | } 1087 | }, 1088 | "node_modules/glob": { 1089 | "version": "8.1.0", 1090 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1091 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1092 | "deprecated": "Glob versions prior to v9 are no longer supported", 1093 | "dev": true, 1094 | "license": "ISC", 1095 | "dependencies": { 1096 | "fs.realpath": "^1.0.0", 1097 | "inflight": "^1.0.4", 1098 | "inherits": "2", 1099 | "minimatch": "^5.0.1", 1100 | "once": "^1.3.0" 1101 | }, 1102 | "engines": { 1103 | "node": ">=12" 1104 | }, 1105 | "funding": { 1106 | "url": "https://github.com/sponsors/isaacs" 1107 | } 1108 | }, 1109 | "node_modules/globalyzer": { 1110 | "version": "0.1.0", 1111 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 1112 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 1113 | "dev": true, 1114 | "license": "MIT" 1115 | }, 1116 | "node_modules/globrex": { 1117 | "version": "0.1.2", 1118 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1119 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1120 | "dev": true, 1121 | "license": "MIT" 1122 | }, 1123 | "node_modules/ignore-walk": { 1124 | "version": "5.0.1", 1125 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", 1126 | "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", 1127 | "dev": true, 1128 | "license": "ISC", 1129 | "dependencies": { 1130 | "minimatch": "^5.0.1" 1131 | }, 1132 | "engines": { 1133 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1134 | } 1135 | }, 1136 | "node_modules/import-meta-resolve": { 1137 | "version": "4.1.0", 1138 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 1139 | "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", 1140 | "dev": true, 1141 | "license": "MIT", 1142 | "funding": { 1143 | "type": "github", 1144 | "url": "https://github.com/sponsors/wooorm" 1145 | } 1146 | }, 1147 | "node_modules/inflight": { 1148 | "version": "1.0.6", 1149 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1150 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1151 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 1152 | "dev": true, 1153 | "license": "ISC", 1154 | "dependencies": { 1155 | "once": "^1.3.0", 1156 | "wrappy": "1" 1157 | } 1158 | }, 1159 | "node_modules/inherits": { 1160 | "version": "2.0.4", 1161 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1162 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1163 | "dev": true, 1164 | "license": "ISC" 1165 | }, 1166 | "node_modules/is-reference": { 1167 | "version": "3.0.2", 1168 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", 1169 | "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", 1170 | "dev": true, 1171 | "license": "MIT", 1172 | "dependencies": { 1173 | "@types/estree": "*" 1174 | } 1175 | }, 1176 | "node_modules/kleur": { 1177 | "version": "4.1.5", 1178 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1179 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1180 | "dev": true, 1181 | "license": "MIT", 1182 | "engines": { 1183 | "node": ">=6" 1184 | } 1185 | }, 1186 | "node_modules/locate-character": { 1187 | "version": "3.0.0", 1188 | "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1189 | "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1190 | "dev": true, 1191 | "license": "MIT" 1192 | }, 1193 | "node_modules/lower-case": { 1194 | "version": "2.0.2", 1195 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 1196 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 1197 | "dev": true, 1198 | "license": "MIT", 1199 | "dependencies": { 1200 | "tslib": "^2.0.3" 1201 | } 1202 | }, 1203 | "node_modules/magic-string": { 1204 | "version": "0.30.12", 1205 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", 1206 | "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", 1207 | "dev": true, 1208 | "license": "MIT", 1209 | "dependencies": { 1210 | "@jridgewell/sourcemap-codec": "^1.5.0" 1211 | } 1212 | }, 1213 | "node_modules/minimatch": { 1214 | "version": "5.1.6", 1215 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1216 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1217 | "dev": true, 1218 | "license": "ISC", 1219 | "dependencies": { 1220 | "brace-expansion": "^2.0.1" 1221 | }, 1222 | "engines": { 1223 | "node": ">=10" 1224 | } 1225 | }, 1226 | "node_modules/mri": { 1227 | "version": "1.2.0", 1228 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1229 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1230 | "dev": true, 1231 | "license": "MIT", 1232 | "engines": { 1233 | "node": ">=4" 1234 | } 1235 | }, 1236 | "node_modules/mrmime": { 1237 | "version": "2.0.0", 1238 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", 1239 | "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", 1240 | "dev": true, 1241 | "license": "MIT", 1242 | "engines": { 1243 | "node": ">=10" 1244 | } 1245 | }, 1246 | "node_modules/ms": { 1247 | "version": "2.1.3", 1248 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1249 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1250 | "dev": true, 1251 | "license": "MIT" 1252 | }, 1253 | "node_modules/nanoid": { 1254 | "version": "3.3.7", 1255 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1256 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1257 | "dev": true, 1258 | "funding": [ 1259 | { 1260 | "type": "github", 1261 | "url": "https://github.com/sponsors/ai" 1262 | } 1263 | ], 1264 | "license": "MIT", 1265 | "bin": { 1266 | "nanoid": "bin/nanoid.cjs" 1267 | }, 1268 | "engines": { 1269 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1270 | } 1271 | }, 1272 | "node_modules/no-case": { 1273 | "version": "3.0.4", 1274 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 1275 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 1276 | "dev": true, 1277 | "license": "MIT", 1278 | "dependencies": { 1279 | "lower-case": "^2.0.2", 1280 | "tslib": "^2.0.3" 1281 | } 1282 | }, 1283 | "node_modules/npm-bundled": { 1284 | "version": "2.0.1", 1285 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", 1286 | "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", 1287 | "dev": true, 1288 | "license": "ISC", 1289 | "dependencies": { 1290 | "npm-normalize-package-bin": "^2.0.0" 1291 | }, 1292 | "engines": { 1293 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1294 | } 1295 | }, 1296 | "node_modules/npm-normalize-package-bin": { 1297 | "version": "2.0.0", 1298 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", 1299 | "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", 1300 | "dev": true, 1301 | "license": "ISC", 1302 | "engines": { 1303 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1304 | } 1305 | }, 1306 | "node_modules/npm-packlist": { 1307 | "version": "5.1.3", 1308 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", 1309 | "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", 1310 | "dev": true, 1311 | "license": "ISC", 1312 | "dependencies": { 1313 | "glob": "^8.0.1", 1314 | "ignore-walk": "^5.0.1", 1315 | "npm-bundled": "^2.0.0", 1316 | "npm-normalize-package-bin": "^2.0.0" 1317 | }, 1318 | "bin": { 1319 | "npm-packlist": "bin/index.js" 1320 | }, 1321 | "engines": { 1322 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1323 | } 1324 | }, 1325 | "node_modules/once": { 1326 | "version": "1.4.0", 1327 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1328 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1329 | "dev": true, 1330 | "license": "ISC", 1331 | "dependencies": { 1332 | "wrappy": "1" 1333 | } 1334 | }, 1335 | "node_modules/pascal-case": { 1336 | "version": "3.1.2", 1337 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 1338 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 1339 | "dev": true, 1340 | "license": "MIT", 1341 | "dependencies": { 1342 | "no-case": "^3.0.4", 1343 | "tslib": "^2.0.3" 1344 | } 1345 | }, 1346 | "node_modules/picocolors": { 1347 | "version": "1.1.1", 1348 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1349 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1350 | "dev": true, 1351 | "license": "ISC" 1352 | }, 1353 | "node_modules/postcss": { 1354 | "version": "8.4.47", 1355 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", 1356 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", 1357 | "dev": true, 1358 | "funding": [ 1359 | { 1360 | "type": "opencollective", 1361 | "url": "https://opencollective.com/postcss/" 1362 | }, 1363 | { 1364 | "type": "tidelift", 1365 | "url": "https://tidelift.com/funding/github/npm/postcss" 1366 | }, 1367 | { 1368 | "type": "github", 1369 | "url": "https://github.com/sponsors/ai" 1370 | } 1371 | ], 1372 | "license": "MIT", 1373 | "dependencies": { 1374 | "nanoid": "^3.3.7", 1375 | "picocolors": "^1.1.0", 1376 | "source-map-js": "^1.2.1" 1377 | }, 1378 | "engines": { 1379 | "node": "^10 || ^12 || >=14" 1380 | } 1381 | }, 1382 | "node_modules/publint": { 1383 | "version": "0.2.12", 1384 | "resolved": "https://registry.npmjs.org/publint/-/publint-0.2.12.tgz", 1385 | "integrity": "sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==", 1386 | "dev": true, 1387 | "license": "MIT", 1388 | "dependencies": { 1389 | "npm-packlist": "^5.1.3", 1390 | "picocolors": "^1.1.1", 1391 | "sade": "^1.8.1" 1392 | }, 1393 | "bin": { 1394 | "publint": "lib/cli.js" 1395 | }, 1396 | "engines": { 1397 | "node": ">=16" 1398 | }, 1399 | "funding": { 1400 | "url": "https://bjornlu.com/sponsor" 1401 | } 1402 | }, 1403 | "node_modules/readdirp": { 1404 | "version": "4.0.2", 1405 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", 1406 | "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", 1407 | "dev": true, 1408 | "license": "MIT", 1409 | "engines": { 1410 | "node": ">= 14.16.0" 1411 | }, 1412 | "funding": { 1413 | "type": "individual", 1414 | "url": "https://paulmillr.com/funding/" 1415 | } 1416 | }, 1417 | "node_modules/rollup": { 1418 | "version": "4.24.3", 1419 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", 1420 | "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", 1421 | "dev": true, 1422 | "license": "MIT", 1423 | "dependencies": { 1424 | "@types/estree": "1.0.6" 1425 | }, 1426 | "bin": { 1427 | "rollup": "dist/bin/rollup" 1428 | }, 1429 | "engines": { 1430 | "node": ">=18.0.0", 1431 | "npm": ">=8.0.0" 1432 | }, 1433 | "optionalDependencies": { 1434 | "@rollup/rollup-android-arm-eabi": "4.24.3", 1435 | "@rollup/rollup-android-arm64": "4.24.3", 1436 | "@rollup/rollup-darwin-arm64": "4.24.3", 1437 | "@rollup/rollup-darwin-x64": "4.24.3", 1438 | "@rollup/rollup-freebsd-arm64": "4.24.3", 1439 | "@rollup/rollup-freebsd-x64": "4.24.3", 1440 | "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", 1441 | "@rollup/rollup-linux-arm-musleabihf": "4.24.3", 1442 | "@rollup/rollup-linux-arm64-gnu": "4.24.3", 1443 | "@rollup/rollup-linux-arm64-musl": "4.24.3", 1444 | "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", 1445 | "@rollup/rollup-linux-riscv64-gnu": "4.24.3", 1446 | "@rollup/rollup-linux-s390x-gnu": "4.24.3", 1447 | "@rollup/rollup-linux-x64-gnu": "4.24.3", 1448 | "@rollup/rollup-linux-x64-musl": "4.24.3", 1449 | "@rollup/rollup-win32-arm64-msvc": "4.24.3", 1450 | "@rollup/rollup-win32-ia32-msvc": "4.24.3", 1451 | "@rollup/rollup-win32-x64-msvc": "4.24.3", 1452 | "fsevents": "~2.3.2" 1453 | } 1454 | }, 1455 | "node_modules/sade": { 1456 | "version": "1.8.1", 1457 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1458 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1459 | "dev": true, 1460 | "license": "MIT", 1461 | "dependencies": { 1462 | "mri": "^1.1.0" 1463 | }, 1464 | "engines": { 1465 | "node": ">=6" 1466 | } 1467 | }, 1468 | "node_modules/semver": { 1469 | "version": "7.6.3", 1470 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 1471 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 1472 | "dev": true, 1473 | "license": "ISC", 1474 | "bin": { 1475 | "semver": "bin/semver.js" 1476 | }, 1477 | "engines": { 1478 | "node": ">=10" 1479 | } 1480 | }, 1481 | "node_modules/set-cookie-parser": { 1482 | "version": "2.7.1", 1483 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", 1484 | "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", 1485 | "dev": true, 1486 | "license": "MIT" 1487 | }, 1488 | "node_modules/sirv": { 1489 | "version": "3.0.0", 1490 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", 1491 | "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", 1492 | "dev": true, 1493 | "license": "MIT", 1494 | "dependencies": { 1495 | "@polka/url": "^1.0.0-next.24", 1496 | "mrmime": "^2.0.0", 1497 | "totalist": "^3.0.0" 1498 | }, 1499 | "engines": { 1500 | "node": ">=18" 1501 | } 1502 | }, 1503 | "node_modules/source-map-js": { 1504 | "version": "1.2.1", 1505 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1506 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1507 | "dev": true, 1508 | "license": "BSD-3-Clause", 1509 | "engines": { 1510 | "node": ">=0.10.0" 1511 | } 1512 | }, 1513 | "node_modules/svelte": { 1514 | "version": "5.1.6", 1515 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.1.6.tgz", 1516 | "integrity": "sha512-bYS/DpkqXk0j5UZgiNXrEjZYPRZ4Ncd87w4KUSbcZGyojA0+i/Ls9OGUjETHmdLe8RcQ0G8SX/T0PypPpAA/ew==", 1517 | "dev": true, 1518 | "license": "MIT", 1519 | "dependencies": { 1520 | "@ampproject/remapping": "^2.3.0", 1521 | "@jridgewell/sourcemap-codec": "^1.5.0", 1522 | "@types/estree": "^1.0.5", 1523 | "acorn": "^8.12.1", 1524 | "acorn-typescript": "^1.4.13", 1525 | "aria-query": "^5.3.1", 1526 | "axobject-query": "^4.1.0", 1527 | "esm-env": "^1.0.0", 1528 | "esrap": "^1.2.2", 1529 | "is-reference": "^3.0.2", 1530 | "locate-character": "^3.0.0", 1531 | "magic-string": "^0.30.11", 1532 | "zimmerframe": "^1.1.2" 1533 | }, 1534 | "engines": { 1535 | "node": ">=18" 1536 | } 1537 | }, 1538 | "node_modules/svelte-check": { 1539 | "version": "4.0.5", 1540 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.0.5.tgz", 1541 | "integrity": "sha512-icBTBZ3ibBaywbXUat3cK6hB5Du+Kq9Z8CRuyLmm64XIe2/r+lQcbuBx/IQgsbrC+kT2jQ0weVpZSSRIPwB6jQ==", 1542 | "dev": true, 1543 | "license": "MIT", 1544 | "dependencies": { 1545 | "@jridgewell/trace-mapping": "^0.3.25", 1546 | "chokidar": "^4.0.1", 1547 | "fdir": "^6.2.0", 1548 | "picocolors": "^1.0.0", 1549 | "sade": "^1.7.4" 1550 | }, 1551 | "bin": { 1552 | "svelte-check": "bin/svelte-check" 1553 | }, 1554 | "engines": { 1555 | "node": ">= 18.0.0" 1556 | }, 1557 | "peerDependencies": { 1558 | "svelte": "^4.0.0 || ^5.0.0-next.0", 1559 | "typescript": ">=5.0.0" 1560 | } 1561 | }, 1562 | "node_modules/svelte2tsx": { 1563 | "version": "0.7.22", 1564 | "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.22.tgz", 1565 | "integrity": "sha512-hf55ujq17ufVpDQlJzaQfRr9EjlLIwGmFlpKq4uYrQAQFw/99q1OcVYyBT6568iJySgBUY9PdccURrORmfetmQ==", 1566 | "dev": true, 1567 | "license": "MIT", 1568 | "dependencies": { 1569 | "dedent-js": "^1.0.1", 1570 | "pascal-case": "^3.1.1" 1571 | }, 1572 | "peerDependencies": { 1573 | "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", 1574 | "typescript": "^4.9.4 || ^5.0.0" 1575 | } 1576 | }, 1577 | "node_modules/tiny-glob": { 1578 | "version": "0.2.9", 1579 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 1580 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 1581 | "dev": true, 1582 | "license": "MIT", 1583 | "dependencies": { 1584 | "globalyzer": "0.1.0", 1585 | "globrex": "^0.1.2" 1586 | } 1587 | }, 1588 | "node_modules/totalist": { 1589 | "version": "3.0.1", 1590 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 1591 | "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 1592 | "dev": true, 1593 | "license": "MIT", 1594 | "engines": { 1595 | "node": ">=6" 1596 | } 1597 | }, 1598 | "node_modules/tslib": { 1599 | "version": "2.8.0", 1600 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", 1601 | "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", 1602 | "dev": true, 1603 | "license": "0BSD" 1604 | }, 1605 | "node_modules/typescript": { 1606 | "version": "5.6.3", 1607 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 1608 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 1609 | "dev": true, 1610 | "license": "Apache-2.0", 1611 | "bin": { 1612 | "tsc": "bin/tsc", 1613 | "tsserver": "bin/tsserver" 1614 | }, 1615 | "engines": { 1616 | "node": ">=14.17" 1617 | } 1618 | }, 1619 | "node_modules/vite": { 1620 | "version": "5.4.10", 1621 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", 1622 | "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", 1623 | "dev": true, 1624 | "license": "MIT", 1625 | "dependencies": { 1626 | "esbuild": "^0.21.3", 1627 | "postcss": "^8.4.43", 1628 | "rollup": "^4.20.0" 1629 | }, 1630 | "bin": { 1631 | "vite": "bin/vite.js" 1632 | }, 1633 | "engines": { 1634 | "node": "^18.0.0 || >=20.0.0" 1635 | }, 1636 | "funding": { 1637 | "url": "https://github.com/vitejs/vite?sponsor=1" 1638 | }, 1639 | "optionalDependencies": { 1640 | "fsevents": "~2.3.3" 1641 | }, 1642 | "peerDependencies": { 1643 | "@types/node": "^18.0.0 || >=20.0.0", 1644 | "less": "*", 1645 | "lightningcss": "^1.21.0", 1646 | "sass": "*", 1647 | "sass-embedded": "*", 1648 | "stylus": "*", 1649 | "sugarss": "*", 1650 | "terser": "^5.4.0" 1651 | }, 1652 | "peerDependenciesMeta": { 1653 | "@types/node": { 1654 | "optional": true 1655 | }, 1656 | "less": { 1657 | "optional": true 1658 | }, 1659 | "lightningcss": { 1660 | "optional": true 1661 | }, 1662 | "sass": { 1663 | "optional": true 1664 | }, 1665 | "sass-embedded": { 1666 | "optional": true 1667 | }, 1668 | "stylus": { 1669 | "optional": true 1670 | }, 1671 | "sugarss": { 1672 | "optional": true 1673 | }, 1674 | "terser": { 1675 | "optional": true 1676 | } 1677 | } 1678 | }, 1679 | "node_modules/vitefu": { 1680 | "version": "1.0.3", 1681 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.3.tgz", 1682 | "integrity": "sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==", 1683 | "dev": true, 1684 | "license": "MIT", 1685 | "workspaces": [ 1686 | "tests/deps/*", 1687 | "tests/projects/*" 1688 | ], 1689 | "peerDependencies": { 1690 | "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0" 1691 | }, 1692 | "peerDependenciesMeta": { 1693 | "vite": { 1694 | "optional": true 1695 | } 1696 | } 1697 | }, 1698 | "node_modules/wrappy": { 1699 | "version": "1.0.2", 1700 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1701 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1702 | "dev": true, 1703 | "license": "ISC" 1704 | }, 1705 | "node_modules/zimmerframe": { 1706 | "version": "1.1.2", 1707 | "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", 1708 | "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", 1709 | "dev": true, 1710 | "license": "MIT" 1711 | } 1712 | } 1713 | } 1714 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-breadcrumbs", 3 | "version": "2.0.2", 4 | "scripts": { 5 | "dev": "vite dev", 6 | "build": "vite build && npm run package", 7 | "preview": "vite preview", 8 | "package": "svelte-kit sync && svelte-package && publint", 9 | "prepublishOnly": "npm run package", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && tsc --noEmit", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" 12 | }, 13 | "exports": { 14 | ".": { 15 | "types": "./dist/index.d.ts", 16 | "svelte": "./dist/index.js" 17 | } 18 | }, 19 | "files": [ 20 | "dist", 21 | "!dist/**/*.test.*", 22 | "!dist/**/*.spec.*" 23 | ], 24 | "peerDependencies": { 25 | "svelte": "5.x" 26 | }, 27 | "devDependencies": { 28 | "@sveltejs/adapter-auto": "^3.3.1", 29 | "@sveltejs/kit": "^2.7.3", 30 | "@sveltejs/package": "^2.3.7", 31 | "@sveltejs/vite-plugin-svelte": "^4.0.0", 32 | "publint": "^0.2.12", 33 | "svelte": "^5.1.6", 34 | "svelte-check": "^4.0.5", 35 | "tslib": "^2.8.0", 36 | "typescript": "^5.6.3", 37 | "vite": "^5.4.10" 38 | }, 39 | "svelte": "./dist/index.js", 40 | "types": "./dist/index.d.ts", 41 | "type": "module" 42 | } 43 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/components/Breadcrumbs.svelte: -------------------------------------------------------------------------------- 1 | 134 | 135 | {@render children?.({ crumbs: _crumbs, routeModules })} 136 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Breadcrumbs } from "./components/Breadcrumbs.svelte"; 2 | export type { Crumb } from "./types.js"; 3 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | export type Crumb = { 2 | title?: string; 3 | url?: string; 4 | metadata?: M; 5 | }; 6 | export type ModuleData = { 7 | pageTitle?: string; 8 | getPageTitle?: (data: any) => string; 9 | }; 10 | -------------------------------------------------------------------------------- /src/routes/(group)/groupedRoute/+page.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | Pages within grouped routes can set a page title. 10 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | {#snippet children({ crumbs })} 23 |
24 | Home 25 | {#each crumbs as c} 26 | / 27 | 28 | 29 | 33 | {c.title} 34 | {c.metadata ? `(${c.metadata.extraValue})` : ""} 35 | 36 | 37 | {/each} 38 |
39 | {/snippet} 40 |
41 | 42 | {@render children?.()} 43 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 |

Welcome to the Svelte-Breadcrumbs project

2 | 3 | 12 | -------------------------------------------------------------------------------- /src/routes/blank/skipBlankContent/+page.svelte: -------------------------------------------------------------------------------- 1 | This is a page to exemplify the ability to skip breadcrumbs that would link to a 2 | route with no page. 3 | -------------------------------------------------------------------------------- /src/routes/pageDataExample/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { Crumb } from "$lib"; 2 | import type { PageServerLoad } from "./$types"; 3 | 4 | export const load: PageServerLoad = async ({ locals, url }) => { 5 | const crumbs: Crumb[] = [ 6 | { 7 | title: "Page 1", 8 | url: "/", 9 | }, 10 | { 11 | title: "Page 2", 12 | url: "/", 13 | }, 14 | ]; 15 | return { 16 | crumbs, 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /src/routes/pageDataExample/+page.svelte: -------------------------------------------------------------------------------- 1 | This is an example of passing crumbs down through the page data 2 | -------------------------------------------------------------------------------- /src/routes/pageDataExample/metadataExample/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { Crumb } from "$lib"; 2 | import type { MyCrumbMetadata } from "../../types"; 3 | import type { PageServerLoad } from "./$types"; 4 | 5 | export const load: PageServerLoad = async ({ locals, url }) => { 6 | const crumbs: Crumb[] = [ 7 | { 8 | title: "Page 1", 9 | url: "/", 10 | metadata: { 11 | extraValue: "hello", 12 | }, 13 | }, 14 | { 15 | title: "Page 2", 16 | url: "/", 17 | metadata: { 18 | extraValue: "world", 19 | }, 20 | }, 21 | ]; 22 | return { 23 | crumbs, 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /src/routes/pageDataExample/metadataExample/+page.svelte: -------------------------------------------------------------------------------- 1 | This is an example of passing crumbs down through the page data 2 | -------------------------------------------------------------------------------- /src/routes/todos/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /src/routes/todos/[id]/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { PageServerLoad } from "./$types"; 2 | 3 | export const load: PageServerLoad = async ({ params }) => { 4 | const { id } = params; 5 | if (id == "1") { 6 | return { 7 | todo: { 8 | id: 1, 9 | name: "My First Todo", 10 | description: "Here is a description of my first todo", 11 | }, 12 | }; 13 | } 14 | return { 15 | todo: { 16 | id: 2, 17 | name: "My Second Todo", 18 | description: "Here is a description of my second todo", 19 | }, 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /src/routes/todos/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 |

{todo.name}

20 |

id: {todo.id}

21 |

description: {todo.description}

22 | 23 | Tasks 24 | -------------------------------------------------------------------------------- /src/routes/todos/[id]/tasks/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { PageServerLoad } from "./$types"; 2 | 3 | export const load: PageServerLoad = async ({ params }) => { 4 | const { id } = params; 5 | if (id == "1") { 6 | return { 7 | todo: { 8 | id: 1, 9 | name: "My First Todo", 10 | description: "Here is a description of my first todo", 11 | }, 12 | }; 13 | } else if (id == "2") { 14 | return { 15 | todo: { 16 | id: 2, 17 | name: "My Second Todo", 18 | description: "Here is a description of my second todo", 19 | }, 20 | }; 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /src/routes/todos/[id]/tasks/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |

Tasks

7 | Here would be some tasks or something 8 | -------------------------------------------------------------------------------- /src/routes/types.ts: -------------------------------------------------------------------------------- 1 | export type MyCrumbMetadata = { 2 | extraValue: string; 3 | }; 4 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diericx/svelte-breadcrumbs/87a4eb4747145ff87071e89ffee3a04db0faecc5/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from "@sveltejs/adapter-auto"; 2 | import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter(), 15 | }, 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "bundler" 13 | } 14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 15 | // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files 16 | // 17 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 | // from the referenced tsconfig.json - TypeScript does not merge them in 19 | } 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | --------------------------------------------------------------------------------