A website inspired by Last.fm that will keep track of your listening statistics
lastfm music statistics
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

remove web folder, keep everything in client folder

oscar345 2465f309 dcd8bf00

+69 -4025
+2 -2
client/src/lib/types.ts
··· 9 9 10 10 export type NavigationItemProps = { 11 11 label: string; 12 - href: string | MethodURL; 13 - view?: string; 12 + href: string; 13 + pathname?: string; 14 14 }; 15 15 16 16 export type Method = "get" | "post" | "put" | "patch" | "delete";
+27
client/src/routes/(app)/+layout.svelte
··· 1 + <script lang="ts"> 2 + import Footer from "$lib/components/layout/Footer.svelte"; 3 + import Navigation from "$lib/components/layout/Navigation.svelte"; 4 + import type { Snippet } from "svelte"; 5 + 6 + type Props = { 7 + children: Snippet; 8 + }; 9 + 10 + let { children }: Props = $props(); 11 + </script> 12 + 13 + <Navigation /> 14 + <div> 15 + {@render children()} 16 + </div> 17 + <Footer /> 18 + 19 + <style> 20 + :global(body) { 21 + display: grid; 22 + grid-template-rows: var(--spacing-16) 1fr max-content; 23 + min-height: 100dvh; 24 + 25 + row-gap: var(--spacing-6); 26 + } 27 + </style>
client/src/routes/+page.svelte client/src/routes/(app)/+page.svelte
client/src/routes/library/artists/+page.svelte client/src/routes/(app)/library/artists/+page.svelte
web/components/brand/Logo.svelte client/src/lib/components/brand/Logo.svelte
+5 -7
web/components/catalog/ArtistListItem.svelte client/src/lib/components/catalog/ArtistListItem.svelte
··· 1 1 <script lang="ts"> 2 - import { GET_ArtistsByID } from "$routes"; 3 - import { type Artist } from "$schemas/responses"; 4 - import { Link } from "@inertiajs/svelte"; 5 - import Scrobble from "$components/catalog/Scrobble.svelte"; 2 + import { type Artist } from "$lib/.gen/schemas/responses"; 3 + import Scrobble from "$lib/components/catalog/Scrobble.svelte"; 6 4 7 5 type Props = { 8 6 artist: Artist; ··· 19 17 {/if} 20 18 21 19 <div class="text"> 22 - <Link href={GET_ArtistsByID(artist.mbid)}> 20 + <a href="/artists/{artist.mbid}"> 23 21 {artist.name} 24 - </Link> 22 + </a> 25 23 </div> 26 24 27 25 {#if trailing === "scrobbles"} ··· 62 60 border: var(--theme-default-border); 63 61 } 64 62 65 - .text > :global(a) { 63 + .text > a { 66 64 font-size: var(--text-sm); 67 65 line-height: var(--text-sm--line-height); 68 66 font-weight: var(--font-weight-medium);
web/components/catalog/Scrobble.svelte client/src/lib/components/catalog/Scrobble.svelte
-26
web/components/content/Description.svelte
··· 1 - <script lang="ts"> 2 - import type { Snippet } from "svelte"; 3 - import type { HTMLAttributes } from "svelte/elements"; 4 - 5 - type Props = HTMLAttributes<HTMLSpanElement> & { 6 - children: Snippet; 7 - }; 8 - 9 - let { children, ...props }: Props = $props(); 10 - </script> 11 - 12 - <small {...props}> 13 - {@render children()} 14 - </small> 15 - 16 - <style> 17 - small { 18 - font-size: var(--text-sm); 19 - font-weight: var(--font-weight-normal); 20 - line-height: var(--leading-tighter); 21 - color: var(--color-content-200); 22 - display: inline-block; 23 - width: fit-content; 24 - max-width: 100%; 25 - } 26 - </style>
-42
web/components/content/Error.svelte
··· 1 - <script lang="ts"> 2 - import type { HTMLAttributes } from "svelte/elements"; 3 - import Icon from "$components/content/Icon.svelte"; 4 - 5 - type Props = HTMLAttributes<HTMLSpanElement> & { 6 - messages?: string[]; 7 - }; 8 - 9 - let { messages, ...props }: Props = $props(); 10 - </script> 11 - 12 - {#if (messages ?? []).length > 0} 13 - <div class="messages"> 14 - {#each messages as message} 15 - <span {...props}> 16 - <Icon name="hero-exclamation-circle-mini" /> 17 - {message} 18 - </span> 19 - {/each} 20 - </div> 21 - {/if} 22 - 23 - <style> 24 - .messages { 25 - display: flex; 26 - flex-direction: column; 27 - gap: var(--spacing-0_5); 28 - } 29 - 30 - span { 31 - display: inline-flex; 32 - align-items: center; 33 - gap: var(--spacing-1); 34 - color: var(--color-danger); 35 - font-size: var(--text-sm); 36 - line-height: var(--leading-tighter); 37 - } 38 - 39 - span > :global(.icon) { 40 - color: var(--color-danger); 41 - } 42 - </style>
-10
web/components/content/Icon.svelte
··· 1 - <script lang="ts"> 2 - type Props = { 3 - name: string; 4 - class?: string; 5 - }; 6 - 7 - let { name, class: class_ }: Props = $props(); 8 - </script> 9 - 10 - <span class={["icon", name, class_]}></span>
-14
web/components/content/Label.svelte
··· 1 - <script lang="ts"> 2 - import type { Snippet } from "svelte"; 3 - import type { HTMLLabelAttributes } from "svelte/elements"; 4 - 5 - type Props = HTMLLabelAttributes & { 6 - children: Snippet; 7 - }; 8 - 9 - let { children, ...props }: Props = $props(); 10 - </script> 11 - 12 - <label class="label" {...props}> 13 - {@render children()} 14 - </label>
-34
web/components/interaction/Back.svelte
··· 1 - <script lang="ts"> 2 - import Icon from "$components/content/Icon.svelte"; 3 - import type { MethodURL } from "$lib/types"; 4 - import { Link } from "@inertiajs/svelte"; 5 - 6 - type Props = { 7 - href: string | MethodURL; 8 - label?: string; 9 - }; 10 - 11 - let { href, label = "Go back" }: Props = $props(); 12 - </script> 13 - 14 - <div class="back"> 15 - <Link {href}> 16 - <Icon name="hero-arrow-left" /> 17 - <span class="label"> 18 - {label} 19 - </span> 20 - </Link> 21 - </div> 22 - 23 - <style> 24 - div { 25 - height: max-content; 26 - display: flex; 27 - } 28 - 29 - .back > :global(a) { 30 - display: inline-flex; 31 - align-items: center; 32 - gap: 0.5rem; 33 - } 34 - </style>
-40
web/components/interaction/Button.svelte
··· 1 - <script lang="ts"> 2 - import Icon from "$components/content/Icon.svelte"; 3 - import type { ButtonProps } from "$lib/types"; 4 - 5 - let { 6 - children, 7 - icon, 8 - shape = "square", 9 - scheme = "default", 10 - variant = "default", 11 - icon_position = "left", 12 - class: class_, 13 - ...rest 14 - }: ButtonProps = $props(); 15 - 16 - let classes = $derived([ 17 - scheme === "default" && "scheme-default", 18 - scheme === "primary" && "scheme-primary", 19 - variant === "default" && "variant-default", 20 - variant === "text" && "variant-text", 21 - shape === "square" && "shape-square", 22 - shape === "rounded" && "shape-rounded", 23 - shape === "circle" && "shape-circle", 24 - icon !== undefined && "with-icon", 25 - "button", 26 - class_, 27 - ]); 28 - </script> 29 - 30 - <button class={classes} {...rest}> 31 - {#if icon && icon_position === "left"} 32 - <Icon name={icon} /> 33 - {/if} 34 - {#if children} 35 - {@render children()} 36 - {/if} 37 - {#if icon && icon_position === "right"} 38 - <Icon name={icon} /> 39 - {/if} 40 - </button>
-34
web/components/interaction/Checkbox.svelte
··· 1 - <script lang="ts"> 2 - import { type InputProps } from "$lib/types"; 3 - let randomID = $props.id(); 4 - let { 5 - id = randomID, 6 - checked = $bindable(), 7 - ...props 8 - }: InputProps = $props(); 9 - </script> 10 - 11 - <input {id} type="checkbox" {...props} bind:checked /> 12 - 13 - <style> 14 - input { 15 - height: var(--spacing-4); 16 - width: var(--spacing-4); 17 - border: var(--theme-default-border); 18 - color: color-mix(in srgb, var(--color-accent-700) 75%, white); 19 - background-color: var(--color-base-300); 20 - 21 - &:checked { 22 - border-color: var(--color-base-content); 23 - background-color: var(--color-content-100); 24 - } 25 - 26 - &:focus { 27 - box-shadow: none; 28 - } 29 - 30 - &:focus { 31 - outline: 2px solid var(--color-primary); 32 - } 33 - } 34 - </style>
-135
web/components/interaction/Field.svelte
··· 1 - <script lang="ts"> 2 - import type { InputProps, SelectProps } from "$lib/types"; 3 - import type { Snippet } from "svelte"; 4 - import Select from "$components/interaction/Select.svelte"; 5 - import Input from "$components/interaction/Input.svelte"; 6 - import Label from "$components/content/Label.svelte"; 7 - import Error from "$components/content/Error.svelte"; 8 - import Description from "$components/content/Description.svelte"; 9 - import Checkbox from "./Checkbox.svelte"; 10 - 11 - let randomID = $props.id(); 12 - 13 - type Content = Snippet | string; 14 - 15 - type BaseProps = { 16 - label?: Content | undefined; 17 - errors?: string[] | undefined; 18 - description?: Content | undefined; 19 - children?: Snippet | undefined; 20 - checked?: boolean; 21 - description_and_errors?: boolean; 22 - }; 23 - 24 - type Props = 25 - | ({ as: "select" } & SelectProps & BaseProps) 26 - | ({ as: "input" } & InputProps & BaseProps) 27 - | ({ as: "checkbox" } & InputProps & BaseProps); 28 - 29 - let { 30 - label: label, 31 - errors: errors, 32 - description: description, 33 - as: as, 34 - id = randomID, 35 - description_and_errors = false, 36 - value = $bindable(), 37 - checked = $bindable(), 38 - ...props 39 - }: Props = $props(); 40 - </script> 41 - 42 - <div class={[as, "field"]}> 43 - <div class="label"> 44 - {#if label} 45 - {#if typeof label === "string"} 46 - <Label for={id}>{label}</Label> 47 - {:else} 48 - {@render label()} 49 - {/if} 50 - {/if} 51 - </div> 52 - 53 - <div class="interaction"> 54 - {#if as === "select"} 55 - <Select 56 - {id} 57 - aria-describedby={description !== undefined && id + "-description"} 58 - {...props as SelectProps} 59 - /> 60 - {:else if as === "input"} 61 - <Input 62 - {id} 63 - bind:value 64 - aria-describedby={description !== undefined && id + "-description"} 65 - {...props as InputProps} 66 - /> 67 - {:else if as === "checkbox"} 68 - <Checkbox 69 - {id} 70 - bind:checked 71 - aria-describedby={description !== undefined && id + "-description"} 72 - {...props as InputProps} 73 - /> 74 - {/if} 75 - </div> 76 - 77 - {#if description && ((errors ?? []).length === 0 || description_and_errors)} 78 - <div class="description"> 79 - {#if typeof description === "string"} 80 - <Description id={id + "-description"}>{description}</Description> 81 - {:else} 82 - {@render description()} 83 - {/if} 84 - </div> 85 - {/if} 86 - 87 - {#if (errors ?? []).length > 0} 88 - <div class="error"> 89 - <Error messages={errors} /> 90 - </div> 91 - {/if} 92 - </div> 93 - 94 - <style> 95 - .field { 96 - display: grid; 97 - grid-template-columns: var(--spacing-4) 1fr; 98 - column-gap: var(--spacing-2); 99 - row-gap: var(--spacing-1); 100 - } 101 - 102 - .label { 103 - grid-column: 1 / 3; 104 - display: flex; 105 - } 106 - 107 - .field.checkbox > .label { 108 - grid-row: 1 / 2; 109 - grid-column: 2 / 3; 110 - align-self: center; 111 - } 112 - 113 - .interaction { 114 - grid-column: 1 / 3; 115 - } 116 - 117 - .field.checkbox .interaction { 118 - grid-column: 1 / 2; 119 - grid-row: 1 / 2; 120 - height: var(--spacing-4); 121 - align-self: center; 122 - display: flex; 123 - } 124 - 125 - .description { 126 - grid-column: 1 / 3; 127 - height: max-content; 128 - display: flex; 129 - } 130 - 131 - .error { 132 - grid-column: 1 / 3; 133 - display: flex; 134 - } 135 - </style>
-53
web/components/interaction/Input.svelte
··· 1 - <script lang="ts"> 2 - import { type InputProps } from "$lib/types"; 3 - let randomID = $props.id(); 4 - let { 5 - name, 6 - id = randomID, 7 - value = $bindable(), 8 - ...props 9 - }: InputProps = $props(); 10 - </script> 11 - 12 - <input {name} {id} {...props} bind:value /> 13 - 14 - <style> 15 - input { 16 - font-weight: var(--font-weight-normal); 17 - color: var(--color-content-100); 18 - display: block; 19 - border-style: solid; 20 - border-color: var(--color-muted-200); 21 - border-width: 1px; 22 - padding-inline: var(--spacing-3); 23 - height: var(--spacing-10); 24 - width: 100%; 25 - box-shadow: var(--shadow-xs); 26 - background-color: hsl(from var(--color-base-100) h s 90%); 27 - font-size: var(--text-base); 28 - line-height: var(--text-base--line-height); 29 - 30 - @media (width >= 40rem) { 31 - height: var(--spacing-10); 32 - font-size: var(--text-sm); 33 - line-height: var(--spacing-6); 34 - } 35 - 36 - outline-offset: 0px; 37 - &:focus, 38 - &:focus-visible { 39 - outline: 1px solid var(--color-primary); 40 - border-color: var(--color-primary); 41 - } 42 - 43 - &[aria-invalid="true"] { 44 - border-color: var(--color-error); 45 - } 46 - 47 - &:disabled { 48 - color: var(--color-muted-300); 49 - border-color: var(--color-muted-100); 50 - cursor: not-allowed; 51 - } 52 - } 53 - </style>
-52
web/components/interaction/Link.svelte
··· 1 - <script lang="ts"> 2 - import Icon from "$components/content/Icon.svelte"; 3 - import type { LinkProps } from "$lib/types"; 4 - import { Link } from "@inertiajs/svelte"; 5 - 6 - let { 7 - children, 8 - icon, 9 - href, 10 - shape = "square", 11 - scheme = "default", 12 - variant = "default", 13 - icon_position = "left", 14 - class: class_, 15 - ...rest 16 - }: LinkProps = $props(); 17 - 18 - let classes = $derived([ 19 - scheme === "default" && "scheme-default", 20 - scheme === "primary" && "scheme-primary", 21 - variant === "default" && "variant-default", 22 - variant === "text" && "variant-text", 23 - shape === "square" && "shape-square", 24 - shape === "rounded" && "shape-rounded", 25 - shape === "circle" && "shape-circle", 26 - icon !== undefined && "with-icon", 27 - "button", 28 - class_, 29 - ]); 30 - </script> 31 - 32 - {#snippet content()} 33 - {#if icon && icon_position === "left"} 34 - <Icon name={icon} /> 35 - {/if} 36 - {#if children} 37 - {@render children()} 38 - {/if} 39 - {#if icon && icon_position === "right"} 40 - <Icon name={icon} /> 41 - {/if} 42 - {/snippet} 43 - 44 - {#if typeof href === "string"} 45 - <a class={classes} {...rest}> 46 - {@render content()} 47 - </a> 48 - {:else} 49 - <Link class={classes} {href} {...rest}> 50 - {@render content()} 51 - </Link> 52 - {/if}
-65
web/components/interaction/Select.svelte
··· 1 - <script lang="ts"> 2 - import type { SelectProps } from "$lib/types"; 3 - 4 - let randomID = $props.id(); 5 - 6 - let { 7 - name, 8 - id = randomID, 9 - value = $bindable(), 10 - values, 11 - ...props 12 - }: SelectProps = $props(); 13 - </script> 14 - 15 - <select {name} {id} bind:value {...props}> 16 - {#each values as item} 17 - <option 18 - value={item.value} 19 - disabled={item.disabled} 20 - selected={item.current}>{item.label}</option 21 - > 22 - {/each} 23 - </select> 24 - 25 - <style> 26 - select { 27 - font-weight: var(--font-weight-normal); 28 - color: var(--color-content-100); 29 - display: block; 30 - border-style: solid; 31 - border-color: var(--color-muted-200); 32 - border-width: 1px; 33 - padding-inline: var(--spacing-3); 34 - height: var(--spacing-10); 35 - width: 100%; 36 - box-shadow: var(--shadow-xs); 37 - border-radius: var(--radius-interactive); 38 - background-color: hsl(from var(--color-base-100) h s 90%); 39 - font-size: var(--text-base); 40 - line-height: var(--text-base--line-height); 41 - 42 - @media (width >= 40rem) { 43 - height: var(--spacing-10); 44 - font-size: var(--text-sm); 45 - line-height: var(--spacing-6); 46 - } 47 - 48 - outline-offset: 0px; 49 - &:focus, 50 - &:focus-visible { 51 - outline: 1px solid var(--color-primary); 52 - border-color: var(--color-primary); 53 - } 54 - 55 - &[aria-invalid="true"] { 56 - border-color: var(--color-error); 57 - } 58 - 59 - &:disabled { 60 - color: var(--color-muted-300); 61 - border-color: var(--color-muted-100); 62 - cursor: not-allowed; 63 - } 64 - } 65 - </style>
-32
web/components/interaction/Setting.svelte
··· 1 - <script lang="ts"> 2 - import type { Snippet } from "svelte"; 3 - import Button from "$components/interaction/Button.svelte"; 4 - 5 - type Props = { 6 - value: Snippet; 7 - save: () => boolean; 8 - field: Snippet; 9 - direction: "horizontal" | "vertical"; 10 - }; 11 - 12 - let editing = $state(false); 13 - 14 - let { value, save, field, direction = "horizontal" }: Props = $props(); 15 - </script> 16 - 17 - <div class={direction}> 18 - {#if editing} 19 - {@render field()} 20 - <Button 21 - variant="text" 22 - onclick={() => { 23 - if (save()) { 24 - editing = false; 25 - } 26 - }}>Save</Button 27 - > 28 - {:else} 29 - {@render value()} 30 - <Button variant="text" onclick={() => (editing = true)}>Edit</Button> 31 - {/if} 32 - </div>
web/components/interaction/Switch.svelte

This is a binary file and will not be displayed.

web/components/interaction/Textarea.svelte

This is a binary file and will not be displayed.

-16
web/components/layouts/Layout.svelte
··· 1 - <script lang="ts"> 2 - import type { Snippet } from "svelte"; 3 - 4 - type Props = { 5 - children: Snippet; 6 - title: string; 7 - }; 8 - 9 - let { children, title }: Props = $props(); 10 - </script> 11 - 12 - <svelte:head> 13 - <title>{title} - KeepTrack</title> 14 - </svelte:head> 15 - 16 - {@render children()}
-49
web/components/layouts/authentication/Layout.svelte
··· 1 - <script lang="ts"> 2 - import type { Snippet } from "svelte"; 3 - 4 - type Props = { 5 - children: Snippet; 6 - }; 7 - 8 - let { children }: Props = $props(); 9 - </script> 10 - 11 - <main> 12 - <section> 13 - {@render children()} 14 - </section> 15 - </main> 16 - 17 - <style> 18 - main { 19 - background-color: var(--color-primary); 20 - display: grid; 21 - place-items: center; 22 - height: 100vh; 23 - 24 - @media (width < 48rem) { 25 - padding: var(--spacing-4); 26 - } 27 - 28 - @media (width >= 48rem) { 29 - justify-items: end; 30 - } 31 - } 32 - 33 - section { 34 - display: flex; 35 - flex-direction: column; 36 - justify-content: center; 37 - gap: var(--spacing-4); 38 - box-shadow: var(--shadow-lg); 39 - background-color: var(--color-base-300); 40 - padding: var(--spacing-6); 41 - width: 100%; 42 - max-width: var(--width-lg); 43 - 44 - @media (width >= 48rem) { 45 - padding: var(--spacing-8); 46 - height: 100%; 47 - } 48 - } 49 - </style>
-26
web/components/layouts/library/Layout.svelte
··· 1 - <script lang="ts"> 2 - import Navigation from "$components/layouts/library/Navigation.svelte"; 3 - import type { Snippet } from "svelte"; 4 - 5 - type Props = { 6 - children: Snippet; 7 - }; 8 - 9 - let { children }: Props = $props(); 10 - </script> 11 - 12 - <div class="view"> 13 - <Navigation /> 14 - 15 - <main> 16 - {@render children()} 17 - </main> 18 - </div> 19 - 20 - <style> 21 - .view { 22 - display: grid; 23 - grid-template-columns: 1fr 3fr; 24 - column-gap: var(--spacing-8); 25 - } 26 - </style>
+16 -11
web/components/layouts/library/Navigation.svelte client/src/lib/components/layout/library/Navigation.svelte
··· 1 1 <script lang="ts"> 2 + import { page } from "$app/state"; 2 3 import type { NavigationItemProps } from "$lib/types"; 3 - import { Link, page } from "@inertiajs/svelte"; 4 4 5 5 let items: NavigationItemProps[] = $state([ 6 - { label: "Overview", href: "/library", view: "library/Index" }, 6 + { label: "Overview", href: "/library", pathname: "/" }, 7 7 { 8 8 label: "Artists", 9 9 href: "/library/artists", 10 - view: "library/artists/Index", 10 + pathname: "/library/artists", 11 11 }, 12 12 { 13 13 label: "Releases ", 14 14 href: "/library/releases", 15 - view: "library/releases/Index", 15 + pathname: "/library/releases", 16 16 }, 17 - { label: "Songs", href: "/library/songs", view: "library/songs/Index" }, 17 + { 18 + label: "Songs", 19 + href: "/library/songs", 20 + pathname: "/library/songs", 21 + }, 18 22 ]); 19 23 </script> 20 24 ··· 23 27 <ul> 24 28 {#each items as item} 25 29 <li> 26 - <Link 27 - aria-current={$page.component === item.view 30 + <a 31 + aria-current={item.pathname && 32 + page.url.pathname.startsWith(item.pathname) 28 33 ? "page" 29 34 : undefined} 30 35 href={item.href} 31 36 > 32 37 {item.label} 33 - </Link> 38 + </a> 34 39 </li> 35 40 {/each} 36 41 </ul> ··· 68 73 padding-inline 100ms ease; 69 74 } 70 75 71 - li > :global(a:where([aria-current="page"], :hover)) { 76 + li > a:where([aria-current="page"], :hover) { 72 77 padding-inline: var(--spacing-2); 73 78 } 74 79 75 - li > :global(a[aria-current="page"]) { 80 + li > a[aria-current="page"] { 76 81 background-color: var(--color-muted-100); 77 82 } 78 83 79 - li > :global(a:hover) { 84 + li > a:hover { 80 85 background-color: var(--color-muted-200); 81 86 } 82 87 </style>
-26
web/components/layouts/settings/Layout.svelte
··· 1 - <script lang="ts"> 2 - import Navigation from "$components/layouts/settings/Navigation.svelte"; 3 - import type { Snippet } from "svelte"; 4 - 5 - type Props = { 6 - children: Snippet; 7 - }; 8 - 9 - let { children }: Props = $props(); 10 - </script> 11 - 12 - <div class="view"> 13 - <Navigation /> 14 - 15 - <main> 16 - {@render children()} 17 - </main> 18 - </div> 19 - 20 - <style> 21 - .view { 22 - display: grid; 23 - grid-template-columns: 1fr 3fr; 24 - column-gap: var(--spacing-8); 25 - } 26 - </style>
-88
web/components/layouts/settings/Navigation.svelte
··· 1 - <script lang="ts"> 2 - import type { NavigationItemProps } from "$lib/types"; 3 - import { GET_Settings, GET_SettingsServices } from "$routes"; 4 - import { Link, page } from "@inertiajs/svelte"; 5 - 6 - let items: NavigationItemProps[] = $state([ 7 - { label: "Overview", href: GET_Settings(), view: "library/Index" }, 8 - { 9 - label: "Services", 10 - href: GET_SettingsServices(), 11 - view: "settings/Services", 12 - }, 13 - { 14 - label: "Artists", 15 - href: "/library/artists", 16 - view: "library/artists/Index", 17 - }, 18 - { 19 - label: "Releases ", 20 - href: "/library/releases", 21 - view: "library/releases/Index", 22 - }, 23 - { label: "Songs", href: "/library/songs", view: "library/songs/Index" }, 24 - ]); 25 - </script> 26 - 27 - <aside> 28 - <nav> 29 - <ul> 30 - {#each items as item} 31 - <li> 32 - <Link 33 - aria-current={$page.component === item.view 34 - ? "page" 35 - : undefined} 36 - href={item.href} 37 - > 38 - {item.label} 39 - </Link> 40 - </li> 41 - {/each} 42 - </ul> 43 - </nav> 44 - </aside> 45 - 46 - <style> 47 - nav { 48 - display: flex; 49 - flex-direction: column; 50 - gap: var(--spacing-2); 51 - position: sticky; 52 - top: calc(var(--spacing-16) + var(--spacing-6)); 53 - } 54 - 55 - ul { 56 - width: 100%; 57 - display: flex; 58 - flex-direction: column; 59 - gap: var(--spacing-1); 60 - } 61 - 62 - li > :global(a) { 63 - color: var(--color-primary); 64 - padding-block: var(--spacing-0_5); 65 - font-size: var(--text-sm); 66 - line-height: var(--text-sm--line-height); 67 - font-weight: var(--font-weight-medium); 68 - width: 100%; 69 - display: inline-flex; 70 - align-items: center; 71 - gap: var(--spacing-1); 72 - transition: 73 - background-color 100ms ease, 74 - padding-inline 100ms ease; 75 - } 76 - 77 - li > :global(a:where([aria-current="page"], :hover)) { 78 - padding-inline: var(--spacing-2); 79 - } 80 - 81 - li > :global(a[aria-current="page"]) { 82 - background-color: var(--color-muted-100); 83 - } 84 - 85 - li > :global(a:hover) { 86 - background-color: var(--color-muted-200); 87 - } 88 - </style>
web/components/layouts/web/Footer.svelte client/src/lib/components/layout/Footer.svelte
-31
web/components/layouts/web/Layout.svelte
··· 1 - <script lang="ts"> 2 - import Footer from "$components/layouts/web/Footer.svelte"; 3 - import Navigation from "$components/layouts/web/Navigation.svelte"; 4 - import type { Snippet } from "svelte"; 5 - 6 - type Props = { 7 - children: Snippet; 8 - }; 9 - 10 - let { children }: Props = $props(); 11 - </script> 12 - 13 - <div class="layout"> 14 - <Navigation /> 15 - 16 - <div class="container"> 17 - {@render children()} 18 - </div> 19 - 20 - <Footer /> 21 - </div> 22 - 23 - <style> 24 - .layout { 25 - display: grid; 26 - grid-template-rows: var(--spacing-16) 1fr max-content; 27 - min-height: 100dvh; 28 - 29 - row-gap: var(--spacing-6); 30 - } 31 - </style>
+19 -25
web/components/layouts/web/Navigation.svelte client/src/lib/components/layout/Navigation.svelte
··· 1 1 <script lang="ts"> 2 - import Logo from "$components/brand/Logo.svelte"; 3 - import { 4 - GET_Friends, 5 - GET_Index, 6 - GET_Library, 7 - GET_Mixtapes, 8 - GET_Settings, 9 - } from "$routes"; 2 + import { page } from "$app/state"; 3 + import Logo from "$lib/components/brand/Logo.svelte"; 10 4 import type { NavigationItemProps } from "$lib/types"; 11 - import { Link, page } from "@inertiajs/svelte"; 12 5 13 6 let items: NavigationItemProps[] = $state([ 14 - { href: GET_Index(), label: "Home", view: "Index" }, 15 - { href: GET_Mixtapes(), label: "Mixtapes", view: "mixtapes/Index" }, 16 - { href: GET_Friends(), label: "Friends", view: "friends/Index" }, 17 - { href: GET_Library(), label: "Library", view: "library" }, 7 + { href: "/", label: "Home", pathname: "Index" }, 8 + { href: "/mixtapes", label: "Mixtapes", pathname: "/mixtapes" }, 9 + { href: "/friends", label: "Friends", pathname: "/friends" }, 10 + { href: "/library", label: "Library", pathname: "/library" }, 18 11 ]); 19 12 </script> 20 13 21 14 <header> 22 15 <nav class="container"> 23 - <Link href={GET_Index()}> 16 + <a href="/"> 24 17 <Logo /> 25 - </Link> 18 + </a> 26 19 <ul class="primary"> 27 20 {#each items as item} 28 21 <li> 29 - <Link 22 + <a 30 23 href={item.href} 31 - aria-current={$page.component.startsWith(item.view) 24 + aria-current={item.pathname && 25 + page.url.pathname.startsWith(item.pathname) 32 26 ? "page" 33 27 : undefined} 34 28 > 35 29 {item.label} 36 - </Link> 30 + </a> 37 31 </li> 38 32 {/each} 39 33 </ul> 40 34 <ul class="secondary"> 41 35 <li> 42 - <Link 43 - href={GET_Settings()} 44 - aria-current={$page.component.startsWith("settings") 36 + <a 37 + href="/" 38 + aria-current={page.url.pathname.startsWith("/settings") 45 39 ? "page" 46 40 : undefined} 47 41 > 48 42 Settings 49 - </Link> 43 + </a> 50 44 </li> 51 45 </ul> 52 46 </nav> ··· 83 77 justify-content: flex-end; 84 78 } 85 79 86 - li > :global(a) { 80 + li > a { 87 81 color: var(--color-primary); 88 82 padding: var(--spacing-2) var(--spacing-1_5); 89 83 font-size: var(--text-sm); ··· 91 85 font-weight: var(--font-weight-medium); 92 86 } 93 87 94 - li > :global(a[aria-current="page"]) { 88 + li > a[aria-current="page"] { 95 89 background-color: var(--color-base-200); 96 90 } 97 91 98 - li > :global(a:hover) { 92 + li > a:hover { 99 93 background-color: var(--color-muted-100); 100 94 } 101 95 </style>
-35
web/components/social/UserListItem.svelte
··· 1 - <script lang="ts"> 2 - import type { User } from "$schemas/responses"; 3 - 4 - type Props = { 5 - user: User; 6 - leading: "image" | "none"; 7 - }; 8 - 9 - let { user, leading = "image" }: Props = $props(); 10 - </script> 11 - 12 - <article> 13 - {#if leading === "image"} 14 - <div class="leading"></div> 15 - {/if} 16 - <div class="text"> 17 - <p>{user.name}</p> 18 - </div> 19 - </article> 20 - 21 - <style> 22 - article { 23 - display: grid; 24 - grid-template-columns: var(--spacing-10) 1fr; 25 - } 26 - 27 - .text { 28 - grid-column-start: 1; 29 - grid-column-end: 3; 30 - } 31 - 32 - article:has(> .leading) > .text { 33 - grid-column-start: 2; 34 - } 35 - </style>
-48
web/esbuild.config.ts
··· 1 - import { type BuildOptions, build, context } from "esbuild"; 2 - import svelte from "esbuild-svelte"; 3 - import { sveltePreprocess } from "svelte-preprocess"; 4 - 5 - const args = process.argv.slice(2); 6 - let watch = args.includes("--watch"); 7 - let deploy = args.includes("--deploy"); 8 - 9 - const options: BuildOptions = { 10 - bundle: true, 11 - minify: deploy, 12 - sourcemap: false, 13 - splitting: deploy, 14 - legalComments: "none", 15 - treeShaking: deploy, 16 - format: "esm", 17 - tsconfig: "tsconfig.json", 18 - target: "firefox118", 19 - outdir: "../private/assets", 20 - alias: { 21 - $components: "./components", 22 - $lib: "./lib", 23 - $routes: "./lib/.gen/routes", 24 - $schemas: "./lib/.gen/schemas", 25 - }, 26 - chunkNames: "chunks/[name]-[hash]", 27 - entryPoints: ["lib/app.ts"], 28 - conditions: ["svelte", "browser"], 29 - plugins: [ 30 - svelte({ 31 - compilerOptions: { 32 - css: "external", 33 - dev: !deploy, 34 - experimental: { 35 - async: true, 36 - }, 37 - }, 38 - preprocess: sveltePreprocess(), 39 - }), 40 - ], 41 - }; 42 - 43 - if (watch) { 44 - const ctx = await context(options); 45 - await ctx.watch(); 46 - } else { 47 - await build(options); 48 - }
-12
web/global.d.ts
··· 1 - declare module "@inertiajs/core" { 2 - export interface InertiaConfig { 3 - // sharedPageProps: { 4 - // auth: { user: { id: number; name: string } | null }; 5 - // appName: string; 6 - // }; 7 - // flashDataType: { 8 - // toast?: { type: "success" | "error"; message: string }; 9 - // }; 10 - errorValueType: string[]; 11 - } 12 - }
-29
web/lib/app.ts
··· 1 - import { default as Base } from "$components/layouts/Layout.svelte"; 2 - import { default as Web } from "$components/layouts/web/Layout.svelte"; 3 - import { createInertiaApp, page } from "@inertiajs/svelte"; 4 - import { mount } from "svelte"; 5 - import axios from "axios"; 6 - 7 - page.subscribe((page) => { 8 - if (page) { 9 - axios.defaults.headers.common["X-CSRF-Token"] = page.props.csrf_token; 10 - axios.defaults.withCredentials = true; 11 - } 12 - }); 13 - 14 - createInertiaApp({ 15 - id: "app", 16 - resolve: async (name) => { 17 - let page = await import(`../views/${name}.svelte`); 18 - return { default: page.default, layout: page.layout || [Base, Web] }; 19 - }, 20 - setup: ({ el, App, props }) => { 21 - mount(App, { target: el, props }); 22 - }, 23 - defaults: { 24 - future: { 25 - useDialogForErrorModal: true, 26 - useScriptElementForInitialPage: true, 27 - }, 28 - }, 29 - });
-50
web/lib/plugins/heroicons.plugin.js
··· 1 - // Taken from the phoenix framework 2 - 3 - import plugin from "tailwindcss/plugin"; 4 - import { readdirSync, readFileSync } from "fs"; 5 - import { join, basename, dirname } from "path"; 6 - import { fileURLToPath } from "url"; 7 - 8 - const __dirname = dirname(fileURLToPath(import.meta.url)); 9 - 10 - export default plugin(function ({ matchComponents, theme }) { 11 - let iconsDir = join(__dirname, "../../node_modules/heroicons"); 12 - let values = {}; 13 - let icons = [ 14 - ["", "/24/outline"], 15 - ["-solid", "/24/solid"], 16 - ["-mini", "/20/solid"], 17 - ["-micro", "/16/solid"], 18 - ]; 19 - icons.forEach(([suffix, dir]) => { 20 - readdirSync(join(iconsDir, dir)).forEach((file) => { 21 - let name = basename(file, ".svg") + suffix; 22 - // @ts-ignore 23 - values[name] = { name, fullPath: join(iconsDir, dir, file) }; 24 - }); 25 - }); 26 - matchComponents( 27 - { 28 - // @ts-ignore 29 - hero: ({ name, fullPath }) => { 30 - let content = readFileSync(fullPath) 31 - .toString() 32 - .replace(/\r?\n|\r/g, ""); 33 - content = encodeURIComponent(content); 34 - let size = theme("spacing.6"); 35 - if (name.endsWith("-mini")) { 36 - size = theme("spacing.5"); 37 - } else if (name.endsWith("-micro")) { 38 - size = theme("spacing.4"); 39 - } 40 - return { 41 - [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, 42 - "-webkit-mask": `var(--hero-${name})`, 43 - mask: `var(--hero-${name})`, 44 - }; 45 - }, 46 - }, 47 - // @ts-ignore 48 - { values }, 49 - ); 50 - });
-48
web/lib/types.ts
··· 1 - import type { Snippet } from "svelte"; 2 - import type { 3 - HTMLAnchorAttributes, 4 - HTMLButtonAttributes, 5 - HTMLInputAttributes, 6 - HTMLSelectAttributes, 7 - } from "svelte/elements"; 8 - 9 - export type NavigationItemProps = { 10 - label: string; 11 - href: string | MethodURL; 12 - view?: string; 13 - }; 14 - 15 - export type Method = "get" | "post" | "put" | "patch" | "delete"; 16 - 17 - export type MethodURL = { 18 - method: Method; 19 - url: string; 20 - }; 21 - 22 - export type SelectProps = HTMLSelectAttributes & { 23 - values: { 24 - label: string; 25 - value: string; 26 - current?: boolean; 27 - disabled?: boolean; 28 - }[]; 29 - }; 30 - 31 - export type InputProps = HTMLInputAttributes; 32 - 33 - type ButtonPropsExtension = { 34 - children?: Snippet; 35 - scheme?: "default" | "primary"; 36 - variant?: "default" | "text"; 37 - shape?: "square" | "rounded" | "circle"; 38 - icon?: string; 39 - icon_position?: "left" | "right"; 40 - }; 41 - 42 - export type ButtonProps = ButtonPropsExtension & HTMLButtonAttributes; 43 - export type LinkProps = Omit<HTMLAnchorAttributes, "href"> & 44 - ButtonPropsExtension & { 45 - external?: boolean; 46 - disabled?: boolean; 47 - href: string | { url: string; method: Method }; 48 - };
-2247
web/package-lock.json
··· 1 - { 2 - "name": "web", 3 - "lockfileVersion": 3, 4 - "requires": true, 5 - "packages": { 6 - "": { 7 - "dependencies": { 8 - "@inertiajs/svelte": "2.3.8", 9 - "heroicons": "^2.2.0", 10 - "svelte": "^5.46.3", 11 - "tailwindcss": "^4.1.18" 12 - }, 13 - "devDependencies": { 14 - "@tailwindcss/cli": "^4.1.18", 15 - "@tailwindcss/forms": "^0.5.11", 16 - "@types/node": "^25.0.3", 17 - "esbuild": "0.27.2", 18 - "esbuild-svelte": "^0.9.4", 19 - "svelte-preprocess": "^6.0.3", 20 - "typescript": "^5.6.3" 21 - } 22 - }, 23 - "node_modules/@esbuild/aix-ppc64": { 24 - "version": "0.27.2", 25 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", 26 - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", 27 - "cpu": [ 28 - "ppc64" 29 - ], 30 - "dev": true, 31 - "license": "MIT", 32 - "optional": true, 33 - "os": [ 34 - "aix" 35 - ], 36 - "engines": { 37 - "node": ">=18" 38 - } 39 - }, 40 - "node_modules/@esbuild/android-arm": { 41 - "version": "0.27.2", 42 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", 43 - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", 44 - "cpu": [ 45 - "arm" 46 - ], 47 - "dev": true, 48 - "license": "MIT", 49 - "optional": true, 50 - "os": [ 51 - "android" 52 - ], 53 - "engines": { 54 - "node": ">=18" 55 - } 56 - }, 57 - "node_modules/@esbuild/android-arm64": { 58 - "version": "0.27.2", 59 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", 60 - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", 61 - "cpu": [ 62 - "arm64" 63 - ], 64 - "dev": true, 65 - "license": "MIT", 66 - "optional": true, 67 - "os": [ 68 - "android" 69 - ], 70 - "engines": { 71 - "node": ">=18" 72 - } 73 - }, 74 - "node_modules/@esbuild/android-x64": { 75 - "version": "0.27.2", 76 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", 77 - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", 78 - "cpu": [ 79 - "x64" 80 - ], 81 - "dev": true, 82 - "license": "MIT", 83 - "optional": true, 84 - "os": [ 85 - "android" 86 - ], 87 - "engines": { 88 - "node": ">=18" 89 - } 90 - }, 91 - "node_modules/@esbuild/darwin-arm64": { 92 - "version": "0.27.2", 93 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", 94 - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", 95 - "cpu": [ 96 - "arm64" 97 - ], 98 - "dev": true, 99 - "license": "MIT", 100 - "optional": true, 101 - "os": [ 102 - "darwin" 103 - ], 104 - "engines": { 105 - "node": ">=18" 106 - } 107 - }, 108 - "node_modules/@esbuild/darwin-x64": { 109 - "version": "0.27.2", 110 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", 111 - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", 112 - "cpu": [ 113 - "x64" 114 - ], 115 - "dev": true, 116 - "license": "MIT", 117 - "optional": true, 118 - "os": [ 119 - "darwin" 120 - ], 121 - "engines": { 122 - "node": ">=18" 123 - } 124 - }, 125 - "node_modules/@esbuild/freebsd-arm64": { 126 - "version": "0.27.2", 127 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", 128 - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", 129 - "cpu": [ 130 - "arm64" 131 - ], 132 - "dev": true, 133 - "license": "MIT", 134 - "optional": true, 135 - "os": [ 136 - "freebsd" 137 - ], 138 - "engines": { 139 - "node": ">=18" 140 - } 141 - }, 142 - "node_modules/@esbuild/freebsd-x64": { 143 - "version": "0.27.2", 144 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", 145 - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", 146 - "cpu": [ 147 - "x64" 148 - ], 149 - "dev": true, 150 - "license": "MIT", 151 - "optional": true, 152 - "os": [ 153 - "freebsd" 154 - ], 155 - "engines": { 156 - "node": ">=18" 157 - } 158 - }, 159 - "node_modules/@esbuild/linux-arm": { 160 - "version": "0.27.2", 161 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", 162 - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", 163 - "cpu": [ 164 - "arm" 165 - ], 166 - "dev": true, 167 - "license": "MIT", 168 - "optional": true, 169 - "os": [ 170 - "linux" 171 - ], 172 - "engines": { 173 - "node": ">=18" 174 - } 175 - }, 176 - "node_modules/@esbuild/linux-arm64": { 177 - "version": "0.27.2", 178 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", 179 - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", 180 - "cpu": [ 181 - "arm64" 182 - ], 183 - "dev": true, 184 - "license": "MIT", 185 - "optional": true, 186 - "os": [ 187 - "linux" 188 - ], 189 - "engines": { 190 - "node": ">=18" 191 - } 192 - }, 193 - "node_modules/@esbuild/linux-ia32": { 194 - "version": "0.27.2", 195 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", 196 - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", 197 - "cpu": [ 198 - "ia32" 199 - ], 200 - "dev": true, 201 - "license": "MIT", 202 - "optional": true, 203 - "os": [ 204 - "linux" 205 - ], 206 - "engines": { 207 - "node": ">=18" 208 - } 209 - }, 210 - "node_modules/@esbuild/linux-loong64": { 211 - "version": "0.27.2", 212 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", 213 - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", 214 - "cpu": [ 215 - "loong64" 216 - ], 217 - "dev": true, 218 - "license": "MIT", 219 - "optional": true, 220 - "os": [ 221 - "linux" 222 - ], 223 - "engines": { 224 - "node": ">=18" 225 - } 226 - }, 227 - "node_modules/@esbuild/linux-mips64el": { 228 - "version": "0.27.2", 229 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", 230 - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", 231 - "cpu": [ 232 - "mips64el" 233 - ], 234 - "dev": true, 235 - "license": "MIT", 236 - "optional": true, 237 - "os": [ 238 - "linux" 239 - ], 240 - "engines": { 241 - "node": ">=18" 242 - } 243 - }, 244 - "node_modules/@esbuild/linux-ppc64": { 245 - "version": "0.27.2", 246 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", 247 - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", 248 - "cpu": [ 249 - "ppc64" 250 - ], 251 - "dev": true, 252 - "license": "MIT", 253 - "optional": true, 254 - "os": [ 255 - "linux" 256 - ], 257 - "engines": { 258 - "node": ">=18" 259 - } 260 - }, 261 - "node_modules/@esbuild/linux-riscv64": { 262 - "version": "0.27.2", 263 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", 264 - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", 265 - "cpu": [ 266 - "riscv64" 267 - ], 268 - "dev": true, 269 - "license": "MIT", 270 - "optional": true, 271 - "os": [ 272 - "linux" 273 - ], 274 - "engines": { 275 - "node": ">=18" 276 - } 277 - }, 278 - "node_modules/@esbuild/linux-s390x": { 279 - "version": "0.27.2", 280 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", 281 - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", 282 - "cpu": [ 283 - "s390x" 284 - ], 285 - "dev": true, 286 - "license": "MIT", 287 - "optional": true, 288 - "os": [ 289 - "linux" 290 - ], 291 - "engines": { 292 - "node": ">=18" 293 - } 294 - }, 295 - "node_modules/@esbuild/linux-x64": { 296 - "version": "0.27.2", 297 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", 298 - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", 299 - "cpu": [ 300 - "x64" 301 - ], 302 - "dev": true, 303 - "license": "MIT", 304 - "optional": true, 305 - "os": [ 306 - "linux" 307 - ], 308 - "engines": { 309 - "node": ">=18" 310 - } 311 - }, 312 - "node_modules/@esbuild/netbsd-arm64": { 313 - "version": "0.27.2", 314 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", 315 - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", 316 - "cpu": [ 317 - "arm64" 318 - ], 319 - "dev": true, 320 - "license": "MIT", 321 - "optional": true, 322 - "os": [ 323 - "netbsd" 324 - ], 325 - "engines": { 326 - "node": ">=18" 327 - } 328 - }, 329 - "node_modules/@esbuild/netbsd-x64": { 330 - "version": "0.27.2", 331 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", 332 - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", 333 - "cpu": [ 334 - "x64" 335 - ], 336 - "dev": true, 337 - "license": "MIT", 338 - "optional": true, 339 - "os": [ 340 - "netbsd" 341 - ], 342 - "engines": { 343 - "node": ">=18" 344 - } 345 - }, 346 - "node_modules/@esbuild/openbsd-arm64": { 347 - "version": "0.27.2", 348 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", 349 - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", 350 - "cpu": [ 351 - "arm64" 352 - ], 353 - "dev": true, 354 - "license": "MIT", 355 - "optional": true, 356 - "os": [ 357 - "openbsd" 358 - ], 359 - "engines": { 360 - "node": ">=18" 361 - } 362 - }, 363 - "node_modules/@esbuild/openbsd-x64": { 364 - "version": "0.27.2", 365 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", 366 - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", 367 - "cpu": [ 368 - "x64" 369 - ], 370 - "dev": true, 371 - "license": "MIT", 372 - "optional": true, 373 - "os": [ 374 - "openbsd" 375 - ], 376 - "engines": { 377 - "node": ">=18" 378 - } 379 - }, 380 - "node_modules/@esbuild/openharmony-arm64": { 381 - "version": "0.27.2", 382 - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", 383 - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", 384 - "cpu": [ 385 - "arm64" 386 - ], 387 - "dev": true, 388 - "license": "MIT", 389 - "optional": true, 390 - "os": [ 391 - "openharmony" 392 - ], 393 - "engines": { 394 - "node": ">=18" 395 - } 396 - }, 397 - "node_modules/@esbuild/sunos-x64": { 398 - "version": "0.27.2", 399 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", 400 - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", 401 - "cpu": [ 402 - "x64" 403 - ], 404 - "dev": true, 405 - "license": "MIT", 406 - "optional": true, 407 - "os": [ 408 - "sunos" 409 - ], 410 - "engines": { 411 - "node": ">=18" 412 - } 413 - }, 414 - "node_modules/@esbuild/win32-arm64": { 415 - "version": "0.27.2", 416 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", 417 - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", 418 - "cpu": [ 419 - "arm64" 420 - ], 421 - "dev": true, 422 - "license": "MIT", 423 - "optional": true, 424 - "os": [ 425 - "win32" 426 - ], 427 - "engines": { 428 - "node": ">=18" 429 - } 430 - }, 431 - "node_modules/@esbuild/win32-ia32": { 432 - "version": "0.27.2", 433 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", 434 - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", 435 - "cpu": [ 436 - "ia32" 437 - ], 438 - "dev": true, 439 - "license": "MIT", 440 - "optional": true, 441 - "os": [ 442 - "win32" 443 - ], 444 - "engines": { 445 - "node": ">=18" 446 - } 447 - }, 448 - "node_modules/@esbuild/win32-x64": { 449 - "version": "0.27.2", 450 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", 451 - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", 452 - "cpu": [ 453 - "x64" 454 - ], 455 - "dev": true, 456 - "license": "MIT", 457 - "optional": true, 458 - "os": [ 459 - "win32" 460 - ], 461 - "engines": { 462 - "node": ">=18" 463 - } 464 - }, 465 - "node_modules/@inertiajs/core": { 466 - "version": "2.3.8", 467 - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.3.8.tgz", 468 - "integrity": "sha512-WIF/ea9FH+yR/nLLrOX9TNN20X2pcHZBLQJYCLZ/oLMaS6GSlnMtHZv5GtKNjmIpSiMvg2PiAqtDF/mvbnr+rQ==", 469 - "license": "MIT", 470 - "dependencies": { 471 - "@types/lodash-es": "^4.17.12", 472 - "axios": "^1.13.2", 473 - "laravel-precognition": "^1.0.0", 474 - "lodash-es": "^4.17.21", 475 - "qs": "^6.14.1" 476 - } 477 - }, 478 - "node_modules/@inertiajs/svelte": { 479 - "version": "2.3.8", 480 - "resolved": "https://registry.npmjs.org/@inertiajs/svelte/-/svelte-2.3.8.tgz", 481 - "integrity": "sha512-BbwAvhv9ltvg70K6tnfPUjt6qKV2Mk/doiquJeIHnnDyDAq10XuaI5221v2aZQH0nAl38izWwkYXsNIlSu5G1Q==", 482 - "license": "MIT", 483 - "dependencies": { 484 - "@inertiajs/core": "2.3.8", 485 - "@types/lodash-es": "^4.17.12", 486 - "laravel-precognition": "^1.0.0", 487 - "lodash-es": "^4.17.21" 488 - }, 489 - "peerDependencies": { 490 - "svelte": "^4.0.0 || ^5.0.0" 491 - } 492 - }, 493 - "node_modules/@jridgewell/gen-mapping": { 494 - "version": "0.3.13", 495 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 496 - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 497 - "license": "MIT", 498 - "dependencies": { 499 - "@jridgewell/sourcemap-codec": "^1.5.0", 500 - "@jridgewell/trace-mapping": "^0.3.24" 501 - } 502 - }, 503 - "node_modules/@jridgewell/remapping": { 504 - "version": "2.3.5", 505 - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 506 - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 507 - "license": "MIT", 508 - "dependencies": { 509 - "@jridgewell/gen-mapping": "^0.3.5", 510 - "@jridgewell/trace-mapping": "^0.3.24" 511 - } 512 - }, 513 - "node_modules/@jridgewell/resolve-uri": { 514 - "version": "3.1.2", 515 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 516 - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 517 - "license": "MIT", 518 - "engines": { 519 - "node": ">=6.0.0" 520 - } 521 - }, 522 - "node_modules/@jridgewell/sourcemap-codec": { 523 - "version": "1.5.5", 524 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 525 - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 526 - "license": "MIT" 527 - }, 528 - "node_modules/@jridgewell/trace-mapping": { 529 - "version": "0.3.31", 530 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 531 - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 532 - "license": "MIT", 533 - "dependencies": { 534 - "@jridgewell/resolve-uri": "^3.1.0", 535 - "@jridgewell/sourcemap-codec": "^1.4.14" 536 - } 537 - }, 538 - "node_modules/@parcel/watcher": { 539 - "version": "2.5.4", 540 - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.4.tgz", 541 - "integrity": "sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==", 542 - "dev": true, 543 - "hasInstallScript": true, 544 - "license": "MIT", 545 - "dependencies": { 546 - "detect-libc": "^2.0.3", 547 - "is-glob": "^4.0.3", 548 - "node-addon-api": "^7.0.0", 549 - "picomatch": "^4.0.3" 550 - }, 551 - "engines": { 552 - "node": ">= 10.0.0" 553 - }, 554 - "funding": { 555 - "type": "opencollective", 556 - "url": "https://opencollective.com/parcel" 557 - }, 558 - "optionalDependencies": { 559 - "@parcel/watcher-android-arm64": "2.5.4", 560 - "@parcel/watcher-darwin-arm64": "2.5.4", 561 - "@parcel/watcher-darwin-x64": "2.5.4", 562 - "@parcel/watcher-freebsd-x64": "2.5.4", 563 - "@parcel/watcher-linux-arm-glibc": "2.5.4", 564 - "@parcel/watcher-linux-arm-musl": "2.5.4", 565 - "@parcel/watcher-linux-arm64-glibc": "2.5.4", 566 - "@parcel/watcher-linux-arm64-musl": "2.5.4", 567 - "@parcel/watcher-linux-x64-glibc": "2.5.4", 568 - "@parcel/watcher-linux-x64-musl": "2.5.4", 569 - "@parcel/watcher-win32-arm64": "2.5.4", 570 - "@parcel/watcher-win32-ia32": "2.5.4", 571 - "@parcel/watcher-win32-x64": "2.5.4" 572 - } 573 - }, 574 - "node_modules/@parcel/watcher-android-arm64": { 575 - "version": "2.5.4", 576 - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz", 577 - "integrity": "sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==", 578 - "cpu": [ 579 - "arm64" 580 - ], 581 - "dev": true, 582 - "license": "MIT", 583 - "optional": true, 584 - "os": [ 585 - "android" 586 - ], 587 - "engines": { 588 - "node": ">= 10.0.0" 589 - }, 590 - "funding": { 591 - "type": "opencollective", 592 - "url": "https://opencollective.com/parcel" 593 - } 594 - }, 595 - "node_modules/@parcel/watcher-darwin-arm64": { 596 - "version": "2.5.4", 597 - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz", 598 - "integrity": "sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==", 599 - "cpu": [ 600 - "arm64" 601 - ], 602 - "dev": true, 603 - "license": "MIT", 604 - "optional": true, 605 - "os": [ 606 - "darwin" 607 - ], 608 - "engines": { 609 - "node": ">= 10.0.0" 610 - }, 611 - "funding": { 612 - "type": "opencollective", 613 - "url": "https://opencollective.com/parcel" 614 - } 615 - }, 616 - "node_modules/@parcel/watcher-darwin-x64": { 617 - "version": "2.5.4", 618 - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz", 619 - "integrity": "sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==", 620 - "cpu": [ 621 - "x64" 622 - ], 623 - "dev": true, 624 - "license": "MIT", 625 - "optional": true, 626 - "os": [ 627 - "darwin" 628 - ], 629 - "engines": { 630 - "node": ">= 10.0.0" 631 - }, 632 - "funding": { 633 - "type": "opencollective", 634 - "url": "https://opencollective.com/parcel" 635 - } 636 - }, 637 - "node_modules/@parcel/watcher-freebsd-x64": { 638 - "version": "2.5.4", 639 - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz", 640 - "integrity": "sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==", 641 - "cpu": [ 642 - "x64" 643 - ], 644 - "dev": true, 645 - "license": "MIT", 646 - "optional": true, 647 - "os": [ 648 - "freebsd" 649 - ], 650 - "engines": { 651 - "node": ">= 10.0.0" 652 - }, 653 - "funding": { 654 - "type": "opencollective", 655 - "url": "https://opencollective.com/parcel" 656 - } 657 - }, 658 - "node_modules/@parcel/watcher-linux-arm-glibc": { 659 - "version": "2.5.4", 660 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz", 661 - "integrity": "sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==", 662 - "cpu": [ 663 - "arm" 664 - ], 665 - "dev": true, 666 - "license": "MIT", 667 - "optional": true, 668 - "os": [ 669 - "linux" 670 - ], 671 - "engines": { 672 - "node": ">= 10.0.0" 673 - }, 674 - "funding": { 675 - "type": "opencollective", 676 - "url": "https://opencollective.com/parcel" 677 - } 678 - }, 679 - "node_modules/@parcel/watcher-linux-arm-musl": { 680 - "version": "2.5.4", 681 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz", 682 - "integrity": "sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==", 683 - "cpu": [ 684 - "arm" 685 - ], 686 - "dev": true, 687 - "license": "MIT", 688 - "optional": true, 689 - "os": [ 690 - "linux" 691 - ], 692 - "engines": { 693 - "node": ">= 10.0.0" 694 - }, 695 - "funding": { 696 - "type": "opencollective", 697 - "url": "https://opencollective.com/parcel" 698 - } 699 - }, 700 - "node_modules/@parcel/watcher-linux-arm64-glibc": { 701 - "version": "2.5.4", 702 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz", 703 - "integrity": "sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==", 704 - "cpu": [ 705 - "arm64" 706 - ], 707 - "dev": true, 708 - "license": "MIT", 709 - "optional": true, 710 - "os": [ 711 - "linux" 712 - ], 713 - "engines": { 714 - "node": ">= 10.0.0" 715 - }, 716 - "funding": { 717 - "type": "opencollective", 718 - "url": "https://opencollective.com/parcel" 719 - } 720 - }, 721 - "node_modules/@parcel/watcher-linux-arm64-musl": { 722 - "version": "2.5.4", 723 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz", 724 - "integrity": "sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==", 725 - "cpu": [ 726 - "arm64" 727 - ], 728 - "dev": true, 729 - "license": "MIT", 730 - "optional": true, 731 - "os": [ 732 - "linux" 733 - ], 734 - "engines": { 735 - "node": ">= 10.0.0" 736 - }, 737 - "funding": { 738 - "type": "opencollective", 739 - "url": "https://opencollective.com/parcel" 740 - } 741 - }, 742 - "node_modules/@parcel/watcher-linux-x64-glibc": { 743 - "version": "2.5.4", 744 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz", 745 - "integrity": "sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==", 746 - "cpu": [ 747 - "x64" 748 - ], 749 - "dev": true, 750 - "license": "MIT", 751 - "optional": true, 752 - "os": [ 753 - "linux" 754 - ], 755 - "engines": { 756 - "node": ">= 10.0.0" 757 - }, 758 - "funding": { 759 - "type": "opencollective", 760 - "url": "https://opencollective.com/parcel" 761 - } 762 - }, 763 - "node_modules/@parcel/watcher-linux-x64-musl": { 764 - "version": "2.5.4", 765 - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz", 766 - "integrity": "sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==", 767 - "cpu": [ 768 - "x64" 769 - ], 770 - "dev": true, 771 - "license": "MIT", 772 - "optional": true, 773 - "os": [ 774 - "linux" 775 - ], 776 - "engines": { 777 - "node": ">= 10.0.0" 778 - }, 779 - "funding": { 780 - "type": "opencollective", 781 - "url": "https://opencollective.com/parcel" 782 - } 783 - }, 784 - "node_modules/@parcel/watcher-win32-arm64": { 785 - "version": "2.5.4", 786 - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz", 787 - "integrity": "sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==", 788 - "cpu": [ 789 - "arm64" 790 - ], 791 - "dev": true, 792 - "license": "MIT", 793 - "optional": true, 794 - "os": [ 795 - "win32" 796 - ], 797 - "engines": { 798 - "node": ">= 10.0.0" 799 - }, 800 - "funding": { 801 - "type": "opencollective", 802 - "url": "https://opencollective.com/parcel" 803 - } 804 - }, 805 - "node_modules/@parcel/watcher-win32-ia32": { 806 - "version": "2.5.4", 807 - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz", 808 - "integrity": "sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==", 809 - "cpu": [ 810 - "ia32" 811 - ], 812 - "dev": true, 813 - "license": "MIT", 814 - "optional": true, 815 - "os": [ 816 - "win32" 817 - ], 818 - "engines": { 819 - "node": ">= 10.0.0" 820 - }, 821 - "funding": { 822 - "type": "opencollective", 823 - "url": "https://opencollective.com/parcel" 824 - } 825 - }, 826 - "node_modules/@parcel/watcher-win32-x64": { 827 - "version": "2.5.4", 828 - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz", 829 - "integrity": "sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==", 830 - "cpu": [ 831 - "x64" 832 - ], 833 - "dev": true, 834 - "license": "MIT", 835 - "optional": true, 836 - "os": [ 837 - "win32" 838 - ], 839 - "engines": { 840 - "node": ">= 10.0.0" 841 - }, 842 - "funding": { 843 - "type": "opencollective", 844 - "url": "https://opencollective.com/parcel" 845 - } 846 - }, 847 - "node_modules/@sveltejs/acorn-typescript": { 848 - "version": "1.0.8", 849 - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", 850 - "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==", 851 - "license": "MIT", 852 - "peerDependencies": { 853 - "acorn": "^8.9.0" 854 - } 855 - }, 856 - "node_modules/@tailwindcss/cli": { 857 - "version": "4.1.18", 858 - "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.18.tgz", 859 - "integrity": "sha512-sMZ+lZbDyxwjD2E0L7oRUjJ01Ffjtme5OtjvvnC+cV4CEDcbqzbp25TCpxHj6kWLU9+DlqJOiNgSOgctC2aZmg==", 860 - "dev": true, 861 - "license": "MIT", 862 - "dependencies": { 863 - "@parcel/watcher": "^2.5.1", 864 - "@tailwindcss/node": "4.1.18", 865 - "@tailwindcss/oxide": "4.1.18", 866 - "enhanced-resolve": "^5.18.3", 867 - "mri": "^1.2.0", 868 - "picocolors": "^1.1.1", 869 - "tailwindcss": "4.1.18" 870 - }, 871 - "bin": { 872 - "tailwindcss": "dist/index.mjs" 873 - } 874 - }, 875 - "node_modules/@tailwindcss/forms": { 876 - "version": "0.5.11", 877 - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", 878 - "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", 879 - "dev": true, 880 - "license": "MIT", 881 - "dependencies": { 882 - "mini-svg-data-uri": "^1.2.3" 883 - }, 884 - "peerDependencies": { 885 - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" 886 - } 887 - }, 888 - "node_modules/@tailwindcss/node": { 889 - "version": "4.1.18", 890 - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", 891 - "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", 892 - "dev": true, 893 - "license": "MIT", 894 - "dependencies": { 895 - "@jridgewell/remapping": "^2.3.4", 896 - "enhanced-resolve": "^5.18.3", 897 - "jiti": "^2.6.1", 898 - "lightningcss": "1.30.2", 899 - "magic-string": "^0.30.21", 900 - "source-map-js": "^1.2.1", 901 - "tailwindcss": "4.1.18" 902 - } 903 - }, 904 - "node_modules/@tailwindcss/oxide": { 905 - "version": "4.1.18", 906 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", 907 - "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", 908 - "dev": true, 909 - "license": "MIT", 910 - "engines": { 911 - "node": ">= 10" 912 - }, 913 - "optionalDependencies": { 914 - "@tailwindcss/oxide-android-arm64": "4.1.18", 915 - "@tailwindcss/oxide-darwin-arm64": "4.1.18", 916 - "@tailwindcss/oxide-darwin-x64": "4.1.18", 917 - "@tailwindcss/oxide-freebsd-x64": "4.1.18", 918 - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", 919 - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", 920 - "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", 921 - "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", 922 - "@tailwindcss/oxide-linux-x64-musl": "4.1.18", 923 - "@tailwindcss/oxide-wasm32-wasi": "4.1.18", 924 - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", 925 - "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" 926 - } 927 - }, 928 - "node_modules/@tailwindcss/oxide-android-arm64": { 929 - "version": "4.1.18", 930 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", 931 - "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", 932 - "cpu": [ 933 - "arm64" 934 - ], 935 - "dev": true, 936 - "license": "MIT", 937 - "optional": true, 938 - "os": [ 939 - "android" 940 - ], 941 - "engines": { 942 - "node": ">= 10" 943 - } 944 - }, 945 - "node_modules/@tailwindcss/oxide-darwin-arm64": { 946 - "version": "4.1.18", 947 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", 948 - "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", 949 - "cpu": [ 950 - "arm64" 951 - ], 952 - "dev": true, 953 - "license": "MIT", 954 - "optional": true, 955 - "os": [ 956 - "darwin" 957 - ], 958 - "engines": { 959 - "node": ">= 10" 960 - } 961 - }, 962 - "node_modules/@tailwindcss/oxide-darwin-x64": { 963 - "version": "4.1.18", 964 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", 965 - "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", 966 - "cpu": [ 967 - "x64" 968 - ], 969 - "dev": true, 970 - "license": "MIT", 971 - "optional": true, 972 - "os": [ 973 - "darwin" 974 - ], 975 - "engines": { 976 - "node": ">= 10" 977 - } 978 - }, 979 - "node_modules/@tailwindcss/oxide-freebsd-x64": { 980 - "version": "4.1.18", 981 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", 982 - "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", 983 - "cpu": [ 984 - "x64" 985 - ], 986 - "dev": true, 987 - "license": "MIT", 988 - "optional": true, 989 - "os": [ 990 - "freebsd" 991 - ], 992 - "engines": { 993 - "node": ">= 10" 994 - } 995 - }, 996 - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 997 - "version": "4.1.18", 998 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", 999 - "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", 1000 - "cpu": [ 1001 - "arm" 1002 - ], 1003 - "dev": true, 1004 - "license": "MIT", 1005 - "optional": true, 1006 - "os": [ 1007 - "linux" 1008 - ], 1009 - "engines": { 1010 - "node": ">= 10" 1011 - } 1012 - }, 1013 - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 1014 - "version": "4.1.18", 1015 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", 1016 - "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", 1017 - "cpu": [ 1018 - "arm64" 1019 - ], 1020 - "dev": true, 1021 - "license": "MIT", 1022 - "optional": true, 1023 - "os": [ 1024 - "linux" 1025 - ], 1026 - "engines": { 1027 - "node": ">= 10" 1028 - } 1029 - }, 1030 - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 1031 - "version": "4.1.18", 1032 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", 1033 - "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", 1034 - "cpu": [ 1035 - "arm64" 1036 - ], 1037 - "dev": true, 1038 - "license": "MIT", 1039 - "optional": true, 1040 - "os": [ 1041 - "linux" 1042 - ], 1043 - "engines": { 1044 - "node": ">= 10" 1045 - } 1046 - }, 1047 - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 1048 - "version": "4.1.18", 1049 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", 1050 - "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", 1051 - "cpu": [ 1052 - "x64" 1053 - ], 1054 - "dev": true, 1055 - "license": "MIT", 1056 - "optional": true, 1057 - "os": [ 1058 - "linux" 1059 - ], 1060 - "engines": { 1061 - "node": ">= 10" 1062 - } 1063 - }, 1064 - "node_modules/@tailwindcss/oxide-linux-x64-musl": { 1065 - "version": "4.1.18", 1066 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", 1067 - "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", 1068 - "cpu": [ 1069 - "x64" 1070 - ], 1071 - "dev": true, 1072 - "license": "MIT", 1073 - "optional": true, 1074 - "os": [ 1075 - "linux" 1076 - ], 1077 - "engines": { 1078 - "node": ">= 10" 1079 - } 1080 - }, 1081 - "node_modules/@tailwindcss/oxide-wasm32-wasi": { 1082 - "version": "4.1.18", 1083 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", 1084 - "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", 1085 - "bundleDependencies": [ 1086 - "@napi-rs/wasm-runtime", 1087 - "@emnapi/core", 1088 - "@emnapi/runtime", 1089 - "@tybys/wasm-util", 1090 - "@emnapi/wasi-threads", 1091 - "tslib" 1092 - ], 1093 - "cpu": [ 1094 - "wasm32" 1095 - ], 1096 - "dev": true, 1097 - "license": "MIT", 1098 - "optional": true, 1099 - "dependencies": { 1100 - "@emnapi/core": "^1.7.1", 1101 - "@emnapi/runtime": "^1.7.1", 1102 - "@emnapi/wasi-threads": "^1.1.0", 1103 - "@napi-rs/wasm-runtime": "^1.1.0", 1104 - "@tybys/wasm-util": "^0.10.1", 1105 - "tslib": "^2.4.0" 1106 - }, 1107 - "engines": { 1108 - "node": ">=14.0.0" 1109 - } 1110 - }, 1111 - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 1112 - "version": "4.1.18", 1113 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", 1114 - "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", 1115 - "cpu": [ 1116 - "arm64" 1117 - ], 1118 - "dev": true, 1119 - "license": "MIT", 1120 - "optional": true, 1121 - "os": [ 1122 - "win32" 1123 - ], 1124 - "engines": { 1125 - "node": ">= 10" 1126 - } 1127 - }, 1128 - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 1129 - "version": "4.1.18", 1130 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", 1131 - "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", 1132 - "cpu": [ 1133 - "x64" 1134 - ], 1135 - "dev": true, 1136 - "license": "MIT", 1137 - "optional": true, 1138 - "os": [ 1139 - "win32" 1140 - ], 1141 - "engines": { 1142 - "node": ">= 10" 1143 - } 1144 - }, 1145 - "node_modules/@types/estree": { 1146 - "version": "1.0.8", 1147 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1148 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1149 - "license": "MIT" 1150 - }, 1151 - "node_modules/@types/lodash": { 1152 - "version": "4.17.23", 1153 - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", 1154 - "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", 1155 - "license": "MIT" 1156 - }, 1157 - "node_modules/@types/lodash-es": { 1158 - "version": "4.17.12", 1159 - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", 1160 - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", 1161 - "license": "MIT", 1162 - "dependencies": { 1163 - "@types/lodash": "*" 1164 - } 1165 - }, 1166 - "node_modules/@types/node": { 1167 - "version": "25.0.8", 1168 - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", 1169 - "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", 1170 - "dev": true, 1171 - "license": "MIT", 1172 - "dependencies": { 1173 - "undici-types": "~7.16.0" 1174 - } 1175 - }, 1176 - "node_modules/acorn": { 1177 - "version": "8.15.0", 1178 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 1179 - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 1180 - "license": "MIT", 1181 - "bin": { 1182 - "acorn": "bin/acorn" 1183 - }, 1184 - "engines": { 1185 - "node": ">=0.4.0" 1186 - } 1187 - }, 1188 - "node_modules/aria-query": { 1189 - "version": "5.3.2", 1190 - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 1191 - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 1192 - "license": "Apache-2.0", 1193 - "engines": { 1194 - "node": ">= 0.4" 1195 - } 1196 - }, 1197 - "node_modules/asynckit": { 1198 - "version": "0.4.0", 1199 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1200 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1201 - "license": "MIT" 1202 - }, 1203 - "node_modules/axios": { 1204 - "version": "1.13.2", 1205 - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", 1206 - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", 1207 - "license": "MIT", 1208 - "dependencies": { 1209 - "follow-redirects": "^1.15.6", 1210 - "form-data": "^4.0.4", 1211 - "proxy-from-env": "^1.1.0" 1212 - } 1213 - }, 1214 - "node_modules/axobject-query": { 1215 - "version": "4.1.0", 1216 - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 1217 - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 1218 - "license": "Apache-2.0", 1219 - "engines": { 1220 - "node": ">= 0.4" 1221 - } 1222 - }, 1223 - "node_modules/call-bind-apply-helpers": { 1224 - "version": "1.0.2", 1225 - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1226 - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1227 - "license": "MIT", 1228 - "dependencies": { 1229 - "es-errors": "^1.3.0", 1230 - "function-bind": "^1.1.2" 1231 - }, 1232 - "engines": { 1233 - "node": ">= 0.4" 1234 - } 1235 - }, 1236 - "node_modules/call-bound": { 1237 - "version": "1.0.4", 1238 - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 1239 - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 1240 - "license": "MIT", 1241 - "dependencies": { 1242 - "call-bind-apply-helpers": "^1.0.2", 1243 - "get-intrinsic": "^1.3.0" 1244 - }, 1245 - "engines": { 1246 - "node": ">= 0.4" 1247 - }, 1248 - "funding": { 1249 - "url": "https://github.com/sponsors/ljharb" 1250 - } 1251 - }, 1252 - "node_modules/clsx": { 1253 - "version": "2.1.1", 1254 - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1255 - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1256 - "license": "MIT", 1257 - "engines": { 1258 - "node": ">=6" 1259 - } 1260 - }, 1261 - "node_modules/combined-stream": { 1262 - "version": "1.0.8", 1263 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1264 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1265 - "license": "MIT", 1266 - "dependencies": { 1267 - "delayed-stream": "~1.0.0" 1268 - }, 1269 - "engines": { 1270 - "node": ">= 0.8" 1271 - } 1272 - }, 1273 - "node_modules/delayed-stream": { 1274 - "version": "1.0.0", 1275 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1276 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1277 - "license": "MIT", 1278 - "engines": { 1279 - "node": ">=0.4.0" 1280 - } 1281 - }, 1282 - "node_modules/detect-libc": { 1283 - "version": "2.1.2", 1284 - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1285 - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1286 - "dev": true, 1287 - "license": "Apache-2.0", 1288 - "engines": { 1289 - "node": ">=8" 1290 - } 1291 - }, 1292 - "node_modules/devalue": { 1293 - "version": "5.6.2", 1294 - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", 1295 - "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", 1296 - "license": "MIT" 1297 - }, 1298 - "node_modules/dunder-proto": { 1299 - "version": "1.0.1", 1300 - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1301 - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1302 - "license": "MIT", 1303 - "dependencies": { 1304 - "call-bind-apply-helpers": "^1.0.1", 1305 - "es-errors": "^1.3.0", 1306 - "gopd": "^1.2.0" 1307 - }, 1308 - "engines": { 1309 - "node": ">= 0.4" 1310 - } 1311 - }, 1312 - "node_modules/enhanced-resolve": { 1313 - "version": "5.18.4", 1314 - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", 1315 - "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", 1316 - "dev": true, 1317 - "license": "MIT", 1318 - "dependencies": { 1319 - "graceful-fs": "^4.2.4", 1320 - "tapable": "^2.2.0" 1321 - }, 1322 - "engines": { 1323 - "node": ">=10.13.0" 1324 - } 1325 - }, 1326 - "node_modules/es-define-property": { 1327 - "version": "1.0.1", 1328 - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1329 - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1330 - "license": "MIT", 1331 - "engines": { 1332 - "node": ">= 0.4" 1333 - } 1334 - }, 1335 - "node_modules/es-errors": { 1336 - "version": "1.3.0", 1337 - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1338 - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1339 - "license": "MIT", 1340 - "engines": { 1341 - "node": ">= 0.4" 1342 - } 1343 - }, 1344 - "node_modules/es-object-atoms": { 1345 - "version": "1.1.1", 1346 - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1347 - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1348 - "license": "MIT", 1349 - "dependencies": { 1350 - "es-errors": "^1.3.0" 1351 - }, 1352 - "engines": { 1353 - "node": ">= 0.4" 1354 - } 1355 - }, 1356 - "node_modules/es-set-tostringtag": { 1357 - "version": "2.1.0", 1358 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 1359 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 1360 - "license": "MIT", 1361 - "dependencies": { 1362 - "es-errors": "^1.3.0", 1363 - "get-intrinsic": "^1.2.6", 1364 - "has-tostringtag": "^1.0.2", 1365 - "hasown": "^2.0.2" 1366 - }, 1367 - "engines": { 1368 - "node": ">= 0.4" 1369 - } 1370 - }, 1371 - "node_modules/esbuild": { 1372 - "version": "0.27.2", 1373 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", 1374 - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", 1375 - "dev": true, 1376 - "hasInstallScript": true, 1377 - "license": "MIT", 1378 - "bin": { 1379 - "esbuild": "bin/esbuild" 1380 - }, 1381 - "engines": { 1382 - "node": ">=18" 1383 - }, 1384 - "optionalDependencies": { 1385 - "@esbuild/aix-ppc64": "0.27.2", 1386 - "@esbuild/android-arm": "0.27.2", 1387 - "@esbuild/android-arm64": "0.27.2", 1388 - "@esbuild/android-x64": "0.27.2", 1389 - "@esbuild/darwin-arm64": "0.27.2", 1390 - "@esbuild/darwin-x64": "0.27.2", 1391 - "@esbuild/freebsd-arm64": "0.27.2", 1392 - "@esbuild/freebsd-x64": "0.27.2", 1393 - "@esbuild/linux-arm": "0.27.2", 1394 - "@esbuild/linux-arm64": "0.27.2", 1395 - "@esbuild/linux-ia32": "0.27.2", 1396 - "@esbuild/linux-loong64": "0.27.2", 1397 - "@esbuild/linux-mips64el": "0.27.2", 1398 - "@esbuild/linux-ppc64": "0.27.2", 1399 - "@esbuild/linux-riscv64": "0.27.2", 1400 - "@esbuild/linux-s390x": "0.27.2", 1401 - "@esbuild/linux-x64": "0.27.2", 1402 - "@esbuild/netbsd-arm64": "0.27.2", 1403 - "@esbuild/netbsd-x64": "0.27.2", 1404 - "@esbuild/openbsd-arm64": "0.27.2", 1405 - "@esbuild/openbsd-x64": "0.27.2", 1406 - "@esbuild/openharmony-arm64": "0.27.2", 1407 - "@esbuild/sunos-x64": "0.27.2", 1408 - "@esbuild/win32-arm64": "0.27.2", 1409 - "@esbuild/win32-ia32": "0.27.2", 1410 - "@esbuild/win32-x64": "0.27.2" 1411 - } 1412 - }, 1413 - "node_modules/esbuild-svelte": { 1414 - "version": "0.9.4", 1415 - "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.4.tgz", 1416 - "integrity": "sha512-v/a0GjkKN06nal2QLluxjk2GXsei3fdtjIuHRa6pVnri5rQBZ6pj4a2WwjLfRojgRsLwDHl4xSeZ1BeUHsqQrw==", 1417 - "dev": true, 1418 - "license": "MIT", 1419 - "dependencies": { 1420 - "@jridgewell/trace-mapping": "^0.3.19" 1421 - }, 1422 - "engines": { 1423 - "node": ">=18" 1424 - }, 1425 - "peerDependencies": { 1426 - "esbuild": ">=0.17.0", 1427 - "svelte": ">=4.2.1 <6" 1428 - } 1429 - }, 1430 - "node_modules/esm-env": { 1431 - "version": "1.2.2", 1432 - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1433 - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1434 - "license": "MIT" 1435 - }, 1436 - "node_modules/esrap": { 1437 - "version": "2.2.1", 1438 - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz", 1439 - "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==", 1440 - "license": "MIT", 1441 - "dependencies": { 1442 - "@jridgewell/sourcemap-codec": "^1.4.15" 1443 - } 1444 - }, 1445 - "node_modules/follow-redirects": { 1446 - "version": "1.15.11", 1447 - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", 1448 - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", 1449 - "funding": [ 1450 - { 1451 - "type": "individual", 1452 - "url": "https://github.com/sponsors/RubenVerborgh" 1453 - } 1454 - ], 1455 - "license": "MIT", 1456 - "engines": { 1457 - "node": ">=4.0" 1458 - }, 1459 - "peerDependenciesMeta": { 1460 - "debug": { 1461 - "optional": true 1462 - } 1463 - } 1464 - }, 1465 - "node_modules/form-data": { 1466 - "version": "4.0.5", 1467 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", 1468 - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", 1469 - "license": "MIT", 1470 - "dependencies": { 1471 - "asynckit": "^0.4.0", 1472 - "combined-stream": "^1.0.8", 1473 - "es-set-tostringtag": "^2.1.0", 1474 - "hasown": "^2.0.2", 1475 - "mime-types": "^2.1.12" 1476 - }, 1477 - "engines": { 1478 - "node": ">= 6" 1479 - } 1480 - }, 1481 - "node_modules/function-bind": { 1482 - "version": "1.1.2", 1483 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1484 - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1485 - "license": "MIT", 1486 - "funding": { 1487 - "url": "https://github.com/sponsors/ljharb" 1488 - } 1489 - }, 1490 - "node_modules/get-intrinsic": { 1491 - "version": "1.3.0", 1492 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 1493 - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 1494 - "license": "MIT", 1495 - "dependencies": { 1496 - "call-bind-apply-helpers": "^1.0.2", 1497 - "es-define-property": "^1.0.1", 1498 - "es-errors": "^1.3.0", 1499 - "es-object-atoms": "^1.1.1", 1500 - "function-bind": "^1.1.2", 1501 - "get-proto": "^1.0.1", 1502 - "gopd": "^1.2.0", 1503 - "has-symbols": "^1.1.0", 1504 - "hasown": "^2.0.2", 1505 - "math-intrinsics": "^1.1.0" 1506 - }, 1507 - "engines": { 1508 - "node": ">= 0.4" 1509 - }, 1510 - "funding": { 1511 - "url": "https://github.com/sponsors/ljharb" 1512 - } 1513 - }, 1514 - "node_modules/get-proto": { 1515 - "version": "1.0.1", 1516 - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 1517 - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 1518 - "license": "MIT", 1519 - "dependencies": { 1520 - "dunder-proto": "^1.0.1", 1521 - "es-object-atoms": "^1.0.0" 1522 - }, 1523 - "engines": { 1524 - "node": ">= 0.4" 1525 - } 1526 - }, 1527 - "node_modules/gopd": { 1528 - "version": "1.2.0", 1529 - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 1530 - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 1531 - "license": "MIT", 1532 - "engines": { 1533 - "node": ">= 0.4" 1534 - }, 1535 - "funding": { 1536 - "url": "https://github.com/sponsors/ljharb" 1537 - } 1538 - }, 1539 - "node_modules/graceful-fs": { 1540 - "version": "4.2.11", 1541 - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1542 - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1543 - "dev": true, 1544 - "license": "ISC" 1545 - }, 1546 - "node_modules/has-symbols": { 1547 - "version": "1.1.0", 1548 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 1549 - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 1550 - "license": "MIT", 1551 - "engines": { 1552 - "node": ">= 0.4" 1553 - }, 1554 - "funding": { 1555 - "url": "https://github.com/sponsors/ljharb" 1556 - } 1557 - }, 1558 - "node_modules/has-tostringtag": { 1559 - "version": "1.0.2", 1560 - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 1561 - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 1562 - "license": "MIT", 1563 - "dependencies": { 1564 - "has-symbols": "^1.0.3" 1565 - }, 1566 - "engines": { 1567 - "node": ">= 0.4" 1568 - }, 1569 - "funding": { 1570 - "url": "https://github.com/sponsors/ljharb" 1571 - } 1572 - }, 1573 - "node_modules/hasown": { 1574 - "version": "2.0.2", 1575 - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1576 - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1577 - "license": "MIT", 1578 - "dependencies": { 1579 - "function-bind": "^1.1.2" 1580 - }, 1581 - "engines": { 1582 - "node": ">= 0.4" 1583 - } 1584 - }, 1585 - "node_modules/heroicons": { 1586 - "version": "2.2.0", 1587 - "resolved": "https://registry.npmjs.org/heroicons/-/heroicons-2.2.0.tgz", 1588 - "integrity": "sha512-yOwvztmNiBWqR946t+JdgZmyzEmnRMC2nxvHFC90bF1SUttwB6yJKYeme1JeEcBfobdOs827nCyiWBS2z/brog==", 1589 - "license": "MIT" 1590 - }, 1591 - "node_modules/is-extglob": { 1592 - "version": "2.1.1", 1593 - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1594 - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1595 - "dev": true, 1596 - "license": "MIT", 1597 - "engines": { 1598 - "node": ">=0.10.0" 1599 - } 1600 - }, 1601 - "node_modules/is-glob": { 1602 - "version": "4.0.3", 1603 - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1604 - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1605 - "dev": true, 1606 - "license": "MIT", 1607 - "dependencies": { 1608 - "is-extglob": "^2.1.1" 1609 - }, 1610 - "engines": { 1611 - "node": ">=0.10.0" 1612 - } 1613 - }, 1614 - "node_modules/is-reference": { 1615 - "version": "3.0.3", 1616 - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 1617 - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 1618 - "license": "MIT", 1619 - "dependencies": { 1620 - "@types/estree": "^1.0.6" 1621 - } 1622 - }, 1623 - "node_modules/jiti": { 1624 - "version": "2.6.1", 1625 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 1626 - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 1627 - "dev": true, 1628 - "license": "MIT", 1629 - "bin": { 1630 - "jiti": "lib/jiti-cli.mjs" 1631 - } 1632 - }, 1633 - "node_modules/laravel-precognition": { 1634 - "version": "1.0.0", 1635 - "resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-1.0.0.tgz", 1636 - "integrity": "sha512-hvXPT7dayCQAidxnsY0hab9Q+Y2rsh7xRpH9uiFtXN8Dekc3tIZt+NrxrOZ9N5SwHBmRBze/Bv+ElfXac0kD6g==", 1637 - "license": "MIT", 1638 - "dependencies": { 1639 - "axios": "^1.4.0", 1640 - "lodash-es": "^4.17.21" 1641 - } 1642 - }, 1643 - "node_modules/lightningcss": { 1644 - "version": "1.30.2", 1645 - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", 1646 - "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 1647 - "dev": true, 1648 - "license": "MPL-2.0", 1649 - "dependencies": { 1650 - "detect-libc": "^2.0.3" 1651 - }, 1652 - "engines": { 1653 - "node": ">= 12.0.0" 1654 - }, 1655 - "funding": { 1656 - "type": "opencollective", 1657 - "url": "https://opencollective.com/parcel" 1658 - }, 1659 - "optionalDependencies": { 1660 - "lightningcss-android-arm64": "1.30.2", 1661 - "lightningcss-darwin-arm64": "1.30.2", 1662 - "lightningcss-darwin-x64": "1.30.2", 1663 - "lightningcss-freebsd-x64": "1.30.2", 1664 - "lightningcss-linux-arm-gnueabihf": "1.30.2", 1665 - "lightningcss-linux-arm64-gnu": "1.30.2", 1666 - "lightningcss-linux-arm64-musl": "1.30.2", 1667 - "lightningcss-linux-x64-gnu": "1.30.2", 1668 - "lightningcss-linux-x64-musl": "1.30.2", 1669 - "lightningcss-win32-arm64-msvc": "1.30.2", 1670 - "lightningcss-win32-x64-msvc": "1.30.2" 1671 - } 1672 - }, 1673 - "node_modules/lightningcss-android-arm64": { 1674 - "version": "1.30.2", 1675 - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", 1676 - "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", 1677 - "cpu": [ 1678 - "arm64" 1679 - ], 1680 - "dev": true, 1681 - "license": "MPL-2.0", 1682 - "optional": true, 1683 - "os": [ 1684 - "android" 1685 - ], 1686 - "engines": { 1687 - "node": ">= 12.0.0" 1688 - }, 1689 - "funding": { 1690 - "type": "opencollective", 1691 - "url": "https://opencollective.com/parcel" 1692 - } 1693 - }, 1694 - "node_modules/lightningcss-darwin-arm64": { 1695 - "version": "1.30.2", 1696 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", 1697 - "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 1698 - "cpu": [ 1699 - "arm64" 1700 - ], 1701 - "dev": true, 1702 - "license": "MPL-2.0", 1703 - "optional": true, 1704 - "os": [ 1705 - "darwin" 1706 - ], 1707 - "engines": { 1708 - "node": ">= 12.0.0" 1709 - }, 1710 - "funding": { 1711 - "type": "opencollective", 1712 - "url": "https://opencollective.com/parcel" 1713 - } 1714 - }, 1715 - "node_modules/lightningcss-darwin-x64": { 1716 - "version": "1.30.2", 1717 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", 1718 - "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", 1719 - "cpu": [ 1720 - "x64" 1721 - ], 1722 - "dev": true, 1723 - "license": "MPL-2.0", 1724 - "optional": true, 1725 - "os": [ 1726 - "darwin" 1727 - ], 1728 - "engines": { 1729 - "node": ">= 12.0.0" 1730 - }, 1731 - "funding": { 1732 - "type": "opencollective", 1733 - "url": "https://opencollective.com/parcel" 1734 - } 1735 - }, 1736 - "node_modules/lightningcss-freebsd-x64": { 1737 - "version": "1.30.2", 1738 - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", 1739 - "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", 1740 - "cpu": [ 1741 - "x64" 1742 - ], 1743 - "dev": true, 1744 - "license": "MPL-2.0", 1745 - "optional": true, 1746 - "os": [ 1747 - "freebsd" 1748 - ], 1749 - "engines": { 1750 - "node": ">= 12.0.0" 1751 - }, 1752 - "funding": { 1753 - "type": "opencollective", 1754 - "url": "https://opencollective.com/parcel" 1755 - } 1756 - }, 1757 - "node_modules/lightningcss-linux-arm-gnueabihf": { 1758 - "version": "1.30.2", 1759 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", 1760 - "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", 1761 - "cpu": [ 1762 - "arm" 1763 - ], 1764 - "dev": true, 1765 - "license": "MPL-2.0", 1766 - "optional": true, 1767 - "os": [ 1768 - "linux" 1769 - ], 1770 - "engines": { 1771 - "node": ">= 12.0.0" 1772 - }, 1773 - "funding": { 1774 - "type": "opencollective", 1775 - "url": "https://opencollective.com/parcel" 1776 - } 1777 - }, 1778 - "node_modules/lightningcss-linux-arm64-gnu": { 1779 - "version": "1.30.2", 1780 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", 1781 - "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", 1782 - "cpu": [ 1783 - "arm64" 1784 - ], 1785 - "dev": true, 1786 - "license": "MPL-2.0", 1787 - "optional": true, 1788 - "os": [ 1789 - "linux" 1790 - ], 1791 - "engines": { 1792 - "node": ">= 12.0.0" 1793 - }, 1794 - "funding": { 1795 - "type": "opencollective", 1796 - "url": "https://opencollective.com/parcel" 1797 - } 1798 - }, 1799 - "node_modules/lightningcss-linux-arm64-musl": { 1800 - "version": "1.30.2", 1801 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", 1802 - "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", 1803 - "cpu": [ 1804 - "arm64" 1805 - ], 1806 - "dev": true, 1807 - "license": "MPL-2.0", 1808 - "optional": true, 1809 - "os": [ 1810 - "linux" 1811 - ], 1812 - "engines": { 1813 - "node": ">= 12.0.0" 1814 - }, 1815 - "funding": { 1816 - "type": "opencollective", 1817 - "url": "https://opencollective.com/parcel" 1818 - } 1819 - }, 1820 - "node_modules/lightningcss-linux-x64-gnu": { 1821 - "version": "1.30.2", 1822 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", 1823 - "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", 1824 - "cpu": [ 1825 - "x64" 1826 - ], 1827 - "dev": true, 1828 - "license": "MPL-2.0", 1829 - "optional": true, 1830 - "os": [ 1831 - "linux" 1832 - ], 1833 - "engines": { 1834 - "node": ">= 12.0.0" 1835 - }, 1836 - "funding": { 1837 - "type": "opencollective", 1838 - "url": "https://opencollective.com/parcel" 1839 - } 1840 - }, 1841 - "node_modules/lightningcss-linux-x64-musl": { 1842 - "version": "1.30.2", 1843 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", 1844 - "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", 1845 - "cpu": [ 1846 - "x64" 1847 - ], 1848 - "dev": true, 1849 - "license": "MPL-2.0", 1850 - "optional": true, 1851 - "os": [ 1852 - "linux" 1853 - ], 1854 - "engines": { 1855 - "node": ">= 12.0.0" 1856 - }, 1857 - "funding": { 1858 - "type": "opencollective", 1859 - "url": "https://opencollective.com/parcel" 1860 - } 1861 - }, 1862 - "node_modules/lightningcss-win32-arm64-msvc": { 1863 - "version": "1.30.2", 1864 - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", 1865 - "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", 1866 - "cpu": [ 1867 - "arm64" 1868 - ], 1869 - "dev": true, 1870 - "license": "MPL-2.0", 1871 - "optional": true, 1872 - "os": [ 1873 - "win32" 1874 - ], 1875 - "engines": { 1876 - "node": ">= 12.0.0" 1877 - }, 1878 - "funding": { 1879 - "type": "opencollective", 1880 - "url": "https://opencollective.com/parcel" 1881 - } 1882 - }, 1883 - "node_modules/lightningcss-win32-x64-msvc": { 1884 - "version": "1.30.2", 1885 - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", 1886 - "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", 1887 - "cpu": [ 1888 - "x64" 1889 - ], 1890 - "dev": true, 1891 - "license": "MPL-2.0", 1892 - "optional": true, 1893 - "os": [ 1894 - "win32" 1895 - ], 1896 - "engines": { 1897 - "node": ">= 12.0.0" 1898 - }, 1899 - "funding": { 1900 - "type": "opencollective", 1901 - "url": "https://opencollective.com/parcel" 1902 - } 1903 - }, 1904 - "node_modules/locate-character": { 1905 - "version": "3.0.0", 1906 - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1907 - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1908 - "license": "MIT" 1909 - }, 1910 - "node_modules/lodash-es": { 1911 - "version": "4.17.22", 1912 - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", 1913 - "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", 1914 - "license": "MIT" 1915 - }, 1916 - "node_modules/magic-string": { 1917 - "version": "0.30.21", 1918 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1919 - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1920 - "license": "MIT", 1921 - "dependencies": { 1922 - "@jridgewell/sourcemap-codec": "^1.5.5" 1923 - } 1924 - }, 1925 - "node_modules/math-intrinsics": { 1926 - "version": "1.1.0", 1927 - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 1928 - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 1929 - "license": "MIT", 1930 - "engines": { 1931 - "node": ">= 0.4" 1932 - } 1933 - }, 1934 - "node_modules/mime-db": { 1935 - "version": "1.52.0", 1936 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1937 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1938 - "license": "MIT", 1939 - "engines": { 1940 - "node": ">= 0.6" 1941 - } 1942 - }, 1943 - "node_modules/mime-types": { 1944 - "version": "2.1.35", 1945 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1946 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1947 - "license": "MIT", 1948 - "dependencies": { 1949 - "mime-db": "1.52.0" 1950 - }, 1951 - "engines": { 1952 - "node": ">= 0.6" 1953 - } 1954 - }, 1955 - "node_modules/mini-svg-data-uri": { 1956 - "version": "1.4.4", 1957 - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 1958 - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 1959 - "dev": true, 1960 - "license": "MIT", 1961 - "bin": { 1962 - "mini-svg-data-uri": "cli.js" 1963 - } 1964 - }, 1965 - "node_modules/mri": { 1966 - "version": "1.2.0", 1967 - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1968 - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1969 - "dev": true, 1970 - "license": "MIT", 1971 - "engines": { 1972 - "node": ">=4" 1973 - } 1974 - }, 1975 - "node_modules/node-addon-api": { 1976 - "version": "7.1.1", 1977 - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", 1978 - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", 1979 - "dev": true, 1980 - "license": "MIT" 1981 - }, 1982 - "node_modules/object-inspect": { 1983 - "version": "1.13.4", 1984 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 1985 - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 1986 - "license": "MIT", 1987 - "engines": { 1988 - "node": ">= 0.4" 1989 - }, 1990 - "funding": { 1991 - "url": "https://github.com/sponsors/ljharb" 1992 - } 1993 - }, 1994 - "node_modules/picocolors": { 1995 - "version": "1.1.1", 1996 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1997 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1998 - "dev": true, 1999 - "license": "ISC" 2000 - }, 2001 - "node_modules/picomatch": { 2002 - "version": "4.0.3", 2003 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2004 - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2005 - "dev": true, 2006 - "license": "MIT", 2007 - "engines": { 2008 - "node": ">=12" 2009 - }, 2010 - "funding": { 2011 - "url": "https://github.com/sponsors/jonschlinkert" 2012 - } 2013 - }, 2014 - "node_modules/proxy-from-env": { 2015 - "version": "1.1.0", 2016 - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 2017 - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 2018 - "license": "MIT" 2019 - }, 2020 - "node_modules/qs": { 2021 - "version": "6.14.1", 2022 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", 2023 - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", 2024 - "license": "BSD-3-Clause", 2025 - "dependencies": { 2026 - "side-channel": "^1.1.0" 2027 - }, 2028 - "engines": { 2029 - "node": ">=0.6" 2030 - }, 2031 - "funding": { 2032 - "url": "https://github.com/sponsors/ljharb" 2033 - } 2034 - }, 2035 - "node_modules/side-channel": { 2036 - "version": "1.1.0", 2037 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 2038 - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 2039 - "license": "MIT", 2040 - "dependencies": { 2041 - "es-errors": "^1.3.0", 2042 - "object-inspect": "^1.13.3", 2043 - "side-channel-list": "^1.0.0", 2044 - "side-channel-map": "^1.0.1", 2045 - "side-channel-weakmap": "^1.0.2" 2046 - }, 2047 - "engines": { 2048 - "node": ">= 0.4" 2049 - }, 2050 - "funding": { 2051 - "url": "https://github.com/sponsors/ljharb" 2052 - } 2053 - }, 2054 - "node_modules/side-channel-list": { 2055 - "version": "1.0.0", 2056 - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 2057 - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 2058 - "license": "MIT", 2059 - "dependencies": { 2060 - "es-errors": "^1.3.0", 2061 - "object-inspect": "^1.13.3" 2062 - }, 2063 - "engines": { 2064 - "node": ">= 0.4" 2065 - }, 2066 - "funding": { 2067 - "url": "https://github.com/sponsors/ljharb" 2068 - } 2069 - }, 2070 - "node_modules/side-channel-map": { 2071 - "version": "1.0.1", 2072 - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 2073 - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 2074 - "license": "MIT", 2075 - "dependencies": { 2076 - "call-bound": "^1.0.2", 2077 - "es-errors": "^1.3.0", 2078 - "get-intrinsic": "^1.2.5", 2079 - "object-inspect": "^1.13.3" 2080 - }, 2081 - "engines": { 2082 - "node": ">= 0.4" 2083 - }, 2084 - "funding": { 2085 - "url": "https://github.com/sponsors/ljharb" 2086 - } 2087 - }, 2088 - "node_modules/side-channel-weakmap": { 2089 - "version": "1.0.2", 2090 - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 2091 - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 2092 - "license": "MIT", 2093 - "dependencies": { 2094 - "call-bound": "^1.0.2", 2095 - "es-errors": "^1.3.0", 2096 - "get-intrinsic": "^1.2.5", 2097 - "object-inspect": "^1.13.3", 2098 - "side-channel-map": "^1.0.1" 2099 - }, 2100 - "engines": { 2101 - "node": ">= 0.4" 2102 - }, 2103 - "funding": { 2104 - "url": "https://github.com/sponsors/ljharb" 2105 - } 2106 - }, 2107 - "node_modules/source-map-js": { 2108 - "version": "1.2.1", 2109 - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2110 - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2111 - "dev": true, 2112 - "license": "BSD-3-Clause", 2113 - "engines": { 2114 - "node": ">=0.10.0" 2115 - } 2116 - }, 2117 - "node_modules/svelte": { 2118 - "version": "5.46.4", 2119 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.4.tgz", 2120 - "integrity": "sha512-VJwdXrmv9L8L7ZasJeWcCjoIuMRVbhuxbss0fpVnR8yorMmjNDwcjIH08vS6wmSzzzgAG5CADQ1JuXPS2nwt9w==", 2121 - "license": "MIT", 2122 - "dependencies": { 2123 - "@jridgewell/remapping": "^2.3.4", 2124 - "@jridgewell/sourcemap-codec": "^1.5.0", 2125 - "@sveltejs/acorn-typescript": "^1.0.5", 2126 - "@types/estree": "^1.0.5", 2127 - "acorn": "^8.12.1", 2128 - "aria-query": "^5.3.1", 2129 - "axobject-query": "^4.1.0", 2130 - "clsx": "^2.1.1", 2131 - "devalue": "^5.6.2", 2132 - "esm-env": "^1.2.1", 2133 - "esrap": "^2.2.1", 2134 - "is-reference": "^3.0.3", 2135 - "locate-character": "^3.0.0", 2136 - "magic-string": "^0.30.11", 2137 - "zimmerframe": "^1.1.2" 2138 - }, 2139 - "engines": { 2140 - "node": ">=18" 2141 - } 2142 - }, 2143 - "node_modules/svelte-preprocess": { 2144 - "version": "6.0.3", 2145 - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", 2146 - "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", 2147 - "dev": true, 2148 - "hasInstallScript": true, 2149 - "license": "MIT", 2150 - "engines": { 2151 - "node": ">= 18.0.0" 2152 - }, 2153 - "peerDependencies": { 2154 - "@babel/core": "^7.10.2", 2155 - "coffeescript": "^2.5.1", 2156 - "less": "^3.11.3 || ^4.0.0", 2157 - "postcss": "^7 || ^8", 2158 - "postcss-load-config": ">=3", 2159 - "pug": "^3.0.0", 2160 - "sass": "^1.26.8", 2161 - "stylus": ">=0.55", 2162 - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", 2163 - "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", 2164 - "typescript": "^5.0.0" 2165 - }, 2166 - "peerDependenciesMeta": { 2167 - "@babel/core": { 2168 - "optional": true 2169 - }, 2170 - "coffeescript": { 2171 - "optional": true 2172 - }, 2173 - "less": { 2174 - "optional": true 2175 - }, 2176 - "postcss": { 2177 - "optional": true 2178 - }, 2179 - "postcss-load-config": { 2180 - "optional": true 2181 - }, 2182 - "pug": { 2183 - "optional": true 2184 - }, 2185 - "sass": { 2186 - "optional": true 2187 - }, 2188 - "stylus": { 2189 - "optional": true 2190 - }, 2191 - "sugarss": { 2192 - "optional": true 2193 - }, 2194 - "typescript": { 2195 - "optional": true 2196 - } 2197 - } 2198 - }, 2199 - "node_modules/tailwindcss": { 2200 - "version": "4.1.18", 2201 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", 2202 - "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", 2203 - "license": "MIT" 2204 - }, 2205 - "node_modules/tapable": { 2206 - "version": "2.3.0", 2207 - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 2208 - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 2209 - "dev": true, 2210 - "license": "MIT", 2211 - "engines": { 2212 - "node": ">=6" 2213 - }, 2214 - "funding": { 2215 - "type": "opencollective", 2216 - "url": "https://opencollective.com/webpack" 2217 - } 2218 - }, 2219 - "node_modules/typescript": { 2220 - "version": "5.9.3", 2221 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 2222 - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 2223 - "dev": true, 2224 - "license": "Apache-2.0", 2225 - "bin": { 2226 - "tsc": "bin/tsc", 2227 - "tsserver": "bin/tsserver" 2228 - }, 2229 - "engines": { 2230 - "node": ">=14.17" 2231 - } 2232 - }, 2233 - "node_modules/undici-types": { 2234 - "version": "7.16.0", 2235 - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", 2236 - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", 2237 - "dev": true, 2238 - "license": "MIT" 2239 - }, 2240 - "node_modules/zimmerframe": { 2241 - "version": "1.1.4", 2242 - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 2243 - "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 2244 - "license": "MIT" 2245 - } 2246 - } 2247 - }
-24
web/package.json
··· 1 - { 2 - "devDependencies": { 3 - "@tailwindcss/cli": "^4.1.18", 4 - "@tailwindcss/forms": "^0.5.11", 5 - "@types/node": "^25.0.3", 6 - "esbuild": "0.27.2", 7 - "esbuild-svelte": "^0.9.4", 8 - "svelte-preprocess": "^6.0.3", 9 - "typescript": "^5.6.3" 10 - }, 11 - "dependencies": { 12 - "@inertiajs/svelte": "2.3.8", 13 - "heroicons": "^2.2.0", 14 - "svelte": "^5.46.3", 15 - "tailwindcss": "^4.1.18" 16 - }, 17 - "scripts": { 18 - "watch:js": "node esbuild.config.ts --watch", 19 - "build:js": "node esbuild.config.ts --deploy", 20 - "watch:css": "tailwindcss -i styles/app.css -o ../private/assets/styles.css --watch", 21 - "build:css": "tailwindcss -i styles/app.css -o ../private/assets/styles.css --minify" 22 - }, 23 - "type": "module" 24 - }
-118
web/styles/app.css
··· 1 - @layer theme, base, components, utilities; 2 - 3 - @import "tailwindcss/theme.css" layer(theme); 4 - @import "tailwindcss/preflight.css" layer(base); 5 - @import "tailwindcss/utilities.css" layer(utilities); 6 - 7 - @plugin "@tailwindcss/forms"; 8 - @plugin "../lib/plugins/heroicons.plugin.js"; 9 - 10 - @import "./colors.css" layer(theme); 11 - @import "./button.css" layer(components); 12 - @import "./typography.css" layer(components); 13 - 14 - @utility container { 15 - padding-inline: var(--spacing-4); 16 - margin-inline: auto; 17 - } 18 - 19 - body { 20 - background-color: var(--color-base-100); 21 - } 22 - 23 - @theme { 24 - /* Spacing */ 25 - --spacing-px: 1px; 26 - --spacing-0: 0px; 27 - --spacing-0_5: 0.125rem; 28 - --spacing-1: 0.25rem; 29 - --spacing-1_5: 0.375rem; 30 - --spacing-2: 0.5rem; 31 - --spacing-2_5: 0.625rem; 32 - --spacing-3: 0.75rem; 33 - --spacing-3_5: 0.875rem; 34 - --spacing-4: 1rem; 35 - --spacing-4_5: 1.125rem; 36 - --spacing-5: 1.25rem; 37 - --spacing-6: 1.5rem; 38 - --spacing-7: 1.75rem; 39 - --spacing-8: 2rem; 40 - --spacing-9: 2.25rem; 41 - --spacing-10: 2.5rem; 42 - --spacing-11: 2.75rem; 43 - --spacing-12: 3rem; 44 - --spacing-14: 3.5rem; 45 - --spacing-16: 4rem; 46 - --spacing-18: 4.5rem; 47 - --spacing-20: 5rem; 48 - --spacing-22: 5.5rem; 49 - --spacing-24: 6rem; 50 - --spacing-28: 7rem; 51 - --spacing-32: 8rem; 52 - --spacing-36: 9rem; 53 - --spacing-40: 10rem; 54 - --spacing-44: 11rem; 55 - --spacing-48: 12rem; 56 - --spacing-52: 13rem; 57 - --spacing-56: 14rem; 58 - --spacing-60: 15rem; 59 - --spacing-64: 16rem; 60 - --spacing-72: 18rem; 61 - --spacing-80: 20rem; 62 - --spacing-96: 24rem; 63 - 64 - /* Widths */ 65 - --width-3xs: 16rem; 66 - --width-2xs: 18rem; 67 - --width-xs: 20rem; 68 - --width-sm: 24rem; 69 - --width-md: 28rem; 70 - --width-lg: 32rem; 71 - --width-xl: 36rem; 72 - --width-2xl: 42rem; 73 - --width-3xl: 48rem; 74 - --width-4xl: 56rem; 75 - --width-5xl: 64rem; 76 - --width-6xl: 72rem; 77 - --width-7xl: 80rem; 78 - --width-prose: 65ch; 79 - 80 - /* Line height */ 81 - --leading-tighter: 1.175; 82 - --leading-tight: 1.25; 83 - --leading-snug: 1.375; 84 - --leading-normal: 1.5; 85 - --leading-relaxed: 1.625; 86 - --leading-loose: 2; 87 - } 88 - 89 - @theme inline { 90 - --color-base-100: var(--theme-color-base-100); 91 - --color-base-200: var(--theme-color-base-200); 92 - --color-base-300: var(--theme-color-base-300); 93 - --color-content-100: var(--theme-color-content-100); 94 - --color-content-200: var(--theme-color-content-200); 95 - --color-content-300: var(--theme-color-content-300); 96 - --color-muted-100: var(--theme-color-muted-100); 97 - --color-muted-200: var(--theme-color-muted-200); 98 - --color-muted-300: var(--theme-color-muted-300); 99 - --color-primary: var(--theme-color-primary); 100 - --color-primary-contrast: var(--theme-color-primary-contrast); 101 - --color-secondary: var(--theme-color-secondary); 102 - --color-secondary-contrast: var(--theme-color-secondary-contrast); 103 - --color-success: var(--theme-color-success); 104 - --color-success-contrast: var(--theme-color-success-contrast); 105 - --color-warning: var(--theme-color-warning); 106 - --color-warning-contrast: var(--theme-color-warning-contrast); 107 - --color-danger: var(--theme-color-danger); 108 - --color-danger-contrast: var(--theme-color-danger-contrast); 109 - } 110 - 111 - .icon { 112 - mask-repeat: no-repeat; 113 - background-color: currentColor; 114 - vertical-align: middle; 115 - display: inline-block; 116 - width: var(--spacing-4); 117 - height: var(--spacing-4); 118 - }
-83
web/styles/button.css
··· 1 - .button { 2 - font-size: var(--text-sm); 3 - font-weight: var(--font-weight-medium); 4 - display: inline-flex; 5 - align-items: center; 6 - justify-content: center; 7 - text-align: center; 8 - } 9 - 10 - .button.variant-default { 11 - gap: var(--spacing-1); 12 - line-height: var(--text-sm--line-height); 13 - height: var(--spacing-10); 14 - 15 - padding-inline: var(--padding-inline); 16 - border: 1px solid var(--border-color); 17 - 18 - background-color: var(--bg-color); 19 - color: var(--text-color); 20 - 21 - &:hover:not(:where(:disabled, .state-disabled)) { 22 - background-color: hsl(from var(--bg-color) h calc(s * 0.8) l / 0.8); 23 - } 24 - 25 - &:active { 26 - color: hsl(from var(--text-color) h s l / 0.75); 27 - } 28 - 29 - &:disabled, 30 - &.state-disabled { 31 - pointer-events: none; 32 - color: hsl(from var(--text-color) h s l / 0.75); 33 - background-color: hsl(from var(--bg-color) h calc(s * 0.8) l / 0.8); 34 - 35 - &:hover { 36 - cursor: not-allowed; 37 - } 38 - } 39 - 40 - &.with-icon > .icon { 41 - width: var(--spacing-5); 42 - height: var(--spacing-5); 43 - } 44 - } 45 - 46 - .button.variant-text { 47 - gap: var(--spacing-0_5); 48 - line-height: var(--leading-tight); 49 - height: var(--spacing-4); 50 - } 51 - 52 - .button.variant-text > .icon { 53 - margin-bottom: -2px; 54 - } 55 - 56 - .button.shape-square { 57 - --border-radius: var(--radius-md); 58 - --padding-inline: var(--spacing-3); 59 - } 60 - 61 - .button.shape-rounded { 62 - --border-radius: 9999px; 63 - --padding-inline: var(--spacing-3_5); 64 - } 65 - 66 - .button.shape-circle { 67 - --border-radius: 9999px; 68 - --padding-inline: var(--spacing-1); 69 - aspect-ratio: 1 / 1; 70 - width: var(--spacing-9); 71 - } 72 - 73 - .button.scheme-default { 74 - --bg-color: var(--color-secondary); 75 - --text-color: var(--color-secondary-contrast); 76 - --border-color: hsl(from var(--text-color) h s l / 0.5); 77 - } 78 - 79 - .button.scheme-primary { 80 - --bg-color: var(--color-primary); 81 - --text-color: var(--color-primary-contrast); 82 - --border-color: hsl(from var(--bg-color) h s calc(l * 0.25) / 1); 83 - }
-80
web/styles/colors.css
··· 1 - @layer theme { 2 - :root { 3 - --relative-l-100: 98%; 4 - --relative-l-200: 96%; 5 - --relative-l-300: 94%; 6 - --relative-l-400: 92%; 7 - --relative-l-500: 90%; 8 - --relative-l-600: 88%; 9 - --relative-l-700: 86%; 10 - --relative-l-800: 84%; 11 - --relative-l-900: 82%; 12 - --relative-l-950: 80%; 13 - 14 - --theme-color-base-100: var(--color-zinc-50); 15 - --theme-color-base-200: var(--color-zinc-100); 16 - --theme-color-base-300: #fff; 17 - 18 - --theme-color-content-100: var(--color-zinc-950); 19 - --theme-color-content-200: var(--color-zinc-800); 20 - --theme-color-content-300: var(--color-zinc-600); 21 - 22 - --theme-color-muted-100: var(--color-zinc-200); 23 - --theme-color-muted-200: var(--color-zinc-300); 24 - --theme-color-muted-300: var(--color-zinc-400); 25 - 26 - --theme-color-primary: var(--color-blue-600); 27 - --theme-color-primary-contrast: var(--color-blue-50); 28 - --theme-color-secondary: var(--color-blue-200); 29 - --theme-color-secondary-contrast: var(--color-blue-950); 30 - --theme-color-success: #00cc66; 31 - --theme-color-success-contrast: #fff; 32 - --theme-color-warning: #ff9900; 33 - --theme-color-warning-contrast: #fff; 34 - --theme-color-danger: #ff3333; 35 - --theme-color-danger-contrast: #fff; 36 - 37 - --theme-default-border: 1px solid var(--color-muted-200); 38 - } 39 - 40 - /*@media (prefers-color-scheme: dark) { 41 - :root { 42 - --mixin-color-light-100: #fff 20%; 43 - --mixin-color-light-200: #fff 50%; 44 - --mixin-color-light-300: #fff 80%; 45 - 46 - --mixin-color-dark-100: #000 20%; 47 - --mixin-color-dark-200: #000 50%; 48 - --mixin-color-dark-300: #000 80%; 49 - 50 - --theme-color-base-100: color-mix( 51 - in srgb, 52 - var(--color-zinc-900), 53 - var(--color-zinc-950) 54 - ); 55 - --theme-color-base-200: var(--color-zinc-900); 56 - --theme-color-base-300: var(--color-zinc-950); 57 - 58 - --theme-color-content-100: var(--color-zinc-50); 59 - --theme-color-content-200: var(--color-zinc-100); 60 - --theme-color-content-300: var(--color-zinc-400); 61 - 62 - --theme-color-muted-100: var(--color-zinc-800); 63 - --theme-color-muted-200: var(--color-zinc-700); 64 - --theme-color-muted-300: var(--color-zinc-500); 65 - 66 - --theme-color-primary: var(--color-blue-600); 67 - --theme-color-primary-contrast: var(--color-blue-50); 68 - --theme-color-secondary: var(--color-blue-200); 69 - --theme-color-secondary-contrast: var(--color-blue-950); 70 - --theme-color-success: #00cc66; 71 - --theme-color-success-contrast: #fff; 72 - --theme-color-warning: #ff9900; 73 - --theme-color-warning-contrast: #fff; 74 - --theme-color-danger: #ff3333; 75 - --theme-color-danger-contrast: #fff; 76 - 77 - --theme-default-border: 1px solid var(--color-muted-200); 78 - } 79 - }*/ 80 - }
-51
web/styles/typography.css
··· 1 - .h1 { 2 - font-size: var(--text-2xl); 3 - line-height: var(--leading-normal); 4 - font-weight: var(--font-weight-medium); 5 - color: var(--color-content-100); 6 - } 7 - 8 - .h2 { 9 - font-size: var(--text-lg); 10 - line-height: var(--leading-snug); 11 - font-weight: var(--font-weight-medium); 12 - color: var(--color-content-100); 13 - } 14 - 15 - .h3 { 16 - font-size: var(--text-sm); 17 - line-height: var(--leading-tight); 18 - font-weight: var(--font-weight-semibold); 19 - color: var(--color-content-100); 20 - text-transform: uppercase; 21 - } 22 - 23 - .subtitle { 24 - font-size: var(--text-sm); 25 - line-height: var(--text-sm--line-height); 26 - font-weight: var(--font-weight-normal); 27 - color: var(--color-content-300); 28 - } 29 - 30 - .subtitle > a { 31 - text-decoration: underline; 32 - } 33 - 34 - .subtitle > a:hover { 35 - color: var(--color-content-100); 36 - } 37 - 38 - /* Automatically add spacing between hgroup children, unless the hgroup has the class no-hgroup */ 39 - hgroup:not(.no-hgroup) { 40 - display: flex; 41 - flex-direction: column; 42 - } 43 - 44 - .label { 45 - font-size: var(--text-sm); 46 - font-weight: var(--font-weight-medium); 47 - line-height: var(--leading-tighter); 48 - color: var(--color-content-100); 49 - width: fit-content; 50 - max-width: 100%; 51 - }
-19
web/tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - "module": "es2022", 4 - "target": "es2022", 5 - "moduleResolution": "bundler", 6 - "isolatedModules": true, 7 - "verbatimModuleSyntax": true, 8 - "lib": ["esnext", "DOM", "DOM.Iterable"], 9 - "skipLibCheck": true, 10 - "baseUrl": ".", 11 - "paths": { 12 - "$routes": ["lib/.gen/routes"], 13 - "$schemas/*": ["lib/.gen/schemas/*"], 14 - "$components/*": ["./components/*"], 15 - "$lib/*": ["lib/*"], 16 - }, 17 - }, 18 - "exclude": ["./node_modules/**"], 19 - }
-15
web/views/Index.svelte
··· 1 - <script lang="ts"> 2 - import Link from "$components/interaction/Link.svelte"; 3 - import { 4 - DELETE_AuthenticationLogout, 5 - GET_AuthenticationLogin, 6 - } from "$routes"; 7 - 8 - type Props = {}; 9 - </script> 10 - 11 - <h1 class="h1">Home</h1> 12 - 13 - <Link href={DELETE_AuthenticationLogout()}>Logout</Link> 14 - 15 - <Link href={GET_AuthenticationLogin()}>Login</Link>
-79
web/views/authentication/Login.svelte
··· 1 - <script module lang="ts"> 2 - import Button from "$components/interaction/Button.svelte"; 3 - import Field from "$components/interaction/Field.svelte"; 4 - import { default as Base } from "$components/layouts/Layout.svelte"; 5 - import { default as Authentication } from "$components/layouts/authentication/Layout.svelte"; 6 - import { 7 - GET_AuthenticationRegister, 8 - POST_AuthenticationLogin, 9 - } from "$routes"; 10 - import { Link, useForm } from "@inertiajs/svelte"; 11 - 12 - export const layout = [Base, Authentication]; 13 - </script> 14 - 15 - <script lang="ts"> 16 - import Back from "$components/interaction/Back.svelte"; 17 - import { GET_Index } from "$routes"; 18 - import type { LoginForm } from "$schemas/requests"; 19 - 20 - type Props = {}; 21 - 22 - let {}: Props = $props(); 23 - 24 - const form = useForm({ 25 - email: "", 26 - password: "", 27 - } as LoginForm); 28 - 29 - function submit(e?: SubmitEvent) { 30 - e?.preventDefault(); 31 - $form.submit(POST_AuthenticationLogin(), {}); 32 - } 33 - </script> 34 - 35 - <header class="header"> 36 - <hgroup> 37 - <h1 class="h1">Login</h1> 38 - <p class="subtitle"> 39 - Don't have an account yet? Go to the <Link 40 - href={GET_AuthenticationRegister()}>register</Link 41 - > page to create an account. 42 - </p> 43 - </hgroup> 44 - </header> 45 - 46 - <Back href={GET_Index()} label="Go back home" /> 47 - 48 - <form onsubmit={submit}> 49 - <Field 50 - as="input" 51 - type="text" 52 - label="Email" 53 - bind:value={$form.email} 54 - description="Enter your email" 55 - errors={$form.errors["email"]} 56 - /> 57 - <Field 58 - as="input" 59 - type="password" 60 - label="Password" 61 - bind:value={$form.password} 62 - description="Enter your password" 63 - errors={$form.errors.password} 64 - /> 65 - <Field 66 - as="checkbox" 67 - label="Remember me" 68 - description="We will keep you logged in for 30 days" 69 - /> 70 - <Button scheme="primary">Submit</Button> 71 - </form> 72 - 73 - <style> 74 - form { 75 - display: flex; 76 - flex-direction: column; 77 - gap: var(--spacing-4); 78 - } 79 - </style>
-86
web/views/authentication/Register.svelte
··· 1 - <script module lang="ts"> 2 - import Button from "$components/interaction/Button.svelte"; 3 - import Field from "$components/interaction/Field.svelte"; 4 - import { default as Base } from "$components/layouts/Layout.svelte"; 5 - import { default as Authentication } from "$components/layouts/authentication/Layout.svelte"; 6 - import { 7 - GET_AuthenticationLogin, 8 - POST_AuthenticationRegister, 9 - } from "$routes"; 10 - import { Link, useForm } from "@inertiajs/svelte"; 11 - 12 - export const layout = [Base, Authentication]; 13 - </script> 14 - 15 - <script lang="ts"> 16 - import Back from "$components/interaction/Back.svelte"; 17 - import { GET_Index } from "$routes"; 18 - import type { RegisterForm } from "$schemas/requests"; 19 - 20 - type Props = {}; 21 - 22 - let {}: Props = $props(); 23 - 24 - const form = useForm({ 25 - email: "", 26 - password: "", 27 - confirm_password: "", 28 - } as RegisterForm); 29 - 30 - function submit(e?: SubmitEvent) { 31 - e?.preventDefault(); 32 - $form.submit(POST_AuthenticationRegister(), {}); 33 - } 34 - 35 - form.subscribe((form) => { 36 - console.log(form.errors); 37 - }); 38 - </script> 39 - 40 - <header class="header"> 41 - <hgroup> 42 - <h1 class="h1">Register</h1> 43 - <p class="subtitle"> 44 - Create a new account to start using the application. Already have an 45 - account? <Link href={GET_AuthenticationLogin()}>Login</Link> 46 - </p> 47 - </hgroup> 48 - </header> 49 - 50 - <Back href={GET_Index()} label="Go back home" /> 51 - 52 - <form onsubmit={submit}> 53 - <Field 54 - as="input" 55 - type="text" 56 - label="Email" 57 - bind:value={$form.email} 58 - description="Enter your email" 59 - errors={$form.errors.email} 60 - /> 61 - <Field 62 - as="input" 63 - type="password" 64 - label="Password" 65 - bind:value={$form.password} 66 - description="Enter your password" 67 - errors={$form.errors.password} 68 - /> 69 - <Field 70 - as="input" 71 - type="password" 72 - label="Confirm password" 73 - bind:value={$form.confirm_password} 74 - description="Confirm your password" 75 - errors={$form.errors.confirm_password} 76 - /> 77 - <Button scheme="primary">submit</Button> 78 - </form> 79 - 80 - <style> 81 - form { 82 - display: flex; 83 - flex-direction: column; 84 - gap: var(--spacing-4); 85 - } 86 - </style>
-65
web/views/friends/Index.svelte
··· 1 - <script lang="ts"> 2 - import UserListItem from "$components/social/UserListItem.svelte"; 3 - import type { Page, User } from "$schemas/responses"; 4 - 5 - type Props = { 6 - following: Page<User>; 7 - followers: Page<User>; 8 - }; 9 - 10 - let { following, followers }: Props = $props(); 11 - </script> 12 - 13 - <div class="content"> 14 - <header class="header"> 15 - <hgroup> 16 - <h1 class="h1">Friends</h1> 17 - <p class="subtitle"> 18 - Lorem ipsum dolor sit amet consectetur, adipisicing elit. Aut magnam 19 - velit, exercitationem quis laboriosam earum fuga! 20 - </p> 21 - </hgroup> 22 - </header> 23 - 24 - <section class="users"> 25 - <header class="header"> 26 - <hgroup> 27 - <h2 class="h2">Following</h2> 28 - </hgroup> 29 - </header> 30 - 31 - <div> 32 - {#each following.items as item} 33 - <UserListItem user={item} leading="none" /> 34 - {/each} 35 - </div> 36 - </section> 37 - 38 - <section class="users"> 39 - <header class="header"> 40 - <hgroup> 41 - <h2 class="h2">Followers</h2> 42 - </hgroup> 43 - </header> 44 - 45 - <div> 46 - {#each followers.items as item} 47 - <UserListItem user={item} leading="none" /> 48 - {/each} 49 - </div> 50 - </section> 51 - </div> 52 - 53 - <style> 54 - .users { 55 - display: flex; 56 - flex-direction: column; 57 - gap: var(--spacing-4); 58 - } 59 - 60 - .users > div { 61 - display: flex; 62 - flex-direction: column; 63 - gap: var(--spacing-2); 64 - } 65 - </style>
-14
web/views/library/Index.svelte
··· 1 - <script lang="ts" module> 2 - import { default as Base } from "$components/layouts/Layout.svelte"; 3 - import { default as Web } from "$components/layouts/web/Layout.svelte"; 4 - import Layout from "$components/layouts/library/Layout.svelte"; 5 - 6 - export const layout = [Base, Web, Layout]; 7 - </script> 8 - 9 - <script lang="ts"> 10 - </script> 11 - 12 - <header> 13 - <h1>Artists</h1> 14 - </header>
-52
web/views/library/artists/Index.svelte
··· 1 - <script lang="ts" module> 2 - import { default as Base } from "$components/layouts/Layout.svelte"; 3 - import { default as Web } from "$components/layouts/web/Layout.svelte"; 4 - import Layout from "$components/layouts/library/Layout.svelte"; 5 - 6 - export const layout = [Base, Web, Layout]; 7 - </script> 8 - 9 - <script lang="ts"> 10 - import type { Page, Artist } from "$schemas/responses"; 11 - import ArtistListItem from "$components/catalog/ArtistListItem.svelte"; 12 - 13 - type Props = { 14 - artists: Page<Artist>; 15 - }; 16 - 17 - let { artists }: Props = $props(); 18 - </script> 19 - 20 - <div class="content"> 21 - <header class="header"> 22 - <hgroup> 23 - <h1 class="h1">Artists</h1> 24 - <p class="subtitle"> 25 - Lorem ipsum dolor sit, amet consectetur adipisicing elit. Similique 26 - illum, reiciendis officia consequatur harum id amet beatae aliquid 27 - mollitia fugiat voluptas corrupti repudiandae ad suscipit quae 28 - explicabo tenetur facilis. Amet, quasi necessitatibus. 29 - </p> 30 - </hgroup> 31 - </header> 32 - 33 - <section class="artists"> 34 - {#each artists.items as item} 35 - <ArtistListItem artist={item} /> 36 - {/each} 37 - </section> 38 - </div> 39 - 40 - <style> 41 - .content { 42 - display: flex; 43 - flex-direction: column; 44 - gap: var(--spacing-4); 45 - } 46 - 47 - .artists { 48 - display: flex; 49 - flex-direction: column; 50 - gap: var(--spacing-2); 51 - } 52 - </style>
web/views/mixtapes/Form.svelte

This is a binary file and will not be displayed.

-20
web/views/mixtapes/Index.svelte
··· 1 - <script lang="ts"> 2 - type Props = {}; 3 - 4 - let {}: Props = $props(); 5 - </script> 6 - 7 - <div class="content"> 8 - <header class="header"> 9 - <hgroup> 10 - <h1 class="h1">Mixtapes</h1> 11 - <p class="subtitle"> 12 - Lorem ipsum dolor sit amet consectetur, adipisicing elit. Aut magnam 13 - velit, exercitationem quis laboriosam earum fuga! 14 - </p> 15 - </hgroup> 16 - </header> 17 - </div> 18 - 19 - <style> 20 - </style>
web/views/mixtapes/Show.svelte

This is a binary file and will not be displayed.

-16
web/views/settings/Index.svelte
··· 1 - <script lang="ts" module> 2 - import { default as Base } from "$components/layouts/Layout.svelte"; 3 - import { default as Web } from "$components/layouts/web/Layout.svelte"; 4 - import Layout from "$components/layouts/settings/Layout.svelte"; 5 - 6 - export const layout = [Base, Web, Layout]; 7 - </script> 8 - 9 - <script lang="ts"> 10 - </script> 11 - 12 - <header class="header"> 13 - <hgroup> 14 - <h1 class="h1">Settings</h1> 15 - </hgroup> 16 - </header>
-16
web/views/settings/Services.svelte
··· 1 - <script lang="ts" module> 2 - import { default as Base } from "$components/layouts/Layout.svelte"; 3 - import { default as Web } from "$components/layouts/web/Layout.svelte"; 4 - import Layout from "$components/layouts/settings/Layout.svelte"; 5 - 6 - export const layout = [Base, Web, Layout]; 7 - </script> 8 - 9 - <script lang="ts"> 10 - </script> 11 - 12 - <header class="header"> 13 - <hgroup> 14 - <h1 class="h1">Services</h1> 15 - </hgroup> 16 - </header>