diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c2afd89 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.env +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.idea +.svelte-kit +build +.git diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 8f0de65..0000000 --- a/.editorconfig +++ /dev/null @@ -1,18 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 4 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -trim_trailing_whitespace = false - -[*.{yml,yaml}] -indent_size = 2 - -[docker-compose.yml] -indent_size = 4 diff --git a/.env.example b/.env.example index 5ce893e..1d22eb7 100644 --- a/.env.example +++ b/.env.example @@ -1,71 +1,7 @@ -APP_NAME=Laravel -APP_ENV=local -APP_KEY= -APP_DEBUG=true -APP_URL=http://localhost +DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/local" -APP_LOCALE=en -APP_FALLBACK_LOCALE=en -APP_FAKER_LOCALE=en_US - -APP_MAINTENANCE_DRIVER=file -# APP_MAINTENANCE_STORE=database - -PHP_CLI_SERVER_WORKERS=4 - -BCRYPT_ROUNDS=12 - -LOG_CHANNEL=stack -LOG_STACK=single -LOG_DEPRECATIONS_CHANNEL=null -LOG_LEVEL=debug - -DB_CONNECTION=sqlite -# DB_HOST=127.0.0.1 -# DB_PORT=3306 -# DB_DATABASE=laravel -# DB_USERNAME=root -# DB_PASSWORD= - -SESSION_DRIVER=database -SESSION_LIFETIME=120 -SESSION_ENCRYPT=false -SESSION_PATH=/ -SESSION_DOMAIN=null - -BROADCAST_CONNECTION=log -FILESYSTEM_DISK=local -QUEUE_CONNECTION=database - -CACHE_STORE=database -# CACHE_PREFIX= - -MEMCACHED_HOST=127.0.0.1 - -REDIS_CLIENT=phpredis -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 - -MAIL_MAILER=log -MAIL_SCHEME=null -MAIL_HOST=127.0.0.1 -MAIL_PORT=2525 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_FROM_ADDRESS="hello@example.com" -MAIL_FROM_NAME="${APP_NAME}" - -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= -AWS_USE_PATH_STYLE_ENDPOINT=false - -VITE_APP_NAME="${APP_NAME}" +PUBLIC_ENDPOINT=https://flbxcup.fr KEYCLOAK_CLIENT_ID= KEYCLOAK_CLIENT_SECRET= -KEYCLOAK_REDIRECT_URI=/auth/callback -KEYCLOAK_BASE_URL= -KEYCLOAK_REALM=master +KEYCLOAK_ENDPOINT= diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index f50f803..0000000 --- a/.gitattributes +++ /dev/null @@ -1,10 +0,0 @@ -* text=auto eol=lf - -*.blade.php diff=html -*.css diff=css -*.html diff=html -*.md diff=markdown -*.php diff=php - -CHANGELOG.md export-ignore -README.md export-ignore diff --git a/.gitignore b/.gitignore index b8c0974..0431d76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,32 +1,25 @@ -/.phpunit.cache -/bootstrap/ssr -/node_modules -/public/build -/public/manifest.json -/public/service-worker.js -/public/hot -/public/storage -/public/vendor -/storage/*.key -/storage/pail -/vendor -.env -.env.backup -.env.production -.phpactor.json -.phpunit.result.cache -Homestead.json -Homestead.yaml -npm-debug.log -yarn-error.log -/auth.json -/.fleet -/.idea -/.nova -/.vscode -/.zed -.DS_Store +node_modules -**/caddy -frankenphp -frankenphp-worker.php +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +/generated/prisma diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..acf9a26 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/flbxcup.iml b/.idea/flbxcup.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/flbxcup.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..a351215 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7e732a9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.oxlintrc.json b/.oxlintrc.json deleted file mode 100644 index c5d224d..0000000 --- a/.oxlintrc.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": [ - "typescript", - "unicorn" - ], - "categories": { - "correctness": "off" - }, - "env": { - "builtin": true, - "browser": true, - "commonjs": true, - "node": true, - "shared-node-browser": true - }, - "rules": { - "for-direction": "error", - "no-async-promise-executor": "error", - "no-case-declarations": "error", - "no-class-assign": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-const-assign": "error", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-class-members": "error", - "no-dupe-else-if": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-pattern": "error", - "no-empty-static-block": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-func-assign": "error", - "no-global-assign": "error", - "no-import-assign": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "error", - "no-new-native-nonconstructor": "error", - "no-nonoctal-decimal-escape": "error", - "no-obj-calls": "error", - "no-prototype-builtins": "error", - "no-redeclare": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-setter-return": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-this-before-super": "error", - "no-unexpected-multiline": "off", - "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "no-unsafe-optional-chaining": "error", - "no-unused-labels": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": "error", - "no-useless-backreference": "error", - "no-useless-catch": "error", - "no-useless-escape": "error", - "no-with": "error", - "require-yield": "error", - "use-isnan": "error", - "valid-typeof": "error", - "@typescript-eslint/ban-ts-comment": "error", - "no-array-constructor": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "no-unused-expressions": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/triple-slash-reference": "error", - "curly": "off", - "unicorn/empty-brace-spaces": "off", - "unicorn/no-nested-ternary": "off", - "unicorn/number-literal-case": "off" - }, - "globals": { - "route": "readonly", - "Laravel": "readonly" - }, - "ignorePatterns": [ - "vendor", - "node_modules", - "public", - "bootstrap/ssr", - "tailwind.config.js", - "resources/js/components/ui/*" - ], - "overrides": [ - { - "files": [ - "**/*.ts", - "**/*.tsx", - "**/*.mts", - "**/*.cts" - ], - "rules": { - "no-class-assign": "off", - "no-const-assign": "off", - "no-dupe-class-members": "off", - "no-dupe-keys": "off", - "no-func-assign": "off", - "no-import-assign": "off", - "no-new-native-nonconstructor": "off", - "no-obj-calls": "off", - "no-redeclare": "off", - "no-setter-return": "off", - "no-this-before-super": "off", - "no-unsafe-negation": "off", - "no-var": "error", - "no-with": "off", - "prefer-rest-params": "error", - "prefer-spread": "error" - } - }, - { - "files": [ - "*.svelte", - "**/*.svelte" - ], - "rules": { - "no-inner-declarations": "off", - "no-self-assign": "off" - } - } - ] -} \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 6b929ae..0000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -resources/js/components/ui/* -resources/views/mail/* diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index fd558ed..0000000 --- a/.prettierrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "semi": true, - "singleQuote": true, - "singleAttributePerLine": false, - "htmlWhitespaceSensitivity": "css", - "printWidth": 150, - "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss", "prettier-plugin-svelte"], - "tailwindFunctions": ["clsx", "cn"], - "tabWidth": 4, - "overrides": [ - { - "files": "**/*.yml", - "options": { - "tabWidth": 2 - } - }, - { "files": "*.svelte", "options": { "parser": "svelte" } } - ] -} diff --git a/Dockerfile b/Dockerfile index a6e4967..6075489 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,30 @@ -FROM dunglas/frankenphp +FROM oven/bun:alpine AS base -RUN install-php-extensions \ - pcntl +WORKDIR /app -COPY . /app +COPY package.json bun.lock ./ -ENTRYPOINT ["php", "artisan", "octane:frankenphp"] +RUN bun install -p + +FROM base AS build + +WORKDIR /app + +ARG DATABASE_URL + +COPY --from=base /app/node_modules ./node_modules + +COPY . . + +RUN bun install +RUN bun run build + +FROM base AS production + +ENV NODE_ENV production + +COPY --from=build /app/build . + +EXPOSE 3000 +ENV PORT 3000 +CMD ["bun", "run", "./index.js"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5b2950 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/app/Console/Commands/MakeAdmin.php b/app/Console/Commands/MakeAdmin.php deleted file mode 100644 index b011a69..0000000 --- a/app/Console/Commands/MakeAdmin.php +++ /dev/null @@ -1,51 +0,0 @@ -argument('email'); - - // Find the user by email - $user = User::where('email', $email)->first(); - - if (!$user) { - $this->error("User with email {$email} not found."); - return 1; - } - - // Check if user is already an admin - if ($user->hasRole('admin')) { - $this->info("User {$email} is already an admin."); - return 0; - } - - // Assign admin role - $user->assignRole('admin'); - - $this->info("User {$email} has been made an admin successfully."); - return 0; - } -} diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php deleted file mode 100644 index dbb9365..0000000 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ /dev/null @@ -1,51 +0,0 @@ - Route::has('password.request'), - 'status' => $request->session()->get('status'), - ]); - } - - /** - * Handle an incoming authentication request. - */ - public function store(LoginRequest $request): RedirectResponse - { - $request->authenticate(); - - $request->session()->regenerate(); - - return redirect()->intended(route('dashboard', absolute: false)); - } - - /** - * Destroy an authenticated session. - */ - public function destroy(Request $request): RedirectResponse - { - Auth::guard('web')->logout(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return redirect('/'); - } -} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php deleted file mode 100644 index fb7d8e0..0000000 --- a/app/Http/Controllers/Auth/ConfirmablePasswordController.php +++ /dev/null @@ -1,41 +0,0 @@ -validate([ - 'email' => $request->user()->email, - 'password' => $request->password, - ])) { - throw ValidationException::withMessages([ - 'password' => __('auth.password'), - ]); - } - - $request->session()->put('auth.password_confirmed_at', time()); - - return redirect()->intended(route('dashboard', absolute: false)); - } -} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php deleted file mode 100644 index f64fa9b..0000000 --- a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php +++ /dev/null @@ -1,24 +0,0 @@ -user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false)); - } - - $request->user()->sendEmailVerificationNotification(); - - return back()->with('status', 'verification-link-sent'); - } -} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php deleted file mode 100644 index bf57a20..0000000 --- a/app/Http/Controllers/Auth/EmailVerificationPromptController.php +++ /dev/null @@ -1,22 +0,0 @@ -user()->hasVerifiedEmail() - ? redirect()->intended(route('dashboard', absolute: false)) - : Inertia::render('auth/VerifyEmail', ['status' => $request->session()->get('status')]); - } -} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php deleted file mode 100644 index 56ae905..0000000 --- a/app/Http/Controllers/Auth/NewPasswordController.php +++ /dev/null @@ -1,69 +0,0 @@ - $request->email, - 'token' => $request->route('token'), - ]); - } - - /** - * Handle an incoming new password request. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function store(Request $request): RedirectResponse - { - $request->validate([ - 'token' => 'required', - 'email' => 'required|email', - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - ]); - - // Here we will attempt to reset the user's password. If it is successful we - // will update the password on an actual user model and persist it to the - // database. Otherwise we will parse the error and return the response. - $status = Password::reset( - $request->only('email', 'password', 'password_confirmation', 'token'), - function ($user) use ($request) { - $user->forceFill([ - 'password' => Hash::make($request->password), - 'remember_token' => Str::random(60), - ])->save(); - - event(new PasswordReset($user)); - } - ); - - // If the password was successfully reset, we will redirect the user back to - // the application's home authenticated view. If there is an error we can - // redirect them back to where they came from with their error message. - if ($status == Password::PasswordReset) { - return to_route('login')->with('status', __($status)); - } - - throw ValidationException::withMessages([ - 'email' => [__($status)], - ]); - } -} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php deleted file mode 100644 index a2b6e38..0000000 --- a/app/Http/Controllers/Auth/PasswordResetLinkController.php +++ /dev/null @@ -1,41 +0,0 @@ - $request->session()->get('status'), - ]); - } - - /** - * Handle an incoming password reset link request. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function store(Request $request): RedirectResponse - { - $request->validate([ - 'email' => 'required|email', - ]); - - Password::sendResetLink( - $request->only('email') - ); - - return back()->with('status', __('A reset link will be sent if the account exists.')); - } -} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php deleted file mode 100644 index c7138ca..0000000 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ /dev/null @@ -1,51 +0,0 @@ -validate([ - 'name' => 'required|string|max:255', - 'email' => 'required|string|lowercase|email|max:255|unique:'.User::class, - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - ]); - - $user = User::create([ - 'name' => $request->name, - 'email' => $request->email, - 'password' => Hash::make($request->password), - ]); - - event(new Registered($user)); - - Auth::login($user); - - return to_route('dashboard'); - } -} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php deleted file mode 100644 index 2477faa..0000000 --- a/app/Http/Controllers/Auth/VerifyEmailController.php +++ /dev/null @@ -1,29 +0,0 @@ -user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); - } - - if ($request->user()->markEmailAsVerified()) { - /** @var \Illuminate\Contracts\Auth\MustVerifyEmail $user */ - $user = $request->user(); - event(new Verified($user)); - } - - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); - } -} diff --git a/app/Http/Controllers/CompetitionController.php b/app/Http/Controllers/CompetitionController.php deleted file mode 100644 index c95fc62..0000000 --- a/app/Http/Controllers/CompetitionController.php +++ /dev/null @@ -1,148 +0,0 @@ - 100) { - $take = 10; - } - - $competitions = Competition::where('status', 'public') - ->orderBy('start_date', 'desc') - ->skip($skip) - ->take($take) - ->get(); - - $total = Competition::where('status', 'public')->count(); - - return response()->json([ - 'data' => $competitions, - 'meta' => [ - 'skip' => $skip, - 'take' => $take, - 'total' => $total, - 'hasMore' => ($skip + $take) < $total - ] - ]); - } - - public static function getUser(User $user, int $skip = 0, int $take = 10): JsonResponse - { - if ($skip < 0) { - $skip = 0; - } - if ($take < 1 || $take > 100) { - $take = 10; - } - - $query = Competition::where('owner', $user->id); - - $competitions = $query->orderBy('start_date', 'desc') - ->skip($skip) - ->take($take) - ->get(); - - $total = $query->count(); - - return response()->json([ - 'data' => $competitions, - 'meta' => [ - 'skip' => $skip, - 'take' => $take, - 'total' => $total, - 'hasMore' => ($skip + $take) < $total - ] - ]); - } - - /** - * Get all public competitions/tournaments with pagination. - * - * @param Request $request - * @return JsonResponse - */ - public function getPublicCompetitions(Request $request): JsonResponse - { - $request->validate([ - 'skip' => 'integer|min:0', - 'take' => 'integer|min:1|max:100', - ]); - - $skip = $request->input('skip', 0); - $take = $request->input('take', 10); - - $competitions = Competition::where('status', 'public') - ->orderBy('start_date', 'desc') - ->skip($skip) - ->take($take) - ->get(); - - $total = Competition::where('status', 'public')->count(); - - return response()->json([ - 'data' => $competitions, - 'meta' => [ - 'skip' => $skip, - 'take' => $take, - 'total' => $total, - 'hasMore' => ($skip + $take) < $total - ] - ]); - } - - /** - * Get competitions/tournaments for the authenticated user with pagination. - * - * @param Request $request - * @return JsonResponse - */ - public function getUserCompetitions(Request $request): JsonResponse - { - $request->validate([ - 'skip' => 'integer|min:0', - 'take' => 'integer|min:1|max:100', - ]); - - $skip = $request->input('skip', 0); - $take = $request->input('take', 10); - $user = $request->user(); - - if (!$user) { - return response()->json(['error' => 'Unauthenticated'], 401); - } - - $query = Competition::whereHas('teams', function ($query) use ($user) { - $query->whereHas('users', function ($query) use ($user) { - $query->where('users.id', $user->id); - }); - }); - - $competitions = $query->orderBy('start_date', 'desc') - ->skip($skip) - ->take($take) - ->get(); - - $total = $query->count(); - - return response()->json([ - 'data' => $competitions, - 'meta' => [ - 'skip' => $skip, - 'take' => $take, - 'total' => $total, - 'hasMore' => ($skip + $take) < $total - ] - ]); - } -} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php deleted file mode 100644 index 8677cd5..0000000 --- a/app/Http/Controllers/Controller.php +++ /dev/null @@ -1,8 +0,0 @@ -validate([ - 'current_password' => ['required', 'current_password'], - 'password' => ['required', Password::defaults(), 'confirmed'], - ]); - - $request->user()->update([ - 'password' => Hash::make($validated['password']), - ]); - - return back(); - } -} diff --git a/app/Http/Controllers/Settings/PermissionsController.php b/app/Http/Controllers/Settings/PermissionsController.php deleted file mode 100644 index 3c5ec00..0000000 --- a/app/Http/Controllers/Settings/PermissionsController.php +++ /dev/null @@ -1,22 +0,0 @@ -permissions()->all(); - Log::info($permissions); - return Inertia::render('Settings/Permissions', [ - 'permissions' => $permissions - ]); - } -} diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php deleted file mode 100644 index 10f3d22..0000000 --- a/app/Http/Controllers/Settings/ProfileController.php +++ /dev/null @@ -1,63 +0,0 @@ - $request->user() instanceof MustVerifyEmail, - 'status' => $request->session()->get('status'), - ]); - } - - /** - * Update the user's profile information. - */ - public function update(ProfileUpdateRequest $request): RedirectResponse - { - $request->user()->fill($request->validated()); - - if ($request->user()->isDirty('email')) { - $request->user()->email_verified_at = null; - } - - $request->user()->save(); - - return to_route('profile.edit'); - } - - /** - * Delete the user's profile. - */ - public function destroy(Request $request): RedirectResponse - { - $request->validate([ - 'password' => ['required', 'current_password'], - ]); - - $user = $request->user(); - - Auth::logout(); - - $user->delete(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return redirect('/'); - } -} diff --git a/app/Http/Controllers/TournamentController.php b/app/Http/Controllers/TournamentController.php deleted file mode 100644 index c7ce245..0000000 --- a/app/Http/Controllers/TournamentController.php +++ /dev/null @@ -1,240 +0,0 @@ -all(), [ - 'name' => 'required|string|max:255', - 'description' => 'nullable|string', - 'location' => 'nullable|string|max:255', - 'start_date' => 'required|date', - 'max_teams' => 'nullable|integer|min:2', - 'status' => 'required|in:draft,public,private', - ]); - - if ($validator->fails()) { - return redirect()->back()->withErrors($validator)->withInput(); - } - - // Create the tournament (competition) - $tournament = new Competition(); - $tournament->name = $request->name; - $tournament->description = $request->description; - $tournament->location = $request->location; - $tournament->start_date = $request->start_date; - $tournament->max_teams = $request->max_teams; - $tournament->status = $request->status; - $tournament->owner = Auth::id(); - $tournament->save(); - - // Create a default scheduling mode - $schedulingMode = new SchedulingMode(); - $schedulingMode->competition_id = $tournament->id; - $schedulingMode->name = 'Default'; - $schedulingMode->description = 'Default scheduling mode'; - $schedulingMode->algorithm = 'round_robin'; - $schedulingMode->config = json_encode([ - 'match_duration' => 90, // 90 minutes - 'break_between_matches' => 15, // 15 minutes - ]); - $schedulingMode->sequence_order = 1; - $schedulingMode->status = 'active'; - $schedulingMode->save(); - - // Set as current scheduling mode - $tournament->current_scheduling_mode_id = $schedulingMode->id; - $tournament->save(); - - return redirect()->route('tournaments.show', $tournament->id) - ->with('success', 'Tournament created successfully!'); - } - - /** - * Display the specified tournament. - * - * @param \App\Models\Competition $tournament - * @return \Inertia\Response - */ - public function show(Competition $tournament) - { - // Load relationships - $tournament->load(['teams', 'fields', 'matches', 'breakPeriods']); - - return Inertia::render('tournaments/Show', [ - 'tournament' => $tournament, - ]); - } - - /** - * Show the form for editing the specified tournament. - * - * @param \App\Models\Competition $tournament - * @return \Inertia\Response - */ - public function edit(Competition $tournament) - { - // Load relationships - $tournament->load(['teams', 'fields']); - - // Get all fields and teams for dropdowns - $fields = Field::all(); - $teams = Team::all(); - - return Inertia::render('tournaments/Edit', [ - 'tournament' => $tournament, - 'fields' => $fields, - 'teams' => $teams, - ]); - } - - /** - * Update the specified tournament in storage. - * - * @param \Illuminate\Http\Request $request - * @param \App\Models\Competition $tournament - * @return \Illuminate\Http\RedirectResponse - */ - public function update(Request $request, Competition $tournament) - { - // Check if user is tournament owner - if ($tournament->owner != Auth::id()) { - return redirect()->back()->with('error', 'You are not authorized to edit this tournament.'); - } - - // Validate the request data - $validator = Validator::make($request->all(), [ - 'name' => 'required|string|max:255', - 'description' => 'nullable|string', - 'location' => 'nullable|string|max:255', - 'start_date' => 'required|date', - 'end_date' => 'required|date|after_or_equal:start_date', - 'registration_deadline' => 'nullable|date|before_or_equal:start_date', - 'max_teams' => 'nullable|integer|min:2', - 'status' => 'required|in:draft,public,private', - 'team_ids' => 'nullable|array', - 'team_ids.*' => 'exists:teams,id', - 'field_ids' => 'nullable|array', - 'field_ids.*' => 'exists:fields,id', - ]); - - if ($validator->fails()) { - return redirect()->back()->withErrors($validator)->withInput(); - } - - // Update the tournament - $tournament->name = $request->name; - $tournament->description = $request->description; - $tournament->location = $request->location; - $tournament->start_date = $request->start_date; - $tournament->end_date = $request->end_date; - $tournament->registration_deadline = $request->registration_deadline; - $tournament->max_teams = $request->max_teams; - $tournament->status = $request->status; - $tournament->save(); - - // Sync teams - if ($request->has('team_ids')) { - $teamSync = []; - foreach ($request->team_ids as $teamId) { - $teamSync[$teamId] = ['status' => 'confirmed']; - } - $tournament->teams()->sync($teamSync); - } - - // Sync fields - if ($request->has('field_ids')) { - $tournament->fields()->sync($request->field_ids); - } - - return redirect()->route('tournaments.show', $tournament->id) - ->with('success', 'Tournament updated successfully!'); - } - - /** - * Remove the specified tournament from storage. - * - * @param \App\Models\Competition $tournament - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Competition $tournament) - { - // Check if user is tournament owner - if ($tournament->owner != Auth::id()) { - return redirect()->back()->with('error', 'You are not authorized to delete this tournament.'); - } - - // Delete the tournament - $tournament->delete(); - - return redirect()->route('home') - ->with('success', 'Tournament deleted successfully!'); - } - - public function addTeam(Request $request, Competition $tournament) - { - Log::info($request); - // Check if user is tournament owner - if ($tournament->owner != Auth::id()) { - Log::error('User is not authorized to add a team to this tournament.'); - Log::error('userId: ' . Auth::id() . ' tournamentOwnerId: ' . $tournament->owner); - return redirect()->back()->with('error', 'You are not authorized to add a team to this tournament.'); - } - - // Validate the request data - $validator = Validator::make($request->all(), [ - 'teamName' => 'required|exists:teams,string', - ]); - - if ($validator->fails()) { - Log::error('Validation failed for addTeam', $validator->errors()); - return redirect()->back()->withErrors($validator)->withInput(); - } - - // Add the team - $team = Team::find($request->team_id); - // if it doesn't exist, create new team - // - if (!$team) { - $team = new Team(); - $team->name = $request->team_name; - $team->save(); - } - $tournament->teams()->attach($team->id); - - return response()->json([ - 'tournament' => $tournament, - ]); - } -} diff --git a/app/Http/Middleware/CheckPermission.php b/app/Http/Middleware/CheckPermission.php deleted file mode 100644 index 5b7dd46..0000000 --- a/app/Http/Middleware/CheckPermission.php +++ /dev/null @@ -1,34 +0,0 @@ -route('login'); - } - - $user = Auth::user(); - - // Check if user has any of the required permissions - foreach ($permissions as $permission) { - if ($user->hasPermission($permission)) { - return $next($request); - } - } - - // If no permissions match, return 403 - abort(403, 'Unauthorized action.'); - } -} diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php deleted file mode 100644 index a0957e0..0000000 --- a/app/Http/Middleware/CheckRole.php +++ /dev/null @@ -1,33 +0,0 @@ -route('login'); - } - - $user = Auth::user(); - - foreach ($roles as $role) { - if ($user->hasRole($role)) { - return $next($request); - } - } - - abort(403, 'Unauthorized action.'); - } -} diff --git a/app/Http/Middleware/HandleAppearance.php b/app/Http/Middleware/HandleAppearance.php deleted file mode 100644 index f1a02bb..0000000 --- a/app/Http/Middleware/HandleAppearance.php +++ /dev/null @@ -1,23 +0,0 @@ -cookie('appearance') ?? 'system'); - - return $next($request); - } -} diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php deleted file mode 100644 index 16a2948..0000000 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ /dev/null @@ -1,59 +0,0 @@ - - */ - public function share(Request $request): array - { - [$message, $author] = str(Inspiring::quotes()->random())->explode('-'); - $user = $request->user(); - $isAdmin = $user && $user->hasRole('admin'); - - return [ - ...parent::share($request), - 'name' => config('app.name'), - 'quote' => ['message' => trim($message), 'author' => trim($author)], - 'auth' => [ - 'user' => $user, - 'isAdmin' => $isAdmin, - ], - 'ziggy' => [ - ...(new Ziggy)->toArray(), - 'location' => $request->url(), - ], - 'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true', - ]; - } -} diff --git a/app/Http/Requests/ApiCreateUserRequest.php b/app/Http/Requests/ApiCreateUserRequest.php deleted file mode 100644 index d820d29..0000000 --- a/app/Http/Requests/ApiCreateUserRequest.php +++ /dev/null @@ -1,32 +0,0 @@ -|string> - */ - public function rules(): array - { - $rules = [ - 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'email', 'unique:users', 'max:255'], - 'password' => ['required', 'string', 'min:8', 'max:255', 'confirmed'], - ]; - - return $rules; - } -} diff --git a/app/Http/Requests/ApiLoginRequest.php b/app/Http/Requests/ApiLoginRequest.php deleted file mode 100644 index e502f9d..0000000 --- a/app/Http/Requests/ApiLoginRequest.php +++ /dev/null @@ -1,31 +0,0 @@ -|string> - */ - public function rules(): array - { - $rules = [ - 'email' => ['required', 'email', 'max:255'], - 'password' => ['required', 'min:8'], - ]; - - return $rules; - } -} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php deleted file mode 100644 index 2574642..0000000 --- a/app/Http/Requests/Auth/LoginRequest.php +++ /dev/null @@ -1,85 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'email' => ['required', 'string', 'email'], - 'password' => ['required', 'string'], - ]; - } - - /** - * Attempt to authenticate the request's credentials. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function authenticate(): void - { - $this->ensureIsNotRateLimited(); - - if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { - RateLimiter::hit($this->throttleKey()); - - throw ValidationException::withMessages([ - 'email' => trans('auth.failed'), - ]); - } - - RateLimiter::clear($this->throttleKey()); - } - - /** - * Ensure the login request is not rate limited. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function ensureIsNotRateLimited(): void - { - if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { - return; - } - - event(new Lockout($this)); - - $seconds = RateLimiter::availableIn($this->throttleKey()); - - throw ValidationException::withMessages([ - 'email' => trans('auth.throttle', [ - 'seconds' => $seconds, - 'minutes' => ceil($seconds / 60), - ]), - ]); - } - - /** - * Get the rate limiting throttle key for the request. - */ - public function throttleKey(): string - { - return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); - } -} diff --git a/app/Http/Requests/Settings/ProfileUpdateRequest.php b/app/Http/Requests/Settings/ProfileUpdateRequest.php deleted file mode 100644 index c294aab..0000000 --- a/app/Http/Requests/Settings/ProfileUpdateRequest.php +++ /dev/null @@ -1,30 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'name' => ['required', 'string', 'max:255'], - 'email' => [ - 'required', - 'string', - 'lowercase', - 'email', - 'max:255', - Rule::unique(User::class)->ignore($this->user()->id), - ], - ]; - } -} diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php deleted file mode 100644 index c8b4b4c..0000000 --- a/app/Http/Resources/UserResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'email' => $this->email, - 'email_verified_at' => $this->email_verified_at, - ]; - } -} diff --git a/app/Models/BreakPeriod.php b/app/Models/BreakPeriod.php deleted file mode 100644 index b9bf610..0000000 --- a/app/Models/BreakPeriod.php +++ /dev/null @@ -1,66 +0,0 @@ - - */ - protected $fillable = [ - 'competition_id', - 'field_id', - 'name', - 'description', - 'start_time', - 'end_time', - 'type', - 'status', - 'round', - 'match_slot', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'start_time' => 'datetime', - 'end_time' => 'datetime', - ]; - - /** - * Get the competition that this break period belongs to. - */ - public function competition(): BelongsTo - { - return $this->belongsTo(Competition::class); - } - - /** - * Get the field that this break period belongs to. - */ - public function field(): BelongsTo - { - return $this->belongsTo(Field::class); - } - - /** - * Get the teams that are on break during this period. - */ - public function teams(): BelongsToMany - { - return $this->belongsToMany(Team::class) - ->withTimestamps(); - } -} diff --git a/app/Models/Competition.php b/app/Models/Competition.php deleted file mode 100644 index b1f198c..0000000 --- a/app/Models/Competition.php +++ /dev/null @@ -1,90 +0,0 @@ - - */ - protected $fillable = [ - 'name', - 'description', - 'start_date', - 'status', - 'location', - 'max_teams', - 'current_scheduling_mode_id', - 'owner', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'start_date' => 'date', - 'end_date' => 'date', - ]; - - /** - * Get the teams participating in the competition. - */ - public function teams(): BelongsToMany - { - return $this->belongsToMany(Team::class) - ->withTimestamps() - ->withPivot('status'); - } - - /** - * Get the scheduling modes available for this competition. - */ - public function schedulingModes(): HasMany - { - return $this->hasMany(SchedulingMode::class); - } - - /** - * Get the current scheduling mode for this competition. - */ - public function currentSchedulingMode() - { - return $this->belongsTo(SchedulingMode::class, 'current_scheduling_mode_id'); - } - - /** - * Get the matches for this competition. - */ - public function matches(): HasMany - { - return $this->hasMany(MatchGame::class); - } - - /** - * Get the break periods for this competition. - */ - public function breakPeriods(): HasMany - { - return $this->hasMany(BreakPeriod::class); - } - - /** - * Get the fields used in this competition. - */ - public function fields(): BelongsToMany - { - return $this->belongsToMany(Field::class) - ->withTimestamps(); - } -} diff --git a/app/Models/Field.php b/app/Models/Field.php deleted file mode 100644 index 63fbfeb..0000000 --- a/app/Models/Field.php +++ /dev/null @@ -1,64 +0,0 @@ - - */ - protected $fillable = [ - 'name', - 'location', - 'description', - 'status', - 'capacity', - 'surface_type', - 'indoor', - 'dimensions', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'indoor' => 'boolean', - 'dimensions' => 'array', - ]; - - /** - * Get the competitions that use this field. - */ - public function competitions(): BelongsToMany - { - return $this->belongsToMany(Competition::class) - ->withTimestamps(); - } - - /** - * Get the matches scheduled on this field. - */ - public function matches(): HasMany - { - return $this->hasMany(MatchGame::class); - } - - /** - * Get the break periods scheduled on this field. - */ - public function breakPeriods(): HasMany - { - return $this->hasMany(BreakPeriod::class); - } -} diff --git a/app/Models/MatchGame.php b/app/Models/MatchGame.php deleted file mode 100644 index c15d76e..0000000 --- a/app/Models/MatchGame.php +++ /dev/null @@ -1,105 +0,0 @@ - - */ - protected $fillable = [ - 'competition_id', - 'scheduling_mode_id', - 'home_team_id', - 'away_team_id', - 'field_id', - 'start_time', - 'end_time', - 'home_team_score', - 'away_team_score', - 'status', - 'round', - 'group', - 'match_number', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'start_time' => 'datetime', - 'end_time' => 'datetime', - 'home_team_score' => 'integer', - 'away_team_score' => 'integer', - ]; - - /** - * Get the competition that the match belongs to. - */ - public function competition(): BelongsTo - { - return $this->belongsTo(Competition::class); - } - - /** - * Get the scheduling mode that this match is part of. - */ - public function schedulingMode(): BelongsTo - { - return $this->belongsTo(SchedulingMode::class); - } - - /** - * Get the home team. - */ - public function homeTeam(): BelongsTo - { - return $this->belongsTo(Team::class, 'home_team_id'); - } - - /** - * Get the away team. - */ - public function awayTeam(): BelongsTo - { - return $this->belongsTo(Team::class, 'away_team_id'); - } - - /** - * Get the field where the match is played. - */ - public function field(): BelongsTo - { - return $this->belongsTo(Field::class); - } - - /** - * Determine if this match is during a break period. - * - * @return bool - */ - public function hasBankPeriod() - { - return BreakPeriod::where('competition_id', $this->competition_id) - ->where('start_time', '<=', $this->start_time) - ->where('end_time', '>=', $this->end_time) - ->exists(); - } -} diff --git a/app/Models/Permission.php b/app/Models/Permission.php deleted file mode 100644 index f4fa924..0000000 --- a/app/Models/Permission.php +++ /dev/null @@ -1,42 +0,0 @@ - 'boolean' - ]; - - public function roles() - { - return $this->belongsToMany(Role::class)->withpivot('granted')->withTimestamps(); - } - - public function users() - { - return $this->belongsToMany(User::class)->withPivot('granted')->withTimestamps(); - } - - public function matches($permission) - { - if (!$this->is_wildcard) { - return $this->name === $permission; - } - - $pattern = str_replace('*', '.*', $this->name); - return preg_match('/^' . $pattern . '$/', $permission); - } -} diff --git a/app/Models/Role.php b/app/Models/Role.php deleted file mode 100644 index a1009b9..0000000 --- a/app/Models/Role.php +++ /dev/null @@ -1,47 +0,0 @@ -belongsToMany(Permission::class)->withPivot('granted')->withTimestamps(); - } - - public function users() - { - return $this->belongsToMany(User::class)->withTimestamps(); - } - - public function hasPermission($permission) - { - return $this->permissions->where('pivot.granted', true)->contains('name', $permission) || - $this->hasWildcardPermission($permission); - } - - private function hasWildcardPermission($permission) - { - $wildcardPermissions = $this->permissions->where('is_wildcard', true)->where('pivot.granted', true); - - foreach ($wildcardPermissions as $wildcardPermission) { - $pattern = str_replace('*', '.*', $wildcardPermission->name); - if (preg_match('/^' . $pattern . '$/', $permission)) { - return true; - } - } - - return false; - } -} diff --git a/app/Models/SchedulingMode.php b/app/Models/SchedulingMode.php deleted file mode 100644 index 49a9f5c..0000000 --- a/app/Models/SchedulingMode.php +++ /dev/null @@ -1,128 +0,0 @@ - - */ - protected $fillable = [ - 'competition_id', - 'name', - 'description', - 'algorithm', - 'config', - 'sequence_order', - 'status', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'config' => 'array', - ]; - - /** - * Get the competition that this scheduling mode belongs to. - */ - public function competition(): BelongsTo - { - return $this->belongsTo(Competition::class); - } - - /** - * Get the matches associated with this scheduling mode. - */ - public function matches(): HasMany - { - return $this->hasMany(MatchGame::class); - } - - /** - * Get competitions that are currently using this scheduling mode. - */ - public function activeCompetitions(): HasMany - { - return $this->hasMany(Competition::class, 'current_scheduling_mode_id'); - } - - /** - * Check if this is the current active scheduling mode for its competition. - * - * @return bool - */ - public function isActive(): bool - { - return $this->competition->current_scheduling_mode_id === $this->id; - } - - /** - * Generate match schedule based on the algorithm defined. - * - * @return array - */ - public function generateSchedule(): array - { - // This would contain the logic to delegate to different scheduling algorithms - // based on the 'algorithm' field - switch ($this->algorithm) { - case 'round_robin': - return $this->generateRoundRobinSchedule(); - - case 'knockout': - return $this->generateKnockoutSchedule(); - - case 'group_stage': - return $this->generateGroupStageSchedule(); - - default: - return []; - } - } - - /** - * Example implementation for round-robin scheduling. - * - * @return array - */ - private function generateRoundRobinSchedule(): array - { - // Implementation would go here - return []; - } - - /** - * Example implementation for knockout scheduling. - * - * @return array - */ - private function generateKnockoutSchedule(): array - { - // Implementation would go here - return []; - } - - /** - * Example implementation for group stage scheduling. - * - * @return array - */ - private function generateGroupStageSchedule(): array - { - // Implementation would go here - return []; - } -} diff --git a/app/Models/Team.php b/app/Models/Team.php deleted file mode 100644 index efb3490..0000000 --- a/app/Models/Team.php +++ /dev/null @@ -1,70 +0,0 @@ - - */ - protected $fillable = [ - 'name', - 'logo', - 'nb_players', - 'contact_email', - 'contact_phone', - 'status', - ]; - - /** - * Get the competitions this team is participating in. - */ - public function competitions(): BelongsToMany - { - return $this->belongsToMany(Competition::class) - ->withTimestamps() - ->withPivot('status'); - } - - /** - * Get the matches where this team is the home team. - */ - public function homeMatches(): HasMany - { - return $this->hasMany(MatchGame::class, 'home_team_id'); - } - - /** - * Get the matches where this team is the away team. - */ - public function awayMatches(): HasMany - { - return $this->hasMany(MatchGame::class, 'away_team_id'); - } - - /** - * Get all matches for this team (both home and away). - */ - public function matches() - { - return $this->homeMatches->merge($this->awayMatches); - } - - /** - * Get the break periods assigned to this team. - */ - public function breakPeriods(): BelongsToMany - { - return $this->belongsToMany(BreakPeriod::class) - ->withTimestamps(); - } -} diff --git a/app/Models/User.php b/app/Models/User.php deleted file mode 100644 index 8af70a9..0000000 --- a/app/Models/User.php +++ /dev/null @@ -1,159 +0,0 @@ - */ - use HasApiTokens, HasFactory, Notifiable, HasUuids; - - /** - * The attributes that are mass assignable. - * - * @var list - */ - protected $fillable = [ - 'name', - 'email', - 'avatar', - 'oidc_id', - ]; - - /** - * The attributes that should be hidden for serialization. - * - * @var list - */ - protected $hidden = [ - 'password', - 'remember_token', - ]; - - /** - * Get the attributes that should be cast. - * - * @return array - */ - protected function casts(): array - { - return [ - 'email_verified_at' => 'datetime', - 'password' => 'hashed', - ]; - } - - public function roles() - { - return $this->belongsToMany(Role::class)->withTimestamps(); - } - - public function permissions() - { - return $this->belongsToMany(Permission::class)->withPivot('granted')->withTimestamps(); - } - - public function hasRole($role) - { - if (is_string($role)) { - return $this->roles->contains('name', $role); - } - - return $this->roles->contains($role); - } - - public function hasAnyRole($roles) - { - if (is_array($roles)) { - return $this->roles->whereIn('name', $roles)->isNotEmpty(); - } - - return $this->hasRole($roles); - } - - public function hasPermission($permission) - { - // Check direct permissions - if ($this->hasDirectPermission($permission)) { - return true; - } - - // Check role-based permissions - return $this->hasRolePermission($permission); - } - - private function hasDirectPermission($permission) - { - // Check exact match with granted - if ($this->permissions->where('pivot.granted', true)->contains('name', $permission)) { - return true; - } - - // Check wildcard permissions with granted - $wildcardPermissions = $this->permissions->where('is_wildcard', true)->where('pivot.granted', true); - - foreach ($wildcardPermissions as $wildcardPermission) { - if ($wildcardPermission->matches($permission)) { - return true; - } - } - - return false; - } - - private function hasRolePermission($permission) - { - foreach ($this->roles as $role) { - if ($role->hasPermission($permission)) { - return true; - } - } - - return false; - } - - public function assignRole($role) - { - if (is_string($role)) { - $role = Role::where('name', $role)->firstOrFail(); - } - - $this->roles()->syncWithoutDetaching([$role->id]); - return $this; - } - - public function removeRole($role) - { - if (is_string($role)) { - $role = Role::where('name', $role)->firstOrFail(); - } - - $this->roles()->detach($role->id); - return $this; - } - - public function givePermission($permission) - { - if (is_string($permission)) { - $permission = Permission::where('name', $permission)->firstOrFail(); - } - - $this->permissions()->syncWithoutDetaching([$permission->id => ['granted' => true]]); - return $this; - } - - public function revokePermission($permission) - { - if (is_string($permission)) { - $permission = Permission::where('name', $permission)->firstOrFail(); - } - - $this->permissions()->updateExistingPivot($permission->id, ['granted' => false]); - return $this; - } -} diff --git a/app/Notifications/ForgotPassword.php b/app/Notifications/ForgotPassword.php deleted file mode 100644 index 557d94d..0000000 --- a/app/Notifications/ForgotPassword.php +++ /dev/null @@ -1,55 +0,0 @@ - - */ - public function via(object $notifiable): array - { - return ['mail']; - } - - /** - * Get the mail representation of the notification. - */ - public function toMail(object $notifiable): MailMessage - { - return (new MailMessage) - // ->from('') - ->subject('Reset your password') - ->line('Use the code below to reset your password') - ->line($this->passwordResetCode) - ->line('If this is not you, please feel free to ignore this message') - ->line('Thank you'); - } - - /** - * Get the array representation of the notification. - * - * @return array - */ - public function toArray(object $notifiable): array - { - return [ - 'message' => "Use this code to reset your password: {$this->passwordResetCode}", - 'title' => 'Reset your password', - ]; - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php deleted file mode 100644 index acf96dd..0000000 --- a/app/Providers/AppServiceProvider.php +++ /dev/null @@ -1,81 +0,0 @@ -extendSocialite('keycloak', \SocialiteProviders\Keycloak\Provider::class); - }); - - Blade::if('permission', function ($permission) { - return Auth::check() && Auth::user()->hasPermission($permission); - }); - - Blade::if('role', function ($role) { - return Auth::check() && Auth::user()->hasRole($role); - }); - - Blade::if('anyrole', function (...$roles) { - return Auth::check() && Auth::user()->hasAnyRole($roles); - }); - - Blade::if('allpermissions', function (...$permissions) { - if (!Auth::check()) { - return false; - } - - foreach ($permissions as $permission) { - if (!Auth::user()->hasPermission($permission)) { - return false; - } - } - - return true; - }); - - Blade::if('anypermission', function (...$permissions) { - if (!Auth::check()) { - return false; - } - - foreach ($permissions as $permission) { - if (Auth::user()->hasPermission($permission)) { - return true; - } - } - - return false; - }); - - DB::listen(function ($query) { - Log::info( - $query->sql, - [ - 'bindings' => $query->bindings, - 'time' => $query->time, - ] - ); - }); - } -} diff --git a/app/Providers/TelescopeServiceProvider.php b/app/Providers/TelescopeServiceProvider.php deleted file mode 100644 index 19730b2..0000000 --- a/app/Providers/TelescopeServiceProvider.php +++ /dev/null @@ -1,64 +0,0 @@ -hideSensitiveRequestDetails(); - - $isLocal = $this->app->environment('local'); - - Telescope::filter(function (IncomingEntry $entry) use ($isLocal) { - return $isLocal || - $entry->isReportableException() || - $entry->isFailedRequest() || - $entry->isFailedJob() || - $entry->isScheduledTask() || - $entry->hasMonitoredTag(); - }); - } - - /** - * Prevent sensitive request details from being logged by Telescope. - */ - protected function hideSensitiveRequestDetails(): void - { - if ($this->app->environment('local')) { - return; - } - - Telescope::hideRequestParameters(['_token']); - - Telescope::hideRequestHeaders([ - 'cookie', - 'x-csrf-token', - 'x-xsrf-token', - ]); - } - - /** - * Register the Telescope gate. - * - * This gate determines who can access Telescope in non-local environments. - */ - protected function gate(): void - { - Gate::define('viewTelescope', function ($user) { - return in_array($user->email, [ - 'unurled@unurled.me' - ]); - }); - } -} diff --git a/app/Services/PermissionService.php b/app/Services/PermissionService.php deleted file mode 100644 index 3a9dead..0000000 --- a/app/Services/PermissionService.php +++ /dev/null @@ -1,117 +0,0 @@ - $name, - 'display_name' => $displayName ?? $name, - 'description' => $description, - 'is_wildcard' => $isWildcard - ]); - } - - public function createRole($name, $displayName = null, $description = null) - { - return Role::create([ - 'name' => $name, - 'display_name' => $displayName ?? $name, - 'description' => $description - ]); - } - - public function assignPermissionToRole($permission, $role) - { - if (is_string($permission)) { - $permission = Permission::where('name', $permission)->firstOrFail(); - } - - if (is_string($role)) { - $role = Role::where('name', $role)->firstOrFail(); - } - - $role->permissions()->syncWithoutDetaching([$permission->id]); - - return $role; - } - - public function removePermissionFromRole($permission, $role) - { - if (is_string($permission)) { - $permission = Permission::where('name', $permission)->firstOrFail(); - } - - if (is_string($role)) { - $role = Role::where('name', $role)->firstOrFail(); - } - - $role->permissions()->detach($permission->id); - - return $role; - } - - public function getUserPermissions(User $user) - { - // Get direct permissions - $directPermissions = $user->permissions; - - // Get role-based permissions - $rolePermissions = collect(); - foreach ($user->roles as $role) { - $rolePermissions = $rolePermissions->merge($role->permissions); - } - - // Merge and remove duplicates - return $directPermissions->merge($rolePermissions)->unique('id'); - } - - public function checkPermission(User $user, $permission) - { - return $user->hasPermission($permission); - } - - public function getMatchingPermissions($permissionPattern) - { - $allPermissions = Permission::all(); - $matchingPermissions = collect(); - - foreach ($allPermissions as $perm) { - if ($perm->is_wildcard && $perm->matches($permissionPattern)) { - $matchingPermissions->push($perm); - } elseif ($perm->name === $permissionPattern) { - $matchingPermissions->push($perm); - } - } - - return $matchingPermissions; - } - - public function syncRolePermissions(Role $role, array $permissions) - { - $permissionIds = []; - - foreach ($permissions as $permission) { - if (is_string($permission)) { - $perm = Permission::where('name', $permission)->first(); - if ($perm) { - $permissionIds[] = $perm->id; - } - } else { - $permissionIds[] = $permission->id; - } - } - - $role->permissions()->sync($permissionIds); - - return $role; - } -} diff --git a/artisan b/artisan deleted file mode 100755 index b92aeaa..0000000 --- a/artisan +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env php -handleCommand(new ArgvInput); - -exit($status); diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..07b0bec --- /dev/null +++ b/biome.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.1.2/schema.json", + "vcs": { "enabled": false, "clientKind": "git", "useIgnoreFile": false }, + "files": { + "ignoreUnknown": true, + "experimentalScannerIgnores": ["build", "node_modules", ".svelte-kit"], + "includes": [ + "**", + "**/*.svelte", + "!**/package-lock.json", + "!**/pnpm-lock.yaml", + "!**/yarn.lock", + "!**/bun.lock", + "!**/bun.lockb", + "!./static/", + "!./drizzle/", + "!./node_modules/", + "!./build/", + "!.svelte-kit" + ] + }, + "formatter": { + "enabled": true, + "bracketSameLine": true, + "formatWithErrors": false + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "useConst": "off" + }, + "correctness": { + "noUnusedVariables": "off", + "noUnusedImports": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "trailingCommas": "none" + } + }, + "json": { + "formatter": { + "trailingCommas": "none" + } + }, + "assist": { + "enabled": true, + "actions": { "source": { "organizeImports": "on" } } + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php deleted file mode 100644 index 1916f8c..0000000 --- a/bootstrap/app.php +++ /dev/null @@ -1,36 +0,0 @@ -withRouting( - api: __DIR__ . '/../routes/api.php', - apiPrefix: '/api', - web: __DIR__ . '/../routes/web.php', - commands: __DIR__ . '/../routes/console.php', - health: '/up', - ) - ->withMiddleware(function (Middleware $middleware) { - $middleware->encryptCookies(except: ['appearance', 'sidebar_state']); - - $middleware->web(append: [ - HandleAppearance::class, - HandleInertiaRequests::class, - AddLinkHeadersForPreloadedAssets::class, - ]); - - $middleware->alias([ - 'permission' => CheckPermission::class, - 'role' => CheckRole::class - ]); - }) - ->withExceptions(function (Exceptions $exceptions) { - // - })->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/bootstrap/cache/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php deleted file mode 100644 index 2bdaf3f..0000000 --- a/bootstrap/providers.php +++ /dev/null @@ -1,7 +0,0 @@ -= 7.0.14", "esbuild-runner": ">= 2.2.2" }, "bin": { "valibot-json-schema": "bin/index.js" } }, "sha512-4Et4AN6wmqeA0PfU5Clkv/IS27wiefsWf6TemAZrb75uzkClYEFavim7SboeKwbll9Nbsn2Iv0LT/HS5H7orZg=="], + + "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + + "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + + "@internationalized/date": ["@internationalized/date@3.8.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA=="], + + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.12", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.4", "", {}, "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], + + "@lucide/svelte": ["@lucide/svelte@0.515.0", "", { "peerDependencies": { "svelte": "^5" } }, "sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.11", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" } }, "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA=="], + + "@node-rs/argon2": ["@node-rs/argon2@2.0.2", "", { "optionalDependencies": { "@node-rs/argon2-android-arm-eabi": "2.0.2", "@node-rs/argon2-android-arm64": "2.0.2", "@node-rs/argon2-darwin-arm64": "2.0.2", "@node-rs/argon2-darwin-x64": "2.0.2", "@node-rs/argon2-freebsd-x64": "2.0.2", "@node-rs/argon2-linux-arm-gnueabihf": "2.0.2", "@node-rs/argon2-linux-arm64-gnu": "2.0.2", "@node-rs/argon2-linux-arm64-musl": "2.0.2", "@node-rs/argon2-linux-x64-gnu": "2.0.2", "@node-rs/argon2-linux-x64-musl": "2.0.2", "@node-rs/argon2-wasm32-wasi": "2.0.2", "@node-rs/argon2-win32-arm64-msvc": "2.0.2", "@node-rs/argon2-win32-ia32-msvc": "2.0.2", "@node-rs/argon2-win32-x64-msvc": "2.0.2" } }, "sha512-t64wIsPEtNd4aUPuTAyeL2ubxATCBGmeluaKXEMAFk/8w6AJIVVkeLKMBpgLW6LU2t5cQxT+env/c6jxbtTQBg=="], + + "@node-rs/argon2-android-arm-eabi": ["@node-rs/argon2-android-arm-eabi@2.0.2", "", { "os": "android", "cpu": "arm" }, "sha512-DV/H8p/jt40lrao5z5g6nM9dPNPGEHL+aK6Iy/og+dbL503Uj0AHLqj1Hk9aVUSCNnsDdUEKp4TVMi0YakDYKw=="], + + "@node-rs/argon2-android-arm64": ["@node-rs/argon2-android-arm64@2.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-1LKwskau+8O1ktKx7TbK7jx1oMOMt4YEXZOdSNIar1TQKxm6isZ0cRXgHLibPHEcNHgYRsJWDE9zvDGBB17QDg=="], + + "@node-rs/argon2-darwin-arm64": ["@node-rs/argon2-darwin-arm64@2.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3TTNL/7wbcpNju5YcqUrCgXnXUSbD7ogeAKatzBVHsbpjZQbNb1NDxDjqqrWoTt6XL3z9mJUMGwbAk7zQltHtA=="], + + "@node-rs/argon2-darwin-x64": ["@node-rs/argon2-darwin-x64@2.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-vNPfkLj5Ij5111UTiYuwgxMqE7DRbOS2y58O2DIySzSHbcnu+nipmRKg+P0doRq6eKIJStyBK8dQi5Ic8pFyDw=="], + + "@node-rs/argon2-freebsd-x64": ["@node-rs/argon2-freebsd-x64@2.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-M8vQZk01qojQfCqQU0/O1j1a4zPPrz93zc9fSINY7Q/6RhQRBCYwDw7ltDCZXg5JRGlSaeS8cUXWyhPGar3cGg=="], + + "@node-rs/argon2-linux-arm-gnueabihf": ["@node-rs/argon2-linux-arm-gnueabihf@2.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-7EmmEPHLzcu0G2GDh30L6G48CH38roFC2dqlQJmtRCxs6no3tTE/pvgBGatTp/o2n2oyOJcfmgndVFcUpwMnww=="], + + "@node-rs/argon2-linux-arm64-gnu": ["@node-rs/argon2-linux-arm64-gnu@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-6lsYh3Ftbk+HAIZ7wNuRF4SZDtxtFTfK+HYFAQQyW7Ig3LHqasqwfUKRXVSV5tJ+xTnxjqgKzvZSUJCAyIfHew=="], + + "@node-rs/argon2-linux-arm64-musl": ["@node-rs/argon2-linux-arm64-musl@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-p3YqVMNT/4DNR67tIHTYGbedYmXxW9QlFmF39SkXyEbGQwpgSf6pH457/fyXBIYznTU/smnG9EH+C1uzT5j4hA=="], + + "@node-rs/argon2-linux-x64-gnu": ["@node-rs/argon2-linux-x64-gnu@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-ZM3jrHuJ0dKOhvA80gKJqBpBRmTJTFSo2+xVZR+phQcbAKRlDMSZMFDiKbSTnctkfwNFtjgDdh5g1vaEV04AvA=="], + + "@node-rs/argon2-linux-x64-musl": ["@node-rs/argon2-linux-x64-musl@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-of5uPqk7oCRF/44a89YlWTEfjsftPywyTULwuFDKyD8QtVZoonrJR6ZWvfFE/6jBT68S0okAkAzzMEdBVWdxWw=="], + + "@node-rs/argon2-wasm32-wasi": ["@node-rs/argon2-wasm32-wasi@2.0.2", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.5" }, "cpu": "none" }, "sha512-U3PzLYKSQYzTERstgtHLd4ZTkOF9co57zTXT77r0cVUsleGZOrd6ut7rHzeWwoJSiHOVxxa0OhG1JVQeB7lLoQ=="], + + "@node-rs/argon2-win32-arm64-msvc": ["@node-rs/argon2-win32-arm64-msvc@2.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Eisd7/NM0m23ijrGr6xI2iMocdOuyl6gO27gfMfya4C5BODbUSP7ljKJ7LrA0teqZMdYHesRDzx36Js++/vhiQ=="], + + "@node-rs/argon2-win32-ia32-msvc": ["@node-rs/argon2-win32-ia32-msvc@2.0.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-GsE2ezwAYwh72f9gIjbGTZOf4HxEksb5M2eCaj+Y5rGYVwAdt7C12Q2e9H5LRYxWcFvLH4m4jiSZpQQ4upnPAQ=="], + + "@node-rs/argon2-win32-x64-msvc": ["@node-rs/argon2-win32-x64-msvc@2.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-cJxWXanH4Ew9CfuZ4IAEiafpOBCe97bzoKowHCGk5lG/7kR4WF/eknnBlHW9m8q7t10mKq75kruPLtbSDqgRTw=="], + + "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="], + + "@oslojs/binary": ["@oslojs/binary@1.0.0", "", {}, "sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ=="], + + "@oslojs/crypto": ["@oslojs/crypto@1.0.1", "", { "dependencies": { "@oslojs/asn1": "1.0.0", "@oslojs/binary": "1.0.0" } }, "sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ=="], + + "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], + + "@oslojs/jwt": ["@oslojs/jwt@0.2.0", "", { "dependencies": { "@oslojs/encoding": "0.4.1" } }, "sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg=="], + + "@oxc-project/runtime": ["@oxc-project/runtime@0.77.0", "", {}, "sha512-cMbHs/DaomWSjxeJ79G10GA5hzJW9A7CZ+/cO+KuPZ7Trf3Rr07qSLauC4Ns8ba4DKVDjd8VSC9nVLpw6jpoGQ=="], + + "@oxc-project/types": ["@oxc-project/types@0.77.0", "", {}, "sha512-iUQj185VvCPnSba+ltUV5tVDrPX6LeZVtQywnnoGbe4oJ1VKvDKisjGkD/AvVtdm98b/BdsVS35IlJV1m2mBBA=="], + + "@petamoriken/float16": ["@petamoriken/float16@3.9.2", "", {}, "sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog=="], + + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + + "@poppinss/macroable": ["@poppinss/macroable@1.0.5", "", {}, "sha512-6u61y1HHd090MEk1Av0/1btDmm2Hh/+XoJj+HgFYRh9koUPI822ybJbwLHuqjLNCiY+o1gRykg2igEqOf/VBZw=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.27", "", { "os": "android", "cpu": "arm64" }, "sha512-IJL3efUJmvb5MfTEi7bGK4jq3ZFAzVbSy+vmul0DcdrglUd81Tfyy7Zzq2oM0tUgmACG32d8Jz/ykbpbf+3C5A=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.27", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TXTiuHbtnHfb0c44vNfWfIyEFJ0BFUf63ip9Z4mj8T2zRcZXQYVger4OuAxnwGNGBgDyHo1VaNBG+Vxn2VrpqQ=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.27", "", { "os": "darwin", "cpu": "x64" }, "sha512-Jpjflgvbolh+fAaaEajPJQCOpZMawYMbNVzuZp3nidX1B7kMAP7NEKp9CWzthoL2Y8RfD7OApN6bx4+vFurTaw=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.27", "", { "os": "freebsd", "cpu": "x64" }, "sha512-07ZNlXIunyS1jCTnene7aokkzCZNBUnmnJWu4Nz5X5XQvVHJNjsDhPFJTlNmneSDzA3vGkRNwdECKXiDTH/CqA=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.27", "", { "os": "linux", "cpu": "arm" }, "sha512-z74ah00oyKnTUtaIbg34TaIU1PYM8tGE1bK6aUs8OLZ9sWW4g3Xo5A0nit2zyeanmYFvrAUxnt3Bpk+mTZCtlg=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.27", "", { "os": "linux", "cpu": "arm64" }, "sha512-b9oKl/M5OIyAcosS73BmjOZOjvcONV97t2SnKpgwfDX/mjQO3dBgTYyvHMFA6hfhIDW1+2XVQR/k5uzBULFhoA=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.27", "", { "os": "linux", "cpu": "arm64" }, "sha512-RmaNSkVmAH8u/r5Q+v4O0zL4HY8pLrvlM5wBoBrb/QHDQgksGKBqhecpg1ERER0Q7gMh/GJUz6JiiD55Q+9UOA=="], + + "@rolldown/binding-linux-arm64-ohos": ["@rolldown/binding-linux-arm64-ohos@1.0.0-beta.27", "", { "os": "none", "cpu": "arm64" }, "sha512-gq78fI/g0cp1UKFMk53kP/oZAgYOXbaqdadVMuCJc0CoSkDJcpO2YIasRs/QYlE91QWfcHD5RZl9zbf4ksTS/w=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.27", "", { "os": "linux", "cpu": "x64" }, "sha512-yS/GreJ6BT44dHu1WLigc50S8jZA+pDzzsf8tqRptUTwi5YW7dX3NqcDlc/lXsZqu57aKynLljgClYAm90LEKw=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.27", "", { "os": "linux", "cpu": "x64" }, "sha512-6FV9To1sXewGHY4NaCPeOE5p5o1qfuAjj+m75WVIPw9HEJVsQoC5QiTL5wWVNqSMch4X0eWnQ6WsQolU6sGMIA=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.27", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.12" }, "cpu": "none" }, "sha512-VcxdhF0PQda9krFJHw4DqUkdAsHWYs/Uz/Kr/zhU8zMFDzmK6OdUgl9emGj9wTzXAEHYkAMDhk+OJBRJvp424g=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.27", "", { "os": "win32", "cpu": "arm64" }, "sha512-3bXSARqSf8jLHrQ1/tw9pX1GwIR9jA6OEsqTgdC0DdpoZ+34sbJXE9Nse3dQ0foGLKBkh4PqDv/rm2Thu9oVBw=="], + + "@rolldown/binding-win32-ia32-msvc": ["@rolldown/binding-win32-ia32-msvc@1.0.0-beta.27", "", { "os": "win32", "cpu": "ia32" }, "sha512-xPGcKb+W8NIWAf5KApsUIrhiKH5NImTarICge5jQ2m0BBxD31crio4OXy/eYVq5CZkqkqszLQz2fWZcWNmbzlQ=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.27", "", { "os": "win32", "cpu": "x64" }, "sha512-3y1G8ARpXBAcz4RJM5nzMU6isS/gXZl8SuX8lS2piFOnQMiOp6ajeelnciD+EgG4ej793zvNvr+WZtdnao2yrw=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@28.0.6", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "fdir": "^6.2.0", "is-reference": "1.2.1", "magic-string": "^0.30.3", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw=="], + + "@rollup/plugin-json": ["@rollup/plugin-json@6.1.0", "", { "dependencies": { "@rollup/pluginutils": "^5.1.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA=="], + + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@16.0.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.2.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.44.2", "", { "os": "android", "cpu": "arm" }, "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.44.2", "", { "os": "android", "cpu": "arm64" }, "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.44.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.44.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.44.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.44.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.44.2", "", { "os": "linux", "cpu": "arm" }, "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.44.2", "", { "os": "linux", "cpu": "arm" }, "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.44.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.44.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.44.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.44.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.44.2", "", { "os": "linux", "cpu": "x64" }, "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.44.2", "", { "os": "linux", "cpu": "x64" }, "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.44.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.44.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.2", "", { "os": "win32", "cpu": "x64" }, "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA=="], + + "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], + + "@sideway/formula": ["@sideway/formula@3.0.1", "", {}, "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="], + + "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.37", "", {}, "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="], + + "@sveltejs/adapter-node": ["@sveltejs/adapter-node@5.2.13", "", { "dependencies": { "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.0", "rollup": "^4.9.5" }, "peerDependencies": { "@sveltejs/kit": "^2.4.0" } }, "sha512-yS2TVFmIrxjGhYaV5/iIUrJ3mJl6zjaYn0lBD70vTLnYvJeqf3cjvLXeXCUCuYinhSBoyF4DpfGla49BnIy7sQ=="], + + "@sveltejs/kit": ["@sveltejs/kit@2.25.1", "", { "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.1.0", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^3.0.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" }, "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-8H+fxDEp7Xq6tLFdrGdS5fLu6ONDQQ9DgyjboXpChubuFdfH9QoFX09ypssBpyNkJNZFt9eW3yLmXIc9CesPCA=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@5.1.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", "debug": "^4.4.1", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.17", "vitefu": "^1.0.6" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ=="], + + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@4.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@tailwindcss/forms": ["@tailwindcss/forms@0.5.10", "", { "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.11", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.11" } }, "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.11", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.11", "@tailwindcss/oxide-darwin-arm64": "4.1.11", "@tailwindcss/oxide-darwin-x64": "4.1.11", "@tailwindcss/oxide-freebsd-x64": "4.1.11", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", "@tailwindcss/oxide-linux-x64-musl": "4.1.11", "@tailwindcss/oxide-wasm32-wasi": "4.1.11", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" } }, "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.11", "", { "os": "android", "cpu": "arm64" }, "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11", "", { "os": "linux", "cpu": "arm" }, "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.11", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.11", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.11", "", { "os": "win32", "cpu": "x64" }, "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg=="], + + "@tailwindcss/typography": ["@tailwindcss/typography@0.5.16", "", { "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.11", "", { "dependencies": { "@tailwindcss/node": "4.1.11", "@tailwindcss/oxide": "4.1.11", "tailwindcss": "4.1.11" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + + "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/node": ["@types/node@22.16.5", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ=="], + + "@types/pg": ["@types/pg@8.15.4", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg=="], + + "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], + + "@types/resolve": ["@types/resolve@1.20.2", "", {}, "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="], + + "@types/validator": ["@types/validator@13.15.2", "", {}, "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q=="], + + "@typeschema/class-validator": ["@typeschema/class-validator@0.3.0", "", { "dependencies": { "@typeschema/core": "0.14.0" }, "peerDependencies": { "class-validator": "^0.14.1" }, "optionalPeers": ["class-validator"] }, "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww=="], + + "@typeschema/core": ["@typeschema/core@0.14.0", "", { "peerDependencies": { "@types/json-schema": "^7.0.15" }, "optionalPeers": ["@types/json-schema"] }, "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w=="], + + "@vinejs/compiler": ["@vinejs/compiler@3.0.0", "", {}, "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw=="], + + "@vinejs/vine": ["@vinejs/vine@3.0.1", "", { "dependencies": { "@poppinss/macroable": "^1.0.4", "@types/validator": "^13.12.2", "@vinejs/compiler": "^3.0.0", "camelcase": "^8.0.0", "dayjs": "^1.11.13", "dlv": "^1.1.3", "normalize-url": "^8.0.1", "validator": "^13.12.0" } }, "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "ansis": ["ansis@4.1.0", "", {}, "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w=="], + + "arctic": ["arctic@3.7.0", "", { "dependencies": { "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", "@oslojs/jwt": "0.2.0" } }, "sha512-ZMQ+f6VazDgUJOd+qNV+H7GohNSYal1mVjm5kEaZfE2Ifb7Ss70w+Q7xpJC87qZDkMZIXYf0pTIYZA0OPasSbw=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "arktype": ["arktype@2.1.20", "", { "dependencies": { "@ark/schema": "0.46.0", "@ark/util": "0.46.0" } }, "sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "bits-ui": ["bits-ui@2.8.11", "", { "dependencies": { "@floating-ui/core": "^1.7.1", "@floating-ui/dom": "^1.7.1", "esm-env": "^1.1.2", "runed": "^0.29.1", "svelte-toolbelt": "^0.9.3", "tabbable": "^6.2.0" }, "peerDependencies": { "@internationalized/date": "^3.8.1", "svelte": "^5.33.0" } }, "sha512-lKN9rAk69my6j7H1D4B87r8LrHuEtfEsf1xCixBj9yViql2BdI3f04HyyyT7T1GOCpgb9+8b0B+nm3LN81Konw=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bun-types": ["bun-types@1.2.18", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-04+Eha5NP7Z0A9YgDAzMk5PHR16ZuLVa83b26kH5+cp1qZW4F6FmAURngE7INf4tKOvCE69vYvDEwoNl1tGiWw=="], + + "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "class-validator": ["class-validator@0.14.2", "", { "dependencies": { "@types/validator": "^13.11.8", "libphonenumber-js": "^1.11.1", "validator": "^13.9.0" } }, "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw=="], + + "cli-color": ["cli-color@2.0.4", "", { "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.64", "es6-iterator": "^2.0.3", "memoizee": "^0.4.15", "timers-ext": "^0.1.7" } }, "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + + "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "d": ["d@1.0.2", "", { "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" } }, "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw=="], + + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "devalue": ["devalue@5.1.1", "", {}, "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "drizzle-kit": ["drizzle-kit@0.30.6", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0", "gel": "^2.0.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g=="], + + "drizzle-orm": ["drizzle-orm@0.40.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-aPNhtiJiPfm3qxz1czrnIDkfvkSdKGXYeZkpG55NPTVI186LmK2fBLMi4dsHpPHlJrZeQ92D322YFPHADBALew=="], + + "drizzle-zod": ["drizzle-zod@0.8.2", "", { "peerDependencies": { "drizzle-orm": ">=0.36.0", "zod": "^3.25.1" } }, "sha512-9Do/16OjFFNrQDZgvMtxtDDwKWbFOxUAIwNPKX98SfxrP8H18vhN1BvNXbhelLcdgCE7GEaXDJqBjMExSkhpkA=="], + + "effect": ["effect@3.16.12", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ=="], + + "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], + + "es5-ext": ["es5-ext@0.10.64", "", { "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "esniff": "^2.0.1", "next-tick": "^1.1.0" } }, "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg=="], + + "es6-iterator": ["es6-iterator@2.0.3", "", { "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g=="], + + "es6-symbol": ["es6-symbol@3.1.4", "", { "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" } }, "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg=="], + + "es6-weak-map": ["es6-weak-map@2.0.3", "", { "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA=="], + + "esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], + + "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], + + "esbuild-runner": ["esbuild-runner@2.2.2", "", { "dependencies": { "source-map-support": "0.5.21", "tslib": "2.4.0" }, "peerDependencies": { "esbuild": "*" }, "bin": { "esr": "bin/esr.js" } }, "sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw=="], + + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + + "esniff": ["esniff@2.0.1", "", { "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "event-emitter": "^0.3.5", "type": "^2.7.2" } }, "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg=="], + + "esrap": ["esrap@2.1.0", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "event-emitter": ["event-emitter@0.3.5", "", { "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA=="], + + "ext": ["ext@1.7.0", "", { "dependencies": { "type": "^2.7.2" } }, "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], + + "formsnap": ["formsnap@2.0.1", "", { "dependencies": { "svelte-toolbelt": "^0.5.0" }, "peerDependencies": { "svelte": "^5.0.0", "sveltekit-superforms": "^2.19.0" } }, "sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gel": ["gel@2.1.1", "", { "dependencies": { "@petamoriken/float16": "^3.8.7", "debug": "^4.3.4", "env-paths": "^3.0.0", "semver": "^7.6.2", "shell-quote": "^1.8.1", "which": "^4.0.0" }, "bin": { "gel": "dist/cli.mjs" } }, "sha512-Newg9X7mRYskoBjSw70l1YnJ/ZGbq64VPyR821H5WVkTGpHG2O0mQILxCeUhxdYERLFY9B4tUyKLyf3uMTjtKw=="], + + "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], + + "globalyzer": ["globalyzer@0.1.0", "", {}, "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="], + + "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "inline-style-parser": ["inline-style-parser@0.2.4", "", {}, "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="], + + "intl-messageformat": ["intl-messageformat@10.7.16", "", { "dependencies": { "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/fast-memoize": "2.2.7", "@formatjs/icu-messageformat-parser": "2.11.2", "tslib": "^2.8.0" } }, "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-promise": ["is-promise@2.2.2", "", {}, "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="], + + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + + "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + + "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], + + "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "libphonenumber-js": ["libphonenumber-js@1.12.9", "", {}, "sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg=="], + + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], + + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + + "lodash.castarray": ["lodash.castarray@4.4.0", "", {}, "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lru-queue": ["lru-queue@0.1.0", "", { "dependencies": { "es5-ext": "~0.10.2" } }, "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ=="], + + "lucide-svelte": ["lucide-svelte@0.525.0", "", { "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" } }, "sha512-kfuN6JcCqTfCz2B76aXnyGLAzEBRSYw5GaUspM5RNHQZS5aI5yaKu06fbaofOk8cDvUtY0AUm/zAix7aUX6Q3A=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "memoize-weak": ["memoize-weak@1.0.2", "", {}, "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ=="], + + "memoizee": ["memoizee@0.4.17", "", { "dependencies": { "d": "^1.0.2", "es5-ext": "^0.10.64", "es6-weak-map": "^2.0.3", "event-emitter": "^0.3.5", "is-promise": "^2.2.2", "lru-queue": "^0.1.0", "next-tick": "^1.1.0", "timers-ext": "^0.1.7" } }, "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA=="], + + "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": { "mini-svg-data-uri": "cli.js" } }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "mode-watcher": ["mode-watcher@1.1.0", "", { "dependencies": { "runed": "^0.25.0", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.27.0" } }, "sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "next-tick": ["next-tick@1.1.0", "", {}, "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="], + + "normalize-url": ["normalize-url@8.0.2", "", {}, "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "pg": ["pg@8.16.3", "", { "dependencies": { "pg-connection-string": "^2.9.1", "pg-pool": "^3.10.1", "pg-protocol": "^1.10.3", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw=="], + + "pg-cloudflare": ["pg-cloudflare@1.2.7", "", {}, "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg=="], + + "pg-connection-string": ["pg-connection-string@2.9.1", "", {}, "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w=="], + + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-pool": ["pg-pool@3.10.1", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg=="], + + "pg-protocol": ["pg-protocol@1.10.3", "", {}, "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ=="], + + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + + "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], + + "postgres": ["postgres@3.4.7", "", {}, "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw=="], + + "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "postgres-bytea": ["postgres-bytea@1.0.0", "", {}, "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="], + + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + + "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "rolldown": ["rolldown@1.0.0-beta.27", "", { "dependencies": { "@oxc-project/runtime": "=0.77.0", "@oxc-project/types": "=0.77.0", "@rolldown/pluginutils": "1.0.0-beta.27", "ansis": "^4.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.27", "@rolldown/binding-darwin-arm64": "1.0.0-beta.27", "@rolldown/binding-darwin-x64": "1.0.0-beta.27", "@rolldown/binding-freebsd-x64": "1.0.0-beta.27", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.27", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.27", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.27", "@rolldown/binding-linux-arm64-ohos": "1.0.0-beta.27", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.27", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.27", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.27", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.27", "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.27", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.27" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-aYiJmzKoUHoaaEZLRegYVfZkXW7gzdgSbq+u5cXQ6iXc/y8tnQ3zGffQo44Pr1lTKeLluw3bDIDUCx/NAzqKeA=="], + + "rollup": ["rollup@4.44.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.44.2", "@rollup/rollup-android-arm64": "4.44.2", "@rollup/rollup-darwin-arm64": "4.44.2", "@rollup/rollup-darwin-x64": "4.44.2", "@rollup/rollup-freebsd-arm64": "4.44.2", "@rollup/rollup-freebsd-x64": "4.44.2", "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", "@rollup/rollup-linux-arm-musleabihf": "4.44.2", "@rollup/rollup-linux-arm64-gnu": "4.44.2", "@rollup/rollup-linux-arm64-musl": "4.44.2", "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-musl": "4.44.2", "@rollup/rollup-linux-s390x-gnu": "4.44.2", "@rollup/rollup-linux-x64-gnu": "4.44.2", "@rollup/rollup-linux-x64-musl": "4.44.2", "@rollup/rollup-win32-arm64-msvc": "4.44.2", "@rollup/rollup-win32-ia32-msvc": "4.44.2", "@rollup/rollup-win32-x64-msvc": "4.44.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg=="], + + "runed": ["runed@0.29.1", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-RGQEB8ZiWv4OvzBJhbMj2hMgRM8QrEptzTrDr7TDfkHaRePKjiUka4vJ9QHGY+8s87KymNvFoZAxFdQ4jtZNcA=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + + "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], + + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + + "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "style-to-object": ["style-to-object@1.0.9", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw=="], + + "superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "svelte": ["svelte@5.36.13", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-LnSywHHQM/nJekC65d84T1Yo85IeCYN4AryWYPhTokSvcEAFdYFCfbMhX1mc0zHizT736QQj0nalUk+SXaWrEQ=="], + + "svelte-check": ["svelte-check@4.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-Iz8dFXzBNAM7XlEIsUjUGQhbEE+Pvv9odb9+0+ITTgFWZBGeJRRYqHUUglwe2EkLD5LIsQaAc4IUJyvtKuOO5w=="], + + "svelte-i18n": ["svelte-i18n@4.0.1", "", { "dependencies": { "cli-color": "^2.0.3", "deepmerge": "^4.2.2", "esbuild": "^0.19.2", "estree-walker": "^2", "intl-messageformat": "^10.5.3", "sade": "^1.8.1", "tiny-glob": "^0.2.9" }, "peerDependencies": { "svelte": "^3 || ^4 || ^5" }, "bin": { "svelte-i18n": "dist/cli.js" } }, "sha512-jaykGlGT5PUaaq04JWbJREvivlCnALtT+m87Kbm0fxyYHynkQaxQMnIKHLm2WeIuBRoljzwgyvz0Z6/CMwfdmQ=="], + + "svelte-sonner": ["svelte-sonner@1.0.5", "", { "dependencies": { "runed": "^0.28.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-9dpGPFqKb/QWudYqGnEz93vuY+NgCEvyNvxoCLMVGw6sDN/3oVeKV1xiEirW2E1N3vJEyj5imSBNOGltQHA7mg=="], + + "svelte-toolbelt": ["svelte-toolbelt@0.9.3", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.29.0", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.30.2" } }, "sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw=="], + + "sveltekit-superforms": ["sveltekit-superforms@2.27.1", "", { "dependencies": { "devalue": "^5.1.1", "memoize-weak": "^1.0.2", "ts-deepmerge": "^7.0.3" }, "optionalDependencies": { "@exodus/schemasafe": "^1.3.0", "@gcornut/valibot-json-schema": "^0.42.0", "@sinclair/typebox": "^0.34.35", "@typeschema/class-validator": "^0.3.0", "@vinejs/vine": "^3.0.1", "arktype": "^2.1.20", "class-validator": "^0.14.2", "effect": "^3.16.7", "joi": "^17.13.3", "json-schema-to-ts": "^3.1.1", "superstruct": "^2.0.2", "valibot": "^1.1.0", "yup": "^1.6.1", "zod": "^3.25.64", "zod-to-json-schema": "^3.24.5" }, "peerDependencies": { "@sveltejs/kit": "1.x || 2.x", "svelte": "3.x || 4.x || >=5.0.0-next.51" } }, "sha512-cvq2AevkZ0Zrk0w0gNM3kjcnJMtJ0jzu+2zqDoM9a+lZa+8bGpNl4YqxVkemiJNkGnFgNC8xr5xF5BlMzjookQ=="], + + "svelvet": ["svelvet@11.0.5", "", { "dependencies": { "svelvet": "^10.0.2", "uuid": "^11.0.5" }, "peerDependencies": { "svelte": ">=3.59.2 || ^4.0.0" } }, "sha512-wGDGh3bRKK06stu613DC+r4ujE7sWkFTAp4bfW6Impc2A89Ix0M/PzZAyeW229FMS5TF2GRDugHgpk0q0D8k2g=="], + + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], + + "tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="], + + "tailwind-variants": ["tailwind-variants@1.0.0", "", { "dependencies": { "tailwind-merge": "3.0.2" }, "peerDependencies": { "tailwindcss": "*" } }, "sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA=="], + + "tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="], + + "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], + + "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], + + "timers-ext": ["timers-ext@0.1.8", "", { "dependencies": { "es5-ext": "^0.10.64", "next-tick": "^1.1.0" } }, "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww=="], + + "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], + + "tiny-glob": ["tiny-glob@0.2.9", "", { "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg=="], + + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + + "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="], + + "ts-deepmerge": ["ts-deepmerge@7.0.3", "", {}, "sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tw-animate-css": ["tw-animate-css@1.3.5", "", {}, "sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA=="], + + "type": ["type@2.7.3", "", {}, "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="], + + "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + + "valibot": ["valibot@1.1.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw=="], + + "validator": ["validator@13.15.15", "", {}, "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A=="], + + "vite": ["rolldown-vite@7.0.9", "", { "dependencies": { "fdir": "^6.4.6", "lightningcss": "^1.30.1", "picomatch": "^4.0.2", "postcss": "^8.5.6", "rolldown": "1.0.0-beta.27", "tinyglobby": "^0.2.14" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "esbuild": "^0.25.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-RxVP6CY9CNCEM9UecdytqeADxOGSjgkfSE/eI986sM7I3/F09lQ9UfQo3y6W10ICBppKsEHe71NbCX/tirYDFg=="], + + "vite-plugin-devtools-json": ["vite-plugin-devtools-json@0.2.1", "", { "dependencies": { "uuid": "^11.1.0" }, "peerDependencies": { "vite": "^2.7.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-5aiNvf/iLTuLR1dUqoI5CLLGgeK2hd6u+tA+RIp7GUZDyAcM6ECaUEWOOtGpidbcxbkKq++KtmSqA3jhMbPwMA=="], + + "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], + + "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + + "yup": ["yup@1.6.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA=="], + + "zimmerframe": ["zimmerframe@1.1.2", "", {}, "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="], + + "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], + + "@gcornut/valibot-json-schema/valibot": ["valibot@0.42.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw=="], + + "@oslojs/jwt/@oslojs/encoding": ["@oslojs/encoding@0.4.1", "", {}, "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="], + + "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + + "@rollup/plugin-commonjs/is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.11", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@types/pg/@types/node": ["@types/node@22.16.0", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ=="], + + "bun-types/@types/node": ["@types/node@22.16.0", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ=="], + + "esbuild-runner/tslib": ["tslib@2.4.0", "", {}, "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="], + + "formsnap/svelte-toolbelt": ["svelte-toolbelt@0.5.0", "", { "dependencies": { "clsx": "^2.1.1", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0-next.126" } }, "sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ=="], + + "mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="], + + "mode-watcher/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + + "svelte-sonner/runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="], + + "sveltekit-superforms/zod": ["zod@3.25.74", "", {}, "sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg=="], + + "svelvet/svelvet": ["svelvet@10.0.2", "", { "peerDependencies": { "svelte": ">=3.59.2 || ^4.0.0" } }, "sha512-CSxAyQ9xF/Qq3K0xsL/gy9u9UpC4DVFUUbq3awpQ9Dic4EGJ40qAhlcCKBBAb3Kul6hlks2bzlyBmNby8CfpDg=="], + + "tailwind-variants/tailwind-merge": ["tailwind-merge@3.0.2", "", {}, "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], + + "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], + + "mode-watcher/svelte-toolbelt/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + } +} diff --git a/components.json b/components.json index df39915..c5d91b4 100644 --- a/components.json +++ b/components.json @@ -1,15 +1,15 @@ { "$schema": "https://shadcn-svelte.com/schema.json", "tailwind": { - "css": "resources/css/app.css", - "baseColor": "neutral" + "css": "src/app.css", + "baseColor": "slate" }, "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "hooks": "@/hooks", - "lib": "@/lib" + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks", + "lib": "$lib" }, "typescript": true, "registry": "https://shadcn-svelte.com/registry" diff --git a/composer.json b/composer.json deleted file mode 100644 index ca7d1aa..0000000 --- a/composer.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "https://getcomposer.org/schema.json", - "name": "oseughu/svelte-starter-kit", - "type": "project", - "description": "A laravel starter kit built with svelte 5, inertia 2 and shadcn-svelte", - "keywords": [ - "laravel", - "framework" - ], - "license": "MIT", - "require": { - "php": "^8.2", - "inertiajs/inertia-laravel": "^2.0.2", - "laravel/framework": "^12.16.0", - "laravel/octane": "^2.10", - "laravel/sanctum": "^4.0", - "laravel/socialite": "^5.21", - "laravel/telescope": "^5.9", - "laravel/tinker": "^2.10.1", - "socialiteproviders/keycloak": "^5.3", - "tightenco/ziggy": "^2.5.3" - }, - "require-dev": { - "fakerphp/faker": "^1.24.1", - "laravel/pail": "^1.2.2", - "laravel/pint": "^1.22.1", - "laravel/sail": "^1.43.1", - "mockery/mockery": "^1.6.12", - "nunomaduro/collision": "^8.8.0", - "phpunit/phpunit": "^11.5.21" - }, - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "scripts": { - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ], - "post-update-cmd": [ - "@php artisan vendor:publish --tag=laravel-assets --ansi --force" - ], - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate --ansi", - "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", - "@php artisan migrate --graceful --ansi" - ], - "dev": [ - "Composer\\Config::disableProcessTimeout", - "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite" - ], - "test": [ - "@php artisan config:clear --ansi", - "@php artisan test" - ], - "pint": [ - "./vendor/bin/pint" - ] - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true, - "allow-plugins": { - "pestphp/pest-plugin": true, - "php-http/discovery": true - } - }, - "minimum-stability": "stable", - "prefer-stable": true -} diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 4d6a65c..0000000 --- a/composer.lock +++ /dev/null @@ -1,9196 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "90f578634e9ad91141f8e8a896ed417a", - "packages": [ - { - "name": "brick/math", - "version": "0.13.1", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.13.1" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2025-03-29T13:50:30+00:00" - }, - { - "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/dbal": "<4.0.0 || >=5.0.0" - }, - "require-dev": { - "doctrine/dbal": "^4.0.0", - "nesbot/carbon": "^2.71.0 || ^3.0.0", - "phpunit/phpunit": "^10.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "KyleKatarn", - "email": "kylekatarnls@gmail.com" - } - ], - "description": "Types to use Carbon in Doctrine", - "keywords": [ - "carbon", - "date", - "datetime", - "doctrine", - "time" - ], - "support": { - "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2024-02-09T16:56:22+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.3", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" - }, - "time": "2024-07-08T12:26:09+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.10", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2024-02-18T20:23:39+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2024-02-05T11:56:58+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2024-10-09T13:47:03+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", - "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2.0 || ^3.0", - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.26" - }, - "require-dev": { - "phpunit/phpunit": "^10.2", - "vimeo/psalm": "^5.12" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2025-03-06T22:45:56+00:00" - }, - { - "name": "firebase/php-jwt", - "version": "v6.11.1", - "source": { - "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.4", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psr/cache": "^2.0||^3.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0" - }, - "suggest": { - "ext-sodium": "Support EdDSA (Ed25519) signatures", - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.11.1" - }, - "time": "2025-04-09T20:32:01+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:45:45+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2025-03-27T13:37:11+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2025-03-27T13:27:01+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.7.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2025-03-27T12:30:47+00:00" - }, - { - "name": "guzzlehttp/uri-template", - "version": "v1.0.4", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2025-02-03T10:55:03+00:00" - }, - { - "name": "inertiajs/inertia-laravel", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/inertiajs/inertia-laravel.git", - "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/248e815cf8d41307cbfb735efaa514c118e2f3b4", - "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel/framework": "^10.0|^11.0|^12.0", - "php": "^8.1.0", - "symfony/console": "^6.2|^7.0" - }, - "require-dev": { - "laravel/pint": "^1.16", - "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^8.0|^9.2|^10.0", - "phpunit/phpunit": "^10.4|^11.5", - "roave/security-advisories": "dev-master" - }, - "suggest": { - "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Inertia\\ServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "./helpers.php" - ], - "psr-4": { - "Inertia\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Reinink", - "email": "jonathan@reinink.ca", - "homepage": "https://reinink.ca" - } - ], - "description": "The Laravel adapter for Inertia.js.", - "keywords": [ - "inertia", - "laravel" - ], - "support": { - "issues": "https://github.com/inertiajs/inertia-laravel/issues", - "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.2" - }, - "time": "2025-04-10T15:08:36+00:00" - }, - { - "name": "laminas/laminas-diactoros", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b068eac123f21c0e592de41deeb7403b88e0a89f", - "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^1.1 || ^2.0" - }, - "conflict": { - "amphp/amp": "<2.6.4" - }, - "provide": { - "psr/http-factory-implementation": "^1.0", - "psr/http-message-implementation": "^1.1 || ^2.0" - }, - "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^2.2.0", - "laminas/laminas-coding-standard": "~3.0.0", - "php-http/psr7-integration-tests": "^1.4.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\Diactoros", - "config-provider": "Laminas\\Diactoros\\ConfigProvider" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-05T16:03:34+00:00" - }, - { - "name": "laravel/framework", - "version": "v12.19.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/4e6ec689ef704bb4bd282f29d9dd658dfb4fb262", - "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262", - "shasum": "" - }, - "require": { - "brick/math": "^0.11|^0.12|^0.13", - "composer-runtime-api": "^2.2", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8.2", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.7", - "league/flysystem": "^3.25.1", - "league/flysystem-local": "^3.25.1", - "league/uri": "^7.5.1", - "monolog/monolog": "^3.0", - "nesbot/carbon": "^3.8.4", - "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^7.2.0", - "symfony/error-handler": "^7.2.0", - "symfony/finder": "^7.2.0", - "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.2.0", - "symfony/mailer": "^7.2.0", - "symfony/mime": "^7.2.0", - "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.2.0", - "symfony/routing": "^7.2.0", - "symfony/uid": "^7.2.0", - "symfony/var-dumper": "^7.2.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.6.1", - "voku/portable-ascii": "^2.0.2" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/concurrency": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/process": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "spatie/once": "*" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.322.9", - "ext-gmp": "*", - "fakerphp/faker": "^1.24", - "guzzlehttp/promises": "^2.0.3", - "guzzlehttp/psr7": "^2.4", - "laravel/pint": "^1.18", - "league/flysystem-aws-s3-v3": "^3.25.1", - "league/flysystem-ftp": "^3.25.1", - "league/flysystem-path-prefixing": "^3.25.1", - "league/flysystem-read-only": "^3.25.1", - "league/flysystem-sftp-v3": "^3.25.1", - "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^10.0.0", - "pda/pheanstalk": "^5.0.6|^7.0.0", - "php-http/discovery": "^1.15", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", - "predis/predis": "^2.3|^3.0", - "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.2.0", - "symfony/http-client": "^7.2.0", - "symfony/psr-http-message-bridge": "^7.2.0", - "symfony/translation": "^7.2.0" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", - "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", - "mockery/mockery": "Required to use mocking (^1.6).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", - "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", - "predis/predis": "Required to use the predis connector (^2.3|^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "12.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/functions.php", - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Filesystem/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Log/functions.php", - "src/Illuminate/Support/functions.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2025-06-18T12:56:23+00:00" - }, - { - "name": "laravel/octane", - "version": "v2.10.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/octane.git", - "reference": "62bf04dcb471e7d91c8aeda9b4e7376a75000ee5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/62bf04dcb471e7d91c8aeda9b4e7376a75000ee5", - "reference": "62bf04dcb471e7d91c8aeda9b4e7376a75000ee5", - "shasum": "" - }, - "require": { - "laminas/laminas-diactoros": "^3.0", - "laravel/framework": "^10.10.1|^11.0|^12.0", - "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "nesbot/carbon": "^2.66.0|^3.0", - "php": "^8.1.0", - "symfony/console": "^6.0|^7.0", - "symfony/psr-http-message-bridge": "^2.2.0|^6.4|^7.0" - }, - "conflict": { - "spiral/roadrunner": "<2023.1.0", - "spiral/roadrunner-cli": "<2.6.0", - "spiral/roadrunner-http": "<3.3.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.6.1", - "inertiajs/inertia-laravel": "^1.3.2|^2.0", - "laravel/scout": "^10.2.1", - "laravel/socialite": "^5.6.1", - "livewire/livewire": "^2.12.3|^3.0", - "mockery/mockery": "^1.5.1", - "nunomaduro/collision": "^6.4.0|^7.5.2|^8.0", - "orchestra/testbench": "^8.21|^9.0|^10.0", - "phpstan/phpstan": "^2.1.7", - "phpunit/phpunit": "^10.4|^11.5", - "spiral/roadrunner-cli": "^2.6.0", - "spiral/roadrunner-http": "^3.3.0" - }, - "bin": [ - "bin/roadrunner-worker", - "bin/swoole-server" - ], - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Octane": "Laravel\\Octane\\Facades\\Octane" - }, - "providers": [ - "Laravel\\Octane\\OctaneServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Octane\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Supercharge your Laravel application's performance.", - "keywords": [ - "frankenphp", - "laravel", - "octane", - "roadrunner", - "swoole" - ], - "support": { - "issues": "https://github.com/laravel/octane/issues", - "source": "https://github.com/laravel/octane" - }, - "time": "2025-06-16T13:44:31+00:00" - }, - { - "name": "laravel/prompts", - "version": "v0.3.5", - "source": { - "type": "git", - "url": "https://github.com/laravel/prompts.git", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "ext-mbstring": "*", - "php": "^8.1", - "symfony/console": "^6.2|^7.0" - }, - "conflict": { - "illuminate/console": ">=10.17.0 <10.25.0", - "laravel/framework": ">=10.17.0 <10.25.0" - }, - "require-dev": { - "illuminate/collections": "^10.0|^11.0|^12.0", - "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" - }, - "suggest": { - "ext-pcntl": "Required for the spinner to be animated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Laravel\\Prompts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Add beautiful and user-friendly forms to your command-line applications.", - "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.5" - }, - "time": "2025-02-11T13:34:40+00:00" - }, - { - "name": "laravel/sanctum", - "version": "v4.1.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/sanctum.git", - "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", - "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^11.0|^12.0", - "illuminate/contracts": "^11.0|^12.0", - "illuminate/database": "^11.0|^12.0", - "illuminate/support": "^11.0|^12.0", - "php": "^8.2", - "symfony/console": "^7.0" - }, - "require-dev": { - "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.0|^10.0", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sanctum\\SanctumServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sanctum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", - "keywords": [ - "auth", - "laravel", - "sanctum" - ], - "support": { - "issues": "https://github.com/laravel/sanctum/issues", - "source": "https://github.com/laravel/sanctum" - }, - "time": "2025-04-23T13:03:38+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0|^11.0|^12.0", - "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0", - "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^6.2.0|^7.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2025-03-19T13:51:03+00:00" - }, - { - "name": "laravel/socialite", - "version": "v5.21.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/socialite.git", - "reference": "d83639499ad14985c9a6a9713b70073300ce998d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/d83639499ad14985c9a6a9713b70073300ce998d", - "reference": "d83639499ad14985c9a6a9713b70073300ce998d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "firebase/php-jwt": "^6.4", - "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "league/oauth1-client": "^1.11", - "php": "^7.2|^8.0", - "phpseclib/phpseclib": "^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.12.23", - "phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Socialite": "Laravel\\Socialite\\Facades\\Socialite" - }, - "providers": [ - "Laravel\\Socialite\\SocialiteServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Socialite\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", - "homepage": "https://laravel.com", - "keywords": [ - "laravel", - "oauth" - ], - "support": { - "issues": "https://github.com/laravel/socialite/issues", - "source": "https://github.com/laravel/socialite" - }, - "time": "2025-05-19T12:56:37+00:00" - }, - { - "name": "laravel/telescope", - "version": "v5.9.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/telescope.git", - "reference": "403d4ad1ecfe126139f5cf29cabd6b1c816c46a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/403d4ad1ecfe126139f5cf29cabd6b1c816c46a2", - "reference": "403d4ad1ecfe126139f5cf29cabd6b1c816c46a2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel/framework": "^8.37|^9.0|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^5.3|^6.0|^7.0", - "symfony/var-dumper": "^5.0|^6.0|^7.0" - }, - "require-dev": { - "ext-gd": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", - "laravel/octane": "^1.4|^2.0|dev-develop", - "orchestra/testbench": "^6.40|^7.37|^8.17|^9.0|^10.0", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0|^10.5|^11.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Telescope\\TelescopeServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Telescope\\": "src/", - "Laravel\\Telescope\\Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Mohamed Said", - "email": "mohamed@laravel.com" - } - ], - "description": "An elegant debug assistant for the Laravel framework.", - "keywords": [ - "debugging", - "laravel", - "monitoring" - ], - "support": { - "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v5.9.1" - }, - "time": "2025-06-10T21:42:27+00:00" - }, - { - "name": "laravel/tinker", - "version": "v2.10.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", - "shasum": "" - }, - "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" - }, - "time": "2025-01-27T14:24:01+00:00" - }, - { - "name": "league/commonmark", - "version": "2.7.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", - "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2025-05-05T12:20:28+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "league/flysystem", - "version": "3.29.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", - "shasum": "" - }, - "require": { - "league/flysystem-local": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "async-aws/core": "<1.19.0", - "async-aws/s3": "<1.14.0", - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5 || ^2.0", - "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.295.10", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-mongodb": "^1.3", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "guzzlehttp/psr7": "^2.6", - "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2", - "phpseclib/phpseclib": "^3.0.36", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" - }, - "time": "2024-10-08T08:58:34+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.29.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/flysystem": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Local\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" - }, - "time": "2024-08-09T21:24:39+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.16.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2024-09-21T08:32:55+00:00" - }, - { - "name": "league/oauth1-client", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "f9c94b088837eb1aae1ad7c4f23eb65cc6993055" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/f9c94b088837eb1aae1ad7c4f23eb65cc6993055", - "reference": "f9c94b088837eb1aae1ad7c4f23eb65cc6993055", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-openssl": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", - "guzzlehttp/psr7": "^1.7|^2.0", - "php": ">=7.1||>=8.0" - }, - "require-dev": { - "ext-simplexml": "*", - "friendsofphp/php-cs-fixer": "^2.17", - "mockery/mockery": "^1.3.3", - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5||9.5" - }, - "suggest": { - "ext-simplexml": "For decoding XML-based responses." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev", - "dev-develop": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "League\\OAuth1\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Corlett", - "email": "bencorlett@me.com", - "homepage": "http://www.webcomm.com.au", - "role": "Developer" - } - ], - "description": "OAuth 1.0 Client Library", - "keywords": [ - "Authentication", - "SSO", - "authorization", - "bitbucket", - "identity", - "idp", - "oauth", - "oauth1", - "single sign on", - "trello", - "tumblr", - "twitter" - ], - "support": { - "issues": "https://github.com/thephpleague/oauth1-client/issues", - "source": "https://github.com/thephpleague/oauth1-client/tree/v1.11.0" - }, - "time": "2024-12-10T19:59:05+00:00" - }, - { - "name": "league/uri", - "version": "7.5.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-12-08T08:40:02+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "7.5.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-factory": "^1", - "psr/http-message": "^1.1 || ^2.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interfaces and classes for URI representation and interaction", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-12-08T08:18:47+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.9.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.8", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.17 || ^11.0.7", - "predis/predis": "^1.1 || ^2", - "rollbar/rollbar": "^4.0", - "ruflin/elastica": "^7 || ^8", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.9.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2025-03-24T10:02:05+00:00" - }, - { - "name": "nesbot/carbon", - "version": "3.10.0", - "source": { - "type": "git", - "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/c1397390dd0a7e0f11660f0ae20f753d88c1f3d9", - "reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "<100.0", - "ext-json": "*", - "php": "^8.1", - "psr/clock": "^1.0", - "symfony/clock": "^6.3.12 || ^7.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^3.6.3 || ^4.0", - "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.75.0", - "kylekatarnls/multi-tester": "^2.5.3", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^10.5.46", - "squizlabs/php_codesniffer": "^3.13.0" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev", - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/CarbonPHP/carbon/issues", - "source": "https://github.com/CarbonPHP/carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2025-06-12T10:24:28+00:00" - }, - { - "name": "nette/schema", - "version": "v1.3.2", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.4" - }, - "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" - }, - "time": "2024-10-06T23:10:23+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.7", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "shasum": "" - }, - "require": { - "php": "8.0 - 8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.7" - }, - "time": "2025-06-03T04:55:08+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.5.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" - }, - "time": "2025-05-31T08:24:38+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.2.6" - }, - "require-dev": { - "illuminate/console": "^11.44.7", - "laravel/pint": "^1.22.0", - "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.2", - "phpstan/phpstan": "^1.12.25", - "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.2.6", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2025-05-08T08:14:37+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", - "shasum": "" - }, - "require": { - "php": "^8" - }, - "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2024-05-08T12:36:18+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.3", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:41:07+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "3.0.44", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "1d0b5e7e1434678411787c5a0535e68907cf82d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/1d0b5e7e1434678411787c5a0535e68907cf82d9", - "reference": "1d0b5e7e1434678411787c5a0535e68907cf82d9", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1|^2|^3", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-dom": "Install the DOM extension to load XML formatted public keys.", - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib3\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.44" - }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2025-06-15T09:59:26+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.12.8", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^5.0 || ^4.0", - "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": false, - "forward-command": false - }, - "branch-alias": { - "dev-main": "0.12.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" - }, - "time": "2025-03-16T03:05:19+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.45", - "fakerphp/faker": "^1.24", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^2.1", - "mockery/mockery": "^1.6", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.4", - "phpspec/prophecy-phpunit": "^2.3", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5", - "ramsey/coding-standard": "^2.3", - "ramsey/conventional-commits": "^1.6", - "roave/security-advisories": "dev-latest" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.1" - }, - "time": "2025-03-22T05:38:12+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.8.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", - "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", - "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.25", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "ergebnis/composer-normalize": "^2.47", - "mockery/mockery": "^1.6", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.6", - "php-mock/php-mock-mockery": "^1.5", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6", - "slevomat/coding-standard": "^8.18", - "squizlabs/php_codesniffer": "^3.13" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.8.1" - }, - "time": "2025-06-01T06:28:46+00:00" - }, - { - "name": "socialiteproviders/keycloak", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/SocialiteProviders/Keycloak.git", - "reference": "87d13f8a411a6f8f5010ecbaff9aedd4494863e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Keycloak/zipball/87d13f8a411a6f8f5010ecbaff9aedd4494863e4", - "reference": "87d13f8a411a6f8f5010ecbaff9aedd4494863e4", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0", - "socialiteproviders/manager": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "SocialiteProviders\\Keycloak\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oleg Kuchumov", - "email": "voenniy@gmail.com" - } - ], - "description": "Keycloak OAuth2 Provider for Laravel Socialite", - "keywords": [ - "keycloak", - "laravel", - "oauth", - "provider", - "socialite" - ], - "support": { - "docs": "https://socialiteproviders.com/keycloak", - "issues": "https://github.com/socialiteproviders/providers/issues", - "source": "https://github.com/socialiteproviders/providers" - }, - "time": "2023-04-10T05:50:49+00:00" - }, - { - "name": "socialiteproviders/manager", - "version": "v4.8.1", - "source": { - "type": "git", - "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "8180ec14bef230ec2351cff993d5d2d7ca470ef4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/8180ec14bef230ec2351cff993d5d2d7ca470ef4", - "reference": "8180ec14bef230ec2351cff993d5d2d7ca470ef4", - "shasum": "" - }, - "require": { - "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "laravel/socialite": "^5.5", - "php": "^8.1" - }, - "require-dev": { - "mockery/mockery": "^1.2", - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "SocialiteProviders\\Manager\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "SocialiteProviders\\Manager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andy Wendt", - "email": "andy@awendt.com" - }, - { - "name": "Anton Komarev", - "email": "a.komarev@cybercog.su" - }, - { - "name": "Miguel Piedrafita", - "email": "soy@miguelpiedrafita.com" - }, - { - "name": "atymic", - "email": "atymicq@gmail.com", - "homepage": "https://atymic.dev" - } - ], - "description": "Easily add new or override built-in providers in Laravel Socialite.", - "homepage": "https://socialiteproviders.com", - "keywords": [ - "laravel", - "manager", - "oauth", - "providers", - "socialite" - ], - "support": { - "issues": "https://github.com/socialiteproviders/manager/issues", - "source": "https://github.com/socialiteproviders/manager" - }, - "time": "2025-02-24T19:33:30+00:00" - }, - { - "name": "symfony/clock", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/now.php" - ], - "psr-4": { - "Symfony\\Component\\Clock\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Decouples applications from the system clock", - "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], - "support": { - "source": "https://github.com/symfony/clock/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/console", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-24T10:34:04+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/webpack-encore-bundle": "^1.0|^2.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-29T07:19:49+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-22T09:11:45+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-30T19:00:26+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "4236baf01609667d53b20371486228231eb135fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd", - "reference": "4236baf01609667d53b20371486228231eb135fd", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" - }, - "require-dev": { - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/clock": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-12T14:48:23+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^7.3", - "symfony/http-foundation": "^7.3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-29T07:47:32+00:00" - }, - { - "name": "symfony/mailer", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mailer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps sending emails", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-04T09:51:09+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-02-19T08:51:26+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "symfony/polyfill-intl-normalizer": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-10T14:38:51+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-01-02T08:10:11+00:00" - }, - { - "name": "symfony/polyfill-php83", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-uuid", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/process", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-17T09:11:12+00:00" - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/http-message": "^1.0|^2.0", - "symfony/http-foundation": "^6.4|^7.0" - }, - "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "nyholm/psr7": "^1.1", - "php-http/discovery": "^1.15", - "psr/log": "^1.1.4|^2|^3", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" - }, - "type": "symfony-bridge", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "https://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ], - "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-26T08:57:56+00:00" - }, - { - "name": "symfony/routing", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "8e213820c5fea844ecea29203d2a308019007c15" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15", - "reference": "8e213820c5fea844ecea29203d2a308019007c15", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-24T20:43:28+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-25T09:37:31+00:00" - }, - { - "name": "symfony/string", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-20T20:19:01+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "nikic/php-parser": "<5.0", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-29T07:19:49+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-27T08:32:26+00:00" - }, - { - "name": "symfony/uid", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-24T14:28:13+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.12" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-27T18:39:23+00:00" - }, - { - "name": "tightenco/ziggy", - "version": "v2.5.3", - "source": { - "type": "git", - "url": "https://github.com/tighten/ziggy.git", - "reference": "0b3b521d2c55fbdb04b6721532f7f5f49d32f52b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/0b3b521d2c55fbdb04b6721532f7f5f49d32f52b", - "reference": "0b3b521d2c55fbdb04b6721532f7f5f49d32f52b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel/framework": ">=9.0", - "php": ">=8.1" - }, - "require-dev": { - "laravel/folio": "^1.1", - "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0", - "pestphp/pest": "^2.26|^3.0", - "pestphp/pest-plugin-laravel": "^2.4|^3.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Tighten\\Ziggy\\ZiggyServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Tighten\\Ziggy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Coulbourne", - "email": "daniel@tighten.co" - }, - { - "name": "Jake Bathman", - "email": "jake@tighten.co" - }, - { - "name": "Jacob Baker-Kretzmar", - "email": "jacob@tighten.co" - } - ], - "description": "Use your Laravel named routes in JavaScript.", - "homepage": "https://github.com/tighten/ziggy", - "keywords": [ - "Ziggy", - "javascript", - "laravel", - "routes" - ], - "support": { - "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v2.5.3" - }, - "time": "2025-05-17T18:15:19+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" - }, - "require-dev": { - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" - }, - "time": "2024-12-21T16:25:41+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.6.2", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-filter": "*", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "5.6-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2025-04-30T23:37:27+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "packages-dev": [ - { - "name": "fakerphp/faker", - "version": "v1.24.1", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" - }, - "time": "2024-11-21T13:46:39+00:00" - }, - { - "name": "filp/whoops", - "version": "2.18.3", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "59a123a3d459c5a23055802237cb317f609867e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", - "reference": "59a123a3d459c5a23055802237cb317f609867e5", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.3" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2025-06-16T00:02:10+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" - }, - "time": "2025-04-30T06:54:44+00:00" - }, - { - "name": "laravel/pail", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/pail.git", - "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/8cc3d575c1f0e57eeb923f366a37528c50d2385a", - "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/console": "^10.24|^11.0|^12.0", - "illuminate/contracts": "^10.24|^11.0|^12.0", - "illuminate/log": "^10.24|^11.0|^12.0", - "illuminate/process": "^10.24|^11.0|^12.0", - "illuminate/support": "^10.24|^11.0|^12.0", - "nunomaduro/termwind": "^1.15|^2.0", - "php": "^8.2", - "symfony/console": "^6.0|^7.0" - }, - "require-dev": { - "laravel/framework": "^10.24|^11.0|^12.0", - "laravel/pint": "^1.13", - "orchestra/testbench-core": "^8.13|^9.0|^10.0", - "pestphp/pest": "^2.20|^3.0", - "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", - "phpstan/phpstan": "^1.12.27", - "symfony/var-dumper": "^6.3|^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Pail\\PailServiceProvider" - ] - }, - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Pail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Easily delve into your Laravel application's log files directly from the command line.", - "homepage": "https://github.com/laravel/pail", - "keywords": [ - "dev", - "laravel", - "logs", - "php", - "tail" - ], - "support": { - "issues": "https://github.com/laravel/pail/issues", - "source": "https://github.com/laravel/pail" - }, - "time": "2025-06-05T13:55:57+00:00" - }, - { - "name": "laravel/pint", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "941d1927c5ca420c22710e98420287169c7bcaf7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/941d1927c5ca420c22710e98420287169c7bcaf7", - "reference": "941d1927c5ca420c22710e98420287169c7bcaf7", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.2.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.75.0", - "illuminate/view": "^11.44.7", - "larastan/larastan": "^3.4.0", - "laravel-zero/framework": "^11.36.1", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3.1", - "pestphp/pest": "^2.36.0" - }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", - "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" - ], - "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" - }, - "time": "2025-05-08T08:38:12+00:00" - }, - { - "name": "laravel/sail", - "version": "v1.43.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/3e7d899232a8c5e3ea4fc6dee7525ad583887e72", - "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0", - "symfony/yaml": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.10" - }, - "bin": [ - "bin/sail" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" - }, - "time": "2025-05-19T13:19:21+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.12", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2024-05-16T03:13:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-04-29T12:36:36+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.8.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/44ccb82e3e21efb5446748d2a3c81a030ac22bd5", - "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.18.1", - "nunomaduro/termwind": "^2.3.1", - "php": "^8.2.0", - "symfony/console": "^7.3.0" - }, - "conflict": { - "laravel/framework": "<11.44.2 || >=13.0.0", - "phpunit/phpunit": "<11.5.15 || >=13.0.0" - }, - "require-dev": { - "brianium/paratest": "^7.8.3", - "larastan/larastan": "^3.4.2", - "laravel/framework": "^11.44.2 || ^12.18", - "laravel/pint": "^1.22.1", - "laravel/sail": "^1.43.1", - "laravel/sanctum": "^4.1.1", - "laravel/tinker": "^2.10.1", - "orchestra/testbench-core": "^9.12.0 || ^10.4", - "pestphp/pest": "^3.8.2", - "sebastian/environment": "^7.2.1 || ^8.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, - "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "dev", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2025-06-11T01:04:21+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "11.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.2" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/show" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", - "type": "tidelift" - } - ], - "time": "2025-06-18T08:56:18+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-27T05:02:59+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:07:44+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:08:43+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:09:35+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "11.5.23", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "86ebcd8a3dbcd1857d88505109b2a2b376501cde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86ebcd8a3dbcd1857d88505109b2a2b376501cde", - "reference": "86ebcd8a3dbcd1857d88505109b2a2b376501cde", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.1", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-invoker": "^5.0.1", - "phpunit/php-text-template": "^4.0.1", - "phpunit/php-timer": "^7.0.1", - "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", - "sebastian/version": "^5.0.2", - "staabm/side-effects-detector": "^1.0.5" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.23" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2025-06-13T05:47:49+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:41:36+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-19T07:56:08+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:45:54+00:00" - }, - { - "name": "sebastian/comparator", - "version": "6.3.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.4" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-07T06:57:01+00:00" - }, - { - "name": "sebastian/complexity", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:49:50+00:00" - }, - { - "name": "sebastian/diff", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:53:05+00:00" - }, - { - "name": "sebastian/environment", - "version": "7.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", - "type": "tidelift" - } - ], - "time": "2025-05-21T11:55:47+00:00" - }, - { - "name": "sebastian/exporter", - "version": "6.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-12-05T09:17:50+00:00" - }, - { - "name": "sebastian/global-state", - "version": "7.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:57:36+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:58:38+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:00:13+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:01:32+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:10:34+00:00" - }, - { - "name": "sebastian/type", - "version": "5.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-18T13:35:50+00:00" - }, - { - "name": "sebastian/version", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-10-09T05:16:32+00:00" - }, - { - "name": "staabm/side-effects-detector", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-10-20T05:08:20+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "cea40a48279d58dc3efee8112634cb90141156c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2", - "reference": "cea40a48279d58dc3efee8112634cb90141156c2", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-04-04T10:10:33+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.2" - }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" -} diff --git a/config/app.php b/config/app.php deleted file mode 100644 index 324b513..0000000 --- a/config/app.php +++ /dev/null @@ -1,126 +0,0 @@ - env('APP_NAME', 'Laravel'), - - /* - |-------------------------------------------------------------------------- - | Application Environment - |-------------------------------------------------------------------------- - | - | This value determines the "environment" your application is currently - | running in. This may determine how you prefer to configure various - | services the application utilizes. Set this in your ".env" file. - | - */ - - 'env' => env('APP_ENV', 'production'), - - /* - |-------------------------------------------------------------------------- - | Application Debug Mode - |-------------------------------------------------------------------------- - | - | When your application is in debug mode, detailed error messages with - | stack traces will be shown on every error that occurs within your - | application. If disabled, a simple generic error page is shown. - | - */ - - 'debug' => (bool) env('APP_DEBUG', false), - - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | the application so that it's available within Artisan commands. - | - */ - - 'url' => env('APP_URL', 'http://localhost'), - - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. The timezone - | is set to "UTC" by default as it is suitable for most use cases. - | - */ - - 'timezone' => 'UTC', - - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by Laravel's translation / localization methods. This option can be - | set to any locale for which you plan to have translation strings. - | - */ - - 'locale' => env('APP_LOCALE', 'en'), - - 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), - - 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is utilized by Laravel's encryption services and should be set - | to a random, 32 character string to ensure that all encrypted values - | are secure. You should do this prior to deploying the application. - | - */ - - 'cipher' => 'AES-256-CBC', - - 'key' => env('APP_KEY'), - - 'previous_keys' => [ - ...array_filter( - explode(',', env('APP_PREVIOUS_KEYS', '')) - ), - ], - - /* - |-------------------------------------------------------------------------- - | Maintenance Mode Driver - |-------------------------------------------------------------------------- - | - | These configuration options determine the driver used to determine and - | manage Laravel's "maintenance mode" status. The "cache" driver will - | allow maintenance mode to be controlled across multiple machines. - | - | Supported drivers: "file", "cache" - | - */ - - 'maintenance' => [ - 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), - 'store' => env('APP_MAINTENANCE_STORE', 'database'), - ], - -]; diff --git a/config/auth.php b/config/auth.php deleted file mode 100644 index 940329e..0000000 --- a/config/auth.php +++ /dev/null @@ -1,120 +0,0 @@ - [ - 'guard' => env('AUTH_GUARD', 'web'), - 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), - ], - - /* - |-------------------------------------------------------------------------- - | Authentication Guards - |-------------------------------------------------------------------------- - | - | Next, you may define every authentication guard for your application. - | Of course, a great default configuration has been defined for you - | which utilizes session storage plus the Eloquent user provider. - | - | All authentication guards have a user provider, which defines how the - | users are actually retrieved out of your database or other storage - | system used by the application. Typically, Eloquent is utilized. - | - | Supported: "session" - | - */ - - 'guards' => [ - 'web' => [ - 'driver' => 'session', - 'provider' => 'users', - ], - - 'api' => [ - 'driver' => 'passport', - 'provider' => 'users', - ], - ], - - /* - |-------------------------------------------------------------------------- - | User Providers - |-------------------------------------------------------------------------- - | - | All authentication guards have a user provider, which defines how the - | users are actually retrieved out of your database or other storage - | system used by the application. Typically, Eloquent is utilized. - | - | If you have multiple user tables or models you may configure multiple - | providers to represent the model / table. These providers may then - | be assigned to any extra authentication guards you have defined. - | - | Supported: "database", "eloquent" - | - */ - - 'providers' => [ - 'users' => [ - 'driver' => 'eloquent', - 'model' => env('AUTH_MODEL', App\Models\User::class), - ], - - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], - ], - - /* - |-------------------------------------------------------------------------- - | Resetting Passwords - |-------------------------------------------------------------------------- - | - | These configuration options specify the behavior of Laravel's password - | reset functionality, including the table utilized for token storage - | and the user provider that is invoked to actually retrieve users. - | - | The expiry time is the number of minutes that each reset token will be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - | The throttle setting is the number of seconds a user must wait before - | generating more password reset tokens. This prevents the user from - | quickly generating a very large amount of password reset tokens. - | - */ - - 'passwords' => [ - 'users' => [ - 'provider' => 'users', - 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), - 'expire' => 60, - 'throttle' => 60, - ], - ], - - /* - |-------------------------------------------------------------------------- - | Password Confirmation Timeout - |-------------------------------------------------------------------------- - | - | Here you may define the amount of seconds before a password confirmation - | window expires and users are asked to re-enter their password via the - | confirmation screen. By default, the timeout lasts for three hours. - | - */ - - 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), - -]; diff --git a/config/cache.php b/config/cache.php deleted file mode 100644 index 2dbc452..0000000 --- a/config/cache.php +++ /dev/null @@ -1,108 +0,0 @@ - env('CACHE_STORE', 'database'), - - /* - |-------------------------------------------------------------------------- - | Cache Stores - |-------------------------------------------------------------------------- - | - | Here you may define all of the cache "stores" for your application as - | well as their drivers. You may even define multiple stores for the - | same cache driver to group types of items stored in your caches. - | - | Supported drivers: "array", "database", "file", "memcached", - | "redis", "dynamodb", "octane", "null" - | - */ - - 'stores' => [ - - 'array' => [ - 'driver' => 'array', - 'serialize' => false, - ], - - 'database' => [ - 'driver' => 'database', - 'connection' => env('DB_CACHE_CONNECTION'), - 'table' => env('DB_CACHE_TABLE', 'cache'), - 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), - 'lock_table' => env('DB_CACHE_LOCK_TABLE'), - ], - - 'file' => [ - 'driver' => 'file', - 'path' => storage_path('framework/cache/data'), - 'lock_path' => storage_path('framework/cache/data'), - ], - - 'memcached' => [ - 'driver' => 'memcached', - 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), - 'sasl' => [ - env('MEMCACHED_USERNAME'), - env('MEMCACHED_PASSWORD'), - ], - 'options' => [ - // Memcached::OPT_CONNECT_TIMEOUT => 2000, - ], - 'servers' => [ - [ - 'host' => env('MEMCACHED_HOST', '127.0.0.1'), - 'port' => env('MEMCACHED_PORT', 11211), - 'weight' => 100, - ], - ], - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), - 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), - ], - - 'dynamodb' => [ - 'driver' => 'dynamodb', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), - 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), - 'endpoint' => env('DYNAMODB_ENDPOINT'), - ], - - 'octane' => [ - 'driver' => 'octane', - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing the APC, database, memcached, Redis, and DynamoDB cache - | stores, there might be other applications using the same cache. For - | that reason, you may prefix every cache key to avoid collisions. - | - */ - - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'), - -]; diff --git a/config/database.php b/config/database.php deleted file mode 100644 index 9c0d004..0000000 --- a/config/database.php +++ /dev/null @@ -1,174 +0,0 @@ - env('DB_CONNECTION', 'sqlite'), - - /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Below are all of the database connections defined for your application. - | An example configuration is provided for each database system which - | is supported by Laravel. You're free to add / remove connections. - | - */ - - 'connections' => [ - - 'sqlite' => [ - 'driver' => 'sqlite', - 'url' => env('DB_URL'), - 'database' => env('DB_DATABASE', database_path('database.sqlite')), - 'prefix' => '', - 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), - 'busy_timeout' => null, - 'journal_mode' => null, - 'synchronous' => null, - ], - - 'mysql' => [ - 'driver' => 'mysql', - 'url' => env('DB_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'laravel'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', ''), - 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => env('DB_CHARSET', 'utf8mb4'), - 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'mariadb' => [ - 'driver' => 'mariadb', - 'url' => env('DB_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'laravel'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', ''), - 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => env('DB_CHARSET', 'utf8mb4'), - 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'pgsql' => [ - 'driver' => 'pgsql', - 'url' => env('DB_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'laravel'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', ''), - 'charset' => env('DB_CHARSET', 'utf8'), - 'prefix' => '', - 'prefix_indexes' => true, - 'search_path' => 'public', - 'sslmode' => 'prefer', - ], - - 'sqlsrv' => [ - 'driver' => 'sqlsrv', - 'url' => env('DB_URL'), - 'host' => env('DB_HOST', 'localhost'), - 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'laravel'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', ''), - 'charset' => env('DB_CHARSET', 'utf8'), - 'prefix' => '', - 'prefix_indexes' => true, - // 'encrypt' => env('DB_ENCRYPT', 'yes'), - // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run on the database. - | - */ - - 'migrations' => [ - 'table' => 'migrations', - 'update_date_on_publish' => true, - ], - - /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer body of commands than a typical key-value system - | such as Memcached. You may define your connection settings here. - | - */ - - 'redis' => [ - - 'client' => env('REDIS_CLIENT', 'phpredis'), - - 'options' => [ - 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), - 'persistent' => env('REDIS_PERSISTENT', false), - ], - - 'default' => [ - 'url' => env('REDIS_URL'), - 'host' => env('REDIS_HOST', '127.0.0.1'), - 'username' => env('REDIS_USERNAME'), - 'password' => env('REDIS_PASSWORD'), - 'port' => env('REDIS_PORT', '6379'), - 'database' => env('REDIS_DB', '0'), - ], - - 'cache' => [ - 'url' => env('REDIS_URL'), - 'host' => env('REDIS_HOST', '127.0.0.1'), - 'username' => env('REDIS_USERNAME'), - 'password' => env('REDIS_PASSWORD'), - 'port' => env('REDIS_PORT', '6379'), - 'database' => env('REDIS_CACHE_DB', '1'), - ], - - ], - -]; diff --git a/config/filesystems.php b/config/filesystems.php deleted file mode 100644 index 9c9b882..0000000 --- a/config/filesystems.php +++ /dev/null @@ -1,80 +0,0 @@ - env('FILESYSTEM_DISK', 'local'), - - /* - |-------------------------------------------------------------------------- - | Filesystem Disks - |-------------------------------------------------------------------------- - | - | Below you may configure as many filesystem disks as necessary, and you - | may even configure multiple disks for the same driver. Examples for - | most supported storage drivers are configured here for reference. - | - | Supported drivers: "local", "ftp", "sftp", "s3" - | - */ - - 'disks' => [ - - 'local' => [ - 'driver' => 'local', - 'root' => storage_path('app/private'), - 'serve' => true, - 'throw' => false, - 'report' => false, - ], - - 'public' => [ - 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', - 'visibility' => 'public', - 'throw' => false, - 'report' => false, - ], - - 's3' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT'), - 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), - 'throw' => false, - 'report' => false, - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Symbolic Links - |-------------------------------------------------------------------------- - | - | Here you may configure the symbolic links that will be created when the - | `storage:link` Artisan command is executed. The array keys should be - | the locations of the links and the values should be their targets. - | - */ - - 'links' => [ - public_path('storage') => storage_path('app/public'), - ], - -]; diff --git a/config/inertia.php b/config/inertia.php deleted file mode 100644 index c605b46..0000000 --- a/config/inertia.php +++ /dev/null @@ -1,56 +0,0 @@ - [ - 'enabled' => true, - - 'url' => 'http://127.0.0.1:13714', - - 'bundle' => base_path('bootstrap/ssr/ssr.js'), - ], - - /* - |-------------------------------------------------------------------------- - | Testing - |-------------------------------------------------------------------------- - | - | The values described here are used to locate Inertia components on the - | filesystem. For instance, when using `assertInertia`, the assertion - | attempts to locate the component as a file relative to any of the - | paths AND with any of the extensions specified here. - | - */ - - 'testing' => [ - 'ensure_pages_exist' => true, - - 'page_paths' => [resource_path('js/pages')], - - 'page_extensions' => [ - 'js', - 'jsx', - 'svelte', - 'ts', - 'tsx', - 'vue', - ], - ], -]; diff --git a/config/logging.php b/config/logging.php deleted file mode 100644 index b3dbf93..0000000 --- a/config/logging.php +++ /dev/null @@ -1,132 +0,0 @@ - env('LOG_CHANNEL', 'stack'), - - /* - |-------------------------------------------------------------------------- - | Deprecations Log Channel - |-------------------------------------------------------------------------- - | - | This option controls the log channel that should be used to log warnings - | regarding deprecated PHP and library features. This allows you to get - | your application ready for upcoming major versions of dependencies. - | - */ - - 'deprecations' => [ - 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), - 'trace' => env('LOG_DEPRECATIONS_TRACE', false), - ], - - /* - |-------------------------------------------------------------------------- - | Log Channels - |-------------------------------------------------------------------------- - | - | Here you may configure the log channels for your application. Laravel - | utilizes the Monolog PHP logging library, which includes a variety - | of powerful log handlers and formatters that you're free to use. - | - | Available drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", "custom", "stack" - | - */ - - 'channels' => [ - - 'stack' => [ - 'driver' => 'stack', - 'channels' => explode(',', env('LOG_STACK', 'single')), - 'ignore_exceptions' => false, - ], - - 'single' => [ - 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), - 'replace_placeholders' => true, - ], - - 'daily' => [ - 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), - 'days' => env('LOG_DAILY_DAYS', 14), - 'replace_placeholders' => true, - ], - - 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), - 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), - 'level' => env('LOG_LEVEL', 'critical'), - 'replace_placeholders' => true, - ], - - 'papertrail' => [ - 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), - 'handler_with' => [ - 'host' => env('PAPERTRAIL_URL'), - 'port' => env('PAPERTRAIL_PORT'), - 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), - ], - 'processors' => [PsrLogMessageProcessor::class], - ], - - 'stderr' => [ - 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => StreamHandler::class, - 'handler_with' => [ - 'stream' => 'php://stderr', - ], - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'processors' => [PsrLogMessageProcessor::class], - ], - - 'syslog' => [ - 'driver' => 'syslog', - 'level' => env('LOG_LEVEL', 'debug'), - 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), - 'replace_placeholders' => true, - ], - - 'errorlog' => [ - 'driver' => 'errorlog', - 'level' => env('LOG_LEVEL', 'debug'), - 'replace_placeholders' => true, - ], - - 'null' => [ - 'driver' => 'monolog', - 'handler' => NullHandler::class, - ], - - 'emergency' => [ - 'path' => storage_path('logs/laravel.log'), - ], - - ], - -]; diff --git a/config/mail.php b/config/mail.php deleted file mode 100644 index 756305b..0000000 --- a/config/mail.php +++ /dev/null @@ -1,116 +0,0 @@ - env('MAIL_MAILER', 'log'), - - /* - |-------------------------------------------------------------------------- - | Mailer Configurations - |-------------------------------------------------------------------------- - | - | Here you may configure all of the mailers used by your application plus - | their respective settings. Several examples have been configured for - | you and you are free to add your own as your application requires. - | - | Laravel supports a variety of mail "transport" drivers that can be used - | when delivering an email. You may specify which one you're using for - | your mailers below. You may also add additional mailers if needed. - | - | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", - | "postmark", "resend", "log", "array", - | "failover", "roundrobin" - | - */ - - 'mailers' => [ - - 'smtp' => [ - 'transport' => 'smtp', - 'scheme' => env('MAIL_SCHEME'), - 'url' => env('MAIL_URL'), - 'host' => env('MAIL_HOST', '127.0.0.1'), - 'port' => env('MAIL_PORT', 2525), - 'username' => env('MAIL_USERNAME'), - 'password' => env('MAIL_PASSWORD'), - 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), - ], - - 'ses' => [ - 'transport' => 'ses', - ], - - 'postmark' => [ - 'transport' => 'postmark', - // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), - // 'client' => [ - // 'timeout' => 5, - // ], - ], - - 'resend' => [ - 'transport' => 'resend', - ], - - 'sendmail' => [ - 'transport' => 'sendmail', - 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), - ], - - 'log' => [ - 'transport' => 'log', - 'channel' => env('MAIL_LOG_CHANNEL'), - ], - - 'array' => [ - 'transport' => 'array', - ], - - 'failover' => [ - 'transport' => 'failover', - 'mailers' => [ - 'smtp', - 'log', - ], - ], - - 'roundrobin' => [ - 'transport' => 'roundrobin', - 'mailers' => [ - 'ses', - 'postmark', - ], - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Global "From" Address - |-------------------------------------------------------------------------- - | - | You may wish for all emails sent by your application to be sent from - | the same address. Here you may specify a name and address that is - | used globally for all emails that are sent by your application. - | - */ - - 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), - ], - -]; diff --git a/config/octane.php b/config/octane.php deleted file mode 100644 index 8cfba01..0000000 --- a/config/octane.php +++ /dev/null @@ -1,224 +0,0 @@ - env('OCTANE_SERVER', 'roadrunner'), - - /* - |-------------------------------------------------------------------------- - | Force HTTPS - |-------------------------------------------------------------------------- - | - | When this configuration value is set to "true", Octane will inform the - | framework that all absolute links must be generated using the HTTPS - | protocol. Otherwise your links may be generated using plain HTTP. - | - */ - - 'https' => env('OCTANE_HTTPS', false), - - /* - |-------------------------------------------------------------------------- - | Octane Listeners - |-------------------------------------------------------------------------- - | - | All of the event listeners for Octane's events are defined below. These - | listeners are responsible for resetting your application's state for - | the next request. You may even add your own listeners to the list. - | - */ - - 'listeners' => [ - WorkerStarting::class => [ - EnsureUploadedFilesAreValid::class, - EnsureUploadedFilesCanBeMoved::class, - ], - - RequestReceived::class => [ - ...Octane::prepareApplicationForNextOperation(), - ...Octane::prepareApplicationForNextRequest(), - // - ], - - RequestHandled::class => [ - // - ], - - RequestTerminated::class => [ - // FlushUploadedFiles::class, - ], - - TaskReceived::class => [ - ...Octane::prepareApplicationForNextOperation(), - // - ], - - TaskTerminated::class => [ - // - ], - - TickReceived::class => [ - ...Octane::prepareApplicationForNextOperation(), - // - ], - - TickTerminated::class => [ - // - ], - - OperationTerminated::class => [ - FlushOnce::class, - FlushTemporaryContainerInstances::class, - // DisconnectFromDatabases::class, - // CollectGarbage::class, - ], - - WorkerErrorOccurred::class => [ - ReportException::class, - StopWorkerIfNecessary::class, - ], - - WorkerStopping::class => [ - CloseMonologHandlers::class, - ], - ], - - /* - |-------------------------------------------------------------------------- - | Warm / Flush Bindings - |-------------------------------------------------------------------------- - | - | The bindings listed below will either be pre-warmed when a worker boots - | or they will be flushed before every new request. Flushing a binding - | will force the container to resolve that binding again when asked. - | - */ - - 'warm' => [ - ...Octane::defaultServicesToWarm(), - ], - - 'flush' => [ - // - ], - - /* - |-------------------------------------------------------------------------- - | Octane Swoole Tables - |-------------------------------------------------------------------------- - | - | While using Swoole, you may define additional tables as required by the - | application. These tables can be used to store data that needs to be - | quickly accessed by other workers on the particular Swoole server. - | - */ - - 'tables' => [ - 'example:1000' => [ - 'name' => 'string:1000', - 'votes' => 'int', - ], - ], - - /* - |-------------------------------------------------------------------------- - | Octane Swoole Cache Table - |-------------------------------------------------------------------------- - | - | While using Swoole, you may leverage the Octane cache, which is powered - | by a Swoole table. You may set the maximum number of rows as well as - | the number of bytes per row using the configuration options below. - | - */ - - 'cache' => [ - 'rows' => 1000, - 'bytes' => 10000, - ], - - /* - |-------------------------------------------------------------------------- - | File Watching - |-------------------------------------------------------------------------- - | - | The following list of files and directories will be watched when using - | the --watch option offered by Octane. If any of the directories and - | files are changed, Octane will automatically reload your workers. - | - */ - - 'watch' => [ - 'app', - 'bootstrap', - 'config/**/*.php', - 'database/**/*.php', - 'public/**/*.php', - 'resources/**/*.php', - 'routes', - 'composer.lock', - '.env', - ], - - /* - |-------------------------------------------------------------------------- - | Garbage Collection Threshold - |-------------------------------------------------------------------------- - | - | When executing long-lived PHP scripts such as Octane, memory can build - | up before being cleared by PHP. You can force Octane to run garbage - | collection if your application consumes this amount of megabytes. - | - */ - - 'garbage' => 50, - - /* - |-------------------------------------------------------------------------- - | Maximum Execution Time - |-------------------------------------------------------------------------- - | - | The following setting configures the maximum execution time for requests - | being handled by Octane. You may set this value to 0 to indicate that - | there isn't a specific time limit on Octane request execution time. - | - */ - - 'max_execution_time' => 30, - -]; diff --git a/config/passport.php b/config/passport.php deleted file mode 100644 index c3b41b3..0000000 --- a/config/passport.php +++ /dev/null @@ -1,46 +0,0 @@ - 'web', - - /* - |-------------------------------------------------------------------------- - | Encryption Keys - |-------------------------------------------------------------------------- - | - | Passport uses encryption keys while generating secure access tokens for - | your application. By default, the keys are stored as local files but - | can be set via environment variables when that is more convenient. - | - */ - - 'private_key' => env('PASSPORT_PRIVATE_KEY'), - - 'public_key' => env('PASSPORT_PUBLIC_KEY'), - - /* - |-------------------------------------------------------------------------- - | Passport Database Connection - |-------------------------------------------------------------------------- - | - | By default, Passport's models will utilize your application's default - | database connection. If you wish to use a different connection you - | may specify the configured name of the database connection here. - | - */ - - 'connection' => env('PASSPORT_CONNECTION'), - -]; diff --git a/config/queue.php b/config/queue.php deleted file mode 100644 index 116bd8d..0000000 --- a/config/queue.php +++ /dev/null @@ -1,112 +0,0 @@ - env('QUEUE_CONNECTION', 'database'), - - /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection options for every queue backend - | used by your application. An example configuration is provided for - | each backend supported by Laravel. You're also free to add more. - | - | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" - | - */ - - 'connections' => [ - - 'sync' => [ - 'driver' => 'sync', - ], - - 'database' => [ - 'driver' => 'database', - 'connection' => env('DB_QUEUE_CONNECTION'), - 'table' => env('DB_QUEUE_TABLE', 'jobs'), - 'queue' => env('DB_QUEUE', 'default'), - 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), - 'after_commit' => false, - ], - - 'beanstalkd' => [ - 'driver' => 'beanstalkd', - 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), - 'queue' => env('BEANSTALKD_QUEUE', 'default'), - 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), - 'block_for' => 0, - 'after_commit' => false, - ], - - 'sqs' => [ - 'driver' => 'sqs', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), - 'queue' => env('SQS_QUEUE', 'default'), - 'suffix' => env('SQS_SUFFIX'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), - 'after_commit' => false, - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), - 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), - 'block_for' => null, - 'after_commit' => false, - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Job Batching - |-------------------------------------------------------------------------- - | - | The following options configure the database and table that store job - | batching information. These options can be updated to any database - | connection and table which has been defined by your application. - | - */ - - 'batching' => [ - 'database' => env('DB_CONNECTION', 'sqlite'), - 'table' => 'job_batches', - ], - - /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control how and where failed jobs are stored. Laravel ships with - | support for storing failed jobs in a simple file or in a database. - | - | Supported drivers: "database-uuids", "dynamodb", "file", "null" - | - */ - - 'failed' => [ - 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), - 'database' => env('DB_CONNECTION', 'sqlite'), - 'table' => 'failed_jobs', - ], - -]; diff --git a/config/sanctum.php b/config/sanctum.php deleted file mode 100644 index 44527d6..0000000 --- a/config/sanctum.php +++ /dev/null @@ -1,84 +0,0 @@ - explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( - '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', - Sanctum::currentApplicationUrlWithPort(), - // Sanctum::currentRequestHost(), - ))), - - /* - |-------------------------------------------------------------------------- - | Sanctum Guards - |-------------------------------------------------------------------------- - | - | This array contains the authentication guards that will be checked when - | Sanctum is trying to authenticate a request. If none of these guards - | are able to authenticate the request, Sanctum will use the bearer - | token that's present on an incoming request for authentication. - | - */ - - 'guard' => ['web'], - - /* - |-------------------------------------------------------------------------- - | Expiration Minutes - |-------------------------------------------------------------------------- - | - | This value controls the number of minutes until an issued token will be - | considered expired. This will override any values set in the token's - | "expires_at" attribute, but first-party sessions are not affected. - | - */ - - 'expiration' => null, - - /* - |-------------------------------------------------------------------------- - | Token Prefix - |-------------------------------------------------------------------------- - | - | Sanctum can prefix new tokens in order to take advantage of numerous - | security scanning initiatives maintained by open source platforms - | that notify developers if they commit tokens into repositories. - | - | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning - | - */ - - 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), - - /* - |-------------------------------------------------------------------------- - | Sanctum Middleware - |-------------------------------------------------------------------------- - | - | When authenticating your first-party SPA with Sanctum you may need to - | customize some of the middleware Sanctum uses while processing the - | request. You may change the middleware listed below as required. - | - */ - - 'middleware' => [ - 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, - 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class, - 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class, - ], - -]; diff --git a/config/services.php b/config/services.php deleted file mode 100644 index 8d2ea74..0000000 --- a/config/services.php +++ /dev/null @@ -1,46 +0,0 @@ - [ - 'token' => env('POSTMARK_TOKEN'), - ], - - 'ses' => [ - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), - ], - - 'resend' => [ - 'key' => env('RESEND_KEY'), - ], - - 'slack' => [ - 'notifications' => [ - 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), - 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), - ], - ], - - 'keycloak' => [ - 'client_id' => env('KEYCLOAK_CLIENT_ID'), - 'client_secret' => env('KEYCLOAK_CLIENT_SECRET'), - 'redirect' => env('KEYCLOAK_REDIRECT_URI'), - 'base_url' => env('KEYCLOAK_BASE_URL'), // Specify your keycloak server URL here - 'realms' => env('KEYCLOAK_REALM') // Specify your keycloak realm - ], - -]; diff --git a/config/session.php b/config/session.php deleted file mode 100644 index 717f990..0000000 --- a/config/session.php +++ /dev/null @@ -1,217 +0,0 @@ - env('SESSION_DRIVER', 'database'), - - /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to expire immediately when the browser is closed then you may - | indicate that via the expire_on_close configuration option. - | - */ - - 'lifetime' => (int) env('SESSION_LIFETIME', 120), - - 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), - - /* - |-------------------------------------------------------------------------- - | Session Encryption - |-------------------------------------------------------------------------- - | - | This option allows you to easily specify that all of your session data - | should be encrypted before it's stored. All encryption is performed - | automatically by Laravel and you may use the session like normal. - | - */ - - 'encrypt' => env('SESSION_ENCRYPT', false), - - /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When utilizing the "file" session driver, the session files are placed - | on disk. The default storage location is defined here; however, you - | are free to provide another location where they should be stored. - | - */ - - 'files' => storage_path('framework/sessions'), - - /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ - - 'connection' => env('SESSION_CONNECTION'), - - /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table to - | be used to store sessions. Of course, a sensible default is defined - | for you; however, you're welcome to change this to another table. - | - */ - - 'table' => env('SESSION_TABLE', 'sessions'), - - /* - |-------------------------------------------------------------------------- - | Session Cache Store - |-------------------------------------------------------------------------- - | - | When using one of the framework's cache driven session backends, you may - | define the cache store which should be used to store the session data - | between requests. This must match one of your defined cache stores. - | - | Affects: "apc", "dynamodb", "memcached", "redis" - | - */ - - 'store' => env('SESSION_STORE'), - - /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ - - 'lottery' => [2, 100], - - /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the session cookie that is created by - | the framework. Typically, you should not need to change this value - | since doing so does not grant a meaningful security improvement. - | - */ - - 'cookie' => env( - 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' - ), - - /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application, but you're free to change this when necessary. - | - */ - - 'path' => env('SESSION_PATH', '/'), - - /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | This value determines the domain and subdomains the session cookie is - | available to. By default, the cookie will be available to the root - | domain and all subdomains. Typically, this shouldn't be changed. - | - */ - - 'domain' => env('SESSION_DOMAIN'), - - /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you when it can't be done securely. - | - */ - - 'secure' => env('SESSION_SECURE_COOKIE'), - - /* - |-------------------------------------------------------------------------- - | HTTP Access Only - |-------------------------------------------------------------------------- - | - | Setting this value to true will prevent JavaScript from accessing the - | value of the cookie and the cookie will only be accessible through - | the HTTP protocol. It's unlikely you should disable this option. - | - */ - - 'http_only' => env('SESSION_HTTP_ONLY', true), - - /* - |-------------------------------------------------------------------------- - | Same-Site Cookies - |-------------------------------------------------------------------------- - | - | This option determines how your cookies behave when cross-site requests - | take place, and can be used to mitigate CSRF attacks. By default, we - | will set this value to "lax" to permit secure cross-site requests. - | - | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value - | - | Supported: "lax", "strict", "none", null - | - */ - - 'same_site' => env('SESSION_SAME_SITE', 'lax'), - - /* - |-------------------------------------------------------------------------- - | Partitioned Cookies - |-------------------------------------------------------------------------- - | - | Setting this value to true will tie the cookie to the top-level site for - | a cross-site context. Partitioned cookies are accepted by the browser - | when flagged "secure" and the Same-Site attribute is set to "none". - | - */ - - 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), - -]; diff --git a/config/telescope.php b/config/telescope.php deleted file mode 100644 index 9c492b2..0000000 --- a/config/telescope.php +++ /dev/null @@ -1,207 +0,0 @@ - env('TELESCOPE_ENABLED', true), - - /* - |-------------------------------------------------------------------------- - | Telescope Domain - |-------------------------------------------------------------------------- - | - | This is the subdomain where Telescope will be accessible from. If the - | setting is null, Telescope will reside under the same domain as the - | application. Otherwise, this value will be used as the subdomain. - | - */ - - 'domain' => env('TELESCOPE_DOMAIN'), - - /* - |-------------------------------------------------------------------------- - | Telescope Path - |-------------------------------------------------------------------------- - | - | This is the URI path where Telescope will be accessible from. Feel free - | to change this path to anything you like. Note that the URI will not - | affect the paths of its internal API that aren't exposed to users. - | - */ - - 'path' => env('TELESCOPE_PATH', 'telescope'), - - /* - |-------------------------------------------------------------------------- - | Telescope Storage Driver - |-------------------------------------------------------------------------- - | - | This configuration options determines the storage driver that will - | be used to store Telescope's data. In addition, you may set any - | custom options as needed by the particular driver you choose. - | - */ - - 'driver' => env('TELESCOPE_DRIVER', 'database'), - - 'storage' => [ - 'database' => [ - 'connection' => env('DB_CONNECTION', 'mysql'), - 'chunk' => 1000, - ], - ], - - /* - |-------------------------------------------------------------------------- - | Telescope Queue - |-------------------------------------------------------------------------- - | - | This configuration options determines the queue connection and queue - | which will be used to process ProcessPendingUpdate jobs. This can - | be changed if you would prefer to use a non-default connection. - | - */ - - 'queue' => [ - 'connection' => env('TELESCOPE_QUEUE_CONNECTION', null), - 'queue' => env('TELESCOPE_QUEUE', null), - 'delay' => env('TELESCOPE_QUEUE_DELAY', 10), - ], - - /* - |-------------------------------------------------------------------------- - | Telescope Route Middleware - |-------------------------------------------------------------------------- - | - | These middleware will be assigned to every Telescope route, giving you - | the chance to add your own middleware to this list or change any of - | the existing middleware. Or, you can simply stick with this list. - | - */ - - 'middleware' => [ - 'web', - Authorize::class, - ], - - /* - |-------------------------------------------------------------------------- - | Allowed / Ignored Paths & Commands - |-------------------------------------------------------------------------- - | - | The following array lists the URI paths and Artisan commands that will - | not be watched by Telescope. In addition to this list, some Laravel - | commands, like migrations and queue commands, are always ignored. - | - */ - - 'only_paths' => [ - // 'api/*' - ], - - 'ignore_paths' => [ - 'livewire*', - 'nova-api*', - 'pulse*', - ], - - 'ignore_commands' => [ - // - ], - - /* - |-------------------------------------------------------------------------- - | Telescope Watchers - |-------------------------------------------------------------------------- - | - | The following array lists the "watchers" that will be registered with - | Telescope. The watchers gather the application's profile data when - | a request or task is executed. Feel free to customize this list. - | - */ - - 'watchers' => [ - Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), - - Watchers\CacheWatcher::class => [ - 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), - 'hidden' => [], - 'ignore' => [], - ], - - Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), - - Watchers\CommandWatcher::class => [ - 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), - 'ignore' => [], - ], - - Watchers\DumpWatcher::class => [ - 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), - 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), - ], - - Watchers\EventWatcher::class => [ - 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), - 'ignore' => [], - ], - - Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), - - Watchers\GateWatcher::class => [ - 'enabled' => env('TELESCOPE_GATE_WATCHER', true), - 'ignore_abilities' => [], - 'ignore_packages' => true, - 'ignore_paths' => [], - ], - - Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), - - Watchers\LogWatcher::class => [ - 'enabled' => env('TELESCOPE_LOG_WATCHER', true), - 'level' => 'error', - ], - - Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), - - Watchers\ModelWatcher::class => [ - 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), - 'events' => ['eloquent.*'], - 'hydrations' => true, - ], - - Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), - - Watchers\QueryWatcher::class => [ - 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), - 'ignore_packages' => true, - 'ignore_paths' => [], - 'slow' => 100, - ], - - Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), - - Watchers\RequestWatcher::class => [ - 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), - 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), - 'ignore_http_methods' => [], - 'ignore_status_codes' => [], - ], - - Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), - Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), - ], -]; diff --git a/database/.gitignore b/database/.gitignore deleted file mode 100644 index 9b19b93..0000000 --- a/database/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php deleted file mode 100644 index cfe14a3..0000000 --- a/database/factories/UserFactory.php +++ /dev/null @@ -1,34 +0,0 @@ - - */ -class UserFactory extends Factory -{ - /** - * The current password being used by the factory. - */ - protected static ?string $password; - - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - 'name' => fake()->name(), - 'email' => fake()->unique()->safeEmail(), - 'avatar' => fake()->imageUrl(), - 'password' => static::$password ??= Hash::make('password'), - 'remember_token' => Str::random(10), - ]; - } -} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php deleted file mode 100644 index 443bc50..0000000 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ /dev/null @@ -1,55 +0,0 @@ -uuid('id')->primary(); // Changed from id() to uuid('id')->primary() - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); - $table->string('password')->nullable(); // Made nullable for OIDC users - $table->uuid('oidc_id')->nullable(); - $table->text('avatar')->nullable(); // Fixed typo: test -> text - $table->rememberToken(); - $table->timestamps(); - }); - - Schema::create('password_reset_tokens', function (Blueprint $table) { - $table->string('email')->primary(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - - Schema::create('sessions', function (Blueprint $table) { - $table->string('id')->primary(); - $table->uuid('user_id')->nullable()->index(); // Changed from foreignId to uuid - $table->string('ip_address', 45)->nullable(); - $table->text('user_agent')->nullable(); - $table->longText('payload'); - $table->integer('last_activity')->index(); - - // Add foreign key constraint for UUID - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('users'); - Schema::dropIfExists('password_reset_tokens'); - Schema::dropIfExists('sessions'); - } -}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php deleted file mode 100644 index b9c106b..0000000 --- a/database/migrations/0001_01_01_000001_create_cache_table.php +++ /dev/null @@ -1,35 +0,0 @@ -string('key')->primary(); - $table->mediumText('value'); - $table->integer('expiration'); - }); - - Schema::create('cache_locks', function (Blueprint $table) { - $table->string('key')->primary(); - $table->string('owner'); - $table->integer('expiration'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('cache'); - Schema::dropIfExists('cache_locks'); - } -}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php deleted file mode 100644 index 425e705..0000000 --- a/database/migrations/0001_01_01_000002_create_jobs_table.php +++ /dev/null @@ -1,57 +0,0 @@ -id(); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); - - Schema::create('job_batches', function (Blueprint $table) { - $table->string('id')->primary(); - $table->string('name'); - $table->integer('total_jobs'); - $table->integer('pending_jobs'); - $table->integer('failed_jobs'); - $table->longText('failed_job_ids'); - $table->mediumText('options')->nullable(); - $table->integer('cancelled_at')->nullable(); - $table->integer('created_at'); - $table->integer('finished_at')->nullable(); - }); - - Schema::create('failed_jobs', function (Blueprint $table) { - $table->id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jobs'); - Schema::dropIfExists('job_batches'); - Schema::dropIfExists('failed_jobs'); - } -}; diff --git a/database/migrations/2025_06_22_121613_create_roles_table.php b/database/migrations/2025_06_22_121613_create_roles_table.php deleted file mode 100644 index da128c0..0000000 --- a/database/migrations/2025_06_22_121613_create_roles_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->string('name')->unique(); - $table->string('display_name')->nullable(); - $table->text('description')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('roles'); - } -}; diff --git a/database/migrations/2025_06_22_121637_create_permissions_table.php b/database/migrations/2025_06_22_121637_create_permissions_table.php deleted file mode 100644 index b88eb44..0000000 --- a/database/migrations/2025_06_22_121637_create_permissions_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name')->unique(); - $table->string('display_name')->nullable(); - $table->text('description')->nullable(); - $table->boolean('is_wildcard')->default(false); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('permissions'); - } -}; diff --git a/database/migrations/2025_06_22_123248_make_password_nullable_in_users_table.php b/database/migrations/2025_06_22_123248_make_password_nullable_in_users_table.php deleted file mode 100644 index 3bd91b0..0000000 --- a/database/migrations/2025_06_22_123248_make_password_nullable_in_users_table.php +++ /dev/null @@ -1,28 +0,0 @@ -string('password')->nullable()->change(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('users', function (Blueprint $table) { - $table->string('password')->nullable(false)->change(); - }); - } -}; diff --git a/database/migrations/2025_06_22_141254_create_permission_role_table.php b/database/migrations/2025_06_22_141254_create_permission_role_table.php deleted file mode 100644 index 50b59ae..0000000 --- a/database/migrations/2025_06_22_141254_create_permission_role_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->foreignId('permission_id')->constrained()->cascadeOnDelete(); - $table->foreignId('role_id')->constrained()->cascadeOnDelete(); - $table->boolean('granted')->default(false); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('permission_role'); - } -}; diff --git a/database/migrations/2025_06_22_141254_create_permission_user_table.php b/database/migrations/2025_06_22_141254_create_permission_user_table.php deleted file mode 100644 index 81e3b8c..0000000 --- a/database/migrations/2025_06_22_141254_create_permission_user_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->foreignId('permission_id')->constrained()->cascadeOnDelete(); - $table->foreignUuid('user_id')->constrained()->cascadeOnDelete(); - $table->boolean('granted')->default(false); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('permission_user'); - } -}; diff --git a/database/migrations/2025_06_23_194736_create_role_user_table.php b/database/migrations/2025_06_23_194736_create_role_user_table.php deleted file mode 100644 index 4e88dd4..0000000 --- a/database/migrations/2025_06_23_194736_create_role_user_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->uuid('user_id'); - $table->unsignedBigInteger('role_id'); - $table->timestamps(); - - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); - $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); - - $table->unique(['user_id', 'role_id']); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('role_user'); - } -}; diff --git a/database/migrations/2025_06_24_000001_create_competition_system_tables.php b/database/migrations/2025_06_24_000001_create_competition_system_tables.php deleted file mode 100644 index ba754ed..0000000 --- a/database/migrations/2025_06_24_000001_create_competition_system_tables.php +++ /dev/null @@ -1,122 +0,0 @@ -id(); - $table->string('name'); - $table->text('description')->nullable(); - $table->date('start_date'); - $table->string('status')->default('planned'); - $table->string('location')->nullable(); - $table->integer('max_teams')->default(0); - $table->integer('current_scheduling_mode_id')->nullable(); - $table->uuid('owner')->nullable(); - $table->timestamps(); - }); - - // Create scheduling modes table - Schema::create('scheduling_modes', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->text('description')->nullable(); - $table->integer('competition_id')->nullable(); - $table->string('algorithm')->default('round_robin'); - $table->json('config')->nullable(); - $table->integer('sequence_order')->default(1); - $table->string('status')->default('active'); - $table->timestamps(); - }); - - // Create fields table - Schema::create('fields', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('location')->nullable(); - $table->text('description')->nullable(); - $table->string('status')->default('planned'); - $table->integer('capacity')->default(0); - $table->string('surface_type')->default('grass'); - $table->boolean('indoor')->default(false); - $table->json('dimensions')->nullable(); - $table->timestamps(); - }); - - Schema::create('competition_field', function (Blueprint $table) { - $table->id(); - $table->foreignId('competition_id')->constrained('competitions')->onDelete('cascade'); - $table->foreignId('field_id')->constrained('fields')->onDelete('cascade'); - $table->timestamps(); - }); - - // Create teams table - Schema::create('teams', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('country')->nullable(); - $table->string('city')->nullable(); - $table->string('address')->nullable(); - $table->string('phone')->nullable(); - $table->timestamps(); - }); - - Schema::create('competition_team', function (Blueprint $table) { - $table->id(); - $table->foreignId('competition_id')->constrained('competitions')->onDelete('cascade'); - $table->foreignId('team_id')->constrained('teams')->onDelete('cascade'); - $table->string('status')->default('confirmed'); - $table->timestamps(); - }); - - // Create matches table - Schema::create('matches', function (Blueprint $table) { - $table->id(); - $table->foreignId('competition_id')->constrained('competitions')->onDelete('cascade'); - $table->foreignId('field_id')->constrained('fields')->onDelete('cascade'); - $table->foreignId('team1_id')->constrained('teams')->onDelete('cascade'); - $table->foreignId('team2_id')->constrained('teams')->onDelete('cascade'); - $table->string('status')->default('scheduled'); - $table->timestamps(); - }); - - // Create break periods table - Schema::create('break_periods', function (Blueprint $table) { - $table->id(); - $table->foreignId('competition_id')->constrained('competitions')->onDelete('cascade'); - $table->foreignId('field_id')->constrained('fields')->onDelete('cascade'); - $table->string('name'); - $table->text('description')->nullable(); - $table->dateTime('start_time'); - $table->dateTime('end_time'); - $table->string('type')->default('break'); - $table->string('status')->default('planned'); - $table->integer('round')->default(1); - $table->integer('match_slot')->default(1); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('break_periods'); - Schema::dropIfExists('matches'); - Schema::dropIfExists('competition_team'); - Schema::dropIfExists('teams'); - Schema::dropIfExists('fields'); - Schema::dropIfExists('scheduling_modes'); - Schema::dropIfExists('competitions'); - } -}; diff --git a/database/migrations/2025_07_04_223322_create_personal_access_tokens_table.php b/database/migrations/2025_07_04_223322_create_personal_access_tokens_table.php deleted file mode 100644 index e828ad8..0000000 --- a/database/migrations/2025_07_04_223322_create_personal_access_tokens_table.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - $table->morphs('tokenable'); - $table->string('name'); - $table->string('token', 64)->unique(); - $table->text('abilities')->nullable(); - $table->timestamp('last_used_at')->nullable(); - $table->timestamp('expires_at')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('personal_access_tokens'); - } -}; diff --git a/database/migrations/2025_07_04_225603_create_telescope_entries_table.php b/database/migrations/2025_07_04_225603_create_telescope_entries_table.php deleted file mode 100644 index 700a83f..0000000 --- a/database/migrations/2025_07_04_225603_create_telescope_entries_table.php +++ /dev/null @@ -1,70 +0,0 @@ -getConnection()); - - $schema->create('telescope_entries', function (Blueprint $table) { - $table->bigIncrements('sequence'); - $table->uuid('uuid'); - $table->uuid('batch_id'); - $table->string('family_hash')->nullable(); - $table->boolean('should_display_on_index')->default(true); - $table->string('type', 20); - $table->longText('content'); - $table->dateTime('created_at')->nullable(); - - $table->unique('uuid'); - $table->index('batch_id'); - $table->index('family_hash'); - $table->index('created_at'); - $table->index(['type', 'should_display_on_index']); - }); - - $schema->create('telescope_entries_tags', function (Blueprint $table) { - $table->uuid('entry_uuid'); - $table->string('tag'); - - $table->primary(['entry_uuid', 'tag']); - $table->index('tag'); - - $table->foreign('entry_uuid') - ->references('uuid') - ->on('telescope_entries') - ->onDelete('cascade'); - }); - - $schema->create('telescope_monitoring', function (Blueprint $table) { - $table->string('tag')->primary(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - $schema = Schema::connection($this->getConnection()); - - $schema->dropIfExists('telescope_entries_tags'); - $schema->dropIfExists('telescope_entries'); - $schema->dropIfExists('telescope_monitoring'); - } -}; diff --git a/database/migrations/2025_07_05_074720_create_oauth_auth_codes_table.php b/database/migrations/2025_07_05_074720_create_oauth_auth_codes_table.php deleted file mode 100644 index c700b50..0000000 --- a/database/migrations/2025_07_05_074720_create_oauth_auth_codes_table.php +++ /dev/null @@ -1,39 +0,0 @@ -char('id', 80)->primary(); - $table->foreignId('user_id')->index(); - $table->foreignUuid('client_id'); - $table->text('scopes')->nullable(); - $table->boolean('revoked'); - $table->dateTime('expires_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('oauth_auth_codes'); - } - - /** - * Get the migration connection name. - */ - public function getConnection(): ?string - { - return $this->connection ?? config('passport.connection'); - } -}; diff --git a/database/migrations/2025_07_05_074721_create_oauth_access_tokens_table.php b/database/migrations/2025_07_05_074721_create_oauth_access_tokens_table.php deleted file mode 100644 index 3e50f7f..0000000 --- a/database/migrations/2025_07_05_074721_create_oauth_access_tokens_table.php +++ /dev/null @@ -1,41 +0,0 @@ -char('id', 80)->primary(); - $table->foreignId('user_id')->nullable()->index(); - $table->foreignUuid('client_id'); - $table->string('name')->nullable(); - $table->text('scopes')->nullable(); - $table->boolean('revoked'); - $table->timestamps(); - $table->dateTime('expires_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('oauth_access_tokens'); - } - - /** - * Get the migration connection name. - */ - public function getConnection(): ?string - { - return $this->connection ?? config('passport.connection'); - } -}; diff --git a/database/migrations/2025_07_05_074722_create_oauth_refresh_tokens_table.php b/database/migrations/2025_07_05_074722_create_oauth_refresh_tokens_table.php deleted file mode 100644 index afb3c55..0000000 --- a/database/migrations/2025_07_05_074722_create_oauth_refresh_tokens_table.php +++ /dev/null @@ -1,37 +0,0 @@ -char('id', 80)->primary(); - $table->char('access_token_id', 80)->index(); - $table->boolean('revoked'); - $table->dateTime('expires_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('oauth_refresh_tokens'); - } - - /** - * Get the migration connection name. - */ - public function getConnection(): ?string - { - return $this->connection ?? config('passport.connection'); - } -}; diff --git a/database/migrations/2025_07_05_074723_create_oauth_clients_table.php b/database/migrations/2025_07_05_074723_create_oauth_clients_table.php deleted file mode 100644 index 9794dc8..0000000 --- a/database/migrations/2025_07_05_074723_create_oauth_clients_table.php +++ /dev/null @@ -1,42 +0,0 @@ -uuid('id')->primary(); - $table->nullableMorphs('owner'); - $table->string('name'); - $table->string('secret')->nullable(); - $table->string('provider')->nullable(); - $table->text('redirect_uris'); - $table->text('grant_types'); - $table->boolean('revoked'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('oauth_clients'); - } - - /** - * Get the migration connection name. - */ - public function getConnection(): ?string - { - return $this->connection ?? config('passport.connection'); - } -}; diff --git a/database/migrations/2025_07_05_074724_create_oauth_device_codes_table.php b/database/migrations/2025_07_05_074724_create_oauth_device_codes_table.php deleted file mode 100644 index ea07831..0000000 --- a/database/migrations/2025_07_05_074724_create_oauth_device_codes_table.php +++ /dev/null @@ -1,42 +0,0 @@ -char('id', 80)->primary(); - $table->foreignId('user_id')->nullable()->index(); - $table->foreignUuid('client_id')->index(); - $table->char('user_code', 8)->unique(); - $table->text('scopes'); - $table->boolean('revoked'); - $table->dateTime('user_approved_at')->nullable(); - $table->dateTime('last_polled_at')->nullable(); - $table->dateTime('expires_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('oauth_device_codes'); - } - - /** - * Get the migration connection name. - */ - public function getConnection(): ?string - { - return $this->connection ?? config('passport.connection'); - } -}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php deleted file mode 100644 index beb98b1..0000000 --- a/database/seeders/DatabaseSeeder.php +++ /dev/null @@ -1,18 +0,0 @@ -call(RoleSeeder::class); - } -} diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php deleted file mode 100644 index 3bf208d..0000000 --- a/database/seeders/RoleSeeder.php +++ /dev/null @@ -1,28 +0,0 @@ - 'admin', 'display_name' => 'Administrator'], - ['name' => 'user', 'display_name' => 'Regular User'], - ]; - - foreach ($roles as $role) { - Role::firstOrCreate( - ['name' => $role['name']], - $role - ); - } - } -} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a7a8b50 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +services: + db: + image: postgres + restart: always + ports: + - 127.0.0.1:1234:5432 + environment: + POSTGRES_USER: root + POSTGRES_PASSWORD: mysecretpassword + POSTGRES_DB: local + volumes: + - pgdata:/var/lib/postgresql/data + # server: + # build: . + # pull_policy: always + # restart: always + # ports: + # - 127.0.0.1:3000:3000 + # environment: + # DATABASE_URL: postgres://root:mysecretpassword@db:5432/local + # depends_on: + # - db +volumes: + pgdata: diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..5ddbcb3 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'drizzle-kit'; + +export default defineConfig({ + out: './drizzle', + schema: './src/lib/server/db/schema', + dialect: 'postgresql', + dbCredentials: { url: process.env.DATABASE_URL || ' ' }, + verbose: true, + strict: true +}); diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 0000000..99263a0 --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1 @@ +{ "version": "7", "dialect": "postgresql", "entries": [] } diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index fc01de0..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,56 +0,0 @@ -import js from '@eslint/js'; -import prettier from 'eslint-config-prettier'; -import svelte from 'eslint-plugin-svelte'; -import globals from 'globals'; -import ts from 'typescript-eslint'; - -export default ts.config( - js.configs.recommended, - ...ts.configs.recommended, - ...svelte.configs.recommended, - { - languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - route: 'readonly', - Laravel: 'readonly', - }, - }, - }, - { - files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], - // See more details at: https://typescript-eslint.io/packages/parser/ - languageOptions: { - parserOptions: { - projectService: true, - extraFileExtensions: ['.svelte', '.svelte.ts', '.svelte.js'], // Add support for additional file extensions, such as .svelte - parser: ts.parser, - // Specify a parser for each language, if needed: - // parser: { - // ts: ts.parser, - // js: espree, // Use espree for .js files (add: import espree from 'espree') - // typescript: ts.parser - // }, - - // We recommend importing and specifying svelte.config.js. - // By doing so, some rules in eslint-plugin-svelte will automatically read the configuration and adjust their behavior accordingly. - // While certain Svelte settings may be statically loaded from svelte.config.js even if you don’t specify it, - // explicitly specifying it ensures better compatibility and functionality. - // svelteConfig, - }, - }, - }, - { - rules: { - '@typescript-eslint/no-explicit-any': 'off', - 'svelte/infinite-reactive-loop': 'error', - 'svelte/no-at-html-tags': 'error', - 'svelte/no-target-blank': 'error', - }, - }, - { - ignores: ['vendor', 'node_modules', 'public', 'bootstrap/ssr', 'tailwind.config.js', 'resources/js/components/ui/*'], - }, - prettier, -); diff --git a/package.json b/package.json index 8e7cf97..f82e15b 100644 --- a/package.json +++ b/package.json @@ -1,69 +1,63 @@ { - "private": true, - "type": "module", - "scripts": { - "build": "vite build", - "build:ssr": "vite build && vite build --ssr", - "dev": "vite", - "format": "prettier --write resources/", - "format:check": "prettier --check resources/", - "lint": "oxlint . --fix" - }, - "devDependencies": { - "@eslint/js": "^9.27.0", - "@inertiajs/svelte": "^2.0.11", - "@internationalized/date": "^3.8.1", - "@lucide/svelte": "^0.511.0", - "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@tailwindcss/vite": "^4.1.8", - "@tanstack/table-core": "^8.21.3", - "@tsconfig/svelte": "^5.0.4", - "@types/node": "^22.15.27", - "axios": "^1.9.0", - "bits-ui": "^2.3.0", - "chokidar": "^4.0.3", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "concurrently": "^9.1.2", - "date-fns": "^4.1.0", - "embla-carousel-svelte": "^8.6.0", - "eslint": "^9.27.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-svelte": "^3.9.0", - "formsnap": "^2.0.1", - "globals": "^16.2.0", - "laravel-vite-plugin": "^1.2.0", - "layerchart": "^2.0.0-next.10", - "lucide-svelte": "^0.511.0", - "maildev": "^2.2.1", - "mode-watcher": "^1.0.7", - "oxlint": "^1.2.0", - "paneforge": "^1.0.0-next.5", - "prettier": "^3.5.3", - "prettier-plugin-organize-imports": "^4.1.0", - "prettier-plugin-svelte": "^3.4.0", - "prettier-plugin-tailwindcss": "^0.6.11", - "svelte": "^5.33.10", - "svelte-check": "^4.2.1", - "svelte-portal": "^2.2.1", - "svelte-sonner": "^1.0.3", - "svelte-transition": "^0.0.17", - "sveltekit-superforms": "^2.25.0", - "tailwind-merge": "^3.3.0", - "tailwind-variants": "^1.0.0", - "tailwindcss": "^4.1.8", - "tailwindcss-animate": "^1.0.7", - "tw-animate-css": "^1.3.2", - "typescript": "^5.8.3", - "typescript-eslint": "^8.33.0", - "vaul-svelte": "^1.0.0-next.7", - "vite": "^6.3.5", - "zod": "^3.25.42" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "4.41.1", - "@tailwindcss/oxide-linux-x64-gnu": "^4.1.8", - "lightningcss-linux-x64-gnu": "^1.30.1" - }, - "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184" + "name": "flbxcup", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "biome format --write", + "lint": "biome check --write", + "db:start": "docker compose up -d", + "db:push": "drizzle-kit push", + "db:migrate": "drizzle-kit migrate", + "db:studio": "drizzle-kit studio" + }, + "devDependencies": { + "@biomejs/biome": "2.1.2", + "@internationalized/date": "^3.8.2", + "@lucide/svelte": "^0.515.0", + "@sveltejs/adapter-node": "^5.2.13", + "@sveltejs/kit": "^2.25.1", + "@sveltejs/vite-plugin-svelte": "^5.1.1", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/vite": "^4.1.11", + "@types/node": "^22.16.5", + "@types/pg": "^8.15.4", + "bits-ui": "^2.8.11", + "clsx": "^2.1.1", + "drizzle-kit": "^0.30.6", + "formsnap": "^2.0.1", + "mode-watcher": "^1.1.0", + "svelte": "^5.36.13", + "svelte-check": "^4.3.0", + "svelte-sonner": "^1.0.5", + "sveltekit-superforms": "^2.27.1", + "tailwind-merge": "^3.3.1", + "tailwind-variants": "^1.0.0", + "tailwindcss": "^4.1.11", + "tw-animate-css": "^1.3.5", + "typescript": "^5.8.3", + "vite": "npm:rolldown-vite@latest", + "vite-plugin-devtools-json": "^0.2.1" + }, + "dependencies": { + "@node-rs/argon2": "^2.0.2", + "@oslojs/crypto": "^1.0.1", + "@oslojs/encoding": "^1.1.0", + "arctic": "^3.7.0", + "drizzle-orm": "^0.40.1", + "drizzle-zod": "^0.8.2", + "lucide-svelte": "^0.525.0", + "pg": "^8.16.3", + "svelte-i18n": "^4.0.1", + "svelvet": "^11.0.5", + "uuid": "^11.1.0", + "zod": "^3.25.76" + } } diff --git a/phpunit.xml b/phpunit.xml deleted file mode 100644 index c09b5bc..0000000 --- a/phpunit.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - tests/Unit - - - tests/Feature - - - - - app - - - - - - - - - - - - - - - diff --git a/pint.json b/pint.json deleted file mode 100644 index 3402469..0000000 --- a/pint.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "preset": "laravel", - "rules": { - "concat_space": false, - "not_operator_with_successor_space": false, - "unary_operator_spaces": false, - "function_declaration": false - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0fa6765..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,5337 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@eslint/js': - specifier: ^9.27.0 - version: 9.29.0 - '@inertiajs/svelte': - specifier: ^2.0.11 - version: 2.0.12(svelte@5.34.7) - '@internationalized/date': - specifier: ^3.8.1 - version: 3.8.2 - '@lucide/svelte': - specifier: ^0.511.0 - version: 0.511.0(svelte@5.34.7) - '@sveltejs/vite-plugin-svelte': - specifier: ^5.0.3 - version: 5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - '@tailwindcss/vite': - specifier: ^4.1.8 - version: 4.1.10(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - '@tanstack/table-core': - specifier: ^8.21.3 - version: 8.21.3 - '@tsconfig/svelte': - specifier: ^5.0.4 - version: 5.0.4 - '@types/node': - specifier: ^22.15.27 - version: 22.15.32 - axios: - specifier: ^1.9.0 - version: 1.10.0 - bits-ui: - specifier: ^2.3.0 - version: 2.8.2(@internationalized/date@3.8.2)(svelte@5.34.7) - chokidar: - specifier: ^4.0.3 - version: 4.0.3 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - concurrently: - specifier: ^9.1.2 - version: 9.1.2 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - embla-carousel-svelte: - specifier: ^8.6.0 - version: 8.6.0(svelte@5.34.7) - eslint: - specifier: ^9.27.0 - version: 9.29.0(jiti@2.4.2) - eslint-config-prettier: - specifier: ^10.1.5 - version: 10.1.5(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-svelte: - specifier: ^3.9.0 - version: 3.9.2(eslint@9.29.0(jiti@2.4.2))(svelte@5.34.7) - formsnap: - specifier: ^2.0.1 - version: 2.0.1(svelte@5.34.7)(sveltekit-superforms@2.27.0(@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(@types/json-schema@7.0.15)(esbuild@0.25.5)(svelte@5.34.7)(typescript@5.8.3)) - globals: - specifier: ^16.2.0 - version: 16.2.0 - laravel-vite-plugin: - specifier: ^1.2.0 - version: 1.3.0(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - layerchart: - specifier: ^2.0.0-next.10 - version: 2.0.0-next.23(svelte@5.34.7) - lucide-svelte: - specifier: ^0.511.0 - version: 0.511.0(svelte@5.34.7) - maildev: - specifier: ^2.2.1 - version: 2.2.1 - mode-watcher: - specifier: ^1.0.7 - version: 1.0.8(svelte@5.34.7) - oxlint: - specifier: ^1.2.0 - version: 1.2.0 - paneforge: - specifier: ^1.0.0-next.5 - version: 1.0.0(svelte@5.34.7) - prettier: - specifier: ^3.5.3 - version: 3.5.3 - prettier-plugin-organize-imports: - specifier: ^4.1.0 - version: 4.1.0(prettier@3.5.3)(typescript@5.8.3) - prettier-plugin-svelte: - specifier: ^3.4.0 - version: 3.4.0(prettier@3.5.3)(svelte@5.34.7) - prettier-plugin-tailwindcss: - specifier: ^0.6.11 - version: 0.6.12(prettier-plugin-organize-imports@4.1.0(prettier@3.5.3)(typescript@5.8.3))(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.34.7))(prettier@3.5.3) - svelte: - specifier: ^5.33.10 - version: 5.34.7 - svelte-check: - specifier: ^4.2.1 - version: 4.2.2(picomatch@4.0.2)(svelte@5.34.7)(typescript@5.8.3) - svelte-portal: - specifier: ^2.2.1 - version: 2.2.1 - svelte-sonner: - specifier: ^1.0.3 - version: 1.0.5(svelte@5.34.7) - svelte-transition: - specifier: ^0.0.17 - version: 0.0.17(svelte@5.34.7) - sveltekit-superforms: - specifier: ^2.25.0 - version: 2.27.0(@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(@types/json-schema@7.0.15)(esbuild@0.25.5)(svelte@5.34.7)(typescript@5.8.3) - tailwind-merge: - specifier: ^3.3.0 - version: 3.3.1 - tailwind-variants: - specifier: ^1.0.0 - version: 1.0.0(tailwindcss@4.1.10) - tailwindcss: - specifier: ^4.1.8 - version: 4.1.10 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.10) - tw-animate-css: - specifier: ^1.3.2 - version: 1.3.4 - typescript: - specifier: ^5.8.3 - version: 5.8.3 - typescript-eslint: - specifier: ^8.33.0 - version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - vaul-svelte: - specifier: ^1.0.0-next.7 - version: 1.0.0-next.7(svelte@5.34.7) - vite: - specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - zod: - specifier: ^3.25.42 - version: 3.25.67 - optionalDependencies: - '@rollup/rollup-linux-x64-gnu': - specifier: 4.41.1 - version: 4.41.1 - '@tailwindcss/oxide-linux-x64-gnu': - specifier: ^4.1.8 - version: 4.1.10 - lightningcss-linux-x64-gnu: - specifier: ^1.30.1 - version: 1.30.1 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@ark/schema@0.46.0': - resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} - - '@ark/util@0.46.0': - resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} - - '@asamuzakjp/css-color@3.2.0': - resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - - '@babel/runtime@7.27.6': - resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} - engines: {node: '>=6.9.0'} - - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} - engines: {node: '>=18'} - - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-color-parser@3.0.10': - resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - - '@dagrejs/dagre@1.1.5': - resolution: {integrity: sha512-Ghgrh08s12DCL5SeiR6AoyE80mQELTWhJBRmXfFoqDiFkR458vPEdgTbbjA0T+9ETNxUblnD0QW55tfdvi5pjQ==} - - '@dagrejs/graphlib@2.2.4': - resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} - engines: {node: '>17.0.0'} - - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.2.3': - resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.0': - resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.2': - resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@exodus/schemasafe@1.3.0': - resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - - '@floating-ui/core@1.7.1': - resolution: {integrity: sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==} - - '@floating-ui/dom@1.7.1': - resolution: {integrity: sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==} - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - - '@gcornut/valibot-json-schema@0.42.0': - resolution: {integrity: sha512-4Et4AN6wmqeA0PfU5Clkv/IS27wiefsWf6TemAZrb75uzkClYEFavim7SboeKwbll9Nbsn2Iv0LT/HS5H7orZg==} - hasBin: true - - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@inertiajs/core@2.0.12': - resolution: {integrity: sha512-TxMRUcSB/w2Or9KSsldgcx49u+1xveLg7HuwRkqrs196ZrDwYRjtc984uc838vDP+dsFIz//+Tn0n7ysG/MgMQ==} - - '@inertiajs/svelte@2.0.12': - resolution: {integrity: sha512-Ki+XY+7Q7HjrAvvGMXDAd3/vwWgLawV/e5II2H8lhj6pY5uJHGzup7029P7vE0v8R5ndl7GTzO5rfmYtvysvWw==} - peerDependencies: - svelte: ^4.0.0 || ^5.0.0 || ^5.0.0-next.244 - - '@internationalized/date@3.8.2': - resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@layerstack/svelte-actions@1.0.1-next.12': - resolution: {integrity: sha512-dndWTlYu8b1u6vw2nrO7NssccoACArGG75WoNlyVC13KuENZlWdKE9Q79/wlnbq00NeQMNKMjJwRMsrKQj2ULA==} - - '@layerstack/svelte-state@0.1.0-next.17': - resolution: {integrity: sha512-z7e6mPJnypD80LEI/UDuH0bI6s8/nut06MB7rEkRcEfHJekhKSJgFhMnrYzLED7Mc2gTTD0X/wcYlakauWlU8A==} - - '@layerstack/tailwind@2.0.0-next.15': - resolution: {integrity: sha512-7tqKE3OV7/ybeDOORX++USYYCBJa7IgTya2czFpzbgXGo7CQDVyuv+0J1DggjRcEqhhXQA4MUhgnhcRaZvHxWg==} - - '@layerstack/utils@2.0.0-next.12': - resolution: {integrity: sha512-fhGZUlSr3N+D44BYm37WKMGSEFyZBW+dwIqtGU8Cl54mR4TLQ/UwyGhdpgIHyH/x/8q1abE0fP0Dn6ZsrDE3BA==} - - '@lucide/svelte@0.511.0': - resolution: {integrity: sha512-aLCSPMUJmHlCuLXzXENXa4Z1NV2mN1iAZAFKk4bEbey+/MdsNlu+/DqwVkgW3Yvj6p8y8Vn5xZ2v9CLmPlA6Vw==} - peerDependencies: - svelte: ^5 - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@oxlint/darwin-arm64@1.2.0': - resolution: {integrity: sha512-DsdZPp59sPPmuI6pR6MP1QepWWkpibFhVmRXa7ZOUobxxubUBg12SVCchAI1Iq8jejcAg9/XHXsRFpuny2LawQ==} - cpu: [arm64] - os: [darwin] - - '@oxlint/darwin-x64@1.2.0': - resolution: {integrity: sha512-SN4lUlpGyFfGph+quUuGhEAyBMB87CgnFEK2bk3Lo96ehHcIhmzUH41nbsgi99k45+qEtD0ThIKAsbksOVn0uA==} - cpu: [x64] - os: [darwin] - - '@oxlint/linux-arm64-gnu@1.2.0': - resolution: {integrity: sha512-O03yN/Sas6/vyewiq8w9YN67yY8IofTpS28H2/f1a0Cb83Z7RbEzkWvsswq0erTHA0ctwJkzHfkRSRaBOmceBQ==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-arm64-musl@1.2.0': - resolution: {integrity: sha512-DO61+/vJkYRUEaVoajU2tLpVHBu3Fe8vhJ2mgxVNfOgQ7uIvHCB7wrnkHSPgABK9yROGenLWG9K6uHq3qiXj2g==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-x64-gnu@1.2.0': - resolution: {integrity: sha512-i2piovvEAKYsb23/NfiGug9Gqnf+5IoNgw7pDF/N7bPIFMJlzWACQHYi5dfIzFhG23FIdAnh+BHBDK9LKK5Jkw==} - cpu: [x64] - os: [linux] - - '@oxlint/linux-x64-musl@1.2.0': - resolution: {integrity: sha512-r3AjtZ7BOArWoIjyjnT6Wj3jiv2anZbeL5jsj+sUMvd8m/t7sFb18ySRqS63d4yC6Ct3OZZVLFD4MADW658ghg==} - cpu: [x64] - os: [linux] - - '@oxlint/win32-arm64@1.2.0': - resolution: {integrity: sha512-a0ZJE/QlJ1JdAc5FGytjwjBzq9oIbR7y9CwbVtrvwqOBaHzB7qssI93dGPZCRE4talL3dk18L6fthd6ijvLVxg==} - cpu: [arm64] - os: [win32] - - '@oxlint/win32-x64@1.2.0': - resolution: {integrity: sha512-OrWwyUCYGAnz5xDvVjCRFLp+XkQT56alXyx5kJDhDXKZzjajXwvFRFTvT3Hstu9I6bnCsqFjBcCbjQzmUBHOYw==} - cpu: [x64] - os: [win32] - - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - - '@poppinss/macroable@1.0.4': - resolution: {integrity: sha512-ct43jurbe7lsUX5eIrj4ijO3j/6zIPp7CDnFWXDs7UPAbw1Pu1iH3oAmFdP4jcskKJBURH5M9oTtyeiUXyHX8Q==} - engines: {node: '>=18.16.0'} - - '@rollup/rollup-android-arm-eabi@4.44.0': - resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.44.0': - resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.44.0': - resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.44.0': - resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.44.0': - resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.44.0': - resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': - resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.44.0': - resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.44.0': - resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.44.0': - resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': - resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': - resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.44.0': - resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.44.0': - resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.44.0': - resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.41.1': - resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.44.0': - resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.44.0': - resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.44.0': - resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.44.0': - resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.44.0': - resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} - cpu: [x64] - os: [win32] - - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - - '@sinclair/typebox@0.34.35': - resolution: {integrity: sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==} - - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - - '@sveltejs/acorn-typescript@1.0.5': - resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} - peerDependencies: - acorn: ^8.9.0 - - '@sveltejs/kit@2.21.5': - resolution: {integrity: sha512-P5m7yZtvD1Kx/Z6JcjgJtdMqef/tCGMDrd9B9S2q8j+FMnkeKTMxW1nidnjVzk4HEDRGf4IlBI94/niy6t3hLA==} - engines: {node: '>=18.13'} - hasBin: true - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 || ^6.0.0 - - '@sveltejs/vite-plugin-svelte-inspector@4.0.1': - resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^5.0.0 - svelte: ^5.0.0 - vite: ^6.0.0 - - '@sveltejs/vite-plugin-svelte@5.1.0': - resolution: {integrity: sha512-wojIS/7GYnJDYIg1higWj2ROA6sSRWvcR1PO/bqEyFr/5UZah26c8Cz4u0NaqjPeVltzsVpt2Tm8d2io0V+4Tw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22} - peerDependencies: - svelte: ^5.0.0 - vite: ^6.0.0 - - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - - '@tailwindcss/node@4.1.10': - resolution: {integrity: sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ==} - - '@tailwindcss/oxide-android-arm64@4.1.10': - resolution: {integrity: sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.10': - resolution: {integrity: sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.10': - resolution: {integrity: sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.10': - resolution: {integrity: sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10': - resolution: {integrity: sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10': - resolution: {integrity: sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.10': - resolution: {integrity: sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.10': - resolution: {integrity: sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.10': - resolution: {integrity: sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.10': - resolution: {integrity: sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10': - resolution: {integrity: sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.10': - resolution: {integrity: sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.10': - resolution: {integrity: sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q==} - engines: {node: '>= 10'} - - '@tailwindcss/vite@4.1.10': - resolution: {integrity: sha512-QWnD5HDY2IADv+vYR82lOhqOlS1jSCUUAmfem52cXAhRTKxpDh3ARX8TTXJTCCO7Rv7cD2Nlekabv02bwP3a2A==} - peerDependencies: - vite: ^5.2.0 || ^6 - - '@tanstack/table-core@8.21.3': - resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} - engines: {node: '>=12'} - - '@tsconfig/svelte@5.0.4': - resolution: {integrity: sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==} - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@22.15.32': - resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - '@types/validator@13.15.2': - resolution: {integrity: sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==} - - '@typeschema/class-validator@0.3.0': - resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==} - peerDependencies: - class-validator: ^0.14.1 - peerDependenciesMeta: - class-validator: - optional: true - - '@typeschema/core@0.14.0': - resolution: {integrity: sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==} - peerDependencies: - '@types/json-schema': ^7.0.15 - peerDependenciesMeta: - '@types/json-schema': - optional: true - - '@typescript-eslint/eslint-plugin@8.34.1': - resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.34.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.34.1': - resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.34.1': - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.34.1': - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.34.1': - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.34.1': - resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.34.1': - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.34.1': - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.34.1': - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.34.1': - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vinejs/compiler@3.0.0': - resolution: {integrity: sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==} - engines: {node: '>=18.0.0'} - - '@vinejs/vine@3.0.1': - resolution: {integrity: sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==} - engines: {node: '>=18.16.0'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - addressparser@1.0.1: - resolution: {integrity: sha512-aQX7AISOMM7HFE0iZ3+YnD07oIeJqWGVnJ+ZIKaBZAk03ftmVYVqsGas/rbXKR21n4D/hKCSHypvcyOkds/xzg==} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - arktype@2.1.20: - resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base32.js@0.1.0: - resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==} - engines: {node: '>=0.12.0'} - - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - - bits-ui@2.8.2: - resolution: {integrity: sha512-E62nB7Thz7SWusLP5pQzzfpHY4rWKljMfsf7mhh832rTc6568TdKxpgyRqDxxVyxh2XL1CbI0qSlS4evUAUVIg==} - engines: {node: '>=20', pnpm: '>=8.7.0'} - peerDependencies: - '@internationalized/date': ^3.8.1 - svelte: ^5.33.0 - - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - class-validator@0.14.2: - resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} - engines: {node: '>= 0.8.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concurrently@9.1.2: - resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} - engines: {node: '>=18'} - hasBin: true - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssstyle@4.4.0: - resolution: {integrity: sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==} - engines: {node: '>=18'} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-geo-voronoi@2.1.0: - resolution: {integrity: sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate-path@2.3.0: - resolution: {integrity: sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-tile@1.0.0: - resolution: {integrity: sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-tricontour@1.0.2: - resolution: {integrity: sha512-HIRxHzHagPtUPNabjOlfcyismJYIsc+Xlq4mlsts4e8eAcwyq9Tgk/sYdyhlBpQ0MHwVquc/8j+e29YjXnmxeA==} - engines: {node: '>=12'} - - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - - devalue@5.1.1: - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dompurify@3.2.6: - resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - effect@3.16.8: - resolution: {integrity: sha512-E4U0MZFBun99myxOogy9ZZ1c3IYR47L/A5GqCP9Lp+6ORag0YLmGHOrYxQ3agN1FOMTrElgtJmciicwnHdE+Ug==} - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel-svelte@8.6.0: - resolution: {integrity: sha512-ZDsKk8Sdv+AUTygMYcwZjfRd1DTh+JSUzxkOo8b9iKAkYjg+39mzbY/lwHsE3jXSpKxdKWS69hPSNuzlOGtR2Q==} - peerDependencies: - svelte: ^3.49.0 || ^4.0.0 || ^5.0.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} - - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} - engines: {node: '>=10.2.0'} - - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-toolkit@1.39.3: - resolution: {integrity: sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww==} - - esbuild-runner@2.2.2: - resolution: {integrity: sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==} - hasBin: true - peerDependencies: - esbuild: '*' - - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-svelte@3.9.2: - resolution: {integrity: sha512-aqzfHtG9RPaFhCUFm5QFC6eFY/yHFQIT8VYYFe7/mT2A9mbgVR3XV2keCqU19LN8iVD9mdvRvqHU+4+CzJImvg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.1 || ^9.0.0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - svelte: - optional: true - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.29.0: - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - esm-env@1.2.2: - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrap@1.4.9: - resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-check@3.23.2: - resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} - engines: {node: '>=8.0.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} - engines: {node: '>= 6'} - - formsnap@2.0.1: - resolution: {integrity: sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.0.0 - sveltekit-superforms: ^2.19.0 - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} - engines: {node: '>=18'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - - html-escape@2.0.0: - resolution: {integrity: sha512-BYh0wceM2Vm4/Q8TNfnKaHXs4DCv2DuYVS87DR40elSvFc+8a6B9mE9ej+8nCOkdqPx7puEx9+hm+GoJ3f9PzA==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.5.0: - resolution: {integrity: sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipv6-normalize@1.0.1: - resolution: {integrity: sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-reference@3.0.3: - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdom@24.1.3: - resolution: {integrity: sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-to-ts@3.1.1: - resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} - engines: {node: '>=16'} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - known-css-properties@0.36.0: - resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==} - - laravel-vite-plugin@1.3.0: - resolution: {integrity: sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - vite: ^5.0.0 || ^6.0.0 - - layerchart@2.0.0-next.23: - resolution: {integrity: sha512-Uf7/xMjhHcJHQqstjV4RN9GdUWSLQkmrfCKsvTneeJBVNUWs2C9djH6SQTVtv/FcT0HEyIv573RomB3m7uLSUw==} - peerDependencies: - svelte: ^5.0.0 - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - libphonenumber-js@1.12.9: - resolution: {integrity: sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==} - - lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} - engines: {node: '>= 12.0.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lucide-svelte@0.511.0: - resolution: {integrity: sha512-cSBj1UPKt1EXnj3VBUidBqwHyFQ83pLYiTaQ/67Q5thnaP9IPohL2UXjqEzgSXXklYPYQKaAv+kmVdliDWFjWQ==} - peerDependencies: - svelte: ^3 || ^4 || ^5.0.0-next.42 - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - maildev@2.2.1: - resolution: {integrity: sha512-uNSJ4LpiNfCMw5KpWAM5x1UgOyG3ngeNwzBqw4/Wl18ECkJDyXBYpTH44HCG8LqAOFLkUiLl/1Ah5lrQhv3GzQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memoize-weak@1.0.2: - resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} - - memoize@10.1.0: - resolution: {integrity: sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==} - engines: {node: '>=18'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mime@2.4.4: - resolution: {integrity: sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==} - engines: {node: '>=4.0.0'} - hasBin: true - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - mode-watcher@1.0.8: - resolution: {integrity: sha512-1YIgYymrae0lhcG9zPS/YWOvcKsUbM4bLGIh+eXTUIput5+dEJifcmUgp8NSehSXGSwITH6jbSjNhGEIhE3k5Q==} - peerDependencies: - svelte: ^5.27.0 - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - nodemailer@6.10.1: - resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} - engines: {node: '>=6.0.0'} - - nodemailer@7.0.3: - resolution: {integrity: sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==} - engines: {node: '>=6.0.0'} - - normalize-url@8.0.2: - resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} - engines: {node: '>=14.16'} - - nwsapi@2.2.20: - resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - oxlint@1.2.0: - resolution: {integrity: sha512-zUtw37XW3fERrSJVVZfmHo35crJ7OS+Non9jk+kLtuhzEJYsbd1ORwGsnTVWy8oXEdNO/tXAUm+zVRoilEGelw==} - engines: {node: '>=8.*'} - hasBin: true - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - paneforge@1.0.0: - resolution: {integrity: sha512-VlE5+inlTtfguYzSXCWlgFOrt92ofMkwm3/9dwwaDxABAJYYPOS6OJL+qNQbMr6RZkh7y1GSmB5sN+UG7EmVBA==} - peerDependencies: - svelte: ^5.29.0 - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-safe-parser@7.0.1: - resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} - engines: {node: '>=18.0'} - peerDependencies: - postcss: ^8.4.31 - - postcss-scss@4.0.9: - resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.4.29 - - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-organize-imports@4.1.0: - resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} - peerDependencies: - prettier: '>=2.0' - typescript: '>=2.9' - vue-tsc: ^2.1.0 - peerDependenciesMeta: - vue-tsc: - optional: true - - prettier-plugin-svelte@3.4.0: - resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} - peerDependencies: - prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - - prettier-plugin-tailwindcss@0.6.12: - resolution: {integrity: sha512-OuTQKoqNwV7RnxTPwXWzOFXy6Jc4z8oeRZYGuMpRyG3WbuR3jjXdQFK8qFBMBx8UHWdHrddARz2fgUenild6aw==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-multiline-arrays: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - - property-expr@2.0.6: - resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - rollup@4.44.0: - resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - runed@0.23.4: - resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} - peerDependencies: - svelte: ^5.7.0 - - runed@0.25.0: - resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==} - peerDependencies: - svelte: ^5.7.0 - - runed@0.28.0: - resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==} - peerDependencies: - svelte: ^5.7.0 - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} - - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} - engines: {node: '>=18'} - - smtp-server@3.13.8: - resolution: {integrity: sha512-bKYZ/ortxX8Wvi7bCT/daoo1aS1BI1CNoWkonXOLXtWhSccWmBikcMlbpHSzUjmv+vNZQDfOv4b55mhpjPlSsg==} - engines: {node: '>=12.0.0'} - - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} - - socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} - - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-to-object@1.0.9: - resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} - - superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - svelte-check@4.2.2: - resolution: {integrity: sha512-1+31EOYZ7NKN0YDMKusav2hhEoA51GD9Ws6o//0SphMT0ve9mBTsTUEX7OmDMadUP3KjNHsSKtJrqdSaD8CrGQ==} - engines: {node: '>= 18.0.0'} - hasBin: true - peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: '>=5.0.0' - - svelte-eslint-parser@1.2.0: - resolution: {integrity: sha512-mbPtajIeuiyU80BEyGvwAktBeTX7KCr5/0l+uRGLq1dafwRNrjfM5kHGJScEBlPG3ipu6dJqfW/k0/fujvIEVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - svelte: - optional: true - - svelte-portal@2.2.1: - resolution: {integrity: sha512-uF7is5sM4aq5iN7QF/67XLnTUvQCf2iiG/B1BHTqLwYVY1dsVmTeXZ/LeEyU6dLjApOQdbEG9lkqHzxiQtOLEQ==} - - svelte-sonner@1.0.5: - resolution: {integrity: sha512-9dpGPFqKb/QWudYqGnEz93vuY+NgCEvyNvxoCLMVGw6sDN/3oVeKV1xiEirW2E1N3vJEyj5imSBNOGltQHA7mg==} - peerDependencies: - svelte: ^5.0.0 - - svelte-toolbelt@0.5.0: - resolution: {integrity: sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.0.0-next.126 - - svelte-toolbelt@0.7.1: - resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.0.0 - - svelte-toolbelt@0.9.2: - resolution: {integrity: sha512-REb1cENGnFbhNSmIdCb1SDIpjEa3n1kXhNVHqGNEesjmPX3bG87gUZiCG8cqOt9AAarqzTzOtI2jEEWr/ZbHwA==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.30.2 - - svelte-transition@0.0.17: - resolution: {integrity: sha512-df3kJdJogRNDGiEwJSb7Pdk8/7ZTcQapHhtQ5VicaT/oUP/BNH5qR5Q3sKvptBvOD0uJSzjjMVC5oLwdgjUdRw==} - peerDependencies: - svelte: ^3.59.1 || ^4.0.0 || ^5.0.0 - - svelte@5.34.7: - resolution: {integrity: sha512-5PEg+QQKce4t1qiOtVUhUS3AQRTtxJyGBTpxLcNWnr0Ve8q4r06bMo0Gv8uhtCPWlztZHoi3Ye7elLhu+PCTMg==} - engines: {node: '>=18'} - - sveltekit-superforms@2.27.0: - resolution: {integrity: sha512-FXIdUg4VRVZeAdVH/zB7JtHvuoC6RmHDw032meEasqB5v+i1ud4pwU/Big+6eJ2SysqrzCahBbCvLN2qzRPVUw==} - peerDependencies: - '@sveltejs/kit': 1.x || 2.x - svelte: 3.x || 4.x || >=5.0.0-next.51 - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - - tailwind-merge@3.0.2: - resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} - - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - - tailwind-variants@1.0.0: - resolution: {integrity: sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==} - engines: {node: '>=16.x', pnpm: '>=7.x'} - peerDependencies: - tailwindcss: '*' - - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@4.1.10: - resolution: {integrity: sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==} - - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} - engines: {node: '>=6'} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - - tiny-case@1.0.3: - resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} - - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - toposort@2.0.2: - resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-algebra@2.0.0: - resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-deepmerge@7.0.3: - resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} - engines: {node: '>=14.13.1'} - - tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tw-animate-css@1.3.4: - resolution: {integrity: sha512-dd1Ht6/YQHcNbq0znIT6dG8uhO7Ce+VIIhZUhjsryXsMPJQz3bZg7Q2eNzLwipb25bRZslGb2myio5mScd1TFg==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typescript-eslint@8.34.1: - resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uue@3.1.2: - resolution: {integrity: sha512-axKLXVqwtdI/czrjG0X8hyV1KLgeWx8F4KvSbvVCnS+RUvsQMGRjx0kfuZDXXqj0LYvVJmx3B9kWlKtEdRrJLg==} - - valibot@0.42.1: - resolution: {integrity: sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - valibot@1.1.0: - resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - validator@13.15.15: - resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vaul-svelte@1.0.0-next.7: - resolution: {integrity: sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.0.0 - - vite-plugin-full-reload@1.2.0: - resolution: {integrity: sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==} - - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitefu@1.0.6: - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - vite: - optional: true - - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wildstring@1.0.9: - resolution: {integrity: sha512-XBNxKIMLO6uVHf1Xvo++HGWAZZoiVCHmEMCmZJzJ82vQsuUJCLw13Gzq0mRCATk7a3+ZcgeOKSDioavuYqtlfA==} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yup@1.6.1: - resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} - - zimmerframe@1.1.2: - resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} - - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.25.67: - resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@ark/schema@0.46.0': - dependencies: - '@ark/util': 0.46.0 - optional: true - - '@ark/util@0.46.0': - optional: true - - '@asamuzakjp/css-color@3.2.0': - dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 10.4.3 - - '@babel/runtime@7.27.6': - optional: true - - '@csstools/color-helpers@5.0.2': {} - - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-tokenizer@3.0.4': {} - - '@dagrejs/dagre@1.1.5': - dependencies: - '@dagrejs/graphlib': 2.2.4 - - '@dagrejs/graphlib@2.2.4': {} - - '@esbuild/aix-ppc64@0.25.5': - optional: true - - '@esbuild/android-arm64@0.25.5': - optional: true - - '@esbuild/android-arm@0.25.5': - optional: true - - '@esbuild/android-x64@0.25.5': - optional: true - - '@esbuild/darwin-arm64@0.25.5': - optional: true - - '@esbuild/darwin-x64@0.25.5': - optional: true - - '@esbuild/freebsd-arm64@0.25.5': - optional: true - - '@esbuild/freebsd-x64@0.25.5': - optional: true - - '@esbuild/linux-arm64@0.25.5': - optional: true - - '@esbuild/linux-arm@0.25.5': - optional: true - - '@esbuild/linux-ia32@0.25.5': - optional: true - - '@esbuild/linux-loong64@0.25.5': - optional: true - - '@esbuild/linux-mips64el@0.25.5': - optional: true - - '@esbuild/linux-ppc64@0.25.5': - optional: true - - '@esbuild/linux-riscv64@0.25.5': - optional: true - - '@esbuild/linux-s390x@0.25.5': - optional: true - - '@esbuild/linux-x64@0.25.5': - optional: true - - '@esbuild/netbsd-arm64@0.25.5': - optional: true - - '@esbuild/netbsd-x64@0.25.5': - optional: true - - '@esbuild/openbsd-arm64@0.25.5': - optional: true - - '@esbuild/openbsd-x64@0.25.5': - optional: true - - '@esbuild/sunos-x64@0.25.5': - optional: true - - '@esbuild/win32-arm64@0.25.5': - optional: true - - '@esbuild/win32-ia32@0.25.5': - optional: true - - '@esbuild/win32-x64@0.25.5': - optional: true - - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': - dependencies: - eslint: 9.29.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.20.1': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.2.3': {} - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.15.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.1 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.29.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.3.2': - dependencies: - '@eslint/core': 0.15.0 - levn: 0.4.1 - - '@exodus/schemasafe@1.3.0': - optional: true - - '@floating-ui/core@1.7.1': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.7.1': - dependencies: - '@floating-ui/core': 1.7.1 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/utils@0.2.9': {} - - '@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.5)(typescript@5.8.3)': - dependencies: - valibot: 0.42.1(typescript@5.8.3) - optionalDependencies: - '@types/json-schema': 7.0.15 - esbuild-runner: 2.2.2(esbuild@0.25.5) - transitivePeerDependencies: - - esbuild - - typescript - optional: true - - '@hapi/hoek@9.3.0': - optional: true - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - optional: true - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@inertiajs/core@2.0.12': - dependencies: - axios: 1.10.0 - es-toolkit: 1.39.3 - qs: 6.14.0 - transitivePeerDependencies: - - debug - - '@inertiajs/svelte@2.0.12(svelte@5.34.7)': - dependencies: - '@inertiajs/core': 2.0.12 - es-toolkit: 1.39.3 - html-escape: 2.0.0 - svelte: 5.34.7 - transitivePeerDependencies: - - debug - - '@internationalized/date@3.8.2': - dependencies: - '@swc/helpers': 0.5.17 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@layerstack/svelte-actions@1.0.1-next.12': - dependencies: - '@floating-ui/dom': 1.7.1 - '@layerstack/utils': 2.0.0-next.12 - d3-scale: 4.0.2 - - '@layerstack/svelte-state@0.1.0-next.17': - dependencies: - '@layerstack/utils': 2.0.0-next.12 - - '@layerstack/tailwind@2.0.0-next.15': - dependencies: - '@layerstack/utils': 2.0.0-next.12 - clsx: 2.1.1 - d3-array: 3.2.4 - lodash-es: 4.17.21 - tailwind-merge: 3.3.1 - - '@layerstack/utils@2.0.0-next.12': - dependencies: - d3-array: 3.2.4 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - lodash-es: 4.17.21 - - '@lucide/svelte@0.511.0(svelte@5.34.7)': - dependencies: - svelte: 5.34.7 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@oxlint/darwin-arm64@1.2.0': - optional: true - - '@oxlint/darwin-x64@1.2.0': - optional: true - - '@oxlint/linux-arm64-gnu@1.2.0': - optional: true - - '@oxlint/linux-arm64-musl@1.2.0': - optional: true - - '@oxlint/linux-x64-gnu@1.2.0': - optional: true - - '@oxlint/linux-x64-musl@1.2.0': - optional: true - - '@oxlint/win32-arm64@1.2.0': - optional: true - - '@oxlint/win32-x64@1.2.0': - optional: true - - '@polka/url@1.0.0-next.29': {} - - '@poppinss/macroable@1.0.4': - optional: true - - '@rollup/rollup-android-arm-eabi@4.44.0': - optional: true - - '@rollup/rollup-android-arm64@4.44.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.44.0': - optional: true - - '@rollup/rollup-darwin-x64@4.44.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.44.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.44.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.44.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.44.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.44.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.41.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.44.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.44.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.44.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.44.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.44.0': - optional: true - - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - optional: true - - '@sideway/formula@3.0.1': - optional: true - - '@sideway/pinpoint@2.0.0': - optional: true - - '@sinclair/typebox@0.34.35': - optional: true - - '@socket.io/component-emitter@3.1.2': {} - - '@standard-schema/spec@1.0.0': - optional: true - - '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': - dependencies: - acorn: 8.15.0 - - '@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1))': - dependencies: - '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - '@types/cookie': 0.6.0 - acorn: 8.15.0 - cookie: 0.6.0 - devalue: 5.1.1 - esm-env: 1.2.2 - kleur: 4.1.5 - magic-string: 0.30.17 - mrmime: 2.0.1 - sade: 1.8.1 - set-cookie-parser: 2.7.1 - sirv: 3.0.1 - svelte: 5.34.7 - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1))': - dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - debug: 4.4.1 - svelte: 5.34.7 - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1))': - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - debug: 4.4.1 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.17 - svelte: 5.34.7 - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - transitivePeerDependencies: - - supports-color - - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - - '@tailwindcss/node@4.1.10': - dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.1 - jiti: 2.4.2 - lightningcss: 1.30.1 - magic-string: 0.30.17 - source-map-js: 1.2.1 - tailwindcss: 4.1.10 - - '@tailwindcss/oxide-android-arm64@4.1.10': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.10': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.10': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.10': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.10': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.10': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.10': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.10': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.10': - optional: true - - '@tailwindcss/oxide@4.1.10': - dependencies: - detect-libc: 2.0.4 - tar: 7.4.3 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.10 - '@tailwindcss/oxide-darwin-arm64': 4.1.10 - '@tailwindcss/oxide-darwin-x64': 4.1.10 - '@tailwindcss/oxide-freebsd-x64': 4.1.10 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.10 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.10 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.10 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.10 - '@tailwindcss/oxide-linux-x64-musl': 4.1.10 - '@tailwindcss/oxide-wasm32-wasi': 4.1.10 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.10 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.10 - - '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1))': - dependencies: - '@tailwindcss/node': 4.1.10 - '@tailwindcss/oxide': 4.1.10 - tailwindcss: 4.1.10 - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - - '@tanstack/table-core@8.21.3': {} - - '@tsconfig/svelte@5.0.4': {} - - '@types/cookie@0.6.0': {} - - '@types/cors@2.8.19': - dependencies: - '@types/node': 22.15.32 - - '@types/estree@1.0.8': {} - - '@types/json-schema@7.0.15': {} - - '@types/node@22.15.32': - dependencies: - undici-types: 6.21.0 - - '@types/trusted-types@2.0.7': - optional: true - - '@types/validator@13.15.2': - optional: true - - '@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.2)': - dependencies: - '@typeschema/core': 0.14.0(@types/json-schema@7.0.15) - optionalDependencies: - class-validator: 0.14.2 - transitivePeerDependencies: - - '@types/json-schema' - optional: true - - '@typeschema/core@0.14.0(@types/json-schema@7.0.15)': - optionalDependencies: - '@types/json-schema': 7.0.15 - optional: true - - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - eslint: 9.29.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - debug: 4.4.1 - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - debug: 4.4.1 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': - dependencies: - typescript: 5.8.3 - - '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.29.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.34.1': {} - - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - eslint-visitor-keys: 4.2.1 - - '@vinejs/compiler@3.0.0': - optional: true - - '@vinejs/vine@3.0.1': - dependencies: - '@poppinss/macroable': 1.0.4 - '@types/validator': 13.15.2 - '@vinejs/compiler': 3.0.0 - camelcase: 8.0.0 - dayjs: 1.11.13 - dlv: 1.1.3 - normalize-url: 8.0.2 - validator: 13.15.15 - optional: true - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - addressparser@1.0.1: {} - - agent-base@7.1.3: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@2.0.1: {} - - aria-query@5.3.2: {} - - arktype@2.1.20: - dependencies: - '@ark/schema': 0.46.0 - '@ark/util': 0.46.0 - optional: true - - array-flatten@1.1.1: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - axios@1.10.0: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.3 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axobject-query@4.1.0: {} - - balanced-match@1.0.2: {} - - base32.js@0.1.0: {} - - base64id@2.0.0: {} - - bits-ui@2.8.2(@internationalized/date@3.8.2)(svelte@5.34.7): - dependencies: - '@floating-ui/core': 1.7.1 - '@floating-ui/dom': 1.7.1 - '@internationalized/date': 3.8.2 - css.escape: 1.5.1 - esm-env: 1.2.2 - runed: 0.28.0(svelte@5.34.7) - svelte: 5.34.7 - svelte-toolbelt: 0.9.2(svelte@5.34.7) - tabbable: 6.2.0 - - body-parser@1.20.3: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-from@1.1.2: - optional: true - - bytes@3.1.2: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@8.0.0: - optional: true - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chownr@3.0.0: {} - - class-validator@0.14.2: - dependencies: - '@types/validator': 13.15.2 - libphonenumber-js: 1.12.9 - validator: 13.15.15 - optional: true - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@2.1.1: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@12.1.0: {} - - commander@7.2.0: {} - - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.0: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.0.2 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - concat-map@0.0.1: {} - - concurrently@9.1.2: - dependencies: - chalk: 4.1.2 - lodash: 4.17.21 - rxjs: 7.8.2 - shell-quote: 1.8.3 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - cookie-signature@1.0.6: {} - - cookie@0.6.0: {} - - cookie@0.7.1: {} - - cookie@0.7.2: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css.escape@1.5.1: {} - - cssesc@3.0.0: {} - - cssstyle@4.4.0: - dependencies: - '@asamuzakjp/css-color': 3.2.0 - rrweb-cssom: 0.8.0 - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.1 - - d3-dispatch@3.0.1: {} - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@3.1.0: {} - - d3-geo-voronoi@2.1.0: - dependencies: - d3-array: 3.2.4 - d3-delaunay: 6.0.4 - d3-geo: 3.1.1 - d3-tricontour: 1.0.2 - - d3-geo@3.1.1: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - - d3-interpolate-path@2.3.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.1.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-tile@1.0.0: {} - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - d3-tricontour@1.0.2: - dependencies: - d3-delaunay: 6.0.4 - d3-scale: 4.0.2 - - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - - date-fns@4.1.0: {} - - dayjs@1.11.13: - optional: true - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.3.7: - dependencies: - ms: 2.1.3 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - decimal.js@10.5.0: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - delaunator@5.0.1: - dependencies: - robust-predicates: 3.0.2 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - destroy@1.2.0: {} - - detect-libc@2.0.4: {} - - devalue@5.1.1: {} - - dlv@1.1.3: - optional: true - - dompurify@3.2.6: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - ee-first@1.1.1: {} - - effect@3.16.8: - dependencies: - '@standard-schema/spec': 1.0.0 - fast-check: 3.23.2 - optional: true - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel-svelte@8.6.0(svelte@5.34.7): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - svelte: 5.34.7 - - embla-carousel@8.6.0: {} - - emoji-regex@8.0.0: {} - - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - - engine.io-parser@5.2.3: {} - - engine.io@6.6.4: - dependencies: - '@types/cors': 2.8.19 - '@types/node': 22.15.32 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.5 - debug: 4.3.7 - engine.io-parser: 5.2.3 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.2 - - entities@6.0.1: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-toolkit@1.39.3: {} - - esbuild-runner@2.2.2(esbuild@0.25.5): - dependencies: - esbuild: 0.25.5 - source-map-support: 0.5.21 - tslib: 2.4.0 - optional: true - - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)): - dependencies: - eslint: 9.29.0(jiti@2.4.2) - - eslint-plugin-svelte@3.9.2(eslint@9.29.0(jiti@2.4.2))(svelte@5.34.7): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@jridgewell/sourcemap-codec': 1.5.0 - eslint: 9.29.0(jiti@2.4.2) - esutils: 2.0.3 - globals: 16.2.0 - known-css-properties: 0.36.0 - postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6) - postcss-safe-parser: 7.0.1(postcss@8.5.6) - semver: 7.7.2 - svelte-eslint-parser: 1.2.0(svelte@5.34.7) - optionalDependencies: - svelte: 5.34.7 - transitivePeerDependencies: - - ts-node - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.29.0(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.3 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.29.0 - '@eslint/plugin-kit': 0.3.2 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - - esm-env@1.2.2: {} - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrap@1.4.9: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - etag@1.8.1: {} - - express@4.21.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.12 - proxy-addr: 2.0.7 - qs: 6.13.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend@3.0.2: {} - - fast-check@3.23.2: - dependencies: - pure-rand: 6.1.0 - optional: true - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fdir@6.4.6(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.3.1: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - follow-redirects@1.15.9: {} - - form-data@4.0.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - formsnap@2.0.1(svelte@5.34.7)(sveltekit-superforms@2.27.0(@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(@types/json-schema@7.0.15)(esbuild@0.25.5)(svelte@5.34.7)(typescript@5.8.3)): - dependencies: - svelte: 5.34.7 - svelte-toolbelt: 0.5.0(svelte@5.34.7) - sveltekit-superforms: 2.27.0(@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(@types/json-schema@7.0.15)(esbuild@0.25.5)(svelte@5.34.7)(typescript@5.8.3) - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - globals@14.0.0: {} - - globals@16.2.0: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-flag@4.0.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - - html-escape@2.0.0: {} - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.5.0: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inherits@2.0.4: {} - - inline-style-parser@0.2.4: {} - - internmap@1.0.1: {} - - internmap@2.0.3: {} - - ipaddr.js@1.9.1: {} - - ipv6-normalize@1.0.1: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - is-reference@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - isexe@2.0.0: {} - - jiti@2.4.2: {} - - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - optional: true - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdom@24.1.3: - dependencies: - cssstyle: 4.4.0 - data-urls: 5.0.0 - decimal.js: 10.5.0 - form-data: 4.0.3 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.20 - parse5: 7.3.0 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - ws: 8.18.2 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - json-buffer@3.0.1: {} - - json-schema-to-ts@3.1.1: - dependencies: - '@babel/runtime': 7.27.6 - ts-algebra: 2.0.0 - optional: true - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@4.1.5: {} - - known-css-properties@0.36.0: {} - - laravel-vite-plugin@1.3.0(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)): - dependencies: - picocolors: 1.1.1 - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - vite-plugin-full-reload: 1.2.0 - - layerchart@2.0.0-next.23(svelte@5.34.7): - dependencies: - '@dagrejs/dagre': 1.1.5 - '@layerstack/svelte-actions': 1.0.1-next.12 - '@layerstack/svelte-state': 0.1.0-next.17 - '@layerstack/tailwind': 2.0.0-next.15 - '@layerstack/utils': 2.0.0-next.12 - d3-array: 3.2.4 - d3-color: 3.1.0 - d3-delaunay: 6.0.4 - d3-dsv: 3.0.1 - d3-force: 3.0.0 - d3-geo: 3.1.1 - d3-geo-voronoi: 2.1.0 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-interpolate-path: 2.3.0 - d3-path: 3.1.0 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-sankey: 0.12.3 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-shape: 3.2.0 - d3-tile: 1.0.0 - d3-time: 3.1.0 - lodash-es: 4.17.21 - memoize: 10.1.0 - runed: 0.28.0(svelte@5.34.7) - svelte: 5.34.7 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - libphonenumber-js@1.12.9: - optional: true - - lightningcss-darwin-arm64@1.30.1: - optional: true - - lightningcss-darwin-x64@1.30.1: - optional: true - - lightningcss-freebsd-x64@1.30.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.1: - optional: true - - lightningcss-linux-arm64-gnu@1.30.1: - optional: true - - lightningcss-linux-arm64-musl@1.30.1: - optional: true - - lightningcss-linux-x64-gnu@1.30.1: - optional: true - - lightningcss-linux-x64-musl@1.30.1: - optional: true - - lightningcss-win32-arm64-msvc@1.30.1: - optional: true - - lightningcss-win32-x64-msvc@1.30.1: - optional: true - - lightningcss@1.30.1: - dependencies: - detect-libc: 2.0.4 - optionalDependencies: - lightningcss-darwin-arm64: 1.30.1 - lightningcss-darwin-x64: 1.30.1 - lightningcss-freebsd-x64: 1.30.1 - lightningcss-linux-arm-gnueabihf: 1.30.1 - lightningcss-linux-arm64-gnu: 1.30.1 - lightningcss-linux-arm64-musl: 1.30.1 - lightningcss-linux-x64-gnu: 1.30.1 - lightningcss-linux-x64-musl: 1.30.1 - lightningcss-win32-arm64-msvc: 1.30.1 - lightningcss-win32-x64-msvc: 1.30.1 - - lilconfig@2.1.0: {} - - locate-character@3.0.0: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash-es@4.17.21: {} - - lodash.merge@4.6.2: {} - - lodash@4.17.21: {} - - lru-cache@10.4.3: {} - - lucide-svelte@0.511.0(svelte@5.34.7): - dependencies: - svelte: 5.34.7 - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - maildev@2.2.1: - dependencies: - addressparser: 1.0.1 - async: 3.2.6 - commander: 12.1.0 - compression: 1.8.0 - cors: 2.8.5 - dompurify: 3.2.6 - express: 4.21.2 - iconv-lite: 0.5.0 - jsdom: 24.1.3 - mime: 2.4.4 - nodemailer: 6.10.1 - smtp-server: 3.13.8 - socket.io: 4.8.1 - uue: 3.1.2 - wildstring: 1.0.9 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - - math-intrinsics@1.1.0: {} - - media-typer@0.3.0: {} - - memoize-weak@1.0.2: {} - - memoize@10.1.0: - dependencies: - mimic-function: 5.0.1 - - merge-descriptors@1.0.3: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - mime@2.4.4: {} - - mimic-function@5.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minipass@7.1.2: {} - - minizlib@3.0.2: - dependencies: - minipass: 7.1.2 - - mkdirp@3.0.1: {} - - mode-watcher@1.0.8(svelte@5.34.7): - dependencies: - runed: 0.25.0(svelte@5.34.7) - svelte: 5.34.7 - svelte-toolbelt: 0.7.1(svelte@5.34.7) - - mri@1.2.0: {} - - mrmime@2.0.1: {} - - ms@2.0.0: {} - - ms@2.1.3: {} - - nanoid@3.3.11: {} - - natural-compare@1.4.0: {} - - negotiator@0.6.3: {} - - negotiator@0.6.4: {} - - nodemailer@6.10.1: {} - - nodemailer@7.0.3: {} - - normalize-url@8.0.2: - optional: true - - nwsapi@2.2.20: {} - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - on-headers@1.0.2: {} - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - oxlint@1.2.0: - optionalDependencies: - '@oxlint/darwin-arm64': 1.2.0 - '@oxlint/darwin-x64': 1.2.0 - '@oxlint/linux-arm64-gnu': 1.2.0 - '@oxlint/linux-arm64-musl': 1.2.0 - '@oxlint/linux-x64-gnu': 1.2.0 - '@oxlint/linux-x64-musl': 1.2.0 - '@oxlint/win32-arm64': 1.2.0 - '@oxlint/win32-x64': 1.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - paneforge@1.0.0(svelte@5.34.7): - dependencies: - runed: 0.23.4(svelte@5.34.7) - svelte: 5.34.7 - svelte-toolbelt: 0.9.2(svelte@5.34.7) - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-to-regexp@0.1.12: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - postcss-load-config@3.1.4(postcss@8.5.6): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.5.6 - - postcss-safe-parser@7.0.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-scss@4.0.9(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-selector-parser@7.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prelude-ls@1.2.1: {} - - prettier-plugin-organize-imports@4.1.0(prettier@3.5.3)(typescript@5.8.3): - dependencies: - prettier: 3.5.3 - typescript: 5.8.3 - - prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.34.7): - dependencies: - prettier: 3.5.3 - svelte: 5.34.7 - - prettier-plugin-tailwindcss@0.6.12(prettier-plugin-organize-imports@4.1.0(prettier@3.5.3)(typescript@5.8.3))(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.34.7))(prettier@3.5.3): - dependencies: - prettier: 3.5.3 - optionalDependencies: - prettier-plugin-organize-imports: 4.1.0(prettier@3.5.3)(typescript@5.8.3) - prettier-plugin-svelte: 3.4.0(prettier@3.5.3)(svelte@5.34.7) - - prettier@3.5.3: {} - - property-expr@2.0.6: - optional: true - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-from-env@1.1.0: {} - - psl@1.15.0: - dependencies: - punycode: 2.3.1 - - punycode.js@2.3.1: {} - - punycode@2.3.1: {} - - pure-rand@6.1.0: - optional: true - - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - querystringify@2.2.0: {} - - queue-microtask@1.2.3: {} - - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - readdirp@4.1.2: {} - - require-directory@2.1.1: {} - - requires-port@1.0.0: {} - - resolve-from@4.0.0: {} - - reusify@1.1.0: {} - - robust-predicates@3.0.2: {} - - rollup@4.44.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.44.0 - '@rollup/rollup-android-arm64': 4.44.0 - '@rollup/rollup-darwin-arm64': 4.44.0 - '@rollup/rollup-darwin-x64': 4.44.0 - '@rollup/rollup-freebsd-arm64': 4.44.0 - '@rollup/rollup-freebsd-x64': 4.44.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 - '@rollup/rollup-linux-arm-musleabihf': 4.44.0 - '@rollup/rollup-linux-arm64-gnu': 4.44.0 - '@rollup/rollup-linux-arm64-musl': 4.44.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-musl': 4.44.0 - '@rollup/rollup-linux-s390x-gnu': 4.44.0 - '@rollup/rollup-linux-x64-gnu': 4.44.0 - '@rollup/rollup-linux-x64-musl': 4.44.0 - '@rollup/rollup-win32-arm64-msvc': 4.44.0 - '@rollup/rollup-win32-ia32-msvc': 4.44.0 - '@rollup/rollup-win32-x64-msvc': 4.44.0 - fsevents: 2.3.3 - - rrweb-cssom@0.7.1: {} - - rrweb-cssom@0.8.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - runed@0.23.4(svelte@5.34.7): - dependencies: - esm-env: 1.2.2 - svelte: 5.34.7 - - runed@0.25.0(svelte@5.34.7): - dependencies: - esm-env: 1.2.2 - svelte: 5.34.7 - - runed@0.28.0(svelte@5.34.7): - dependencies: - esm-env: 1.2.2 - svelte: 5.34.7 - - rw@1.3.3: {} - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - semver@7.7.2: {} - - send@0.19.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0 - transitivePeerDependencies: - - supports-color - - set-cookie-parser@2.7.1: {} - - setprototypeof@1.2.0: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shell-quote@1.8.3: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - sirv@3.0.1: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - - smtp-server@3.13.8: - dependencies: - base32.js: 0.1.0 - ipv6-normalize: 1.0.1 - nodemailer: 7.0.3 - punycode.js: 2.3.1 - - socket.io-adapter@2.5.5: - dependencies: - debug: 4.3.7 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-parser@4.2.4: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - socket.io@4.8.1: - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.5 - debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.5 - socket.io-parser: 4.2.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - optional: true - - source-map@0.6.1: - optional: true - - statuses@2.0.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-json-comments@3.1.1: {} - - style-to-object@1.0.9: - dependencies: - inline-style-parser: 0.2.4 - - superstruct@2.0.2: - optional: true - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - svelte-check@4.2.2(picomatch@4.0.2)(svelte@5.34.7)(typescript@5.8.3): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - chokidar: 4.0.3 - fdir: 6.4.6(picomatch@4.0.2) - picocolors: 1.1.1 - sade: 1.8.1 - svelte: 5.34.7 - typescript: 5.8.3 - transitivePeerDependencies: - - picomatch - - svelte-eslint-parser@1.2.0(svelte@5.34.7): - dependencies: - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - postcss: 8.5.6 - postcss-scss: 4.0.9(postcss@8.5.6) - postcss-selector-parser: 7.1.0 - optionalDependencies: - svelte: 5.34.7 - - svelte-portal@2.2.1: {} - - svelte-sonner@1.0.5(svelte@5.34.7): - dependencies: - runed: 0.28.0(svelte@5.34.7) - svelte: 5.34.7 - - svelte-toolbelt@0.5.0(svelte@5.34.7): - dependencies: - clsx: 2.1.1 - style-to-object: 1.0.9 - svelte: 5.34.7 - - svelte-toolbelt@0.7.1(svelte@5.34.7): - dependencies: - clsx: 2.1.1 - runed: 0.23.4(svelte@5.34.7) - style-to-object: 1.0.9 - svelte: 5.34.7 - - svelte-toolbelt@0.9.2(svelte@5.34.7): - dependencies: - clsx: 2.1.1 - runed: 0.28.0(svelte@5.34.7) - style-to-object: 1.0.9 - svelte: 5.34.7 - - svelte-transition@0.0.17(svelte@5.34.7): - dependencies: - svelte: 5.34.7 - - svelte@5.34.7: - dependencies: - '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.5.0 - '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@types/estree': 1.0.8 - acorn: 8.15.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - clsx: 2.1.1 - esm-env: 1.2.2 - esrap: 1.4.9 - is-reference: 3.0.3 - locate-character: 3.0.0 - magic-string: 0.30.17 - zimmerframe: 1.1.2 - - sveltekit-superforms@2.27.0(@sveltejs/kit@2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(@types/json-schema@7.0.15)(esbuild@0.25.5)(svelte@5.34.7)(typescript@5.8.3): - dependencies: - '@sveltejs/kit': 2.21.5(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.34.7)(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)) - devalue: 5.1.1 - memoize-weak: 1.0.2 - svelte: 5.34.7 - ts-deepmerge: 7.0.3 - optionalDependencies: - '@exodus/schemasafe': 1.3.0 - '@gcornut/valibot-json-schema': 0.42.0(esbuild@0.25.5)(typescript@5.8.3) - '@sinclair/typebox': 0.34.35 - '@typeschema/class-validator': 0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.2) - '@vinejs/vine': 3.0.1 - arktype: 2.1.20 - class-validator: 0.14.2 - effect: 3.16.8 - joi: 17.13.3 - json-schema-to-ts: 3.1.1 - superstruct: 2.0.2 - valibot: 1.1.0(typescript@5.8.3) - yup: 1.6.1 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) - transitivePeerDependencies: - - '@types/json-schema' - - esbuild - - typescript - - symbol-tree@3.2.4: {} - - tabbable@6.2.0: {} - - tailwind-merge@3.0.2: {} - - tailwind-merge@3.3.1: {} - - tailwind-variants@1.0.0(tailwindcss@4.1.10): - dependencies: - tailwind-merge: 3.0.2 - tailwindcss: 4.1.10 - - tailwindcss-animate@1.0.7(tailwindcss@4.1.10): - dependencies: - tailwindcss: 4.1.10 - - tailwindcss@4.1.10: {} - - tapable@2.2.2: {} - - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 - yallist: 5.0.0 - - tiny-case@1.0.3: - optional: true - - tinyglobby@0.2.14: - dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - toposort@2.0.2: - optional: true - - totalist@3.0.1: {} - - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - - tree-kill@1.2.2: {} - - ts-algebra@2.0.0: - optional: true - - ts-api-utils@2.1.0(typescript@5.8.3): - dependencies: - typescript: 5.8.3 - - ts-deepmerge@7.0.3: {} - - tslib@2.4.0: - optional: true - - tslib@2.8.1: {} - - tw-animate-css@1.3.4: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@2.19.0: - optional: true - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typescript-eslint@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - typescript@5.8.3: {} - - undici-types@6.21.0: {} - - universalify@0.2.0: {} - - unpipe@1.0.0: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - util-deprecate@1.0.2: {} - - utils-merge@1.0.1: {} - - uue@3.1.2: - dependencies: - escape-string-regexp: 1.0.5 - extend: 3.0.2 - - valibot@0.42.1(typescript@5.8.3): - optionalDependencies: - typescript: 5.8.3 - optional: true - - valibot@1.1.0(typescript@5.8.3): - optionalDependencies: - typescript: 5.8.3 - optional: true - - validator@13.15.15: - optional: true - - vary@1.1.2: {} - - vaul-svelte@1.0.0-next.7(svelte@5.34.7): - dependencies: - runed: 0.23.4(svelte@5.34.7) - svelte: 5.34.7 - svelte-toolbelt: 0.7.1(svelte@5.34.7) - - vite-plugin-full-reload@1.2.0: - dependencies: - picocolors: 1.1.1 - picomatch: 2.3.1 - - vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1): - dependencies: - esbuild: 0.25.5 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.6 - rollup: 4.44.0 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.15.32 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 - - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)): - optionalDependencies: - vite: 6.3.5(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1) - - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - - webidl-conversions@7.0.0: {} - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wildstring@1.0.9: {} - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - ws@8.17.1: {} - - ws@8.18.2: {} - - xml-name-validator@5.0.0: {} - - xmlchars@2.2.0: {} - - y18n@5.0.8: {} - - yallist@5.0.0: {} - - yaml@1.10.2: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@0.1.0: {} - - yup@1.6.1: - dependencies: - property-expr: 2.0.6 - tiny-case: 1.0.3 - toposort: 2.0.2 - type-fest: 2.19.0 - optional: true - - zimmerframe@1.1.2: {} - - zod-to-json-schema@3.24.5(zod@3.25.67): - dependencies: - zod: 3.25.67 - optional: true - - zod@3.25.67: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 5b23a1c..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -onlyBuiltDependencies: - - '@tailwindcss/oxide' - - esbuild diff --git a/public/.htaccess b/public/.htaccess deleted file mode 100644 index b574a59..0000000 --- a/public/.htaccess +++ /dev/null @@ -1,25 +0,0 @@ - - - Options -MultiViews -Indexes - - - RewriteEngine On - - # Handle Authorization Header - RewriteCond %{HTTP:Authorization} . - RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - - # Handle X-XSRF-Token Header - RewriteCond %{HTTP:x-xsrf-token} . - RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] - - # Redirect Trailing Slashes If Not A Folder... - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_URI} (.+)/$ - RewriteRule ^ %1 [L,R=301] - - # Send Requests To Front Controller... - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^ index.php [L] - diff --git a/public/index.php b/public/index.php deleted file mode 100644 index ee8f07e..0000000 --- a/public/index.php +++ /dev/null @@ -1,20 +0,0 @@ -handleRequest(Request::capture()); diff --git a/public/logo.png b/public/logo.png deleted file mode 100644 index 85ba6ac..0000000 Binary files a/public/logo.png and /dev/null differ diff --git a/public/logo.svg b/public/logo.svg deleted file mode 100644 index 8e3ba6a..0000000 --- a/public/logo.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - Layer 1 - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index eb05362..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: diff --git a/resources/css/app.css b/resources/css/app.css deleted file mode 100644 index f09612d..0000000 --- a/resources/css/app.css +++ /dev/null @@ -1,167 +0,0 @@ -@import 'tailwindcss'; -@import 'tw-animate-css'; - -@source "../views"; -@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; - -@custom-variant dark (&:is(.dark *)); - -@theme { - --font-sans: Instrument Sans, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - - --radius-lg: var(--radius); - --radius-md: calc(var(--radius) - 2px); - --radius-sm: calc(var(--radius) - 4px); - - --color-background: hsl(var(--background)); - --color-foreground: hsl(var(--foreground)); - - --color-card: hsl(var(--card)); - --color-card-foreground: hsl(var(--card-foreground)); - - --color-popover: hsl(var(--popover)); - --color-popover-foreground: hsl(var(--popover-foreground)); - - --color-primary: hsl(var(--primary)); - --color-primary-foreground: hsl(var(--primary-foreground)); - - --color-secondary: hsl(var(--secondary)); - --color-secondary-foreground: hsl(var(--secondary-foreground)); - - --color-muted: hsl(var(--muted)); - --color-muted-foreground: hsl(var(--muted-foreground)); - - --color-accent: hsl(var(--accent)); - --color-accent-foreground: hsl(var(--accent-foreground)); - - --color-destructive: hsl(var(--destructive)); - --color-destructive-foreground: hsl(var(--destructive-foreground)); - - --color-border: hsl(var(--border)); - --color-input: hsl(var(--input)); - --color-ring: hsl(var(--ring)); - - --color-chart-1: hsl(var(--chart-1)); - --color-chart-2: hsl(var(--chart-2)); - --color-chart-3: hsl(var(--chart-3)); - --color-chart-4: hsl(var(--chart-4)); - --color-chart-5: hsl(var(--chart-5)); - - --color-sidebar: hsl(var(--sidebar-background)); - --color-sidebar-foreground: hsl(var(--sidebar-foreground)); - --color-sidebar-primary: hsl(var(--sidebar-primary)); - --color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground)); - --color-sidebar-accent: hsl(var(--sidebar-accent)); - --color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground)); - --color-sidebar-border: hsl(var(--sidebar-border)); - --color-sidebar-ring: hsl(var(--sidebar-ring)); -} - -/* - The default border color has changed to `currentColor` in Tailwind CSS v4, - so we've added these compatibility styles to make sure everything still - looks the same as it did with Tailwind CSS v3. - - If we ever want to remove these styles, we need to add an explicit border - color utility to any element that depends on these defaults. -*/ -@layer base { - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - border-color: var(--color-gray-200, currentColor); - } -} - -@layer utilities { - body, - html { - --font-sans: - 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; - } -} - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 0 0% 3.9%; - --card: 0 0% 100%; - --card-foreground: 0 0% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 0 0% 3.9%; - --primary: 0 0% 9%; - --primary-foreground: 0 0% 98%; - --secondary: 0 0% 92.1%; - --secondary-foreground: 0 0% 9%; - --muted: 0 0% 96.1%; - --muted-foreground: 0 0% 45.1%; - --accent: 0 0% 96.1%; - --accent-foreground: 0 0% 9%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 0 0% 92.8%; - --input: 0 0% 89.8%; - --ring: 0 0% 3.9%; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; - --radius: 0.5rem; - --sidebar-background: 0 0% 98%; - --sidebar-foreground: 240 5.3% 26.1%; - --sidebar-primary: 0 0% 10%; - --sidebar-primary-foreground: 0 0% 98%; - --sidebar-accent: 0 0% 94%; - --sidebar-accent-foreground: 0 0% 30%; - --sidebar-border: 0 0% 91%; - --sidebar-ring: 217.2 91.2% 59.8%; - } - - .dark { - --background: 0 0% 3.9%; - --foreground: 0 0% 98%; - --card: 0 0% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 0 0% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 0 0% 9%; - --secondary: 0 0% 14.9%; - --secondary-foreground: 0 0% 98%; - --muted: 0 0% 6.9%; - --muted-foreground: 0 0% 63.9%; - --accent: 0 0% 14.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 84% 60%; - --destructive-foreground: 0 0% 98%; - --border: 0 0% 14.9%; - --input: 0 0% 14.9%; - --ring: 0 0% 83.1%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55%; - --sidebar-background: 0 0% 7%; - --sidebar-foreground: 0 0% 95.9%; - --sidebar-primary: 360, 100%, 100%; - --sidebar-primary-foreground: 0 0% 100%; - --sidebar-accent: 0 0% 15.9%; - --sidebar-accent-foreground: 240 4.8% 95.9%; - --sidebar-border: 0 0% 15.9%; - --sidebar-ring: 217.2 91.2% 59.8%; - } -} - -@layer base { - * { - @apply border-border; - } - - body { - @apply bg-background text-foreground; - } -} diff --git a/resources/js/app.ts b/resources/js/app.ts deleted file mode 100644 index 46278ef..0000000 --- a/resources/js/app.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createInertiaApp, type ResolvedComponent } from '@inertiajs/svelte'; -import { hydrate, mount } from 'svelte'; -import '../css/app.css'; -import './bootstrap'; - -createInertiaApp({ - resolve: (name: string) => { - const pages = import.meta.glob('./pages/**/*.svelte', { eager: true }); - return pages[`./pages/${name}.svelte`]; - }, - setup({ el, App, props }) { - if (el && el.dataset.serverRendered === 'true') { - hydrate(App, { target: el, props }); - } else if (el) { - mount(App, { target: el, props }); - } - }, -}); diff --git a/resources/js/bootstrap.ts b/resources/js/bootstrap.ts deleted file mode 100644 index 5f1390b..0000000 --- a/resources/js/bootstrap.ts +++ /dev/null @@ -1,4 +0,0 @@ -import axios from 'axios'; -window.axios = axios; - -window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/resources/js/components/AppContent.svelte b/resources/js/components/AppContent.svelte deleted file mode 100644 index 57d3a8f..0000000 --- a/resources/js/components/AppContent.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -{#if variant === 'sidebar'} - -
- {@render children?.()} -
-
-{:else} -
- {@render children?.()} -
-{/if} diff --git a/resources/js/components/AppHeader.svelte b/resources/js/components/AppHeader.svelte deleted file mode 100644 index e5255f9..0000000 --- a/resources/js/components/AppHeader.svelte +++ /dev/null @@ -1,192 +0,0 @@ - - -
-
-
-
- - - - - - Navigation Menu - - - -
- -
- {#each rightNavItems as item (item.title)} - - {#if item.icon} - - {/if} - {item.title} - - {/each} -
-
-
-
-
- - - - - - -
-
- - - -
- - - - - - - - - -
-
-
- - {#if breadcrumbs.length > 1} -
-
- -
-
- {/if} -
diff --git a/resources/js/components/AppLogo.svelte b/resources/js/components/AppLogo.svelte deleted file mode 100644 index f8a61d4..0000000 --- a/resources/js/components/AppLogo.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
-
-
- -
-
- - FlbxCup - -
-
-
- {#if currentAppearance === 'light'} - - {:else if currentAppearance === 'dark'} - - {:else} - - {/if} -
-
diff --git a/resources/js/components/AppLogoIcon.svelte b/resources/js/components/AppLogoIcon.svelte deleted file mode 100644 index ed1a277..0000000 --- a/resources/js/components/AppLogoIcon.svelte +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Layer 1 - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/js/components/AppShell.svelte b/resources/js/components/AppShell.svelte deleted file mode 100644 index 4499df8..0000000 --- a/resources/js/components/AppShell.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -{#if variant === 'header'} -
- {@render children?.()} -
-{:else} - - {@render children?.()} - -{/if} diff --git a/resources/js/components/AppSidebar.svelte b/resources/js/components/AppSidebar.svelte deleted file mode 100644 index 6d2a59a..0000000 --- a/resources/js/components/AppSidebar.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - {#if $page.props.auth.user} - - {:else} - - {/if} - - diff --git a/resources/js/components/AppSidebarHeader.svelte b/resources/js/components/AppSidebarHeader.svelte deleted file mode 100644 index d844ed0..0000000 --- a/resources/js/components/AppSidebarHeader.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
-
- - - {#if breadcrumbs.length > 0} - - {/if} -
-
diff --git a/resources/js/components/AppearanceTabs.svelte b/resources/js/components/AppearanceTabs.svelte deleted file mode 100644 index ee4d8aa..0000000 --- a/resources/js/components/AppearanceTabs.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -
- {#each tabs as { value, Icon, label } (value)} - - {/each} -
diff --git a/resources/js/components/Breadcrumbs.svelte b/resources/js/components/Breadcrumbs.svelte deleted file mode 100644 index 02f4582..0000000 --- a/resources/js/components/Breadcrumbs.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - - - {#each breadcrumbs as item, index (index)} - - {#if index === breadcrumbs.length - 1} - {item.title} - {:else} - - {item.title} - - {/if} - - {#if index !== breadcrumbs.length - 1} - - {/if} - {/each} - - diff --git a/resources/js/components/DeleteUser.svelte b/resources/js/components/DeleteUser.svelte deleted file mode 100644 index 18949c3..0000000 --- a/resources/js/components/DeleteUser.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - -
- -
-
-

Warning

-

Please proceed with caution, this cannot be undone.

-
- - - - - -
- - Are you sure you want to delete your account? - - Once your account is deleted, all of its resources and data will also be permanently deleted. Please enter your password - to confirm you would like to permanently delete your account. - - - -
- - - -
- - - - - - - - - -
-
-
-
-
diff --git a/resources/js/components/Heading.svelte b/resources/js/components/Heading.svelte deleted file mode 100644 index 25281f9..0000000 --- a/resources/js/components/Heading.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-

{title}

- {#if description} -

{description}

- {/if} -
diff --git a/resources/js/components/HeadingSmall.svelte b/resources/js/components/HeadingSmall.svelte deleted file mode 100644 index 4d2d641..0000000 --- a/resources/js/components/HeadingSmall.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-

{title}

- {#if description} -

{description}

- {/if} -
diff --git a/resources/js/components/Icon.svelte b/resources/js/components/Icon.svelte deleted file mode 100644 index 32115a9..0000000 --- a/resources/js/components/Icon.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/InputError.svelte b/resources/js/components/InputError.svelte deleted file mode 100644 index f0cebd7..0000000 --- a/resources/js/components/InputError.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -{#if message} -

- {message} -

-{/if} diff --git a/resources/js/components/NavFooter.svelte b/resources/js/components/NavFooter.svelte deleted file mode 100644 index c78f4d8..0000000 --- a/resources/js/components/NavFooter.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - {#each items as item, index (index)} - {#if item.requireAdmin && !isAdmin}{:else} - - - -
- {#if item.icon} - {@const Icon = item.icon} - - {/if} - {item.title} -
-
-
-
- {/if} - {/each} -
-
-
diff --git a/resources/js/components/NavMain.svelte b/resources/js/components/NavMain.svelte deleted file mode 100644 index 49df48c..0000000 --- a/resources/js/components/NavMain.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - - Platform - - {#each items as item (item.title)} - - - - {#snippet tooltipContent()} - {item.title} - {/snippet} - {#if item.icon} - {@const Icon = item.icon} - - {/if} - {item.title} - - - - {/each} - - diff --git a/resources/js/components/NavUser.svelte b/resources/js/components/NavUser.svelte deleted file mode 100644 index 0b8904e..0000000 --- a/resources/js/components/NavUser.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/resources/js/components/PlaceholderPattern.svelte b/resources/js/components/PlaceholderPattern.svelte deleted file mode 100644 index b467633..0000000 --- a/resources/js/components/PlaceholderPattern.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - diff --git a/resources/js/components/TextLink.svelte b/resources/js/components/TextLink.svelte deleted file mode 100644 index b2b2ee8..0000000 --- a/resources/js/components/TextLink.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - {@render children()} - diff --git a/resources/js/components/UserInfo.svelte b/resources/js/components/UserInfo.svelte deleted file mode 100644 index 5631f84..0000000 --- a/resources/js/components/UserInfo.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -{#if user} - - {#if showAvatar} - - {:else} - - {getInitials(user.name)} - - {/if} - - -
- {user.name} - - {#if showEmail} - {user.email} - {/if} -
-{/if} diff --git a/resources/js/components/UserMenuContent.svelte b/resources/js/components/UserMenuContent.svelte deleted file mode 100644 index 780993e..0000000 --- a/resources/js/components/UserMenuContent.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - - -
- -
-
- - - - -
- - Settings -
- -
-
- - - -
- - Log out -
- -
diff --git a/resources/js/components/ui/accordion/accordion-content.svelte b/resources/js/components/ui/accordion/accordion-content.svelte deleted file mode 100644 index 17100e1..0000000 --- a/resources/js/components/ui/accordion/accordion-content.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - -
- {@render children?.()} -
-
diff --git a/resources/js/components/ui/accordion/accordion-item.svelte b/resources/js/components/ui/accordion/accordion-item.svelte deleted file mode 100644 index ab11873..0000000 --- a/resources/js/components/ui/accordion/accordion-item.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/accordion/accordion-root.svelte b/resources/js/components/ui/accordion/accordion-root.svelte deleted file mode 100644 index 117ee37..0000000 --- a/resources/js/components/ui/accordion/accordion-root.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/accordion/accordion-trigger.svelte b/resources/js/components/ui/accordion/accordion-trigger.svelte deleted file mode 100644 index f1de504..0000000 --- a/resources/js/components/ui/accordion/accordion-trigger.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - svg]:rotate-180", - className - )} - {...restProps} - > - {@render children?.()} - - - diff --git a/resources/js/components/ui/accordion/index.ts b/resources/js/components/ui/accordion/index.ts deleted file mode 100644 index 828116a..0000000 --- a/resources/js/components/ui/accordion/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Root from "./accordion-root.svelte"; -import Content from "./accordion-content.svelte"; -import Item from "./accordion-item.svelte"; -import Trigger from "./accordion-trigger.svelte"; - -export { - Root, - Content, - Item, - Trigger, - // - Root as Accordion, - Content as AccordionContent, - Item as AccordionItem, - Trigger as AccordionTrigger, -}; diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-action.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-action.svelte deleted file mode 100644 index c06214c..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-action.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-cancel.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-cancel.svelte deleted file mode 100644 index b8e6275..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-cancel.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-content.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-content.svelte deleted file mode 100644 index eed4c6a..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-content.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-description.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-description.svelte deleted file mode 100644 index cf2f5a7..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-description.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-footer.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-footer.svelte deleted file mode 100644 index cfcff93..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-header.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-header.svelte deleted file mode 100644 index 3a11f90..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-header.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-overlay.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-overlay.svelte deleted file mode 100644 index fd3ac62..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-overlay.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-title.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-title.svelte deleted file mode 100644 index f59f462..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-title.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/alert-dialog-trigger.svelte b/resources/js/components/ui/alert-dialog/alert-dialog-trigger.svelte deleted file mode 100644 index b22d1d5..0000000 --- a/resources/js/components/ui/alert-dialog/alert-dialog-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/alert-dialog/index.ts b/resources/js/components/ui/alert-dialog/index.ts deleted file mode 100644 index cc281c5..0000000 --- a/resources/js/components/ui/alert-dialog/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { AlertDialog as AlertDialogPrimitive } from "bits-ui"; -import Trigger from "./alert-dialog-trigger.svelte"; -import Title from "./alert-dialog-title.svelte"; -import Action from "./alert-dialog-action.svelte"; -import Cancel from "./alert-dialog-cancel.svelte"; -import Footer from "./alert-dialog-footer.svelte"; -import Header from "./alert-dialog-header.svelte"; -import Overlay from "./alert-dialog-overlay.svelte"; -import Content from "./alert-dialog-content.svelte"; -import Description from "./alert-dialog-description.svelte"; - -const Root = AlertDialogPrimitive.Root; -const Portal = AlertDialogPrimitive.Portal; - -export { - Root, - Title, - Action, - Cancel, - Portal, - Footer, - Header, - Trigger, - Overlay, - Content, - Description, - // - Root as AlertDialog, - Title as AlertDialogTitle, - Action as AlertDialogAction, - Cancel as AlertDialogCancel, - Portal as AlertDialogPortal, - Footer as AlertDialogFooter, - Header as AlertDialogHeader, - Trigger as AlertDialogTrigger, - Overlay as AlertDialogOverlay, - Content as AlertDialogContent, - Description as AlertDialogDescription, -}; diff --git a/resources/js/components/ui/alert/alert-description.svelte b/resources/js/components/ui/alert/alert-description.svelte deleted file mode 100644 index 3c2bd53..0000000 --- a/resources/js/components/ui/alert/alert-description.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/resources/js/components/ui/alert/alert-title.svelte b/resources/js/components/ui/alert/alert-title.svelte deleted file mode 100644 index 2a19bd6..0000000 --- a/resources/js/components/ui/alert/alert-title.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/resources/js/components/ui/alert/alert.svelte b/resources/js/components/ui/alert/alert.svelte deleted file mode 100644 index c54faa6..0000000 --- a/resources/js/components/ui/alert/alert.svelte +++ /dev/null @@ -1,44 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/alert/index.ts b/resources/js/components/ui/alert/index.ts deleted file mode 100644 index 97e21b4..0000000 --- a/resources/js/components/ui/alert/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Root from "./alert.svelte"; -import Description from "./alert-description.svelte"; -import Title from "./alert-title.svelte"; -export { alertVariants, type AlertVariant } from "./alert.svelte"; - -export { - Root, - Description, - Title, - // - Root as Alert, - Description as AlertDescription, - Title as AlertTitle, -}; diff --git a/resources/js/components/ui/aspect-ratio/aspect-ratio.svelte b/resources/js/components/ui/aspect-ratio/aspect-ratio.svelte deleted file mode 100644 index 815aab0..0000000 --- a/resources/js/components/ui/aspect-ratio/aspect-ratio.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/aspect-ratio/index.ts b/resources/js/components/ui/aspect-ratio/index.ts deleted file mode 100644 index 985c75f..0000000 --- a/resources/js/components/ui/aspect-ratio/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Root from "./aspect-ratio.svelte"; - -export { Root, Root as AspectRatio }; diff --git a/resources/js/components/ui/avatar/avatar-fallback.svelte b/resources/js/components/ui/avatar/avatar-fallback.svelte deleted file mode 100644 index 3943a7d..0000000 --- a/resources/js/components/ui/avatar/avatar-fallback.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/avatar-image.svelte b/resources/js/components/ui/avatar/avatar-image.svelte deleted file mode 100644 index 0d18897..0000000 --- a/resources/js/components/ui/avatar/avatar-image.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/avatar.svelte b/resources/js/components/ui/avatar/avatar.svelte deleted file mode 100644 index b532b3e..0000000 --- a/resources/js/components/ui/avatar/avatar.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/avatar/index.ts b/resources/js/components/ui/avatar/index.ts deleted file mode 100644 index d06457b..0000000 --- a/resources/js/components/ui/avatar/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Root from "./avatar.svelte"; -import Image from "./avatar-image.svelte"; -import Fallback from "./avatar-fallback.svelte"; - -export { - Root, - Image, - Fallback, - // - Root as Avatar, - Image as AvatarImage, - Fallback as AvatarFallback, -}; diff --git a/resources/js/components/ui/badge/badge.svelte b/resources/js/components/ui/badge/badge.svelte deleted file mode 100644 index 0a8c6c2..0000000 --- a/resources/js/components/ui/badge/badge.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - {@render children?.()} - diff --git a/resources/js/components/ui/badge/index.ts b/resources/js/components/ui/badge/index.ts deleted file mode 100644 index 64e0aa9..0000000 --- a/resources/js/components/ui/badge/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Badge } from "./badge.svelte"; -export { badgeVariants, type BadgeVariant } from "./badge.svelte"; diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-ellipsis.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-ellipsis.svelte deleted file mode 100644 index 6ad2b58..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-item.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-item.svelte deleted file mode 100644 index 07fc765..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-item.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
  • - {@render children?.()} -
  • diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-link.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-link.svelte deleted file mode 100644 index dfeec9e..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-link.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - -{#if child} - {@render child({ props: attrs })} -{:else} - - {@render children?.()} - -{/if} diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-list.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-list.svelte deleted file mode 100644 index b5c1a91..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-list.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
      - {@render children?.()} -
    diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-page.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-page.svelte deleted file mode 100644 index ce77b21..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-page.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/breadcrumb/breadcrumb-separator.svelte b/resources/js/components/ui/breadcrumb/breadcrumb-separator.svelte deleted file mode 100644 index 4fd29dd..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb-separator.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/breadcrumb.svelte b/resources/js/components/ui/breadcrumb/breadcrumb.svelte deleted file mode 100644 index b230eb9..0000000 --- a/resources/js/components/ui/breadcrumb/breadcrumb.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/breadcrumb/index.ts b/resources/js/components/ui/breadcrumb/index.ts deleted file mode 100644 index dc914ec..0000000 --- a/resources/js/components/ui/breadcrumb/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Root from "./breadcrumb.svelte"; -import Ellipsis from "./breadcrumb-ellipsis.svelte"; -import Item from "./breadcrumb-item.svelte"; -import Separator from "./breadcrumb-separator.svelte"; -import Link from "./breadcrumb-link.svelte"; -import List from "./breadcrumb-list.svelte"; -import Page from "./breadcrumb-page.svelte"; - -export { - Root, - Ellipsis, - Item, - Separator, - Link, - List, - Page, - // - Root as Breadcrumb, - Ellipsis as BreadcrumbEllipsis, - Item as BreadcrumbItem, - Separator as BreadcrumbSeparator, - Link as BreadcrumbLink, - List as BreadcrumbList, - Page as BreadcrumbPage, -}; diff --git a/resources/js/components/ui/button/button.svelte b/resources/js/components/ui/button/button.svelte deleted file mode 100644 index 5f21455..0000000 --- a/resources/js/components/ui/button/button.svelte +++ /dev/null @@ -1,80 +0,0 @@ - - - - -{#if href} - - {@render children?.()} - -{:else} - -{/if} diff --git a/resources/js/components/ui/calendar/calendar-cell.svelte b/resources/js/components/ui/calendar/calendar-cell.svelte deleted file mode 100644 index 7a397dd..0000000 --- a/resources/js/components/ui/calendar/calendar-cell.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-day.svelte b/resources/js/components/ui/calendar/calendar-day.svelte deleted file mode 100644 index 70eefac..0000000 --- a/resources/js/components/ui/calendar/calendar-day.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-grid-body.svelte b/resources/js/components/ui/calendar/calendar-grid-body.svelte deleted file mode 100644 index 78261c7..0000000 --- a/resources/js/components/ui/calendar/calendar-grid-body.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-grid-head.svelte b/resources/js/components/ui/calendar/calendar-grid-head.svelte deleted file mode 100644 index 6ef9d7e..0000000 --- a/resources/js/components/ui/calendar/calendar-grid-head.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-grid-row.svelte b/resources/js/components/ui/calendar/calendar-grid-row.svelte deleted file mode 100644 index d143e16..0000000 --- a/resources/js/components/ui/calendar/calendar-grid-row.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-grid.svelte b/resources/js/components/ui/calendar/calendar-grid.svelte deleted file mode 100644 index 9fcf4ea..0000000 --- a/resources/js/components/ui/calendar/calendar-grid.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-head-cell.svelte b/resources/js/components/ui/calendar/calendar-head-cell.svelte deleted file mode 100644 index cf02cba..0000000 --- a/resources/js/components/ui/calendar/calendar-head-cell.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-header.svelte b/resources/js/components/ui/calendar/calendar-header.svelte deleted file mode 100644 index 113babc..0000000 --- a/resources/js/components/ui/calendar/calendar-header.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-heading.svelte b/resources/js/components/ui/calendar/calendar-heading.svelte deleted file mode 100644 index 59b4b76..0000000 --- a/resources/js/components/ui/calendar/calendar-heading.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/calendar/calendar-months.svelte b/resources/js/components/ui/calendar/calendar-months.svelte deleted file mode 100644 index 451538e..0000000 --- a/resources/js/components/ui/calendar/calendar-months.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/calendar/calendar-next-button.svelte b/resources/js/components/ui/calendar/calendar-next-button.svelte deleted file mode 100644 index b70ff6f..0000000 --- a/resources/js/components/ui/calendar/calendar-next-button.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -{#snippet Fallback()} - -{/snippet} - - diff --git a/resources/js/components/ui/calendar/calendar-prev-button.svelte b/resources/js/components/ui/calendar/calendar-prev-button.svelte deleted file mode 100644 index e4ae442..0000000 --- a/resources/js/components/ui/calendar/calendar-prev-button.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -{#snippet Fallback()} - -{/snippet} - - diff --git a/resources/js/components/ui/calendar/calendar.svelte b/resources/js/components/ui/calendar/calendar.svelte deleted file mode 100644 index fea047e..0000000 --- a/resources/js/components/ui/calendar/calendar.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - - - - {#snippet children({ months, weekdays })} - - - - - - - {#each months as month (month)} - - - - {#each weekdays as weekday (weekday)} - - {weekday.slice(0, 2)} - - {/each} - - - - {#each month.weeks as weekDates (weekDates)} - - {#each weekDates as date (date)} - - - - {/each} - - {/each} - - - {/each} - - {/snippet} - diff --git a/resources/js/components/ui/calendar/index.ts b/resources/js/components/ui/calendar/index.ts deleted file mode 100644 index ab257ab..0000000 --- a/resources/js/components/ui/calendar/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import Root from "./calendar.svelte"; -import Cell from "./calendar-cell.svelte"; -import Day from "./calendar-day.svelte"; -import Grid from "./calendar-grid.svelte"; -import Header from "./calendar-header.svelte"; -import Months from "./calendar-months.svelte"; -import GridRow from "./calendar-grid-row.svelte"; -import Heading from "./calendar-heading.svelte"; -import GridBody from "./calendar-grid-body.svelte"; -import GridHead from "./calendar-grid-head.svelte"; -import HeadCell from "./calendar-head-cell.svelte"; -import NextButton from "./calendar-next-button.svelte"; -import PrevButton from "./calendar-prev-button.svelte"; - -export { - Day, - Cell, - Grid, - Header, - Months, - GridRow, - Heading, - GridBody, - GridHead, - HeadCell, - NextButton, - PrevButton, - // - Root as Calendar, -}; diff --git a/resources/js/components/ui/card/card-action.svelte b/resources/js/components/ui/card/card-action.svelte deleted file mode 100644 index 8e8e6b5..0000000 --- a/resources/js/components/ui/card/card-action.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/card-content.svelte b/resources/js/components/ui/card/card-content.svelte deleted file mode 100644 index de14e6c..0000000 --- a/resources/js/components/ui/card/card-content.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/card-description.svelte b/resources/js/components/ui/card/card-description.svelte deleted file mode 100644 index 6a7be37..0000000 --- a/resources/js/components/ui/card/card-description.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -

    - {@render children?.()} -

    diff --git a/resources/js/components/ui/card/card-footer.svelte b/resources/js/components/ui/card/card-footer.svelte deleted file mode 100644 index eadb3fd..0000000 --- a/resources/js/components/ui/card/card-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/card-header.svelte b/resources/js/components/ui/card/card-header.svelte deleted file mode 100644 index d45127c..0000000 --- a/resources/js/components/ui/card/card-header.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/card-title.svelte b/resources/js/components/ui/card/card-title.svelte deleted file mode 100644 index 7952d2b..0000000 --- a/resources/js/components/ui/card/card-title.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/card.svelte b/resources/js/components/ui/card/card.svelte deleted file mode 100644 index ddae7c3..0000000 --- a/resources/js/components/ui/card/card.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/card/index.ts b/resources/js/components/ui/card/index.ts deleted file mode 100644 index 4d3fce4..0000000 --- a/resources/js/components/ui/card/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Root from "./card.svelte"; -import Content from "./card-content.svelte"; -import Description from "./card-description.svelte"; -import Footer from "./card-footer.svelte"; -import Header from "./card-header.svelte"; -import Title from "./card-title.svelte"; -import Action from "./card-action.svelte"; - -export { - Root, - Content, - Description, - Footer, - Header, - Title, - Action, - // - Root as Card, - Content as CardContent, - Description as CardDescription, - Footer as CardFooter, - Header as CardHeader, - Title as CardTitle, - Action as CardAction, -}; diff --git a/resources/js/components/ui/carousel/carousel-content.svelte b/resources/js/components/ui/carousel/carousel-content.svelte deleted file mode 100644 index 1dded7c..0000000 --- a/resources/js/components/ui/carousel/carousel-content.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -
    -
    - {@render children?.()} -
    -
    diff --git a/resources/js/components/ui/carousel/carousel-item.svelte b/resources/js/components/ui/carousel/carousel-item.svelte deleted file mode 100644 index 8bb6348..0000000 --- a/resources/js/components/ui/carousel/carousel-item.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/carousel/carousel-next.svelte b/resources/js/components/ui/carousel/carousel-next.svelte deleted file mode 100644 index 8980b63..0000000 --- a/resources/js/components/ui/carousel/carousel-next.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/resources/js/components/ui/carousel/carousel-previous.svelte b/resources/js/components/ui/carousel/carousel-previous.svelte deleted file mode 100644 index 97d3cb4..0000000 --- a/resources/js/components/ui/carousel/carousel-previous.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/resources/js/components/ui/carousel/carousel.svelte b/resources/js/components/ui/carousel/carousel.svelte deleted file mode 100644 index 3078763..0000000 --- a/resources/js/components/ui/carousel/carousel.svelte +++ /dev/null @@ -1,100 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/carousel/context.ts b/resources/js/components/ui/carousel/context.ts deleted file mode 100644 index 0ff0c43..0000000 --- a/resources/js/components/ui/carousel/context.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { WithElementRef } from "@/lib/utils.js"; -import type { EmblaCarouselSvelteType } from "embla-carousel-svelte"; -import type emblaCarouselSvelte from "embla-carousel-svelte"; -import { getContext, hasContext, setContext } from "svelte"; -import type { HTMLAttributes } from "svelte/elements"; - -export type CarouselAPI = - NonNullable["on:emblaInit"]> extends ( - evt: CustomEvent - ) => void - ? CarouselAPI - : never; - -type EmblaCarouselConfig = NonNullable[1]>; - -export type CarouselOptions = EmblaCarouselConfig["options"]; -export type CarouselPlugins = EmblaCarouselConfig["plugins"]; - -//// - -export type CarouselProps = { - opts?: CarouselOptions; - plugins?: CarouselPlugins; - setApi?: (api: CarouselAPI | undefined) => void; - orientation?: "horizontal" | "vertical"; -} & WithElementRef>; - -const EMBLA_CAROUSEL_CONTEXT = Symbol("EMBLA_CAROUSEL_CONTEXT"); - -export type EmblaContext = { - api: CarouselAPI | undefined; - orientation: "horizontal" | "vertical"; - scrollNext: () => void; - scrollPrev: () => void; - canScrollNext: boolean; - canScrollPrev: boolean; - handleKeyDown: (e: KeyboardEvent) => void; - options: CarouselOptions; - plugins: CarouselPlugins; - onInit: (e: CustomEvent) => void; - scrollTo: (index: number, jump?: boolean) => void; - scrollSnaps: number[]; - selectedIndex: number; -}; - -export function setEmblaContext(config: EmblaContext): EmblaContext { - setContext(EMBLA_CAROUSEL_CONTEXT, config); - return config; -} - -export function getEmblaContext(name = "This component") { - if (!hasContext(EMBLA_CAROUSEL_CONTEXT)) { - throw new Error(`${name} must be used within a component`); - } - return getContext>(EMBLA_CAROUSEL_CONTEXT); -} diff --git a/resources/js/components/ui/carousel/index.ts b/resources/js/components/ui/carousel/index.ts deleted file mode 100644 index 957fc74..0000000 --- a/resources/js/components/ui/carousel/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Root from "./carousel.svelte"; -import Content from "./carousel-content.svelte"; -import Item from "./carousel-item.svelte"; -import Previous from "./carousel-previous.svelte"; -import Next from "./carousel-next.svelte"; - -export { - Root, - Content, - Item, - Previous, - Next, - // - Root as Carousel, - Content as CarouselContent, - Item as CarouselItem, - Previous as CarouselPrevious, - Next as CarouselNext, -}; diff --git a/resources/js/components/ui/chart/chart-container.svelte b/resources/js/components/ui/chart/chart-container.svelte deleted file mode 100644 index 61a9d0b..0000000 --- a/resources/js/components/ui/chart/chart-container.svelte +++ /dev/null @@ -1,81 +0,0 @@ - - -
    - - {@render children?.()} -
    diff --git a/resources/js/components/ui/chart/chart-style.svelte b/resources/js/components/ui/chart/chart-style.svelte deleted file mode 100644 index 67b8fd5..0000000 --- a/resources/js/components/ui/chart/chart-style.svelte +++ /dev/null @@ -1,37 +0,0 @@ - - -{#if colorConfig && colorConfig.length} - {@const themeContents = Object.entries(THEMES) - .map( - ([theme, prefix]) => ` -${prefix} [data-chart=${id}] { -${colorConfig - .map(([key, itemConfig]) => { - const color = - itemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color; - return color ? ` --color-${key}: ${color};` : null; - }) - .join("\n")} -} -` - ) - .join("\n")} - - {#key id} - - {@html `${styleOpen} - ${themeContents} - ${styleClose}`} - {/key} -{/if} diff --git a/resources/js/components/ui/chart/chart-tooltip.svelte b/resources/js/components/ui/chart/chart-tooltip.svelte deleted file mode 100644 index 5684439..0000000 --- a/resources/js/components/ui/chart/chart-tooltip.svelte +++ /dev/null @@ -1,159 +0,0 @@ - - -{#snippet TooltipLabel()} - {#if formattedLabel} -
    - {#if typeof formattedLabel === "function"} - {@render formattedLabel()} - {:else} - {formattedLabel} - {/if} -
    - {/if} -{/snippet} - - -
    - {#if !nestLabel} - {@render TooltipLabel()} - {/if} -
    - {#each tooltipCtx.payload as item, i (item.key + i)} - {@const key = `${nameKey || item.key || item.name || "value"}`} - {@const itemConfig = getPayloadConfigFromPayload(chart.config, item, key)} - {@const indicatorColor = color || item.payload?.color || item.color} -
    svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5", - indicator === "dot" && "items-center" - )} - > - {#if formatter && item.value !== undefined && item.name} - {@render formatter({ - value: item.value, - name: item.name, - item, - index: i, - payload: tooltipCtx.payload, - })} - {:else} - {#if itemConfig?.icon} - - {:else if !hideIndicator} -
    - {/if} -
    -
    - {#if nestLabel} - {@render TooltipLabel()} - {/if} - - {itemConfig?.label || item.name} - -
    - {#if item.value} - - {item.value.toLocaleString()} - - {/if} -
    - {/if} -
    - {/each} -
    -
    -
    diff --git a/resources/js/components/ui/chart/chart-utils.ts b/resources/js/components/ui/chart/chart-utils.ts deleted file mode 100644 index 50b0171..0000000 --- a/resources/js/components/ui/chart/chart-utils.ts +++ /dev/null @@ -1,66 +0,0 @@ -import type { Tooltip } from "layerchart"; -import { getContext, setContext, type Component, type ComponentProps, type Snippet } from "svelte"; - -export const THEMES = { light: "", dark: ".dark" } as const; - -export type ChartConfig = { - [k in string]: { - label?: string; - icon?: Component; - } & ( - | { color?: string; theme?: never } - | { color?: never; theme: Record } - ); -}; - -export type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never; - -export type TooltipPayload = ExtractSnippetParams< - ComponentProps["children"] ->["payload"][number]; - -// Helper to extract item config from a payload. -export function getPayloadConfigFromPayload( - config: ChartConfig, - payload: TooltipPayload, - key: string -) { - if (typeof payload !== "object" || payload === null) return undefined; - - const payloadPayload = - "payload" in payload && typeof payload.payload === "object" && payload.payload !== null - ? payload.payload - : undefined; - - let configLabelKey: string = key; - - if (payload.key === key) { - configLabelKey = payload.key; - } else if (payload.name === key) { - configLabelKey = payload.name; - } else if (key in payload && typeof payload[key as keyof typeof payload] === "string") { - configLabelKey = payload[key as keyof typeof payload] as string; - } else if ( - payloadPayload && - key in payloadPayload && - typeof payloadPayload[key as keyof typeof payloadPayload] === "string" - ) { - configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string; - } - - return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config]; -} - -type ChartContextValue = { - config: ChartConfig; -}; - -const chartContextKey = Symbol("chart-context"); - -export function setChartContext(value: ChartContextValue) { - return setContext(chartContextKey, value); -} - -export function useChart() { - return getContext(chartContextKey); -} diff --git a/resources/js/components/ui/chart/index.ts b/resources/js/components/ui/chart/index.ts deleted file mode 100644 index f22375e..0000000 --- a/resources/js/components/ui/chart/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import ChartContainer from "./chart-container.svelte"; -import ChartTooltip from "./chart-tooltip.svelte"; - -export { getPayloadConfigFromPayload, type ChartConfig } from "./chart-utils.js"; - -export { ChartContainer, ChartTooltip, ChartContainer as Container, ChartTooltip as Tooltip }; diff --git a/resources/js/components/ui/checkbox/checkbox.svelte b/resources/js/components/ui/checkbox/checkbox.svelte deleted file mode 100644 index 970884a..0000000 --- a/resources/js/components/ui/checkbox/checkbox.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - - - {#snippet children({ checked, indeterminate })} -
    - {#if checked} - - {:else if indeterminate} - - {/if} -
    - {/snippet} -
    diff --git a/resources/js/components/ui/checkbox/index.ts b/resources/js/components/ui/checkbox/index.ts deleted file mode 100644 index 6d92d94..0000000 --- a/resources/js/components/ui/checkbox/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Root from "./checkbox.svelte"; -export { - Root, - // - Root as Checkbox, -}; diff --git a/resources/js/components/ui/collapsible/collapsible-content.svelte b/resources/js/components/ui/collapsible/collapsible-content.svelte deleted file mode 100644 index bdabb55..0000000 --- a/resources/js/components/ui/collapsible/collapsible-content.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/collapsible-trigger.svelte b/resources/js/components/ui/collapsible/collapsible-trigger.svelte deleted file mode 100644 index ece7ad6..0000000 --- a/resources/js/components/ui/collapsible/collapsible-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/collapsible.svelte b/resources/js/components/ui/collapsible/collapsible.svelte deleted file mode 100644 index 1238eff..0000000 --- a/resources/js/components/ui/collapsible/collapsible.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/resources/js/components/ui/collapsible/index.ts b/resources/js/components/ui/collapsible/index.ts deleted file mode 100644 index 83c0198..0000000 --- a/resources/js/components/ui/collapsible/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Collapsible as CollapsiblePrimitive } from "bits-ui"; - -const Root = CollapsiblePrimitive.Root; -const Trigger = CollapsiblePrimitive.Trigger; -const Content = CollapsiblePrimitive.Content; - -export { - Root, - Content, - Trigger, - // - Root as Collapsible, - Content as CollapsibleContent, - Trigger as CollapsibleTrigger, -}; diff --git a/resources/js/components/ui/command/command-dialog.svelte b/resources/js/components/ui/command/command-dialog.svelte deleted file mode 100644 index 0667981..0000000 --- a/resources/js/components/ui/command/command-dialog.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {title} - {description} - - - - - diff --git a/resources/js/components/ui/command/command-empty.svelte b/resources/js/components/ui/command/command-empty.svelte deleted file mode 100644 index b749d05..0000000 --- a/resources/js/components/ui/command/command-empty.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/command-group.svelte b/resources/js/components/ui/command/command-group.svelte deleted file mode 100644 index fc46eb6..0000000 --- a/resources/js/components/ui/command/command-group.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - {#if heading} - - {heading} - - {/if} - - diff --git a/resources/js/components/ui/command/command-input.svelte b/resources/js/components/ui/command/command-input.svelte deleted file mode 100644 index 5f11c25..0000000 --- a/resources/js/components/ui/command/command-input.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - -
    - - -
    diff --git a/resources/js/components/ui/command/command-item.svelte b/resources/js/components/ui/command/command-item.svelte deleted file mode 100644 index 3662bf5..0000000 --- a/resources/js/components/ui/command/command-item.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/command-link-item.svelte b/resources/js/components/ui/command/command-link-item.svelte deleted file mode 100644 index 32278b0..0000000 --- a/resources/js/components/ui/command/command-link-item.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/command-list.svelte b/resources/js/components/ui/command/command-list.svelte deleted file mode 100644 index d0635d8..0000000 --- a/resources/js/components/ui/command/command-list.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/command-separator.svelte b/resources/js/components/ui/command/command-separator.svelte deleted file mode 100644 index 4c679db..0000000 --- a/resources/js/components/ui/command/command-separator.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/command-shortcut.svelte b/resources/js/components/ui/command/command-shortcut.svelte deleted file mode 100644 index e359b4e..0000000 --- a/resources/js/components/ui/command/command-shortcut.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/command/command.svelte b/resources/js/components/ui/command/command.svelte deleted file mode 100644 index 7973c62..0000000 --- a/resources/js/components/ui/command/command.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/command/index.ts b/resources/js/components/ui/command/index.ts deleted file mode 100644 index d3dbade..0000000 --- a/resources/js/components/ui/command/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Command as CommandPrimitive } from "bits-ui"; - -import Root from "./command.svelte"; -import Dialog from "./command-dialog.svelte"; -import Empty from "./command-empty.svelte"; -import Group from "./command-group.svelte"; -import Item from "./command-item.svelte"; -import Input from "./command-input.svelte"; -import List from "./command-list.svelte"; -import Separator from "./command-separator.svelte"; -import Shortcut from "./command-shortcut.svelte"; -import LinkItem from "./command-link-item.svelte"; - -const Loading = CommandPrimitive.Loading; - -export { - Root, - Dialog, - Empty, - Group, - Item, - LinkItem, - Input, - List, - Separator, - Shortcut, - Loading, - // - Root as Command, - Dialog as CommandDialog, - Empty as CommandEmpty, - Group as CommandGroup, - Item as CommandItem, - LinkItem as CommandLinkItem, - Input as CommandInput, - List as CommandList, - Separator as CommandSeparator, - Shortcut as CommandShortcut, - Loading as CommandLoading, -}; diff --git a/resources/js/components/ui/context-menu/context-menu-checkbox-item.svelte b/resources/js/components/ui/context-menu/context-menu-checkbox-item.svelte deleted file mode 100644 index 8fc3e0b..0000000 --- a/resources/js/components/ui/context-menu/context-menu-checkbox-item.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - - {#snippet children({ checked })} - - {#if checked} - - {/if} - - {@render childrenProp?.()} - {/snippet} - diff --git a/resources/js/components/ui/context-menu/context-menu-content.svelte b/resources/js/components/ui/context-menu/context-menu-content.svelte deleted file mode 100644 index b442b11..0000000 --- a/resources/js/components/ui/context-menu/context-menu-content.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/context-menu/context-menu-group-heading.svelte b/resources/js/components/ui/context-menu/context-menu-group-heading.svelte deleted file mode 100644 index 5785cd9..0000000 --- a/resources/js/components/ui/context-menu/context-menu-group-heading.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-group.svelte b/resources/js/components/ui/context-menu/context-menu-group.svelte deleted file mode 100644 index c7c1e06..0000000 --- a/resources/js/components/ui/context-menu/context-menu-group.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-item.svelte b/resources/js/components/ui/context-menu/context-menu-item.svelte deleted file mode 100644 index 2bbc31b..0000000 --- a/resources/js/components/ui/context-menu/context-menu-item.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-label.svelte b/resources/js/components/ui/context-menu/context-menu-label.svelte deleted file mode 100644 index b1bdd45..0000000 --- a/resources/js/components/ui/context-menu/context-menu-label.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/context-menu/context-menu-radio-group.svelte b/resources/js/components/ui/context-menu/context-menu-radio-group.svelte deleted file mode 100644 index 964cb55..0000000 --- a/resources/js/components/ui/context-menu/context-menu-radio-group.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-radio-item.svelte b/resources/js/components/ui/context-menu/context-menu-radio-item.svelte deleted file mode 100644 index 1125cbb..0000000 --- a/resources/js/components/ui/context-menu/context-menu-radio-item.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {#snippet children({ checked })} - - {#if checked} - - {/if} - - {@render childrenProp?.({ checked })} - {/snippet} - diff --git a/resources/js/components/ui/context-menu/context-menu-separator.svelte b/resources/js/components/ui/context-menu/context-menu-separator.svelte deleted file mode 100644 index 862d765..0000000 --- a/resources/js/components/ui/context-menu/context-menu-separator.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-shortcut.svelte b/resources/js/components/ui/context-menu/context-menu-shortcut.svelte deleted file mode 100644 index 4826a44..0000000 --- a/resources/js/components/ui/context-menu/context-menu-shortcut.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/context-menu/context-menu-sub-content.svelte b/resources/js/components/ui/context-menu/context-menu-sub-content.svelte deleted file mode 100644 index bbbef3d..0000000 --- a/resources/js/components/ui/context-menu/context-menu-sub-content.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/context-menu-sub-trigger.svelte b/resources/js/components/ui/context-menu/context-menu-sub-trigger.svelte deleted file mode 100644 index 71705a7..0000000 --- a/resources/js/components/ui/context-menu/context-menu-sub-trigger.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/context-menu/context-menu-trigger.svelte b/resources/js/components/ui/context-menu/context-menu-trigger.svelte deleted file mode 100644 index 3efa857..0000000 --- a/resources/js/components/ui/context-menu/context-menu-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/context-menu/index.ts b/resources/js/components/ui/context-menu/index.ts deleted file mode 100644 index fce8160..0000000 --- a/resources/js/components/ui/context-menu/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ContextMenu as ContextMenuPrimitive } from "bits-ui"; - -import Trigger from "./context-menu-trigger.svelte"; -import Group from "./context-menu-group.svelte"; -import RadioGroup from "./context-menu-radio-group.svelte"; -import Item from "./context-menu-item.svelte"; -import GroupHeading from "./context-menu-group-heading.svelte"; -import Content from "./context-menu-content.svelte"; -import Shortcut from "./context-menu-shortcut.svelte"; -import RadioItem from "./context-menu-radio-item.svelte"; -import Separator from "./context-menu-separator.svelte"; -import SubContent from "./context-menu-sub-content.svelte"; -import SubTrigger from "./context-menu-sub-trigger.svelte"; -import CheckboxItem from "./context-menu-checkbox-item.svelte"; -import Label from "./context-menu-label.svelte"; -const Sub = ContextMenuPrimitive.Sub; -const Root = ContextMenuPrimitive.Root; - -export { - Sub, - Root, - Item, - GroupHeading, - Label, - Group, - Trigger, - Content, - Shortcut, - Separator, - RadioItem, - SubContent, - SubTrigger, - RadioGroup, - CheckboxItem, - // - Root as ContextMenu, - Sub as ContextMenuSub, - Item as ContextMenuItem, - GroupHeading as ContextMenuGroupHeading, - Group as ContextMenuGroup, - Content as ContextMenuContent, - Trigger as ContextMenuTrigger, - Shortcut as ContextMenuShortcut, - RadioItem as ContextMenuRadioItem, - Separator as ContextMenuSeparator, - RadioGroup as ContextMenuRadioGroup, - SubContent as ContextMenuSubContent, - SubTrigger as ContextMenuSubTrigger, - CheckboxItem as ContextMenuCheckboxItem, - Label as ContextMenuLabel, -}; diff --git a/resources/js/components/ui/data-table/data-table.svelte.ts b/resources/js/components/ui/data-table/data-table.svelte.ts deleted file mode 100644 index 9e0b913..0000000 --- a/resources/js/components/ui/data-table/data-table.svelte.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { - type RowData, - type TableOptions, - type TableOptionsResolved, - type TableState, - createTable, -} from "@tanstack/table-core"; - -/** - * Creates a reactive TanStack table object for Svelte. - * @param options Table options to create the table with. - * @returns A reactive table object. - * @example - * ```svelte - * - * - * - * - * {#each table.getHeaderGroups() as headerGroup} - * - * {#each headerGroup.headers as header} - * - * {/each} - * - * {/each} - * - * - *
    - * - *
    - * ``` - */ -export function createSvelteTable(options: TableOptions) { - const resolvedOptions: TableOptionsResolved = mergeObjects( - { - state: {}, - onStateChange() {}, - renderFallbackValue: null, - mergeOptions: ( - defaultOptions: TableOptions, - options: Partial> - ) => { - return mergeObjects(defaultOptions, options); - }, - }, - options - ); - - const table = createTable(resolvedOptions); - let state = $state>(table.initialState); - - function updateOptions() { - table.setOptions((prev) => { - return mergeObjects(prev, options, { - state: mergeObjects(state, options.state || {}), - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onStateChange: (updater: any) => { - if (updater instanceof Function) state = updater(state); - else state = mergeObjects(state, updater); - - options.onStateChange?.(updater); - }, - }); - }); - } - - updateOptions(); - - $effect.pre(() => { - updateOptions(); - }); - - return table; -} - -type MaybeThunk = T | (() => T | null | undefined); -type Intersection = (T extends [infer H, ...infer R] - ? H & Intersection - : unknown) & {}; - -/** - * Lazily merges several objects (or thunks) while preserving - * getter semantics from every source. - * - * Proxy-based to avoid known WebKit recursion issue. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function mergeObjects[]>( - ...sources: Sources -): Intersection<{ [K in keyof Sources]: Sources[K] }> { - const resolve = (src: MaybeThunk): T | undefined => - typeof src === "function" ? (src() ?? undefined) : src; - - const findSourceWithKey = (key: PropertyKey) => { - for (let i = sources.length - 1; i >= 0; i--) { - const obj = resolve(sources[i]); - if (obj && key in obj) return obj; - } - return undefined; - }; - - return new Proxy(Object.create(null), { - get(_, key) { - const src = findSourceWithKey(key); - - return src?.[key as never]; - }, - - has(_, key) { - return !!findSourceWithKey(key); - }, - - ownKeys(): (string | symbol)[] { - const all = new Set(); - for (const s of sources) { - const obj = resolve(s); - if (obj) { - for (const k of Reflect.ownKeys(obj) as (string | symbol)[]) { - all.add(k); - } - } - } - return [...all]; - }, - - getOwnPropertyDescriptor(_, key) { - const src = findSourceWithKey(key); - if (!src) return undefined; - return { - configurable: true, - enumerable: true, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value: (src as any)[key], - writable: true, - }; - }, - }) as Intersection<{ [K in keyof Sources]: Sources[K] }>; -} diff --git a/resources/js/components/ui/data-table/flex-render.svelte b/resources/js/components/ui/data-table/flex-render.svelte deleted file mode 100644 index 12d2af1..0000000 --- a/resources/js/components/ui/data-table/flex-render.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -{#if typeof content === "string"} - {content} -{:else if content instanceof Function} - - - {@const result = content(context as any)} - {#if result instanceof RenderComponentConfig} - {@const { component: Component, props } = result} - - {:else if result instanceof RenderSnippetConfig} - {@const { snippet, params } = result} - {@render snippet(params)} - {:else} - {result} - {/if} -{/if} diff --git a/resources/js/components/ui/data-table/index.ts b/resources/js/components/ui/data-table/index.ts deleted file mode 100644 index 5f4e77e..0000000 --- a/resources/js/components/ui/data-table/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as FlexRender } from "./flex-render.svelte"; -export { renderComponent, renderSnippet } from "./render-helpers.js"; -export { createSvelteTable } from "./data-table.svelte.js"; diff --git a/resources/js/components/ui/data-table/render-helpers.ts b/resources/js/components/ui/data-table/render-helpers.ts deleted file mode 100644 index fa036d6..0000000 --- a/resources/js/components/ui/data-table/render-helpers.ts +++ /dev/null @@ -1,111 +0,0 @@ -import type { Component, ComponentProps, Snippet } from "svelte"; - -/** - * A helper class to make it easy to identify Svelte components in - * `columnDef.cell` and `columnDef.header` properties. - * - * > NOTE: This class should only be used internally by the adapter. If you're - * reading this and you don't know what this is for, you probably don't need it. - * - * @example - * ```svelte - * {@const result = content(context as any)} - * {#if result instanceof RenderComponentConfig} - * {@const { component: Component, props } = result} - * - * {/if} - * ``` - */ -export class RenderComponentConfig { - component: TComponent; - props: ComponentProps | Record; - constructor( - component: TComponent, - props: ComponentProps | Record = {} - ) { - this.component = component; - this.props = props; - } -} - -/** - * A helper class to make it easy to identify Svelte Snippets in `columnDef.cell` and `columnDef.header` properties. - * - * > NOTE: This class should only be used internally by the adapter. If you're - * reading this and you don't know what this is for, you probably don't need it. - * - * @example - * ```svelte - * {@const result = content(context as any)} - * {#if result instanceof RenderSnippetConfig} - * {@const { snippet, params } = result} - * {@render snippet(params)} - * {/if} - * ``` - */ -export class RenderSnippetConfig { - snippet: Snippet<[TProps]>; - params: TProps; - constructor(snippet: Snippet<[TProps]>, params: TProps) { - this.snippet = snippet; - this.params = params; - } -} - -/** - * A helper function to help create cells from Svelte components through ColumnDef's `cell` and `header` properties. - * - * This is only to be used with Svelte Components - use `renderSnippet` for Svelte Snippets. - * - * @param component A Svelte component - * @param props The props to pass to `component` - * @returns A `RenderComponentConfig` object that helps svelte-table know how to render the header/cell component. - * @example - * ```ts - * // +page.svelte - * const defaultColumns = [ - * columnHelper.accessor('name', { - * header: header => renderComponent(SortHeader, { label: 'Name', header }), - * }), - * columnHelper.accessor('state', { - * header: header => renderComponent(SortHeader, { label: 'State', header }), - * }), - * ] - * ``` - * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs} - */ -export function renderComponent< - // eslint-disable-next-line @typescript-eslint/no-explicit-any - T extends Component, - Props extends ComponentProps, ->(component: T, props: Props = {} as Props) { - return new RenderComponentConfig(component, props); -} - -/** - * A helper function to help create cells from Svelte Snippets through ColumnDef's `cell` and `header` properties. - * - * The snippet must only take one parameter. - * - * This is only to be used with Snippets - use `renderComponent` for Svelte Components. - * - * @param snippet - * @param params - * @returns - A `RenderSnippetConfig` object that helps svelte-table know how to render the header/cell snippet. - * @example - * ```ts - * // +page.svelte - * const defaultColumns = [ - * columnHelper.accessor('name', { - * cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }), - * }), - * columnHelper.accessor('state', { - * cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }), - * }), - * ] - * ``` - * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs} - */ -export function renderSnippet(snippet: Snippet<[TProps]>, params: TProps = {} as TProps) { - return new RenderSnippetConfig(snippet, params); -} diff --git a/resources/js/components/ui/dialog/dialog-close.svelte b/resources/js/components/ui/dialog/dialog-close.svelte deleted file mode 100644 index 840b2f6..0000000 --- a/resources/js/components/ui/dialog/dialog-close.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/dialog-content.svelte b/resources/js/components/ui/dialog/dialog-content.svelte deleted file mode 100644 index 308fab6..0000000 --- a/resources/js/components/ui/dialog/dialog-content.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - {@render children?.()} - - - Close - - - diff --git a/resources/js/components/ui/dialog/dialog-description.svelte b/resources/js/components/ui/dialog/dialog-description.svelte deleted file mode 100644 index 453a278..0000000 --- a/resources/js/components/ui/dialog/dialog-description.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/dialog-footer.svelte b/resources/js/components/ui/dialog/dialog-footer.svelte deleted file mode 100644 index 02ee9ab..0000000 --- a/resources/js/components/ui/dialog/dialog-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/dialog/dialog-header.svelte b/resources/js/components/ui/dialog/dialog-header.svelte deleted file mode 100644 index b4d1b44..0000000 --- a/resources/js/components/ui/dialog/dialog-header.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/dialog/dialog-overlay.svelte b/resources/js/components/ui/dialog/dialog-overlay.svelte deleted file mode 100644 index 6c6851a..0000000 --- a/resources/js/components/ui/dialog/dialog-overlay.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/dialog-title.svelte b/resources/js/components/ui/dialog/dialog-title.svelte deleted file mode 100644 index a2c57ee..0000000 --- a/resources/js/components/ui/dialog/dialog-title.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/dialog-trigger.svelte b/resources/js/components/ui/dialog/dialog-trigger.svelte deleted file mode 100644 index 9d1e801..0000000 --- a/resources/js/components/ui/dialog/dialog-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/dialog/index.ts b/resources/js/components/ui/dialog/index.ts deleted file mode 100644 index dce1d9d..0000000 --- a/resources/js/components/ui/dialog/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Dialog as DialogPrimitive } from "bits-ui"; - -import Title from "./dialog-title.svelte"; -import Footer from "./dialog-footer.svelte"; -import Header from "./dialog-header.svelte"; -import Overlay from "./dialog-overlay.svelte"; -import Content from "./dialog-content.svelte"; -import Description from "./dialog-description.svelte"; -import Trigger from "./dialog-trigger.svelte"; -import Close from "./dialog-close.svelte"; - -const Root = DialogPrimitive.Root; -const Portal = DialogPrimitive.Portal; - -export { - Root, - Title, - Portal, - Footer, - Header, - Trigger, - Overlay, - Content, - Description, - Close, - // - Root as Dialog, - Title as DialogTitle, - Portal as DialogPortal, - Footer as DialogFooter, - Header as DialogHeader, - Trigger as DialogTrigger, - Overlay as DialogOverlay, - Content as DialogContent, - Description as DialogDescription, - Close as DialogClose, -}; diff --git a/resources/js/components/ui/drawer/drawer-close.svelte b/resources/js/components/ui/drawer/drawer-close.svelte deleted file mode 100644 index 95c2479..0000000 --- a/resources/js/components/ui/drawer/drawer-close.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer-content.svelte b/resources/js/components/ui/drawer/drawer-content.svelte deleted file mode 100644 index 5b8c4a8..0000000 --- a/resources/js/components/ui/drawer/drawer-content.svelte +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/drawer/drawer-description.svelte b/resources/js/components/ui/drawer/drawer-description.svelte deleted file mode 100644 index 96ff6b6..0000000 --- a/resources/js/components/ui/drawer/drawer-description.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer-footer.svelte b/resources/js/components/ui/drawer/drawer-footer.svelte deleted file mode 100644 index 6a371f0..0000000 --- a/resources/js/components/ui/drawer/drawer-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/drawer/drawer-header.svelte b/resources/js/components/ui/drawer/drawer-header.svelte deleted file mode 100644 index 0ea6510..0000000 --- a/resources/js/components/ui/drawer/drawer-header.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/drawer/drawer-nested.svelte b/resources/js/components/ui/drawer/drawer-nested.svelte deleted file mode 100644 index 834af94..0000000 --- a/resources/js/components/ui/drawer/drawer-nested.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer-overlay.svelte b/resources/js/components/ui/drawer/drawer-overlay.svelte deleted file mode 100644 index d15efa4..0000000 --- a/resources/js/components/ui/drawer/drawer-overlay.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer-title.svelte b/resources/js/components/ui/drawer/drawer-title.svelte deleted file mode 100644 index bcec24d..0000000 --- a/resources/js/components/ui/drawer/drawer-title.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer-trigger.svelte b/resources/js/components/ui/drawer/drawer-trigger.svelte deleted file mode 100644 index f1877d8..0000000 --- a/resources/js/components/ui/drawer/drawer-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/drawer.svelte b/resources/js/components/ui/drawer/drawer.svelte deleted file mode 100644 index 0cb57ff..0000000 --- a/resources/js/components/ui/drawer/drawer.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/drawer/index.ts b/resources/js/components/ui/drawer/index.ts deleted file mode 100644 index cfbdb8b..0000000 --- a/resources/js/components/ui/drawer/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Drawer as DrawerPrimitive } from "vaul-svelte"; - -import Root from "./drawer.svelte"; -import Content from "./drawer-content.svelte"; -import Description from "./drawer-description.svelte"; -import Overlay from "./drawer-overlay.svelte"; -import Footer from "./drawer-footer.svelte"; -import Header from "./drawer-header.svelte"; -import Title from "./drawer-title.svelte"; -import NestedRoot from "./drawer-nested.svelte"; -import Close from "./drawer-close.svelte"; -import Trigger from "./drawer-trigger.svelte"; - -const Portal: typeof DrawerPrimitive.Portal = DrawerPrimitive.Portal; - -export { - Root, - NestedRoot, - Content, - Description, - Overlay, - Footer, - Header, - Title, - Trigger, - Portal, - Close, - - // - Root as Drawer, - NestedRoot as DrawerNestedRoot, - Content as DrawerContent, - Description as DrawerDescription, - Overlay as DrawerOverlay, - Footer as DrawerFooter, - Header as DrawerHeader, - Title as DrawerTitle, - Trigger as DrawerTrigger, - Portal as DrawerPortal, - Close as DrawerClose, -}; diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte deleted file mode 100644 index bb27759..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - - - {#snippet children({ checked, indeterminate })} - - {#if indeterminate} - - {:else} - - {/if} - - {@render childrenProp?.()} - {/snippet} - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-content.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-content.svelte deleted file mode 100644 index b3b9f1b..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-content.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte deleted file mode 100644 index b599686..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-group.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-group.svelte deleted file mode 100644 index aca1f7b..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-group.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-item.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-item.svelte deleted file mode 100644 index bf65785..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-item.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-label.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-label.svelte deleted file mode 100644 index 252791e..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-label.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte deleted file mode 100644 index 189aef4..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte deleted file mode 100644 index fd6c475..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {#snippet children({ checked })} - - {#if checked} - - {/if} - - {@render childrenProp?.({ checked })} - {/snippet} - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-separator.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-separator.svelte deleted file mode 100644 index ec7cbd0..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-separator.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte deleted file mode 100644 index c7a8787..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte deleted file mode 100644 index d6ed446..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte deleted file mode 100644 index 5fd7ba3..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/dropdown-menu/dropdown-menu-trigger.svelte b/resources/js/components/ui/dropdown-menu/dropdown-menu-trigger.svelte deleted file mode 100644 index cb05344..0000000 --- a/resources/js/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/dropdown-menu/index.ts b/resources/js/components/ui/dropdown-menu/index.ts deleted file mode 100644 index 1cf9f70..0000000 --- a/resources/js/components/ui/dropdown-menu/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; -import CheckboxItem from "./dropdown-menu-checkbox-item.svelte"; -import Content from "./dropdown-menu-content.svelte"; -import Group from "./dropdown-menu-group.svelte"; -import Item from "./dropdown-menu-item.svelte"; -import Label from "./dropdown-menu-label.svelte"; -import RadioGroup from "./dropdown-menu-radio-group.svelte"; -import RadioItem from "./dropdown-menu-radio-item.svelte"; -import Separator from "./dropdown-menu-separator.svelte"; -import Shortcut from "./dropdown-menu-shortcut.svelte"; -import Trigger from "./dropdown-menu-trigger.svelte"; -import SubContent from "./dropdown-menu-sub-content.svelte"; -import SubTrigger from "./dropdown-menu-sub-trigger.svelte"; -import GroupHeading from "./dropdown-menu-group-heading.svelte"; -const Sub = DropdownMenuPrimitive.Sub; -const Root = DropdownMenuPrimitive.Root; - -export { - CheckboxItem, - Content, - Root as DropdownMenu, - CheckboxItem as DropdownMenuCheckboxItem, - Content as DropdownMenuContent, - Group as DropdownMenuGroup, - Item as DropdownMenuItem, - Label as DropdownMenuLabel, - RadioGroup as DropdownMenuRadioGroup, - RadioItem as DropdownMenuRadioItem, - Separator as DropdownMenuSeparator, - Shortcut as DropdownMenuShortcut, - Sub as DropdownMenuSub, - SubContent as DropdownMenuSubContent, - SubTrigger as DropdownMenuSubTrigger, - Trigger as DropdownMenuTrigger, - GroupHeading as DropdownMenuGroupHeading, - Group, - GroupHeading, - Item, - Label, - RadioGroup, - RadioItem, - Root, - Separator, - Shortcut, - Sub, - SubContent, - SubTrigger, - Trigger, -}; diff --git a/resources/js/components/ui/form/form-button.svelte b/resources/js/components/ui/form/form-button.svelte deleted file mode 100644 index a52b038..0000000 --- a/resources/js/components/ui/form/form-button.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/form/form-description.svelte b/resources/js/components/ui/form/form-description.svelte deleted file mode 100644 index 91719b0..0000000 --- a/resources/js/components/ui/form/form-description.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/form/form-element-field.svelte b/resources/js/components/ui/form/form-element-field.svelte deleted file mode 100644 index 45d800b..0000000 --- a/resources/js/components/ui/form/form-element-field.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - {#snippet children({ constraints, errors, tainted, value })} -
    - {@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })} -
    - {/snippet} -
    diff --git a/resources/js/components/ui/form/form-field-errors.svelte b/resources/js/components/ui/form/form-field-errors.svelte deleted file mode 100644 index f3c88bf..0000000 --- a/resources/js/components/ui/form/form-field-errors.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - - {#snippet children({ errors, errorProps })} - {#if childrenProp} - {@render childrenProp({ errors, errorProps })} - {:else} - {#each errors as error (error)} -
    {error}
    - {/each} - {/if} - {/snippet} -
    diff --git a/resources/js/components/ui/form/form-field.svelte b/resources/js/components/ui/form/form-field.svelte deleted file mode 100644 index 877c410..0000000 --- a/resources/js/components/ui/form/form-field.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {#snippet children({ constraints, errors, tainted, value })} -
    - {@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })} -
    - {/snippet} -
    diff --git a/resources/js/components/ui/form/form-fieldset.svelte b/resources/js/components/ui/form/form-fieldset.svelte deleted file mode 100644 index 4db35b1..0000000 --- a/resources/js/components/ui/form/form-fieldset.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/resources/js/components/ui/form/form-label.svelte b/resources/js/components/ui/form/form-label.svelte deleted file mode 100644 index a6ac8c3..0000000 --- a/resources/js/components/ui/form/form-label.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - {#snippet child({ props })} - - {/snippet} - diff --git a/resources/js/components/ui/form/form-legend.svelte b/resources/js/components/ui/form/form-legend.svelte deleted file mode 100644 index 6d10d59..0000000 --- a/resources/js/components/ui/form/form-legend.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/form/index.ts b/resources/js/components/ui/form/index.ts deleted file mode 100644 index 0713927..0000000 --- a/resources/js/components/ui/form/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import * as FormPrimitive from "formsnap"; -import Description from "./form-description.svelte"; -import Label from "./form-label.svelte"; -import FieldErrors from "./form-field-errors.svelte"; -import Field from "./form-field.svelte"; -import Fieldset from "./form-fieldset.svelte"; -import Legend from "./form-legend.svelte"; -import ElementField from "./form-element-field.svelte"; -import Button from "./form-button.svelte"; - -const Control = FormPrimitive.Control; - -export { - Field, - Control, - Label, - Button, - FieldErrors, - Description, - Fieldset, - Legend, - ElementField, - // - Field as FormField, - Control as FormControl, - Description as FormDescription, - Label as FormLabel, - FieldErrors as FormFieldErrors, - Fieldset as FormFieldset, - Legend as FormLegend, - ElementField as FormElementField, - Button as FormButton, -}; diff --git a/resources/js/components/ui/hover-card/hover-card-content.svelte b/resources/js/components/ui/hover-card/hover-card-content.svelte deleted file mode 100644 index 35d1a64..0000000 --- a/resources/js/components/ui/hover-card/hover-card-content.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/hover-card/hover-card-trigger.svelte b/resources/js/components/ui/hover-card/hover-card-trigger.svelte deleted file mode 100644 index 322172b..0000000 --- a/resources/js/components/ui/hover-card/hover-card-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/hover-card/index.ts b/resources/js/components/ui/hover-card/index.ts deleted file mode 100644 index 85f3949..0000000 --- a/resources/js/components/ui/hover-card/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { LinkPreview as HoverCardPrimitive } from "bits-ui"; -import Content from "./hover-card-content.svelte"; -import Trigger from "./hover-card-trigger.svelte"; - -const Root = HoverCardPrimitive.Root; - -export { - Root, - Content, - Trigger, - Root as HoverCard, - Content as HoverCardContent, - Trigger as HoverCardTrigger, -}; diff --git a/resources/js/components/ui/input-otp/index.ts b/resources/js/components/ui/input-otp/index.ts deleted file mode 100644 index e9ae273..0000000 --- a/resources/js/components/ui/input-otp/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Root from "./input-otp.svelte"; -import Group from "./input-otp-group.svelte"; -import Slot from "./input-otp-slot.svelte"; -import Separator from "./input-otp-separator.svelte"; - -export { - Root, - Group, - Slot, - Separator, - Root as InputOTP, - Group as InputOTPGroup, - Slot as InputOTPSlot, - Separator as InputOTPSeparator, -}; diff --git a/resources/js/components/ui/input-otp/input-otp-group.svelte b/resources/js/components/ui/input-otp/input-otp-group.svelte deleted file mode 100644 index 9e6cd09..0000000 --- a/resources/js/components/ui/input-otp/input-otp-group.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/input-otp/input-otp-separator.svelte b/resources/js/components/ui/input-otp/input-otp-separator.svelte deleted file mode 100644 index 2e694eb..0000000 --- a/resources/js/components/ui/input-otp/input-otp-separator.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - -
    - {#if children} - {@render children?.()} - {:else} - - {/if} -
    diff --git a/resources/js/components/ui/input-otp/input-otp-slot.svelte b/resources/js/components/ui/input-otp/input-otp-slot.svelte deleted file mode 100644 index eb5631a..0000000 --- a/resources/js/components/ui/input-otp/input-otp-slot.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {cell.char} - {#if cell.hasFakeCaret} -
    - -
    - {/if} -
    diff --git a/resources/js/components/ui/input-otp/input-otp.svelte b/resources/js/components/ui/input-otp/input-otp.svelte deleted file mode 100644 index 25e7053..0000000 --- a/resources/js/components/ui/input-otp/input-otp.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/input/index.ts b/resources/js/components/ui/input/index.ts deleted file mode 100644 index f47b6d3..0000000 --- a/resources/js/components/ui/input/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./input.svelte"; - -export { - Root, - // - Root as Input, -}; diff --git a/resources/js/components/ui/input/input.svelte b/resources/js/components/ui/input/input.svelte deleted file mode 100644 index 298ab6f..0000000 --- a/resources/js/components/ui/input/input.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - -{#if type === "file"} - -{:else} - -{/if} diff --git a/resources/js/components/ui/label/index.ts b/resources/js/components/ui/label/index.ts deleted file mode 100644 index 8bfca0b..0000000 --- a/resources/js/components/ui/label/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./label.svelte"; - -export { - Root, - // - Root as Label, -}; diff --git a/resources/js/components/ui/label/label.svelte b/resources/js/components/ui/label/label.svelte deleted file mode 100644 index 62d9e7d..0000000 --- a/resources/js/components/ui/label/label.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/index.ts b/resources/js/components/ui/menubar/index.ts deleted file mode 100644 index 57a6cfb..0000000 --- a/resources/js/components/ui/menubar/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Menubar as MenubarPrimitive } from "bits-ui"; -import Root from "./menubar.svelte"; -import CheckboxItem from "./menubar-checkbox-item.svelte"; -import Content from "./menubar-content.svelte"; -import Item from "./menubar-item.svelte"; -import Group from "./menubar-group.svelte"; -import RadioItem from "./menubar-radio-item.svelte"; -import Separator from "./menubar-separator.svelte"; -import Shortcut from "./menubar-shortcut.svelte"; -import SubContent from "./menubar-sub-content.svelte"; -import SubTrigger from "./menubar-sub-trigger.svelte"; -import Trigger from "./menubar-trigger.svelte"; -import Label from "./menubar-label.svelte"; -import GroupHeading from "./menubar-group-heading.svelte"; - -const Menu = MenubarPrimitive.Menu; -const Sub = MenubarPrimitive.Sub; -const RadioGroup = MenubarPrimitive.RadioGroup; - -export { - Root, - CheckboxItem, - Content, - Item, - RadioItem, - Separator, - Shortcut, - SubContent, - SubTrigger, - Trigger, - Menu, - Group, - Sub, - RadioGroup, - Label, - GroupHeading, - // - Root as Menubar, - CheckboxItem as MenubarCheckboxItem, - Content as MenubarContent, - Item as MenubarItem, - RadioItem as MenubarRadioItem, - Separator as MenubarSeparator, - Shortcut as MenubarShortcut, - SubContent as MenubarSubContent, - SubTrigger as MenubarSubTrigger, - Trigger as MenubarTrigger, - Menu as MenubarMenu, - Group as MenubarGroup, - Sub as MenubarSub, - RadioGroup as MenubarRadioGroup, - Label as MenubarLabel, - GroupHeading as MenubarGroupHeading, -}; diff --git a/resources/js/components/ui/menubar/menubar-checkbox-item.svelte b/resources/js/components/ui/menubar/menubar-checkbox-item.svelte deleted file mode 100644 index e5a4d1e..0000000 --- a/resources/js/components/ui/menubar/menubar-checkbox-item.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - - - {#snippet children({ checked, indeterminate })} - - {#if indeterminate} - - {:else} - - {/if} - - {@render childrenProp?.()} - {/snippet} - diff --git a/resources/js/components/ui/menubar/menubar-content.svelte b/resources/js/components/ui/menubar/menubar-content.svelte deleted file mode 100644 index 0d31bc8..0000000 --- a/resources/js/components/ui/menubar/menubar-content.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/menubar/menubar-group-heading.svelte b/resources/js/components/ui/menubar/menubar-group-heading.svelte deleted file mode 100644 index cbf60d6..0000000 --- a/resources/js/components/ui/menubar/menubar-group-heading.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar-group.svelte b/resources/js/components/ui/menubar/menubar-group.svelte deleted file mode 100644 index f75b75a..0000000 --- a/resources/js/components/ui/menubar/menubar-group.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar-item.svelte b/resources/js/components/ui/menubar/menubar-item.svelte deleted file mode 100644 index 39bdabd..0000000 --- a/resources/js/components/ui/menubar/menubar-item.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar-label.svelte b/resources/js/components/ui/menubar/menubar-label.svelte deleted file mode 100644 index b059745..0000000 --- a/resources/js/components/ui/menubar/menubar-label.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/menubar/menubar-radio-item.svelte b/resources/js/components/ui/menubar/menubar-radio-item.svelte deleted file mode 100644 index 6cdd0ae..0000000 --- a/resources/js/components/ui/menubar/menubar-radio-item.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {#snippet children({ checked })} - - {#if checked} - - {/if} - - {@render childrenProp?.({ checked })} - {/snippet} - diff --git a/resources/js/components/ui/menubar/menubar-separator.svelte b/resources/js/components/ui/menubar/menubar-separator.svelte deleted file mode 100644 index b78b868..0000000 --- a/resources/js/components/ui/menubar/menubar-separator.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar-shortcut.svelte b/resources/js/components/ui/menubar/menubar-shortcut.svelte deleted file mode 100644 index 96bb2bc..0000000 --- a/resources/js/components/ui/menubar/menubar-shortcut.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/menubar/menubar-sub-content.svelte b/resources/js/components/ui/menubar/menubar-sub-content.svelte deleted file mode 100644 index 863661a..0000000 --- a/resources/js/components/ui/menubar/menubar-sub-content.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar-sub-trigger.svelte b/resources/js/components/ui/menubar/menubar-sub-trigger.svelte deleted file mode 100644 index 9f2d24a..0000000 --- a/resources/js/components/ui/menubar/menubar-sub-trigger.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/menubar/menubar-trigger.svelte b/resources/js/components/ui/menubar/menubar-trigger.svelte deleted file mode 100644 index 2b42c6f..0000000 --- a/resources/js/components/ui/menubar/menubar-trigger.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/menubar/menubar.svelte b/resources/js/components/ui/menubar/menubar.svelte deleted file mode 100644 index 984513a..0000000 --- a/resources/js/components/ui/menubar/menubar.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/navigation-menu/index.ts b/resources/js/components/ui/navigation-menu/index.ts deleted file mode 100644 index bbc250f..0000000 --- a/resources/js/components/ui/navigation-menu/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Root from "./navigation-menu.svelte"; -import Content from "./navigation-menu-content.svelte"; -import Indicator from "./navigation-menu-indicator.svelte"; -import Item from "./navigation-menu-item.svelte"; -import Link from "./navigation-menu-link.svelte"; -import List from "./navigation-menu-list.svelte"; -import Trigger from "./navigation-menu-trigger.svelte"; -import Viewport from "./navigation-menu-viewport.svelte"; - -export { - Root, - Content, - Indicator, - Item, - Link, - List, - Trigger, - Viewport, - // - Root as NavigationMenuRoot, - Content as NavigationMenuContent, - Indicator as NavigationMenuIndicator, - Item as NavigationMenuItem, - Link as NavigationMenuLink, - List as NavigationMenuList, - Trigger as NavigationMenuTrigger, - Viewport as NavigationMenuViewport, -}; diff --git a/resources/js/components/ui/navigation-menu/navigation-menu-content.svelte b/resources/js/components/ui/navigation-menu/navigation-menu-content.svelte deleted file mode 100644 index 4993683..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu-content.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/navigation-menu/navigation-menu-indicator.svelte b/resources/js/components/ui/navigation-menu/navigation-menu-indicator.svelte deleted file mode 100644 index 2769046..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu-indicator.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - -
    -
    diff --git a/resources/js/components/ui/navigation-menu/navigation-menu-item.svelte b/resources/js/components/ui/navigation-menu/navigation-menu-item.svelte deleted file mode 100644 index c682f5b..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu-item.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/navigation-menu/navigation-menu-list.svelte b/resources/js/components/ui/navigation-menu/navigation-menu-list.svelte deleted file mode 100644 index 0f4670c..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu-list.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/navigation-menu/navigation-menu-trigger.svelte b/resources/js/components/ui/navigation-menu/navigation-menu-trigger.svelte deleted file mode 100644 index 84fa4a9..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu-trigger.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/navigation-menu/navigation-menu.svelte b/resources/js/components/ui/navigation-menu/navigation-menu.svelte deleted file mode 100644 index 5b1a6e2..0000000 --- a/resources/js/components/ui/navigation-menu/navigation-menu.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - {@render children?.()} - - {#if viewport} - - {/if} - diff --git a/resources/js/components/ui/pagination/index.ts b/resources/js/components/ui/pagination/index.ts deleted file mode 100644 index d83c7a9..0000000 --- a/resources/js/components/ui/pagination/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Root from "./pagination.svelte"; -import Content from "./pagination-content.svelte"; -import Item from "./pagination-item.svelte"; -import Link from "./pagination-link.svelte"; -import PrevButton from "./pagination-prev-button.svelte"; -import NextButton from "./pagination-next-button.svelte"; -import Ellipsis from "./pagination-ellipsis.svelte"; - -export { - Root, - Content, - Item, - Link, - PrevButton, - NextButton, - Ellipsis, - // - Root as Pagination, - Content as PaginationContent, - Item as PaginationItem, - Link as PaginationLink, - PrevButton as PaginationPrevButton, - NextButton as PaginationNextButton, - Ellipsis as PaginationEllipsis, -}; diff --git a/resources/js/components/ui/pagination/pagination-content.svelte b/resources/js/components/ui/pagination/pagination-content.svelte deleted file mode 100644 index 90f4d46..0000000 --- a/resources/js/components/ui/pagination/pagination-content.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
      - {@render children?.()} -
    diff --git a/resources/js/components/ui/pagination/pagination-ellipsis.svelte b/resources/js/components/ui/pagination/pagination-ellipsis.svelte deleted file mode 100644 index 8ccdca2..0000000 --- a/resources/js/components/ui/pagination/pagination-ellipsis.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/pagination/pagination-item.svelte b/resources/js/components/ui/pagination/pagination-item.svelte deleted file mode 100644 index 3190972..0000000 --- a/resources/js/components/ui/pagination/pagination-item.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -
  • - {@render children?.()} -
  • diff --git a/resources/js/components/ui/pagination/pagination-link.svelte b/resources/js/components/ui/pagination/pagination-link.svelte deleted file mode 100644 index 554bef3..0000000 --- a/resources/js/components/ui/pagination/pagination-link.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - -{#snippet Fallback()} - {page.value} -{/snippet} - - diff --git a/resources/js/components/ui/pagination/pagination.svelte b/resources/js/components/ui/pagination/pagination.svelte deleted file mode 100644 index 43aa85f..0000000 --- a/resources/js/components/ui/pagination/pagination.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/resources/js/components/ui/popover/popover-content.svelte b/resources/js/components/ui/popover/popover-content.svelte deleted file mode 100644 index cf18722..0000000 --- a/resources/js/components/ui/popover/popover-content.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/popover/popover-trigger.svelte b/resources/js/components/ui/popover/popover-trigger.svelte deleted file mode 100644 index d043be2..0000000 --- a/resources/js/components/ui/popover/popover-trigger.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/progress/index.ts b/resources/js/components/ui/progress/index.ts deleted file mode 100644 index 25eee61..0000000 --- a/resources/js/components/ui/progress/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./progress.svelte"; - -export { - Root, - // - Root as Progress, -}; diff --git a/resources/js/components/ui/progress/progress.svelte b/resources/js/components/ui/progress/progress.svelte deleted file mode 100644 index 9b67ad0..0000000 --- a/resources/js/components/ui/progress/progress.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - -
    -
    diff --git a/resources/js/components/ui/radio-group/index.ts b/resources/js/components/ui/radio-group/index.ts deleted file mode 100644 index 90b33fe..0000000 --- a/resources/js/components/ui/radio-group/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Root from "./radio-group.svelte"; -import Item from "./radio-group-item.svelte"; - -export { - Root, - Item, - // - Root as RadioGroup, - Item as RadioGroupItem, -}; diff --git a/resources/js/components/ui/radio-group/radio-group-item.svelte b/resources/js/components/ui/radio-group/radio-group-item.svelte deleted file mode 100644 index 2cc57bf..0000000 --- a/resources/js/components/ui/radio-group/radio-group-item.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {#snippet children({ checked })} -
    - {#if checked} - - {/if} -
    - {/snippet} -
    diff --git a/resources/js/components/ui/radio-group/radio-group.svelte b/resources/js/components/ui/radio-group/radio-group.svelte deleted file mode 100644 index b7b93d6..0000000 --- a/resources/js/components/ui/radio-group/radio-group.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/index.ts b/resources/js/components/ui/range-calendar/index.ts deleted file mode 100644 index d949b05..0000000 --- a/resources/js/components/ui/range-calendar/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui"; -import Root from "./range-calendar.svelte"; -import Cell from "./range-calendar-cell.svelte"; -import Day from "./range-calendar-day.svelte"; -import Grid from "./range-calendar-grid.svelte"; -import Header from "./range-calendar-header.svelte"; -import Months from "./range-calendar-months.svelte"; -import GridRow from "./range-calendar-grid-row.svelte"; -import Heading from "./range-calendar-heading.svelte"; -import HeadCell from "./range-calendar-head-cell.svelte"; -import NextButton from "./range-calendar-next-button.svelte"; -import PrevButton from "./range-calendar-prev-button.svelte"; - -const GridHead = RangeCalendarPrimitive.GridHead; -const GridBody = RangeCalendarPrimitive.GridBody; - -export { - Day, - Cell, - Grid, - Header, - Months, - GridRow, - Heading, - GridBody, - GridHead, - HeadCell, - NextButton, - PrevButton, - // - Root as RangeCalendar, -}; diff --git a/resources/js/components/ui/range-calendar/range-calendar-cell.svelte b/resources/js/components/ui/range-calendar/range-calendar-cell.svelte deleted file mode 100644 index 7f41b3a..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-cell.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-day.svelte b/resources/js/components/ui/range-calendar/range-calendar-day.svelte deleted file mode 100644 index 85cfaf0..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-day.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-grid-row.svelte b/resources/js/components/ui/range-calendar/range-calendar-grid-row.svelte deleted file mode 100644 index 88318f7..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-grid-row.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-grid.svelte b/resources/js/components/ui/range-calendar/range-calendar-grid.svelte deleted file mode 100644 index 8e2640b..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-grid.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-head-cell.svelte b/resources/js/components/ui/range-calendar/range-calendar-head-cell.svelte deleted file mode 100644 index 5d3f6ab..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-head-cell.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-header.svelte b/resources/js/components/ui/range-calendar/range-calendar-header.svelte deleted file mode 100644 index 1fe8767..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-header.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-heading.svelte b/resources/js/components/ui/range-calendar/range-calendar-heading.svelte deleted file mode 100644 index 1bdf5d3..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-heading.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-months.svelte b/resources/js/components/ui/range-calendar/range-calendar-months.svelte deleted file mode 100644 index cf702f5..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-months.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/range-calendar/range-calendar-next-button.svelte b/resources/js/components/ui/range-calendar/range-calendar-next-button.svelte deleted file mode 100644 index b963da7..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-next-button.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -{#snippet Fallback()} - -{/snippet} - - diff --git a/resources/js/components/ui/range-calendar/range-calendar-prev-button.svelte b/resources/js/components/ui/range-calendar/range-calendar-prev-button.svelte deleted file mode 100644 index 3ad15ac..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar-prev-button.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -{#snippet Fallback()} - -{/snippet} - - diff --git a/resources/js/components/ui/range-calendar/range-calendar.svelte b/resources/js/components/ui/range-calendar/range-calendar.svelte deleted file mode 100644 index 0f7073a..0000000 --- a/resources/js/components/ui/range-calendar/range-calendar.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - - - {#snippet children({ months, weekdays })} - - - - - - - {#each months as month (month)} - - - - {#each weekdays as weekday (weekday)} - - {weekday.slice(0, 2)} - - {/each} - - - - {#each month.weeks as weekDates (weekDates)} - - {#each weekDates as date (date)} - - - - {/each} - - {/each} - - - {/each} - - {/snippet} - diff --git a/resources/js/components/ui/resizable/index.ts b/resources/js/components/ui/resizable/index.ts deleted file mode 100644 index 2e37f11..0000000 --- a/resources/js/components/ui/resizable/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Pane } from "paneforge"; -import Handle from "./resizable-handle.svelte"; -import PaneGroup from "./resizable-pane-group.svelte"; - -export { - PaneGroup, - Pane, - Handle, - // - PaneGroup as ResizablePaneGroup, - Pane as ResizablePane, - Handle as ResizableHandle, -}; diff --git a/resources/js/components/ui/resizable/resizable-handle.svelte b/resources/js/components/ui/resizable/resizable-handle.svelte deleted file mode 100644 index 149a842..0000000 --- a/resources/js/components/ui/resizable/resizable-handle.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - -div]:rotate-90", - className - )} - {...restProps} -> - {#if withHandle} -
    - -
    - {/if} -
    diff --git a/resources/js/components/ui/resizable/resizable-pane-group.svelte b/resources/js/components/ui/resizable/resizable-pane-group.svelte deleted file mode 100644 index eaa6f5e..0000000 --- a/resources/js/components/ui/resizable/resizable-pane-group.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/scroll-area/index.ts b/resources/js/components/ui/scroll-area/index.ts deleted file mode 100644 index e86a25b..0000000 --- a/resources/js/components/ui/scroll-area/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Scrollbar from "./scroll-area-scrollbar.svelte"; -import Root from "./scroll-area.svelte"; - -export { - Root, - Scrollbar, - //, - Root as ScrollArea, - Scrollbar as ScrollAreaScrollbar, -}; diff --git a/resources/js/components/ui/scroll-area/scroll-area-scrollbar.svelte b/resources/js/components/ui/scroll-area/scroll-area-scrollbar.svelte deleted file mode 100644 index 5cb03a7..0000000 --- a/resources/js/components/ui/scroll-area/scroll-area-scrollbar.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/scroll-area/scroll-area.svelte b/resources/js/components/ui/scroll-area/scroll-area.svelte deleted file mode 100644 index 5895c07..0000000 --- a/resources/js/components/ui/scroll-area/scroll-area.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {@render children?.()} - - {#if orientation === "vertical" || orientation === "both"} - - {/if} - {#if orientation === "horizontal" || orientation === "both"} - - {/if} - - diff --git a/resources/js/components/ui/select/index.ts b/resources/js/components/ui/select/index.ts deleted file mode 100644 index 257e322..0000000 --- a/resources/js/components/ui/select/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Select as SelectPrimitive } from "bits-ui"; - -import Group from "./select-group.svelte"; -import Label from "./select-label.svelte"; -import Item from "./select-item.svelte"; -import Content from "./select-content.svelte"; -import Trigger from "./select-trigger.svelte"; -import Separator from "./select-separator.svelte"; -import ScrollDownButton from "./select-scroll-down-button.svelte"; -import ScrollUpButton from "./select-scroll-up-button.svelte"; - -const Root = SelectPrimitive.Root; - -export { - Root, - Group, - Label, - Item, - Content, - Trigger, - Separator, - ScrollDownButton, - ScrollUpButton, - // - Root as Select, - Group as SelectGroup, - Label as SelectLabel, - Item as SelectItem, - Content as SelectContent, - Trigger as SelectTrigger, - Separator as SelectSeparator, - ScrollDownButton as SelectScrollDownButton, - ScrollUpButton as SelectScrollUpButton, -}; diff --git a/resources/js/components/ui/select/select-content.svelte b/resources/js/components/ui/select/select-content.svelte deleted file mode 100644 index e760ff4..0000000 --- a/resources/js/components/ui/select/select-content.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - {@render children?.()} - - - - diff --git a/resources/js/components/ui/select/select-group.svelte b/resources/js/components/ui/select/select-group.svelte deleted file mode 100644 index 5454fdb..0000000 --- a/resources/js/components/ui/select/select-group.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/select/select-item.svelte b/resources/js/components/ui/select/select-item.svelte deleted file mode 100644 index b65d249..0000000 --- a/resources/js/components/ui/select/select-item.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - - {#snippet children({ selected, highlighted })} - - {#if selected} - - {/if} - - {#if childrenProp} - {@render childrenProp({ selected, highlighted })} - {:else} - {label || value} - {/if} - {/snippet} - diff --git a/resources/js/components/ui/select/select-label.svelte b/resources/js/components/ui/select/select-label.svelte deleted file mode 100644 index ab773c4..0000000 --- a/resources/js/components/ui/select/select-label.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/select/select-scroll-down-button.svelte b/resources/js/components/ui/select/select-scroll-down-button.svelte deleted file mode 100644 index 62295e4..0000000 --- a/resources/js/components/ui/select/select-scroll-down-button.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/select/select-scroll-up-button.svelte b/resources/js/components/ui/select/select-scroll-up-button.svelte deleted file mode 100644 index 58a5379..0000000 --- a/resources/js/components/ui/select/select-scroll-up-button.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/select/select-separator.svelte b/resources/js/components/ui/select/select-separator.svelte deleted file mode 100644 index 503e3b5..0000000 --- a/resources/js/components/ui/select/select-separator.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/resources/js/components/ui/select/select-trigger.svelte b/resources/js/components/ui/select/select-trigger.svelte deleted file mode 100644 index a9527b3..0000000 --- a/resources/js/components/ui/select/select-trigger.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - {@render children?.()} - - diff --git a/resources/js/components/ui/separator/index.ts b/resources/js/components/ui/separator/index.ts deleted file mode 100644 index 82442d2..0000000 --- a/resources/js/components/ui/separator/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./separator.svelte"; - -export { - Root, - // - Root as Separator, -}; diff --git a/resources/js/components/ui/separator/separator.svelte b/resources/js/components/ui/separator/separator.svelte deleted file mode 100644 index 10a5c7b..0000000 --- a/resources/js/components/ui/separator/separator.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/index.ts b/resources/js/components/ui/sheet/index.ts deleted file mode 100644 index 01d40c8..0000000 --- a/resources/js/components/ui/sheet/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dialog as SheetPrimitive } from "bits-ui"; -import Trigger from "./sheet-trigger.svelte"; -import Close from "./sheet-close.svelte"; -import Overlay from "./sheet-overlay.svelte"; -import Content from "./sheet-content.svelte"; -import Header from "./sheet-header.svelte"; -import Footer from "./sheet-footer.svelte"; -import Title from "./sheet-title.svelte"; -import Description from "./sheet-description.svelte"; - -const Root = SheetPrimitive.Root; -const Portal = SheetPrimitive.Portal; - -export { - Root, - Close, - Trigger, - Portal, - Overlay, - Content, - Header, - Footer, - Title, - Description, - // - Root as Sheet, - Close as SheetClose, - Trigger as SheetTrigger, - Portal as SheetPortal, - Overlay as SheetOverlay, - Content as SheetContent, - Header as SheetHeader, - Footer as SheetFooter, - Title as SheetTitle, - Description as SheetDescription, -}; diff --git a/resources/js/components/ui/sheet/sheet-close.svelte b/resources/js/components/ui/sheet/sheet-close.svelte deleted file mode 100644 index ae382c1..0000000 --- a/resources/js/components/ui/sheet/sheet-close.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/sheet-content.svelte b/resources/js/components/ui/sheet/sheet-content.svelte deleted file mode 100644 index e9b4744..0000000 --- a/resources/js/components/ui/sheet/sheet-content.svelte +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - {@render children?.()} - - - Close - - - diff --git a/resources/js/components/ui/sheet/sheet-description.svelte b/resources/js/components/ui/sheet/sheet-description.svelte deleted file mode 100644 index ed997b5..0000000 --- a/resources/js/components/ui/sheet/sheet-description.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/sheet-footer.svelte b/resources/js/components/ui/sheet/sheet-footer.svelte deleted file mode 100644 index 0bbcd86..0000000 --- a/resources/js/components/ui/sheet/sheet-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sheet/sheet-header.svelte b/resources/js/components/ui/sheet/sheet-header.svelte deleted file mode 100644 index f60e71c..0000000 --- a/resources/js/components/ui/sheet/sheet-header.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sheet/sheet-overlay.svelte b/resources/js/components/ui/sheet/sheet-overlay.svelte deleted file mode 100644 index fa8c95e..0000000 --- a/resources/js/components/ui/sheet/sheet-overlay.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/sheet-title.svelte b/resources/js/components/ui/sheet/sheet-title.svelte deleted file mode 100644 index 8292cd5..0000000 --- a/resources/js/components/ui/sheet/sheet-title.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/sheet/sheet-trigger.svelte b/resources/js/components/ui/sheet/sheet-trigger.svelte deleted file mode 100644 index e266975..0000000 --- a/resources/js/components/ui/sheet/sheet-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/constants.ts b/resources/js/components/ui/sidebar/constants.ts deleted file mode 100644 index 1347e83..0000000 --- a/resources/js/components/ui/sidebar/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const SIDEBAR_COOKIE_NAME = "sidebar_state"; -export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; -export const SIDEBAR_WIDTH = "16rem"; -export const SIDEBAR_WIDTH_MOBILE = "18rem"; -export const SIDEBAR_WIDTH_ICON = "3rem"; -export const SIDEBAR_KEYBOARD_SHORTCUT = "b"; diff --git a/resources/js/components/ui/sidebar/index.ts b/resources/js/components/ui/sidebar/index.ts deleted file mode 100644 index 318a341..0000000 --- a/resources/js/components/ui/sidebar/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { useSidebar } from "./context.svelte.js"; -import Content from "./sidebar-content.svelte"; -import Footer from "./sidebar-footer.svelte"; -import GroupAction from "./sidebar-group-action.svelte"; -import GroupContent from "./sidebar-group-content.svelte"; -import GroupLabel from "./sidebar-group-label.svelte"; -import Group from "./sidebar-group.svelte"; -import Header from "./sidebar-header.svelte"; -import Input from "./sidebar-input.svelte"; -import Inset from "./sidebar-inset.svelte"; -import MenuAction from "./sidebar-menu-action.svelte"; -import MenuBadge from "./sidebar-menu-badge.svelte"; -import MenuButton from "./sidebar-menu-button.svelte"; -import MenuItem from "./sidebar-menu-item.svelte"; -import MenuSkeleton from "./sidebar-menu-skeleton.svelte"; -import MenuSubButton from "./sidebar-menu-sub-button.svelte"; -import MenuSubItem from "./sidebar-menu-sub-item.svelte"; -import MenuSub from "./sidebar-menu-sub.svelte"; -import Menu from "./sidebar-menu.svelte"; -import Provider from "./sidebar-provider.svelte"; -import Rail from "./sidebar-rail.svelte"; -import Separator from "./sidebar-separator.svelte"; -import Trigger from "./sidebar-trigger.svelte"; -import Root from "./sidebar.svelte"; - -export { - Content, - Footer, - Group, - GroupAction, - GroupContent, - GroupLabel, - Header, - Input, - Inset, - Menu, - MenuAction, - MenuBadge, - MenuButton, - MenuItem, - MenuSkeleton, - MenuSub, - MenuSubButton, - MenuSubItem, - Provider, - Rail, - Root, - Separator, - // - Root as Sidebar, - Content as SidebarContent, - Footer as SidebarFooter, - Group as SidebarGroup, - GroupAction as SidebarGroupAction, - GroupContent as SidebarGroupContent, - GroupLabel as SidebarGroupLabel, - Header as SidebarHeader, - Input as SidebarInput, - Inset as SidebarInset, - Menu as SidebarMenu, - MenuAction as SidebarMenuAction, - MenuBadge as SidebarMenuBadge, - MenuButton as SidebarMenuButton, - MenuItem as SidebarMenuItem, - MenuSkeleton as SidebarMenuSkeleton, - MenuSub as SidebarMenuSub, - MenuSubButton as SidebarMenuSubButton, - MenuSubItem as SidebarMenuSubItem, - Provider as SidebarProvider, - Rail as SidebarRail, - Separator as SidebarSeparator, - Trigger as SidebarTrigger, - Trigger, - useSidebar, -}; diff --git a/resources/js/components/ui/sidebar/sidebar-content.svelte b/resources/js/components/ui/sidebar/sidebar-content.svelte deleted file mode 100644 index 6f01f65..0000000 --- a/resources/js/components/ui/sidebar/sidebar-content.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-footer.svelte b/resources/js/components/ui/sidebar/sidebar-footer.svelte deleted file mode 100644 index f49e965..0000000 --- a/resources/js/components/ui/sidebar/sidebar-footer.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-group-action.svelte b/resources/js/components/ui/sidebar/sidebar-group-action.svelte deleted file mode 100644 index 9dcf559..0000000 --- a/resources/js/components/ui/sidebar/sidebar-group-action.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -{#if child} - {@render child({ props: mergedProps })} -{:else} - -{/if} diff --git a/resources/js/components/ui/sidebar/sidebar-group-content.svelte b/resources/js/components/ui/sidebar/sidebar-group-content.svelte deleted file mode 100644 index c639407..0000000 --- a/resources/js/components/ui/sidebar/sidebar-group-content.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-group-label.svelte b/resources/js/components/ui/sidebar/sidebar-group-label.svelte deleted file mode 100644 index 639e632..0000000 --- a/resources/js/components/ui/sidebar/sidebar-group-label.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - -{#if child} - {@render child({ props: mergedProps })} -{:else} -
    - {@render children?.()} -
    -{/if} diff --git a/resources/js/components/ui/sidebar/sidebar-group.svelte b/resources/js/components/ui/sidebar/sidebar-group.svelte deleted file mode 100644 index f883520..0000000 --- a/resources/js/components/ui/sidebar/sidebar-group.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-header.svelte b/resources/js/components/ui/sidebar/sidebar-header.svelte deleted file mode 100644 index 5b054b5..0000000 --- a/resources/js/components/ui/sidebar/sidebar-header.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-input.svelte b/resources/js/components/ui/sidebar/sidebar-input.svelte deleted file mode 100644 index 5302c65..0000000 --- a/resources/js/components/ui/sidebar/sidebar-input.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/sidebar-inset.svelte b/resources/js/components/ui/sidebar/sidebar-inset.svelte deleted file mode 100644 index 48aae7a..0000000 --- a/resources/js/components/ui/sidebar/sidebar-inset.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-menu-action.svelte b/resources/js/components/ui/sidebar/sidebar-menu-action.svelte deleted file mode 100644 index b6b5d10..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-action.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -{#if child} - {@render child({ props: mergedProps })} -{:else} - -{/if} diff --git a/resources/js/components/ui/sidebar/sidebar-menu-badge.svelte b/resources/js/components/ui/sidebar/sidebar-menu-badge.svelte deleted file mode 100644 index 8b39d97..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-badge.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-menu-button.svelte b/resources/js/components/ui/sidebar/sidebar-menu-button.svelte deleted file mode 100644 index b4f228b..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-button.svelte +++ /dev/null @@ -1,103 +0,0 @@ - - - - -{#snippet Button({ props }: { props?: Record })} - {@const mergedProps = mergeProps(buttonProps, props)} - {#if child} - {@render child({ props: mergedProps })} - {:else} - - {/if} -{/snippet} - -{#if !tooltipContent} - {@render Button({})} -{:else} - - - {#snippet child({ props })} - {@render Button({ props })} - {/snippet} - - - -{/if} diff --git a/resources/js/components/ui/sidebar/sidebar-menu-item.svelte b/resources/js/components/ui/sidebar/sidebar-menu-item.svelte deleted file mode 100644 index b314bb0..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-item.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
  • - {@render children?.()} -
  • diff --git a/resources/js/components/ui/sidebar/sidebar-menu-skeleton.svelte b/resources/js/components/ui/sidebar/sidebar-menu-skeleton.svelte deleted file mode 100644 index 1b14fa5..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-skeleton.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - {#if showIcon} - - {/if} - - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-menu-sub-button.svelte b/resources/js/components/ui/sidebar/sidebar-menu-sub-button.svelte deleted file mode 100644 index 08ce345..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-sub-button.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -{#if child} - {@render child({ props: mergedProps })} -{:else} - - {@render children?.()} - -{/if} diff --git a/resources/js/components/ui/sidebar/sidebar-menu-sub-item.svelte b/resources/js/components/ui/sidebar/sidebar-menu-sub-item.svelte deleted file mode 100644 index 94920e1..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-sub-item.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
  • - {@render children?.()} -
  • diff --git a/resources/js/components/ui/sidebar/sidebar-menu-sub.svelte b/resources/js/components/ui/sidebar/sidebar-menu-sub.svelte deleted file mode 100644 index 56a2d93..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu-sub.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -
      - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-menu.svelte b/resources/js/components/ui/sidebar/sidebar-menu.svelte deleted file mode 100644 index 5dccd7b..0000000 --- a/resources/js/components/ui/sidebar/sidebar-menu.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - -
      - {@render children?.()} -
    diff --git a/resources/js/components/ui/sidebar/sidebar-provider.svelte b/resources/js/components/ui/sidebar/sidebar-provider.svelte deleted file mode 100644 index b87d1c8..0000000 --- a/resources/js/components/ui/sidebar/sidebar-provider.svelte +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -
    - {@render children?.()} -
    -
    diff --git a/resources/js/components/ui/sidebar/sidebar-rail.svelte b/resources/js/components/ui/sidebar/sidebar-rail.svelte deleted file mode 100644 index bd6f75b..0000000 --- a/resources/js/components/ui/sidebar/sidebar-rail.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/sidebar-separator.svelte b/resources/js/components/ui/sidebar/sidebar-separator.svelte deleted file mode 100644 index ad53ff6..0000000 --- a/resources/js/components/ui/sidebar/sidebar-separator.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/sidebar-trigger.svelte b/resources/js/components/ui/sidebar/sidebar-trigger.svelte deleted file mode 100644 index 9f36211..0000000 --- a/resources/js/components/ui/sidebar/sidebar-trigger.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/resources/js/components/ui/sidebar/sidebar.svelte b/resources/js/components/ui/sidebar/sidebar.svelte deleted file mode 100644 index b2d4e01..0000000 --- a/resources/js/components/ui/sidebar/sidebar.svelte +++ /dev/null @@ -1,104 +0,0 @@ - - -{#if collapsible === "none"} -
    - {@render children?.()} -
    -{:else if sidebar.isMobile} - sidebar.openMobile, (v) => sidebar.setOpenMobile(v)} - {...restProps} - > - - - Sidebar - Displays the mobile sidebar. - -
    - {@render children?.()} -
    -
    -
    -{:else} - -{/if} diff --git a/resources/js/components/ui/skeleton/index.ts b/resources/js/components/ui/skeleton/index.ts deleted file mode 100644 index 186db21..0000000 --- a/resources/js/components/ui/skeleton/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./skeleton.svelte"; - -export { - Root, - // - Root as Skeleton, -}; diff --git a/resources/js/components/ui/skeleton/skeleton.svelte b/resources/js/components/ui/skeleton/skeleton.svelte deleted file mode 100644 index 9bf99eb..0000000 --- a/resources/js/components/ui/skeleton/skeleton.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -
    diff --git a/resources/js/components/ui/slider/index.ts b/resources/js/components/ui/slider/index.ts deleted file mode 100644 index 820f209..0000000 --- a/resources/js/components/ui/slider/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./slider.svelte"; - -export { - Root, - // - Root as Slider, -}; diff --git a/resources/js/components/ui/slider/slider.svelte b/resources/js/components/ui/slider/slider.svelte deleted file mode 100644 index 43c5980..0000000 --- a/resources/js/components/ui/slider/slider.svelte +++ /dev/null @@ -1,52 +0,0 @@ - - - - - {#snippet children({ thumbs })} - - - - {#each thumbs as thumb (thumb)} - - {/each} - {/snippet} - diff --git a/resources/js/components/ui/sonner/index.ts b/resources/js/components/ui/sonner/index.ts deleted file mode 100644 index 1ad9f4a..0000000 --- a/resources/js/components/ui/sonner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Toaster } from "./sonner.svelte"; diff --git a/resources/js/components/ui/sonner/sonner.svelte b/resources/js/components/ui/sonner/sonner.svelte deleted file mode 100644 index 67669b7..0000000 --- a/resources/js/components/ui/sonner/sonner.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/resources/js/components/ui/switch/index.ts b/resources/js/components/ui/switch/index.ts deleted file mode 100644 index f5533db..0000000 --- a/resources/js/components/ui/switch/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./switch.svelte"; - -export { - Root, - // - Root as Switch, -}; diff --git a/resources/js/components/ui/switch/switch.svelte b/resources/js/components/ui/switch/switch.svelte deleted file mode 100644 index 400cfd8..0000000 --- a/resources/js/components/ui/switch/switch.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/table/index.ts b/resources/js/components/ui/table/index.ts deleted file mode 100644 index 14695c8..0000000 --- a/resources/js/components/ui/table/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Root from "./table.svelte"; -import Body from "./table-body.svelte"; -import Caption from "./table-caption.svelte"; -import Cell from "./table-cell.svelte"; -import Footer from "./table-footer.svelte"; -import Head from "./table-head.svelte"; -import Header from "./table-header.svelte"; -import Row from "./table-row.svelte"; - -export { - Root, - Body, - Caption, - Cell, - Footer, - Head, - Header, - Row, - // - Root as Table, - Body as TableBody, - Caption as TableCaption, - Cell as TableCell, - Footer as TableFooter, - Head as TableHead, - Header as TableHeader, - Row as TableRow, -}; diff --git a/resources/js/components/ui/table/table-body.svelte b/resources/js/components/ui/table/table-body.svelte deleted file mode 100644 index 438215f..0000000 --- a/resources/js/components/ui/table/table-body.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-caption.svelte b/resources/js/components/ui/table/table-caption.svelte deleted file mode 100644 index bd8075c..0000000 --- a/resources/js/components/ui/table/table-caption.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-cell.svelte b/resources/js/components/ui/table/table-cell.svelte deleted file mode 100644 index a358a20..0000000 --- a/resources/js/components/ui/table/table-cell.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-footer.svelte b/resources/js/components/ui/table/table-footer.svelte deleted file mode 100644 index d008ee0..0000000 --- a/resources/js/components/ui/table/table-footer.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -tr]:last:border-b-0", className)} - {...restProps} -> - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-head.svelte b/resources/js/components/ui/table/table-head.svelte deleted file mode 100644 index 253a54c..0000000 --- a/resources/js/components/ui/table/table-head.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-header.svelte b/resources/js/components/ui/table/table-header.svelte deleted file mode 100644 index 72b0d29..0000000 --- a/resources/js/components/ui/table/table-header.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table-row.svelte b/resources/js/components/ui/table/table-row.svelte deleted file mode 100644 index afc131c..0000000 --- a/resources/js/components/ui/table/table-row.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/components/ui/table/table.svelte b/resources/js/components/ui/table/table.svelte deleted file mode 100644 index dbcb9b1..0000000 --- a/resources/js/components/ui/table/table.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -
    - - {@render children?.()} -
    -
    diff --git a/resources/js/components/ui/tabs/index.ts b/resources/js/components/ui/tabs/index.ts deleted file mode 100644 index 12d4327..0000000 --- a/resources/js/components/ui/tabs/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Root from "./tabs.svelte"; -import Content from "./tabs-content.svelte"; -import List from "./tabs-list.svelte"; -import Trigger from "./tabs-trigger.svelte"; - -export { - Root, - Content, - List, - Trigger, - // - Root as Tabs, - Content as TabsContent, - List as TabsList, - Trigger as TabsTrigger, -}; diff --git a/resources/js/components/ui/tabs/tabs-content.svelte b/resources/js/components/ui/tabs/tabs-content.svelte deleted file mode 100644 index 5cb67e0..0000000 --- a/resources/js/components/ui/tabs/tabs-content.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/resources/js/components/ui/tabs/tabs-list.svelte b/resources/js/components/ui/tabs/tabs-list.svelte deleted file mode 100644 index 8959bfe..0000000 --- a/resources/js/components/ui/tabs/tabs-list.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/tabs/tabs-trigger.svelte b/resources/js/components/ui/tabs/tabs-trigger.svelte deleted file mode 100644 index 9bd938d..0000000 --- a/resources/js/components/ui/tabs/tabs-trigger.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/resources/js/components/ui/tabs/tabs.svelte b/resources/js/components/ui/tabs/tabs.svelte deleted file mode 100644 index e2ea02c..0000000 --- a/resources/js/components/ui/tabs/tabs.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/resources/js/components/ui/textarea/index.ts b/resources/js/components/ui/textarea/index.ts deleted file mode 100644 index ace797a..0000000 --- a/resources/js/components/ui/textarea/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Root from "./textarea.svelte"; - -export { - Root, - // - Root as Textarea, -}; diff --git a/resources/js/components/ui/textarea/textarea.svelte b/resources/js/components/ui/textarea/textarea.svelte deleted file mode 100644 index 1648b29..0000000 --- a/resources/js/components/ui/textarea/textarea.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/resources/js/components/ui/toggle-group/index.ts b/resources/js/components/ui/toggle-group/index.ts deleted file mode 100644 index 12b14b9..0000000 --- a/resources/js/components/ui/toggle-group/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Root from "./toggle-group.svelte"; -import Item from "./toggle-group-item.svelte"; - -export { - Root, - Item, - // - Root as ToggleGroup, - Item as ToggleGroupItem, -}; diff --git a/resources/js/components/ui/toggle-group/toggle-group-item.svelte b/resources/js/components/ui/toggle-group/toggle-group-item.svelte deleted file mode 100644 index 7496bf6..0000000 --- a/resources/js/components/ui/toggle-group/toggle-group-item.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/resources/js/components/ui/toggle-group/toggle-group.svelte b/resources/js/components/ui/toggle-group/toggle-group.svelte deleted file mode 100644 index 4aee7f0..0000000 --- a/resources/js/components/ui/toggle-group/toggle-group.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - diff --git a/resources/js/components/ui/toggle/index.ts b/resources/js/components/ui/toggle/index.ts deleted file mode 100644 index 8cb2936..0000000 --- a/resources/js/components/ui/toggle/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Root from "./toggle.svelte"; -export { - toggleVariants, - type ToggleSize, - type ToggleVariant, - type ToggleVariants, -} from "./toggle.svelte"; - -export { - Root, - // - Root as Toggle, -}; diff --git a/resources/js/components/ui/toggle/toggle.svelte b/resources/js/components/ui/toggle/toggle.svelte deleted file mode 100644 index 3e34c8b..0000000 --- a/resources/js/components/ui/toggle/toggle.svelte +++ /dev/null @@ -1,52 +0,0 @@ - - - - - diff --git a/resources/js/components/ui/tooltip/tooltip-content.svelte b/resources/js/components/ui/tooltip/tooltip-content.svelte deleted file mode 100644 index 1378754..0000000 --- a/resources/js/components/ui/tooltip/tooltip-content.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - - - - {@render children?.()} - - {#snippet child({ props })} -
    - {/snippet} -
    -
    -
    diff --git a/resources/js/components/ui/tooltip/tooltip-trigger.svelte b/resources/js/components/ui/tooltip/tooltip-trigger.svelte deleted file mode 100644 index 1acdaa4..0000000 --- a/resources/js/components/ui/tooltip/tooltip-trigger.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/resources/js/hooks/is-mobile.svelte.ts b/resources/js/hooks/is-mobile.svelte.ts deleted file mode 100644 index 1df0d44..0000000 --- a/resources/js/hooks/is-mobile.svelte.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { MediaQuery } from 'svelte/reactivity'; - -const MOBILE_BREAKPOINT = 768; - -export class IsMobile extends MediaQuery { - constructor() { - super(`max-width: ${MOBILE_BREAKPOINT - 1}px`); - } -} diff --git a/resources/js/hooks/useAppearance.svelte.ts b/resources/js/hooks/useAppearance.svelte.ts deleted file mode 100644 index 3e76bd7..0000000 --- a/resources/js/hooks/useAppearance.svelte.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { onMount } from 'svelte'; - -export type Appearance = 'light' | 'dark' | 'system'; - -// Define mediaQuery as a function to safely access window -const getMediaQuery = () => (typeof window !== 'undefined' ? window.matchMedia('(prefers-color-scheme: dark)') : null); - -// Initialize theme only in browser environments -if (typeof window !== 'undefined' && typeof document !== 'undefined') { - const savedAppearance = localStorage.getItem('appearance') as Appearance | null; - const appearance = savedAppearance || 'system'; - - if (appearance === 'system') { - const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; - document.documentElement.classList.toggle('dark', systemTheme === 'dark'); - } else { - document.documentElement.classList.toggle('dark', appearance === 'dark'); - } -} - -export function updateTheme(value: Appearance) { - // Only run in browser environment - if (typeof window === 'undefined' || typeof document === 'undefined') return; - - if (value === 'system') { - const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; - document.documentElement.classList.toggle('dark', systemTheme === 'dark'); - } else { - document.documentElement.classList.toggle('dark', value === 'dark'); - } -} - -const handleSystemThemeChange = () => { - // Only run in browser environment - if (typeof window === 'undefined') return; - - const currentAppearance = localStorage.getItem('appearance') as Appearance | null; - updateTheme(currentAppearance || 'system'); -}; - -export function initializeTheme() { - // Only run in browser environment - if (typeof window === 'undefined' || typeof document === 'undefined') return; - - const savedAppearance = localStorage.getItem('appearance') as Appearance | null; - updateTheme(savedAppearance || 'system'); - - const mediaQuery = getMediaQuery(); - mediaQuery?.addEventListener('change', handleSystemThemeChange); -} - -export function useAppearance() { - // Get saved appearance from localStorage - const savedAppearance = typeof localStorage !== 'undefined' ? (localStorage.getItem('appearance') as Appearance | null) : null; - - // Initialize with saved appearance or default to system - let appearance = $state(savedAppearance || 'system'); - - onMount(() => { - // Initialize theme - initializeTheme(); - - // Make sure appearance state matches localStorage - if (typeof localStorage !== 'undefined') { - const currentAppearance = localStorage.getItem('appearance') as Appearance | null; - if (currentAppearance) { - appearance = currentAppearance; - } - } - - return () => { - const mediaQuery = getMediaQuery(); - mediaQuery?.removeEventListener('change', handleSystemThemeChange); - }; - }); - - function updateAppearance(value: Appearance) { - appearance = value; - if (typeof localStorage !== 'undefined') { - localStorage.setItem('appearance', value); - } - updateTheme(value); - } - - return { - get appearance() { - return appearance; - }, - updateAppearance, - }; -} diff --git a/resources/js/hooks/useInitials.ts b/resources/js/hooks/useInitials.ts deleted file mode 100644 index b5d9410..0000000 --- a/resources/js/hooks/useInitials.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function getInitials(fullName?: string): string { - if (!fullName) return ''; - - const names = fullName.trim().split(' '); - - if (names.length === 0) return ''; - if (names.length === 1) return names[0].charAt(0).toUpperCase(); - - return `${names[0].charAt(0)}${names[names.length - 1].charAt(0)}`.toUpperCase(); -} - -export function useInitials() { - return { getInitials }; -} diff --git a/resources/js/layouts/AppLayout.svelte b/resources/js/layouts/AppLayout.svelte deleted file mode 100644 index 2ed436b..0000000 --- a/resources/js/layouts/AppLayout.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/layouts/AuthLayout.svelte b/resources/js/layouts/AuthLayout.svelte deleted file mode 100644 index 6faf741..0000000 --- a/resources/js/layouts/AuthLayout.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - - {@render children?.()} - diff --git a/resources/js/layouts/app/AppHeaderLayout.svelte b/resources/js/layouts/app/AppHeaderLayout.svelte deleted file mode 100644 index 9e2a8fc..0000000 --- a/resources/js/layouts/app/AppHeaderLayout.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - {@render children?.()} - - diff --git a/resources/js/layouts/app/AppSidebarLayout.svelte b/resources/js/layouts/app/AppSidebarLayout.svelte deleted file mode 100644 index 4ef0205..0000000 --- a/resources/js/layouts/app/AppSidebarLayout.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - {@render children?.()} - - diff --git a/resources/js/layouts/auth/AuthCardLayout.svelte b/resources/js/layouts/auth/AuthCardLayout.svelte deleted file mode 100644 index d0bec6c..0000000 --- a/resources/js/layouts/auth/AuthCardLayout.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - -
    -
    - -
    - -
    - - -
    - - - {title} - - {description} - - - - {@render children?.()} - - -
    -
    -
    diff --git a/resources/js/layouts/auth/AuthSimpleLayout.svelte b/resources/js/layouts/auth/AuthSimpleLayout.svelte deleted file mode 100644 index d249605..0000000 --- a/resources/js/layouts/auth/AuthSimpleLayout.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - -
    -
    -
    -
    - -
    - -
    - {title} - -
    -

    {title}

    -

    {description}

    -
    -
    - {@render children?.()} -
    -
    -
    diff --git a/resources/js/layouts/auth/AuthSplitLayout.svelte b/resources/js/layouts/auth/AuthSplitLayout.svelte deleted file mode 100644 index 9641e5e..0000000 --- a/resources/js/layouts/auth/AuthSplitLayout.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -
    - -
    -
    -
    - {#if title} -

    {title}

    - {/if} - {#if description} -

    {description}

    - {/if} -
    - {@render children?.()} -
    -
    -
    diff --git a/resources/js/layouts/settings/Layout.svelte b/resources/js/layouts/settings/Layout.svelte deleted file mode 100644 index 6fc8f22..0000000 --- a/resources/js/layouts/settings/Layout.svelte +++ /dev/null @@ -1,71 +0,0 @@ - - -
    - - -
    - - - - -
    -
    - {@render children?.()} -
    -
    -
    -
    diff --git a/resources/js/lib/utils.ts b/resources/js/lib/utils.ts deleted file mode 100644 index 89521bd..0000000 --- a/resources/js/lib/utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { clsx, type ClassValue } from 'clsx'; -import { twMerge } from 'tailwind-merge'; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type WithoutChild = T extends { child?: any } ? Omit : T; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type WithoutChildren = T extends { children?: any } ? Omit : T; -export type WithoutChildrenOrChild = WithoutChildren>; -export type WithElementRef = T & { ref?: U | null }; diff --git a/resources/js/pages/Dashboard.svelte b/resources/js/pages/Dashboard.svelte deleted file mode 100644 index 6724df8..0000000 --- a/resources/js/pages/Dashboard.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - - - Dashboard - - - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    diff --git a/resources/js/pages/Home.svelte b/resources/js/pages/Home.svelte deleted file mode 100644 index f11f758..0000000 --- a/resources/js/pages/Home.svelte +++ /dev/null @@ -1,226 +0,0 @@ - - - - Home - FlbxCup - - - - {#snippet fallback()} - -
    Loading...
    -
    - {/snippet} - -
    -
    -
    -

    Welcome to FlbxCup

    - {#if isAuthenticated} - - {/if} -
    -

    Discover and manage tournaments with ease

    -
    - - {#if isAuthenticated} - - - Public Tournaments - My Tournaments - - -
    - {#if !publicTournaments.original.data || publicTournaments.original.data.length === 0} -
    - -

    No Tournaments Yet

    -

    You haven't created any tournaments yet.

    - -
    - {/if} - {#each publicTournaments.original.data as tournament (tournament.id)} - - - - - {tournament.name} - - {tournament.description} - - -
    -
    - - {formatDate(tournament.start_date)} -
    -
    - - {tournament.max_teams} participants -
    -
    -
    - - - -
    - {/each} -
    -
    - -
    - {#if !userTournaments.original.data || userTournaments.original.data.length === 0} -
    - -

    No Tournaments Yet

    -

    You haven't created any tournaments yet.

    - -
    - {:else} - {#each userTournaments.original.data as tournament (tournament.id)} - - - - - {tournament.name} - - {tournament.description} - - -
    -
    - - {formatDate(tournament.start_date)} -
    -
    - - {tournament.max_teams} participants -
    -
    - - Created by you -
    -
    -
    - - - - -
    - {/each} - {/if} -
    -
    -
    - {:else} - - - Join FlbxCup - Create an account to create and manage your own tournaments - - -
    - -
    -
    -
    -
    -

    Public Tournaments

    -
    - {#if !publicTournaments.original.data || publicTournaments.original.data.length === 0} -
    - -

    No Tournaments Yet

    -

    You haven't created any tournaments yet.

    - -
    - {/if} - {#each publicTournaments.original.data as tournament (tournament.id)} - - - - - {tournament.name} - - {tournament.description} - - -
    -
    - - {formatDate(tournament.date)} -
    -
    - - {tournament.participantsCount} participants -
    -
    -
    - - - -
    - {/each} -
    -
    - {/if} -
    -
    -
    diff --git a/resources/js/pages/Welcome.svelte b/resources/js/pages/Welcome.svelte deleted file mode 100644 index 3327e18..0000000 --- a/resources/js/pages/Welcome.svelte +++ /dev/null @@ -1,781 +0,0 @@ - - - - Welcome - - - - -
    -
    - -
    -
    -
    -
    -

    Let's get started

    -

    - Laravel has an incredibly rich ecosystem.
    We suggest starting with the following. -

    -
      -
    • - - - - - - - Read the - - Documentation - - - - - -
    • -
    • - - - - - - - Watch video tutorials at - - Laracasts - - - - - -
    • -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    diff --git a/resources/js/pages/auth/ConfirmPassword.svelte b/resources/js/pages/auth/ConfirmPassword.svelte deleted file mode 100644 index 15ac0b8..0000000 --- a/resources/js/pages/auth/ConfirmPassword.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - - Confirm Password - - - -
    -
    -
    - - - - -
    - -
    - -
    -
    -
    -
    diff --git a/resources/js/pages/auth/ForgotPassword.svelte b/resources/js/pages/auth/ForgotPassword.svelte deleted file mode 100644 index dfd9327..0000000 --- a/resources/js/pages/auth/ForgotPassword.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - - - Forgot Password - - - - {#if status} -
    - {status} -
    - {/if} - -
    -
    -
    - - - -
    - -
    - -
    -
    - -
    - Or, return to - log in -
    -
    -
    diff --git a/resources/js/pages/auth/Login.svelte b/resources/js/pages/auth/Login.svelte deleted file mode 100644 index d7da3a5..0000000 --- a/resources/js/pages/auth/Login.svelte +++ /dev/null @@ -1,100 +0,0 @@ - - - - Login - - - - {#if status} -
    - {status} -
    - {/if} - -
    -
    -
    - - - -
    - -
    -
    - - {#if canResetPassword} - Forgot password? - {/if} -
    - - -
    - -
    - -
    - - -
    - -
    - Don't have an account? - Sign up -
    -
    -
    diff --git a/resources/js/pages/auth/Register.svelte b/resources/js/pages/auth/Register.svelte deleted file mode 100644 index 31e8313..0000000 --- a/resources/js/pages/auth/Register.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - - - Register - - - -
    -
    -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - - -
    - -
    - Already have an account? - Log in -
    -
    -
    diff --git a/resources/js/pages/auth/ResetPassword.svelte b/resources/js/pages/auth/ResetPassword.svelte deleted file mode 100644 index 590e7ea..0000000 --- a/resources/js/pages/auth/ResetPassword.svelte +++ /dev/null @@ -1,84 +0,0 @@ - - - - Reset Password - - - -
    -
    -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - - -
    -
    -
    diff --git a/resources/js/pages/auth/VerifyEmail.svelte b/resources/js/pages/auth/VerifyEmail.svelte deleted file mode 100644 index c2e7b44..0000000 --- a/resources/js/pages/auth/VerifyEmail.svelte +++ /dev/null @@ -1,42 +0,0 @@ - - - - Verify Email - - - - {#if status === 'verification-link-sent'} -
    - A new verification link has been sent to the email address you provided during registration. -
    - {/if} - -
    - - - Log out -
    -
    diff --git a/resources/js/pages/settings/Appearance.svelte b/resources/js/pages/settings/Appearance.svelte deleted file mode 100644 index 73246d7..0000000 --- a/resources/js/pages/settings/Appearance.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - - Appearance Settings - - - - -
    - - -
    -
    -
    diff --git a/resources/js/pages/settings/Password.svelte b/resources/js/pages/settings/Password.svelte deleted file mode 100644 index 0cd4fdc..0000000 --- a/resources/js/pages/settings/Password.svelte +++ /dev/null @@ -1,112 +0,0 @@ - - - - Password Settings - - - - -
    - - -
    -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - {#if $form.recentlySuccessful} -

    Saved.

    - {/if} -
    -
    -
    -
    -
    diff --git a/resources/js/pages/settings/Permissions.svelte b/resources/js/pages/settings/Permissions.svelte deleted file mode 100644 index 3175db1..0000000 --- a/resources/js/pages/settings/Permissions.svelte +++ /dev/null @@ -1,131 +0,0 @@ - - - - Permissions Settings - - - - -
    -
    -
    -

    Permissions

    -

    View and manage your current permissions across different system areas.

    -
    - -
    - - {permissions} - - - -
    -
    - - -
    - -
    -
    -
    - - - - - All Permissions - Complete list of all permissions - - - - - - Permission Id - Permission - Description - Level - Status - - - - {#each permissions as permission, index (index)} - - - {permission.display_name} - - {permission.name} - {permission.description} - - - {permission.level} - - - - - {permission.granted ? 'Granted' : 'Denied'} - - - - {/each} - -
    -
    -
    -
    -
    -
    diff --git a/resources/js/pages/settings/Profile.svelte b/resources/js/pages/settings/Profile.svelte deleted file mode 100644 index 5d5682d..0000000 --- a/resources/js/pages/settings/Profile.svelte +++ /dev/null @@ -1,105 +0,0 @@ - - - - Profile Settings - - - - -
    - - -
    -
    - - - -
    - -
    - - - -
    - - {#if mustVerifyEmail && !user.email_verified_at} -
    -

    - Your email address is unverified. - - Click here to resend the verification email. - -

    - - {#if status === 'verification-link-sent'} -
    A new verification link has been sent to your email address.
    - {/if} -
    - {/if} - -
    - - - {#if $form.recentlySuccessful} -

    Saved.

    - {/if} -
    -
    -
    - - -
    -
    diff --git a/resources/js/pages/tournaments/Create.svelte b/resources/js/pages/tournaments/Create.svelte deleted file mode 100644 index c431580..0000000 --- a/resources/js/pages/tournaments/Create.svelte +++ /dev/null @@ -1,169 +0,0 @@ - - - -
    -

    Create New Tournament

    -
    -
    - -
    - - - {#if errors.name} -

    {errors.name}

    - {/if} -
    - - -
    - - diff --git a/resources/js/components/ui/tooltip/index.ts b/src/lib/components/ui/tooltip/index.ts similarity index 62% rename from resources/js/components/ui/tooltip/index.ts rename to src/lib/components/ui/tooltip/index.ts index 313a7f0..b2ef32c 100644 --- a/resources/js/components/ui/tooltip/index.ts +++ b/src/lib/components/ui/tooltip/index.ts @@ -1,6 +1,6 @@ -import { Tooltip as TooltipPrimitive } from "bits-ui"; -import Trigger from "./tooltip-trigger.svelte"; -import Content from "./tooltip-content.svelte"; +import { Tooltip as TooltipPrimitive } from 'bits-ui'; +import Content from './tooltip-content.svelte'; +import Trigger from './tooltip-trigger.svelte'; const Root = TooltipPrimitive.Root; const Provider = TooltipPrimitive.Provider; @@ -17,5 +17,5 @@ export { Content as TooltipContent, Trigger as TooltipTrigger, Provider as TooltipProvider, - Portal as TooltipPortal, + Portal as TooltipPortal }; diff --git a/src/lib/components/ui/tooltip/tooltip-content.svelte b/src/lib/components/ui/tooltip/tooltip-content.svelte new file mode 100644 index 0000000..197d50f --- /dev/null +++ b/src/lib/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,47 @@ + + + + + {@render children?.()} + + {#snippet child({ props })} +
    + {/snippet} +
    +
    +
    diff --git a/src/lib/components/ui/tooltip/tooltip-trigger.svelte b/src/lib/components/ui/tooltip/tooltip-trigger.svelte new file mode 100644 index 0000000..a65bf43 --- /dev/null +++ b/src/lib/components/ui/tooltip/tooltip-trigger.svelte @@ -0,0 +1,8 @@ + + + diff --git a/src/lib/hooks/is-mobile.svelte.ts b/src/lib/hooks/is-mobile.svelte.ts new file mode 100644 index 0000000..acbe8ef --- /dev/null +++ b/src/lib/hooks/is-mobile.svelte.ts @@ -0,0 +1,9 @@ +import { MediaQuery } from 'svelte/reactivity'; + +const DEFAULT_MOBILE_BREAKPOINT = 768; + +export class IsMobile extends MediaQuery { + constructor(breakpoint: number = DEFAULT_MOBILE_BREAKPOINT) { + super(`max-width: ${breakpoint - 1}px`); + } +} diff --git a/src/lib/hooks/useAppearance.svelte.ts b/src/lib/hooks/useAppearance.svelte.ts new file mode 100644 index 0000000..24683ae --- /dev/null +++ b/src/lib/hooks/useAppearance.svelte.ts @@ -0,0 +1,111 @@ +import { onMount } from 'svelte'; + +export type Appearance = 'light' | 'dark' | 'system'; + +// Define mediaQuery as a function to safely access window +const getMediaQuery = () => + typeof window !== 'undefined' + ? window.matchMedia('(prefers-color-scheme: dark)') + : null; + +// Initialize theme only in browser environments +if (typeof window !== 'undefined' && typeof document !== 'undefined') { + const savedAppearance = localStorage.getItem( + 'appearance' + ) as Appearance | null; + const appearance = savedAppearance || 'system'; + + if (appearance === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)') + .matches + ? 'dark' + : 'light'; + document.documentElement.classList.toggle('dark', systemTheme === 'dark'); + } else { + document.documentElement.classList.toggle('dark', appearance === 'dark'); + } +} + +export function updateTheme(value: Appearance) { + // Only run in browser environment + if (typeof window === 'undefined' || typeof document === 'undefined') return; + + if (value === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)') + .matches + ? 'dark' + : 'light'; + document.documentElement.classList.toggle('dark', systemTheme === 'dark'); + } else { + document.documentElement.classList.toggle('dark', value === 'dark'); + } +} + +const handleSystemThemeChange = () => { + // Only run in browser environment + if (typeof window === 'undefined') return; + + const currentAppearance = localStorage.getItem( + 'appearance' + ) as Appearance | null; + updateTheme(currentAppearance || 'system'); +}; + +export function initializeTheme() { + // Only run in browser environment + if (typeof window === 'undefined' || typeof document === 'undefined') return; + + const savedAppearance = localStorage.getItem( + 'appearance' + ) as Appearance | null; + updateTheme(savedAppearance || 'system'); + + const mediaQuery = getMediaQuery(); + mediaQuery?.addEventListener('change', handleSystemThemeChange); +} + +export function useAppearance() { + // Get saved appearance from localStorage + const savedAppearance = + typeof localStorage !== 'undefined' + ? (localStorage.getItem('appearance') as Appearance | null) + : null; + + // Initialize with saved appearance or default to system + let appearance = $state(savedAppearance || 'system'); + + onMount(() => { + // Initialize theme + initializeTheme(); + + // Make sure appearance state matches localStorage + if (typeof localStorage !== 'undefined') { + const currentAppearance = localStorage.getItem( + 'appearance' + ) as Appearance | null; + if (currentAppearance) { + appearance = currentAppearance; + } + } + + return () => { + const mediaQuery = getMediaQuery(); + mediaQuery?.removeEventListener('change', handleSystemThemeChange); + }; + }); + + function updateAppearance(value: Appearance) { + appearance = value; + if (typeof localStorage !== 'undefined') { + localStorage.setItem('appearance', value); + } + updateTheme(value); + } + + return { + get appearance() { + return appearance; + }, + updateAppearance + }; +} diff --git a/src/lib/hooks/useInitials.ts b/src/lib/hooks/useInitials.ts new file mode 100644 index 0000000..ae53ada --- /dev/null +++ b/src/lib/hooks/useInitials.ts @@ -0,0 +1,14 @@ +export function getInitials(fullName?: string): string { + if (!fullName) return ''; + + const names = fullName.trim().split(' '); + + if (names.length === 0) return ''; + if (names.length === 1) return names[0].charAt(0).toUpperCase(); + + return `${names[0].charAt(0)}${names[names.length - 1].charAt(0)}`.toUpperCase(); +} + +export function useInitials() { + return { getInitials }; +} diff --git a/src/lib/i18n/index.ts b/src/lib/i18n/index.ts new file mode 100644 index 0000000..98034ae --- /dev/null +++ b/src/lib/i18n/index.ts @@ -0,0 +1,12 @@ +import { init, register } from 'svelte-i18n'; +import { browser } from '$app/environment'; + +const defaultLocale = 'en'; + +register('en', () => import('./locales/en.json')); +register('fr', () => import('./locales/fr.json')); + +init({ + fallbackLocale: defaultLocale, + initialLocale: browser ? window.navigator.language : defaultLocale +}); diff --git a/src/lib/i18n/locales/en.json b/src/lib/i18n/locales/en.json new file mode 100644 index 0000000..3f9560f --- /dev/null +++ b/src/lib/i18n/locales/en.json @@ -0,0 +1,12 @@ +{ + "single": "Single", + "single.description": "In a single elimination format, a participant is eliminated after one loss. The last undefeated player is the winner.", + "double": "Double", + "double.description": "In a double elimination format, a participant must lose twice before being eliminated. It includes a winners bracket and a losers bracket.", + "swiss": "Swiss", + "swiss.description": "The Swiss system pairs players with similar win records over a fixed number of rounds. No one is eliminated, and standings are based on overall performance.", + "round_robin": "Round Robin", + "round_robin.description": "In a round robin format, each participant plays against every other participant once. Rankings are determined by total wins or points.", + "double_round_robin": "Double Round Robin", + "double_round_robin.description": "A double round robin has each participant play every other twice—once at 'home' and once 'away'. It provides a balanced and fair comparison across all competitors." +} diff --git a/src/lib/i18n/locales/fr.json b/src/lib/i18n/locales/fr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/lib/i18n/locales/fr.json @@ -0,0 +1 @@ +{} diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts new file mode 100644 index 0000000..e399b9b --- /dev/null +++ b/src/lib/server/auth.ts @@ -0,0 +1,148 @@ +import type { Cookies, RequestEvent } from '@sveltejs/kit'; +import { KeyCloak } from 'arctic'; +import { eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; + +import { env } from '$env/dynamic/private'; +import { env as envPublic } from '$env/dynamic/public'; +import { db } from '$lib/server/db'; +import { type Session, sessions } from './db/schema/sessions'; +import { users } from './db/schema/users'; + +const DAY_IN_MS = 1000 * 60 * 60 * 24; + +export const sessionCookieName = 'auth-session'; + +export const keycloak = new KeyCloak( + env.KEYCLOAK_REALM || '', + env.KEYCLOAK_CLIENT_ID || '', + env.KEYCLOAK_CLIENT_SECRET || '', + `${envPublic.PUBLIC_ENDPOINT}/auth/callback` +); + +function generateSecureRandomString(): string { + return v7(); +} + +async function hashSecret(secret: string): Promise { + const secretBytes = new TextEncoder().encode(secret); + const secretHashBuffer = await crypto.subtle.digest('SHA-256', secretBytes); + return new Uint8Array(secretHashBuffer); +} + +export async function createSession(user_id: string) { + const id = generateSecureRandomString(); + const secret = generateSecureRandomString(); + const secretHash = await hashSecret(secret); + + const token = `${id}.${secret}`; + + const session: Session = { + id, + secret_hash: Buffer.from(secretHash), + user_id, + expires_at: new Date(Date.now() + DAY_IN_MS * 30), + created_at: new Date(Date.now()), + deleted_at: new Date(), + updated_at: new Date(Date.now()) + }; + await db.insert(sessions).values(session); + return { session, token }; +} + +export async function validateSessionToken(token: string) { + const tokenParts = token.split('.'); + if (tokenParts.length !== 2) { + return null; + } + + const sessionId = tokenParts[0]; + const sessionSecret = tokenParts[1]; + + const [result] = await db + .select({ + // Adjust user table here to tweak returned data + user: { id: users.id, username: users.username, email: users.email }, + session: sessions + }) + .from(sessions) + .innerJoin(users, eq(sessions.user_id, users.id)) + .where(eq(sessions.id, sessionId)); + + if (!result) { + return { session: null, user: null }; + } + const { session, user } = result; + + const tokenSecretHash = await hashSecret(sessionSecret); + const validSecret = constantTimeEqual( + tokenSecretHash, + new Uint8Array(session.secret_hash) + ); + if (!validSecret) { + return null; + } + + const sessionExpired = Date.now() >= session.expires_at.getTime(); + if (sessionExpired) { + await db.delete(sessions).where(eq(sessions.id, session.id)); + return { session: null, user: null }; + } + + const renewSession = + Date.now() >= session.expires_at.getTime() - DAY_IN_MS * 15; + if (renewSession) { + session.expires_at = new Date(Date.now() + DAY_IN_MS * 30); + await db + .update(sessions) + .set({ expires_at: session.expires_at }) + .where(eq(sessions.id, session.id)); + } + + return { session, user }; +} + +function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean { + if (a.byteLength !== b.byteLength) { + return false; + } + let c = 0; + for (let i = 0; i < a.byteLength; i++) { + c |= a[i] ^ b[i]; + } + return c === 0; +} + +export type SessionValidationResult = Awaited< + ReturnType +>; + +export async function invalidateSession(sessionId: string) { + await db.delete(sessions).where(eq(sessions.id, sessionId)); +} + +export function setSessionTokenCookie( + event: RequestEvent, + token: string, + expires_at: Date +) { + event.cookies.set(sessionCookieName, token, { + expires: expires_at, + path: '/' + }); +} + +export function deleteSessionTokenCookie(cookies: Cookies) { + cookies.delete(sessionCookieName, { + path: '/' + }); +} + +export function encodeSessionPublicJSON(session: Session): string { + // Omit Session.secretHash + const json = JSON.stringify({ + id: session.id, + created_at: Math.floor(session.created_at.getTime() / 1000) + }); + return json; +} diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts new file mode 100644 index 0000000..ec51c20 --- /dev/null +++ b/src/lib/server/db/index.ts @@ -0,0 +1,34 @@ +import { drizzle } from 'drizzle-orm/node-postgres'; +import { Pool } from 'pg'; +import { env } from '$env/dynamic/private'; +import * as brackets from './schema/brackets'; +import * as breakperiods from './schema/breakperiods'; +import * as competitions from './schema/competitions'; +import * as fields from './schema/fields'; +import * as matches from './schema/matches'; +import * as permissions from './schema/permissions'; +import * as roles from './schema/roles'; +import * as rounds from './schema/rounds'; +import * as sessions from './schema/sessions'; +import * as teams from './schema/teams'; +import * as users from './schema/users'; + +const pool = new Pool({ + connectionString: env.DATABASE_URL +}); + +export const schema = { + ...brackets, + ...breakperiods, + ...competitions, + ...fields, + ...matches, + ...permissions, + ...roles, + ...rounds, + ...sessions, + ...teams, + ...users +}; + +export const db = drizzle({ client: pool, schema: schema }); diff --git a/src/lib/server/db/queries/brackets.ts b/src/lib/server/db/queries/brackets.ts new file mode 100644 index 0000000..c5b71e0 --- /dev/null +++ b/src/lib/server/db/queries/brackets.ts @@ -0,0 +1,57 @@ +import { and, eq, inArray } from 'drizzle-orm'; +import { db } from '..'; +import { type BracketInsert, brackets } from '../schema/brackets'; + +export async function insertBracket(bracket: BracketInsert) { + return await db.insert(brackets).values(bracket).returning(); +} + +export async function getBrackets(competitionId: string) { + return await db + .select() + .from(brackets) + .where(eq(brackets.competition_id, competitionId)); +} + +export async function getBracket(bracketId: string) { + return await db.query.brackets.findFirst({ + where: eq(brackets.id, bracketId) + }); +} + +export async function getBracketWithRoundsAndMatches(bracketId: string) { + return await db.query.brackets.findFirst({ + where: eq(brackets.id, bracketId), + with: { + rounds: { + with: { + matches: { + with: { + team1: true, + team2: true + } + } + } + } + } + }); +} + +export async function getBracketsWithRounds(competitionId: string) { + return await db.query.brackets.findMany({ + where: eq(brackets.competition_id, competitionId), + with: { + rounds: true + } + }); +} + +export async function getBracketsByListIds( + bracketIds: string[], + withRelations: object = {} +) { + return await db.query.brackets.findMany({ + where: inArray(brackets.id, bracketIds), + with: withRelations + }); +} diff --git a/src/lib/server/db/queries/competitions.ts b/src/lib/server/db/queries/competitions.ts new file mode 100644 index 0000000..4efb6da --- /dev/null +++ b/src/lib/server/db/queries/competitions.ts @@ -0,0 +1,54 @@ +import { eq } from 'drizzle-orm'; +import { db } from '..'; +import { competitions } from '../schema/competitions'; + +export async function getCompetition(id: string) { + return await db.query.competitions.findFirst({ + where: eq(competitions.id, id) + }); +} + +export async function getCompetitionWithAll(id: string) { + return await db.query.competitions.findFirst({ + where: eq(competitions.id, id), + with: { + breakperiods: true, + fields: true, + brackets: { + with: { + rounds: { + with: { + matches: true + } + } + } + }, + teams: true + } + }); +} + +export async function getCompetitionsWithAll( + skip: number = 0, + take: number = 10 +) { + return await db.query.competitions.findMany({ + orderBy: (competitions, { desc }) => [desc(competitions.start_date)], + with: { + breakperiods: true, + fields: true, + brackets: { + with: { + rounds: { + with: { + matches: true + } + } + } + }, + teams: true + }, + limit: take, + offset: skip + }); +} diff --git a/src/lib/server/db/queries/rounds.ts b/src/lib/server/db/queries/rounds.ts new file mode 100644 index 0000000..fa1e2f4 --- /dev/null +++ b/src/lib/server/db/queries/rounds.ts @@ -0,0 +1,24 @@ +import { and, eq } from 'drizzle-orm'; +import { db } from '..'; +import { type RoundInsert, rounds } from '../schema/rounds'; + +export async function insertRound(round: RoundInsert) { + return await db.insert(rounds).values(round).returning(); +} + +export async function getRounds(bracketId: string) { + return await db.select().from(rounds).where(eq(rounds.bracket_id, bracketId)); +} + +export async function getRound(roundId: string) { + return await db.select().from(rounds).where(eq(rounds.id, roundId)); +} + +export async function getRoundWithMatches(bracketId: string, roundId: string) { + return await db.query.rounds.findMany({ + where: and(eq(rounds.bracket_id, bracketId), eq(rounds.id, roundId)), + with: { + matches: true + } + }); +} diff --git a/src/lib/server/db/queries/teams.ts b/src/lib/server/db/queries/teams.ts new file mode 100644 index 0000000..d6d3dcd --- /dev/null +++ b/src/lib/server/db/queries/teams.ts @@ -0,0 +1,61 @@ +import { eq } from 'drizzle-orm'; +import { db } from '..'; +import { teams } from '../schema/teams'; + +/** + * Get all teams for a specific competition + * @param competitionId The ID of the competition + * @returns Array of teams + */ +export async function getTeamsByCompetition(competitionId: string) { + return await db + .select() + .from(teams) + .where(eq(teams.competition_id, competitionId)); +} + +/** + * Get a specific team by ID + * @param teamId The ID of the team + * @returns The team or undefined if not found + */ +export async function getTeamById(teamId: string) { + const results = await db.select().from(teams).where(eq(teams.id, teamId)); + + return results[0]; +} + +/** + * Insert a new team + * @param team The team data to insert + * @returns The inserted team + */ +export async function insertTeam(team: { + name: string; + competition_id: string; +}) { + return await db.insert(teams).values(team).returning(); +} + +/** + * Update an existing team + * @param teamId The ID of the team to update + * @param data The updated team data + * @returns The updated team + */ +export async function updateTeam(teamId: string, data: { name?: string }) { + return await db + .update(teams) + .set(data) + .where(eq(teams.id, teamId)) + .returning(); +} + +/** + * Delete a team + * @param teamId The ID of the team to delete + * @returns The deleted team + */ +export async function deleteTeam(teamId: string) { + return await db.delete(teams).where(eq(teams.id, teamId)).returning(); +} diff --git a/src/lib/server/db/schema/brackets.ts b/src/lib/server/db/schema/brackets.ts new file mode 100644 index 0000000..2719a2d --- /dev/null +++ b/src/lib/server/db/schema/brackets.ts @@ -0,0 +1,39 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { BracketType, enumToPgEnum, SchedulingMode } from '../../../../types'; +import { type TModelWithRelations, timestamps } from '../util'; +import { competitions } from './competitions'; +import { type RoundWithMatches, rounds } from './rounds'; + +export const bracketTypes = t.pgEnum('bracket_type', enumToPgEnum(BracketType)); +export const schedulingModes = t.pgEnum( + 'scheduling_modes', + enumToPgEnum(SchedulingMode) +); + +export const brackets = t.pgTable('brackets', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull(), + bracketType: bracketTypes('bracket_type').notNull(), + position: t.integer('position').default(1).notNull(), + isActive: t.boolean('is_active').default(true).notNull(), + scheduling_mode: schedulingModes('scheduling_modes').notNull(), + competition_id: t.uuid('competition_id').notNull(), + ...timestamps +}); + +export const bracketsRelations = relations(brackets, ({ many, one }) => ({ + competition: one(competitions, { + fields: [brackets.competition_id], + references: [competitions.id], + relationName: 'bracketCompetition' + }), + rounds: many(rounds) +})); + +export type BracketInsert = typeof brackets.$inferInsert; +export type Bracket = TModelWithRelations<'brackets'>; +export type BracketWithRelations = TModelWithRelations<'brackets'>; +export type BracketAndRoundsWithMatches = typeof brackets.$inferSelect & { + rounds: RoundWithMatches[]; +}; diff --git a/src/lib/server/db/schema/breakperiods.ts b/src/lib/server/db/schema/breakperiods.ts new file mode 100644 index 0000000..9be59b9 --- /dev/null +++ b/src/lib/server/db/schema/breakperiods.ts @@ -0,0 +1,38 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { competitions } from './competitions'; +import { fields } from './fields'; + +export const breakperiodTypes = t.pgEnum('breakperiod_types', [ + 'regular', + 'final', + 'extra', + 'gouter' +]); + +export const breakperiods = t.pgTable('breakperiods', { + id: t.uuid('id').primaryKey().defaultRandom(), + competition_id: t.uuid('competition_id').notNull(), + field_id: t.uuid('field_id').notNull(), + type: breakperiodTypes('type').notNull(), + round: t.integer('round').notNull(), + start_date: t.timestamp({ withTimezone: true, mode: 'date' }).notNull(), + end_date: t.timestamp({ withTimezone: true, mode: 'date' }).notNull(), + ...timestamps +}); + +export const breakperiodsRelations = relations(breakperiods, ({ one }) => ({ + competition: one(competitions, { + fields: [breakperiods.competition_id], + references: [competitions.id], + relationName: 'breakPeriodCompetition' + }), + field: one(fields, { + fields: [breakperiods.field_id], + references: [fields.id], + relationName: 'breakPeriodField' + }) +})); + +export type Breakperiod = typeof breakperiods.$inferSelect; diff --git a/src/lib/server/db/schema/competitions.ts b/src/lib/server/db/schema/competitions.ts new file mode 100644 index 0000000..6273a9c --- /dev/null +++ b/src/lib/server/db/schema/competitions.ts @@ -0,0 +1,37 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { type TModelWithRelations, timestamps } from '../util'; +import { brackets } from './brackets'; +import { breakperiods } from './breakperiods'; +import { fields } from './fields'; +import { teams } from './teams'; +import { users } from './users'; + +export const competitions = t.pgTable('competitions', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull(), + description: t.text('description'), + start_date: t.timestamp({ withTimezone: true, mode: 'date' }).notNull(), + location: t.text('location'), + owner: t.text('owner').notNull(), + ...timestamps +}); + +export const competitionsRelations = relations( + competitions, + ({ one, many }) => ({ + owner: one(users, { + fields: [competitions.owner], + references: [users.id], + relationName: 'competitionOwner' + }), + breakperiods: many(breakperiods), + fields: many(fields), + teams: many(teams), + brackets: many(brackets) + }) +); + +export type Competition = typeof competitions.$inferSelect; + +export type CompetitionWithRelations = TModelWithRelations<'competitions'>; diff --git a/src/lib/server/db/schema/fields.ts b/src/lib/server/db/schema/fields.ts new file mode 100644 index 0000000..bef091c --- /dev/null +++ b/src/lib/server/db/schema/fields.ts @@ -0,0 +1,22 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { competitions } from './competitions'; + +export const fields = t.pgTable('fields', { + id: t.uuid('id').primaryKey().defaultRandom(), + competition_id: t.uuid('competition_id').notNull(), + name: t.text('name').notNull(), + description: t.text('description'), + ...timestamps +}); + +export const fieldsRelations = relations(fields, ({ one }) => ({ + competition: one(competitions, { + fields: [fields.competition_id], + references: [competitions.id], + relationName: 'fieldCompetition' + }) +})); + +export type Field = typeof fields.$inferSelect; diff --git a/src/lib/server/db/schema/matches.ts b/src/lib/server/db/schema/matches.ts new file mode 100644 index 0000000..e78f3e8 --- /dev/null +++ b/src/lib/server/db/schema/matches.ts @@ -0,0 +1,69 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { enumToPgEnum, MatchStatus } from '../../../../types'; +import { type TModelWithRelations, timestamps } from '../util'; +import { brackets } from './brackets'; +import { fields } from './fields'; +import { rounds } from './rounds'; +import { teams } from './teams'; + +export const status = t.pgEnum('match_status', enumToPgEnum(MatchStatus)); + +export const matches = t.pgTable('matches', { + id: t.uuid('id').primaryKey().defaultRandom(), + match_number: t.integer('match_number').notNull(), + field_id: t.uuid('field_id').notNull(), + team1_id: t.uuid('team1_id').notNull(), + team2_id: t.uuid('team2_id').notNull(), + winner_id: t.uuid('winner_id'), + start_date: t.timestamp({ withTimezone: true, mode: 'date' }).notNull(), + end_date: t.timestamp({ withTimezone: true, mode: 'date' }).notNull(), + score1: t.integer('score1').notNull(), + score2: t.integer('score2').notNull(), + status: status('status').notNull(), + position: t.integer('position').notNull(), + table: t.integer('table').notNull(), // swis/round robin + round_id: t.uuid('round_id').notNull(), + bracket_id: t + .uuid('bracket_id') + .notNull() + .references(() => brackets.id, { onDelete: 'cascade' }), + ...timestamps +}); + +export const matchRelations = relations(matches, ({ one }) => ({ + field: one(fields, { + fields: [matches.field_id], + references: [fields.id], + relationName: 'matchField' + }), + round: one(rounds, { + fields: [matches.round_id], + references: [rounds.id], + relationName: 'round' + }), + team1: one(teams, { + fields: [matches.team1_id], + references: [teams.id], + relationName: 'matchTeam1' + }), + team2: one(teams, { + fields: [matches.team2_id], + references: [teams.id], + relationName: 'matchTeam2' + }), + winner: one(teams, { + fields: [matches.winner_id], + references: [teams.id], + relationName: 'matchWinner' + }), + bracket: one(brackets, { + fields: [matches.bracket_id], + references: [brackets.id], + relationName: 'matchBracket' + }) +})); + +export type Match = typeof matches.$inferSelect; + +export type MatchWithRelations = TModelWithRelations<'matches'>; diff --git a/src/lib/server/db/schema/permissions.ts b/src/lib/server/db/schema/permissions.ts new file mode 100644 index 0000000..757f00a --- /dev/null +++ b/src/lib/server/db/schema/permissions.ts @@ -0,0 +1,19 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { permissionsToRoles, usersToPermissions } from './schema'; + +export const permissions = t.pgTable('permission', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull().unique(), + description: t.text('description').notNull(), + is_wildcard: t.boolean('is_wildcard').notNull(), + ...timestamps +}); + +export const permissionsRelations = relations(permissions, ({ many }) => ({ + permissionToRoles: many(permissionsToRoles), + userToPermissions: many(usersToPermissions) +})); + +export type Permission = typeof permissions.$inferSelect; diff --git a/src/lib/server/db/schema/roles.ts b/src/lib/server/db/schema/roles.ts new file mode 100644 index 0000000..229126d --- /dev/null +++ b/src/lib/server/db/schema/roles.ts @@ -0,0 +1,18 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { permissionsToRoles, usersToRoles } from './schema'; + +export const roles = t.pgTable('role', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull().unique(), + description: t.text('description').notNull(), + ...timestamps +}); + +export const rolesRelations = relations(roles, ({ many }) => ({ + permissionsToRoles: many(permissionsToRoles), + usersToRoles: many(usersToRoles) +})); + +export type Role = typeof roles.$inferSelect; diff --git a/src/lib/server/db/schema/rounds.ts b/src/lib/server/db/schema/rounds.ts new file mode 100644 index 0000000..7d3a3f0 --- /dev/null +++ b/src/lib/server/db/schema/rounds.ts @@ -0,0 +1,35 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { type TModelWithRelations, timestamps } from '../util'; +import { brackets } from './brackets'; +import { matches } from './matches'; + +export const rounds = t.pgTable('rounds', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull(), + round_number: t.integer('round_number').notNull(), + nb_matches: t.integer('nb_matches').notNull(), + bracket_id: t + .uuid('bracket_id') + .references(() => brackets.id, { onDelete: 'cascade' }), + ...timestamps +}); + +export const roundsRelations = relations(rounds, ({ many, one }) => ({ + matches: many(matches), + bracket: one(brackets, { + fields: [rounds.bracket_id], + references: [brackets.id], + relationName: 'bracket' + }) +})); + +export type Round = typeof rounds.$inferSelect; + +export type RoundInsert = typeof rounds.$inferInsert; + +export type RoundWithRelations = TModelWithRelations<'rounds'>; + +export type RoundWithMatches = typeof rounds.$inferSelect & { + matches: (typeof matches.$inferSelect)[]; +}; diff --git a/src/lib/server/db/schema/schema.ts b/src/lib/server/db/schema/schema.ts new file mode 100644 index 0000000..5631208 --- /dev/null +++ b/src/lib/server/db/schema/schema.ts @@ -0,0 +1,102 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { permissions } from './permissions'; +import { roles } from './roles'; +import { users } from './users'; + +export const permissionsToRoles = t.pgTable( + 'permissions_to_roles', + { + permission_id: t + .uuid('permission_id') + .notNull() + .references(() => permissions.id), + role_id: t + .uuid('role_id') + .notNull() + .references(() => roles.id), + granted: t.boolean('granted').notNull(), + ...timestamps + }, + (table) => [t.primaryKey({ columns: [table.permission_id, table.role_id] })] +); + +export const permissionsToRolesRelations = relations( + permissionsToRoles, + ({ one }) => ({ + permission: one(permissions, { + fields: [permissionsToRoles.permission_id], + references: [permissions.id], + relationName: 'permissionRole' + }), + role: one(roles, { + fields: [permissionsToRoles.role_id], + references: [roles.id], + relationName: 'rolePermission' + }) + }) +); + +export const usersToRoles = t.pgTable( + 'users_to_roles', + { + user_id: t + .uuid('user_id') + .notNull() + .references(() => users.id), + role_id: t + .uuid('role_id') + .notNull() + .references(() => roles.id), + granted: t.boolean('granted').notNull(), + ...timestamps + }, + (table) => [t.primaryKey({ columns: [table.user_id, table.role_id] })] +); + +export const usersToRolesRelations = relations(usersToRoles, ({ one }) => ({ + user: one(users, { + fields: [usersToRoles.user_id], + references: [users.id], + relationName: 'userRole' + }), + role: one(roles, { + fields: [usersToRoles.role_id], + references: [roles.id], + relationName: 'roleUser' + }) +})); + +export const usersToPermissions = t.pgTable( + 'users_to_permissions', + { + user_id: t + .uuid('user_id') + .notNull() + .references(() => users.id), + permission_id: t + .uuid('permission_id') + .notNull() + .references(() => permissions.id), + granted: t.boolean('granted').notNull(), + ...timestamps + }, + (table) => [t.primaryKey({ columns: [table.user_id, table.permission_id] })] +); + +export const usersToPermissionsRelations = relations( + usersToPermissions, + ({ one }) => ({ + user: one(users, { + fields: [usersToPermissions.user_id], + references: [users.id], + relationName: 'userPermission' + }), + permission: one(permissions, { + fields: [usersToPermissions.permission_id], + references: [permissions.id], + relationName: 'permissionUser' + }) + }) +); diff --git a/src/lib/server/db/schema/sessions.ts b/src/lib/server/db/schema/sessions.ts new file mode 100644 index 0000000..588b690 --- /dev/null +++ b/src/lib/server/db/schema/sessions.ts @@ -0,0 +1,18 @@ +import * as t from 'drizzle-orm/pg-core'; +import { binaryHash, timestamps } from '../util'; +import { users } from './users'; + +export const sessions = t.pgTable('session', { + id: t.uuid('id').primaryKey(), + secret_hash: binaryHash('secret_hash').notNull(), + user_id: t + .uuid('user_id') + .notNull() + .references(() => users.id), + expires_at: t + .timestamp('expires_at', { withTimezone: true, mode: 'date' }) + .notNull(), + ...timestamps +}); + +export type Session = typeof sessions.$inferSelect; diff --git a/src/lib/server/db/schema/teams.ts b/src/lib/server/db/schema/teams.ts new file mode 100644 index 0000000..348bfa8 --- /dev/null +++ b/src/lib/server/db/schema/teams.ts @@ -0,0 +1,21 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { competitions } from './competitions'; + +export const teams = t.pgTable('teams', { + id: t.uuid('id').primaryKey().defaultRandom(), + name: t.text('name').notNull(), + competition_id: t.uuid('competition_id').notNull(), + ...timestamps +}); + +export const teamsRelations = relations(teams, ({ one }) => ({ + competition: one(competitions, { + fields: [teams.competition_id], + references: [competitions.id], + relationName: 'teamCompetition' + }) +})); + +export type Team = typeof teams.$inferSelect; diff --git a/src/lib/server/db/schema/users.ts b/src/lib/server/db/schema/users.ts new file mode 100644 index 0000000..8da2a46 --- /dev/null +++ b/src/lib/server/db/schema/users.ts @@ -0,0 +1,19 @@ +import { relations } from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import { timestamps } from '../util'; +import { usersToPermissions, usersToRoles } from './schema'; + +export const users = t.pgTable('user', { + id: t.uuid('id').primaryKey(), + username: t.text('username').notNull().unique(), + oauth_id: t.uuid('oauth_id').notNull(), + email: t.text('email').notNull().unique(), + ...timestamps +}); + +export const usersRelations = relations(users, ({ many }) => ({ + usersToPermissions: many(usersToPermissions), + usersToRoles: many(usersToRoles) +})); + +export type User = typeof users.$inferSelect; diff --git a/src/lib/server/db/util.ts b/src/lib/server/db/util.ts new file mode 100644 index 0000000..b90ef39 --- /dev/null +++ b/src/lib/server/db/util.ts @@ -0,0 +1,70 @@ +import type { + ExtractTablesWithRelations, + InferSelectModel, + Many +} from 'drizzle-orm'; +import * as t from 'drizzle-orm/pg-core'; +import type { schema } from '.'; + +export const timestamps = { + updated_at: t.timestamp({ withTimezone: true, mode: 'date' }).defaultNow(), + created_at: t + .timestamp({ withTimezone: true, mode: 'date' }) + .defaultNow() + .notNull(), + deleted_at: t.timestamp({ withTimezone: true, mode: 'date' }) +}; + +export const binaryHash = t.customType<{ data: Buffer; driverData: Buffer }>({ + dataType() { + return 'bytea'; + } +}); + +export type Schema = typeof schema; +export type TSchema = ExtractTablesWithRelations; + +// Helper type to find the tsName corresponding to a given dbName in TSchema +export type FindTsNameByDbName = { + [K in keyof TSchema]: TSchema[K] extends { dbName: DbNameToFind } ? K : never; +}[keyof TSchema]; + +/** + * Utility type to infer the model type for a given table name from the schema. + * Handles nested relations recursively. + * Uses referencedTableName (dbName) and FindTsNameByDbName helper. + */ +export type TModelWithRelations = + InferSelectModel & { + [K in keyof TSchema[TTableName]['relations']]?: TSchema[TTableName]['relations'][K] extends infer TRelation // Infer the Relation/Many type + ? // Extract the dbName from the relation's referencedTableName property + TRelation extends { + referencedTableName: infer TRefDbName extends string; + } + ? // Find the corresponding tsName using the helper + FindTsNameByDbName extends infer TRefTsName extends + keyof TSchema + ? // Check if the original relation was Many or Relation + TRelation extends Many + ? TModelWithRelations[] // Use the found tsName for recursion (Array) + : TModelWithRelations | null // Use the found tsName for recursion (Single | null) + : never // Could not find a tsName for the given dbName + : never // Could not extract referencedTableName (dbName) + : never; // Could not infer TRelation + }; + +// Example Usage (assuming you have 'users' and 'posts' tables with relations defined) +// Assumes 'users' schema object has a relation named 'posts' pointing to the 'posts' table, +// and 'posts' schema object has a relation named 'author' pointing to the 'users' table. + +// Example: Assuming schema.users has relations: { posts: Many } +// type UserWithPosts = TModelWithRelations<'users'>; + +/* Resulting type would be something like: +type UserWithPosts = InferSelectModel & { + posts?: (InferSelectModel & { + // any relations defined on posts would be nested here too + author?: (InferSelectModel & { ... }) | null // Example recursive relation + })[]; +} +*/ diff --git a/src/lib/server/tournament/double-elimination.ts b/src/lib/server/tournament/double-elimination.ts new file mode 100644 index 0000000..c17cb03 --- /dev/null +++ b/src/lib/server/tournament/double-elimination.ts @@ -0,0 +1,696 @@ +import { and, desc, eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; +import { BracketType, MatchStatus, SchedulingMode } from '@/types'; +import { db } from '../db'; +import { brackets } from '../db/schema/brackets'; +import { fields } from '../db/schema/fields'; +import { type Match, matches } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import { rounds } from '../db/schema/rounds'; +import type { Team } from '../db/schema/teams'; +import { BaseTournamentGenerator, type SeededTeam } from './types'; + +export class DoubleEliminationGenerator extends BaseTournamentGenerator { + getMode(): SchedulingMode { + return SchedulingMode.double; + } + + /** + * Generate brackets for a double elimination tournament + * Double elimination requires both winners and losers brackets + */ + async generateBrackets(): Promise { + // Insert the winner's bracket + const [winnersBracket] = await db + .insert(brackets) + .values({ + id: v7(), + name: 'Winners Bracket', + bracketType: BracketType.WINNER, + position: 1, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.double + }) + .returning(); + + // Insert the losers bracket + const [losersBracket] = await db + .insert(brackets) + .values({ + id: v7(), + name: 'Losers Bracket', + bracketType: BracketType.LOSER, + position: 2, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.double + }) + .returning(); + + return [winnersBracket.id, losersBracket.id]; + } + + /** + * Generate rounds for a specific bracket in a double elimination tournament + */ + async generateRounds(bracketId: string): Promise { + // Get the bracket to determine if it's winners or losers bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, bracketId)); + + if (!bracket) { + throw new Error(`Bracket not found: ${bracketId}`); + } + + const isWinnersBracket = bracket.bracketType === BracketType.WINNER; + const createdRounds: RoundInsert[] = []; + + // Calculate the number of rounds needed + const roundsInWinnersBracket = Math.ceil(Math.log2(this.teamsCount)); + + // For winners bracket + if (isWinnersBracket) { + // Create all rounds for the winners bracket + for (let i = 0; i < roundsInWinnersBracket; i++) { + const roundNumber = i + 1; + let roundName = ''; + + // Name rounds appropriately + if (i === roundsInWinnersBracket - 1) { + roundName = 'Winners Finals'; + } else if (i === roundsInWinnersBracket - 2) { + roundName = 'Winners Semi-Finals'; + } else { + roundName = `Winners Round ${roundNumber}`; + } + + // Calculate matches in this round + const matchesInRound = Math.floor(this.teamsCount / 2 ** i); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + + // Add a Grand Finals round for the winners bracket + const grandFinalsRound: RoundInsert = { + name: 'Grand Finals', + round_number: roundsInWinnersBracket + 1, + nb_matches: 1, + bracket_id: bracketId + }; + + const [insertedGrandFinals] = await db + .insert(rounds) + .values(grandFinalsRound) + .returning(); + createdRounds.push(insertedGrandFinals); + + // Add a potential reset bracket for the Grand Finals (if loser of winners bracket wins) + const resetRound: RoundInsert = { + name: 'Grand Finals Reset', + round_number: roundsInWinnersBracket + 2, + nb_matches: 1, + bracket_id: bracketId + }; + + const [insertedReset] = await db + .insert(rounds) + .values(resetRound) + .returning(); + createdRounds.push(insertedReset); + } + // For losers bracket + else { + // Losers bracket has 2 * log2(n) - 1 rounds + const totalLosersRounds = 2 * roundsInWinnersBracket - 1; + + for (let i = 0; i < totalLosersRounds; i++) { + const roundNumber = i + 1; + let roundName = ''; + + // Name rounds appropriately + if (i === totalLosersRounds - 1) { + roundName = 'Losers Finals'; + } else if (i === totalLosersRounds - 2) { + roundName = 'Losers Semi-Finals'; + } else { + roundName = `Losers Round ${roundNumber}`; + } + + // Calculate matches in this round - more complex for losers bracket + // In double elimination, losers bracket structure depends on the round + let matchesInRound: number; + + if (i % 2 === 0) { + // Rounds where losers from winners bracket enter + matchesInRound = Math.floor( + this.teamsCount / 2 ** (Math.floor(i / 2) + 1) + ); + } else { + // Rounds where losers bracket teams play each other + matchesInRound = Math.floor( + this.teamsCount / 2 ** (Math.floor(i / 2) + 2) + ); + } + + // Ensure at least 1 match + matchesInRound = Math.max(1, matchesInRound); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + } + + return createdRounds; + } + + /** + * Generate matches for the first round of a bracket + */ + async generateMatches(roundId: string, teams: Team[]): Promise { + // Get the round + const [round] = await db + .select() + .from(rounds) + .where(eq(rounds.id, roundId)); + + if (!round) { + throw new Error(`Round not found: ${roundId}`); + } + + if (!round.bracket_id) { + throw new Error(`Round ${roundId} has no bracket`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, round.bracket_id)); + + if (!bracket) { + throw new Error(`Bracket not found for round: ${roundId}`); + } + + // Get a default field + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // For winners bracket first round, seed teams appropriately + if ( + bracket.bracketType === BracketType.WINNER && + round.round_number === 1 + ) { + // Create seeded teams + const seededTeams: SeededTeam[] = teams.map((team, index) => ({ + teamId: team.id, + seed: index + 1 + })); + + // Generate optimal pairings for single elimination (same as first round of double elimination) + const pairings = this.createDoubleEliminationPairings(seededTeams); + + // Create matches + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + return { + id: v7(), + match_number: index + 1, + field_id: defaultField.id, + team1_id: pairing.team1Id, + team2_id: pairing.team2Id || '00000000-0000-0000-0000-000000000000', // Default "bye" UUID if needed + winner_id: null, + start_date: now, + end_date: endTime, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + position: index + 1, + table: 0, // Not relevant for elimination tournaments + round_id: roundId, + bracket_id: bracket.id, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert matches and return them + const createdMatches = await db + .insert(matches) + .values(matchesToCreate) + .returning(); + return createdMatches; + } + + // For losers bracket first round, this is generated based on results from winners bracket + // This would be handled separately by a specialized method + + throw new Error( + 'For rounds after the first round or losers bracket, use generateNextRound' + ); + } + + /** + * Generate the next round based on previous round results + * This is complex for double elimination as it involves tracking both winners and losers + */ + async generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise { + // Get the previous round + const [previousRound] = await db + .select() + .from(rounds) + .where(eq(rounds.id, previousRoundId)); + + if (!previousRound) { + throw new Error(`Previous round not found: ${previousRoundId}`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, bracketId)); + + if (!bracket) { + throw new Error(`Bracket not found: ${bracketId}`); + } + + // Get all rounds in the current bracket + const allRounds = await db + .select() + .from(rounds) + .where(eq(rounds.bracket_id, bracketId)) + .orderBy(rounds.round_number); + + // Find the next round + const nextRound = allRounds.find( + (r) => r.round_number === previousRound.round_number + 1 + ); + + if (!nextRound) { + // This could happen if we're at the final round of a bracket + return null; + } + + // Get previous round's matches + const previousMatches = await db + .select() + .from(matches) + .where(eq(matches.round_id, previousRoundId)) + .orderBy(matches.position); + + // Check if all matches have results + const allMatchesComplete = previousMatches.every( + (match) => match.winner_id + ); + if (!allMatchesComplete) { + throw new Error( + 'Cannot generate next round until all matches in the current round have winners' + ); + } + + // Default field + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Handle based on bracket type + if (bracket.bracketType === BracketType.WINNER) { + // For winners bracket, winners advance to next round + const matchesToCreate: Match[] = []; + + // Special case for Grand Finals + if (nextRound.name === 'Grand Finals') { + // Get winners bracket finalist + const winnersBracketFinalist = previousMatches[0].winner_id; + if (!winnersBracketFinalist) { + throw new Error('No winners bracket finalist found'); + } + + // Get losers bracket finalist + const losersBrackets = await db + .select() + .from(brackets) + .where( + and( + eq(brackets.competition_id, this.competitionId), + eq(brackets.bracketType, BracketType.LOSER) + ) + ); + + if (losersBrackets.length === 0) { + throw new Error('No losers bracket found for grand finals'); + } + + const losersFinals = await db + .select() + .from(rounds) + .where(eq(rounds.bracket_id, losersBrackets[0].id)) + .orderBy(desc(rounds.round_number)) + .limit(1); + + if (losersFinals.length === 0) { + throw new Error('No losers finals found'); + } + + const losersFinalsMatches = await db + .select() + .from(matches) + .where(eq(matches.round_id, losersFinals[0].id)); + + if ( + losersFinalsMatches.length === 0 || + !losersFinalsMatches[0].winner_id + ) { + throw new Error('Losers finalist not determined yet'); + } + + const losersBracketFinalist = losersFinalsMatches[0].winner_id; + + // Create grand finals match + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + matchesToCreate.push({ + id: v7(), + match_number: 1, + team1_id: winnersBracketFinalist, + team2_id: losersBracketFinalist, + start_date: now, + end_date: endTime, + position: 1, + table: 0, + round_id: nextRound.id, + bracket_id: bracketId, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }); + } + // For Reset bracket (if loser's bracket winner wins grand finals) + else if (nextRound.name === 'Grand Finals Reset') { + // This would be triggered after grand finals if the loser's bracket winner wins + // Implementation depends on your reset bracket logic + } + // Normal winners bracket progression + else { + // Create next round matches by pairing winners + for (let i = 0; i < nextRound.nb_matches; i++) { + const team1Id = previousMatches[i * 2].winner_id; + const team2Id = previousMatches[i * 2 + 1].winner_id; + + if (!team1Id || !team2Id) { + throw new Error('Missing team IDs'); + } + + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + matchesToCreate.push({ + id: v7(), + match_number: i + 1, + team1_id: team1Id, + team2_id: team2Id, + start_date: now, + end_date: endTime, + position: i + 1, + table: 0, + round_id: nextRound.id, + bracket_id: bracketId, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }); + } + + // Also send losers to the losers bracket + await this.sendLosersToLosersBracket( + previousMatches, + previousRound.round_number + ); + } + + if (matchesToCreate.length > 0) { + await db.insert(matches).values(matchesToCreate); + } + } else if (bracket.bracketType === BracketType.LOSER) { + // Losers bracket logic is more complex and depends on the round + // In odd-numbered rounds, losers from winners bracket join + // In even-numbered rounds, losers bracket teams face each other + + const matchesToCreate: Match[] = []; + + // Logic varies based on the round number + if (previousRound.round_number % 2 === 1) { + // In odd rounds, winners advance to next round + for (let i = 0; i < nextRound.nb_matches; i++) { + // If there are enough matches in the previous round + if (i * 2 + 1 < previousMatches.length) { + const team1Id = previousMatches[i * 2].winner_id; + const team2Id = previousMatches[i * 2 + 1].winner_id; + + if (!team1Id || !team2Id) { + throw new Error('Missing team IDs'); + } + + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + matchesToCreate.push({ + id: v7(), + match_number: i + 1, + team1_id: team1Id, + team2_id: team2Id, + start_date: now, + end_date: endTime, + position: i + 1, + table: 0, + round_id: nextRound.id, + bracket_id: bracketId, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }); + } + } + } else { + // In even rounds, losers from winners bracket join + // This requires looking up the corresponding winners bracket matches + // Implementation would depend on your exact double elimination structure + // This is a complex part that varies by tournament design + } + + if (matchesToCreate.length > 0) { + await db.insert(matches).values(matchesToCreate); + } + } + + return nextRound; + } + + /** + * Send losers from winners bracket to losers bracket + * This is a key part of double elimination + */ + private async sendLosersToLosersBracket( + winnersBracketMatches: any[], + winnersRoundNumber: number + ): Promise { + // Get the losers bracket + const [losersBracket] = await db + .select() + .from(brackets) + .where( + and( + eq(brackets.competition_id, this.competitionId), + eq(brackets.bracketType, BracketType.LOSER) + ) + ); + + if (!losersBracket) { + throw new Error('No losers bracket found'); + } + + // Find the appropriate losers bracket round + // In standard double elimination, losers from winners round N go to losers round 2N-1 + const targetLosersRound = winnersRoundNumber * 2 - 1; + + const [losersRound] = await db + .select() + .from(rounds) + .where( + and( + eq(rounds.bracket_id, losersBracket.id), + eq(rounds.round_number, targetLosersRound) + ) + ); + + if (!losersRound) { + throw new Error( + `No losers round found for winners round ${winnersRoundNumber}` + ); + } + + // Get a default field + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Create matches in the losers bracket with the losers from winners bracket + const matchesToCreate: Match[] = []; + let matchCount = 0; + + // For each match in the winners bracket, get the loser + for (let i = 0; i < winnersBracketMatches.length; i++) { + const match = winnersBracketMatches[i]; + if (!match.winner_id) continue; + + // Determine the loser + const loserId = + match.winner_id === match.team1_id ? match.team2_id : match.team1_id; + + // In first losers round, each loser gets their own match (often with a bye) + if (targetLosersRound === 1) { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + matchesToCreate.push({ + id: v7(), + match_number: matchCount + 1, + team1_id: loserId, + team2_id: '00000000-0000-0000-0000-000000000000', // Initial bye or determined by bracket structure + start_date: now, + end_date: endTime, + position: matchCount + 1, + table: 0, + round_id: losersRound.id, + bracket_id: losersBracket.id, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }); + + matchCount++; + } + // In later rounds, losers typically play against survivors from previous losers rounds + // This would be handled in the main generateNextRound method for the losers bracket + } + + if (matchesToCreate.length > 0) { + await db.insert(matches).values(matchesToCreate); + } + } + + /** + * Create optimal pairings for the first round of double elimination + * Uses standard tournament seeding to ensure balanced bracket + */ + private createDoubleEliminationPairings( + seededTeams: SeededTeam[] + ): { team1Id: string; team2Id: string | null }[] { + // For first round, use same seeding as single elimination + const totalTeamsInFullBracket = 2 ** this.calculateRoundsNeeded(); + const pairings: { team1Id: string; team2Id: string | null }[] = []; + + // Sort teams by seed + const sortedTeams = [...seededTeams].sort((a, b) => a.seed - b.seed); + + // If we need to give byes, calculate them + const teamsWithByes = sortedTeams.slice( + 0, + 2 * sortedTeams.length - totalTeamsInFullBracket + ); + const teamsWithoutByes = sortedTeams.slice(teamsWithByes.length); + + // Add matches for teams with direct advancement (byes) + for (const team of teamsWithByes) { + pairings.push({ + team1Id: team.teamId, + team2Id: null // Bye + }); + } + + // Create standard bracket pairings for remaining teams + for (let i = 0; i < teamsWithoutByes.length; i += 2) { + pairings.push({ + team1Id: teamsWithoutByes[i].teamId, + team2Id: teamsWithoutByes[i + 1].teamId + }); + } + + return pairings; + } +} diff --git a/src/lib/server/tournament/double-round-robin.ts b/src/lib/server/tournament/double-round-robin.ts new file mode 100644 index 0000000..83d767d --- /dev/null +++ b/src/lib/server/tournament/double-round-robin.ts @@ -0,0 +1,266 @@ +import { eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; +import { BracketType, MatchStatus, SchedulingMode } from '@/types'; +import { db } from '../db'; +import { brackets } from '../db/schema/brackets'; +import { fields } from '../db/schema/fields'; +import { type Match, matches } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import { rounds } from '../db/schema/rounds'; +import type { Team } from '../db/schema/teams'; +import { BaseTournamentGenerator } from './types'; + +export class DoubleRoundRobinGenerator extends BaseTournamentGenerator { + getMode(): SchedulingMode { + return SchedulingMode.double_round_robin; + } + + /** + * Generate a single main bracket for double round robin + */ + async generateBrackets(): Promise { + const [bracket] = await db + .insert(brackets) + .values({ + id: v7(), + name: 'Main Bracket', + bracketType: BracketType.MAIN, + position: 1, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.double_round_robin + }) + .returning(); + + return [bracket.id]; + } + + /** + * Generate all rounds for a double round robin tournament + * In double round robin, each team plays against every other team twice + * (once home, once away) + */ + async generateRounds(bracketId: string): Promise { + // Number of rounds needed = 2 * (n-1) where n is the number of teams + const totalRounds = 2 * (this.teamsCount - 1); + const createdRounds: RoundInsert[] = []; + + for (let i = 0; i < totalRounds; i++) { + const roundNumber = i + 1; + const roundName = `Round ${roundNumber}`; + + // Each round has floor(n/2) matches + const matchesInRound = Math.floor(this.teamsCount / 2); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + + return createdRounds; + } + + /** + * Generate matches for a double round robin tournament + * This extends the round robin algorithm to create two sets of matches + * with home/away teams reversed in the second half + */ + async generateMatches(roundId: string, teams: Team[]): Promise { + // Get the round + const [round] = await db + .select() + .from(rounds) + .where(eq(rounds.id, roundId)); + + if (!round) { + throw new Error(`Round not found: ${roundId}`); + } + + if (!round.bracket_id) { + throw new Error(`Round ${roundId} has no bracket`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, round.bracket_id)); + + if (!bracket) { + throw new Error(`Bracket not found for round: ${roundId}`); + } + + // Default field (could be enhanced to assign different fields) + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Generate pairings using the circle method + const singleRoundRobinRounds = this.teamsCount - 1; + const isSecondHalf = round.round_number > singleRoundRobinRounds; + + // For second half, we need to flip home/away teams + const effectiveRoundNumber = isSecondHalf + ? round.round_number - singleRoundRobinRounds + : round.round_number; + + // Generate pairings for this round + const pairings = this.generateRoundRobinPairings( + teams, + effectiveRoundNumber + ); + + // Create match objects + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + // For the second half of matches, swap team1 and team2 to reverse home/away + const [team1Id, team2Id] = isSecondHalf + ? [pairing.team2Id, pairing.team1Id] + : [pairing.team1Id, pairing.team2Id]; + + return { + id: v7(), + match_number: index + 1, + team1_id: team1Id, + team2_id: team2Id, + start_date: now, + end_date: endTime, + position: index + 1, + table: index + 1, // Table assignment + round_id: roundId, + bracket_id: bracket.id, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert matches and return them + const createdMatches = await db + .insert(matches) + .values(matchesToCreate) + .returning(); + return createdMatches; + } + + /** + * In double round robin, there's no "next round" generation based on results + * All rounds are created at the beginning + */ + async generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise { + // Get the previous round + const [previousRound] = await db + .select() + .from(rounds) + .where(eq(rounds.id, previousRoundId)); + + if (!previousRound) { + throw new Error(`Previous round not found: ${previousRoundId}`); + } + + // Get all rounds in the bracket + const allRounds = await db + .select() + .from(rounds) + .where(eq(rounds.bracket_id, bracketId)) + .orderBy(rounds.round_number); + + // Check if this was the final round + if (previousRound.round_number === allRounds.length) { + return null; // Tournament is complete + } + + // Find the next round + const nextRound = allRounds.find( + (r) => r.round_number === previousRound.round_number + 1 + ); + + if (!nextRound) { + throw new Error( + `Next round not found for round ${previousRound.round_number}` + ); + } + + return nextRound; + } + + /** + * Generate pairings for a round robin tournament using the circle method + * In this method, one team stays fixed (team at index 0) and others rotate clockwise + */ + private generateRoundRobinPairings(teams: Team[], roundNumber: number) { + // If odd number of teams, add a "bye" team + if (teams.length % 2 !== 0) { + teams.push({ + id: '00000000-0000-0000-0000-000000000000', + name: '', + created_at: new Date(Date.now()), + updated_at: null, + deleted_at: null, + competition_id: '' + }); // Bye team ID + } + + const n = teams.length; + const pairings: { team1Id: string; team2Id: string }[] = []; + + // Create a copy of the teams array that we can manipulate + const teamsForRound = [...teams]; + + // Rotate the teams (except the first one) based on the round number + // For round 1, use teams as is + // For subsequent rounds, rotate teams[1...n-1] clockwise + if (roundNumber > 1) { + // Apply rotation (roundNumber - 1) times + for (let i = 0; i < roundNumber - 1; i++) { + const lastTeam = teamsForRound.pop(); + if (!lastTeam) { + throw new Error('No last team found'); + } + teamsForRound.splice(1, 0, lastTeam); + } + } + + // Create pairings for this round + for (let i = 0; i < n / 2; i++) { + // Match teams[i] with teams[n-1-i] + pairings.push({ + team1Id: teamsForRound[i].id, + team2Id: teamsForRound[n - 1 - i].id + }); + } + + // Filter out pairings with the bye team + return pairings.filter( + (pairing) => + pairing.team1Id !== '00000000-0000-0000-0000-000000000000' && + pairing.team2Id !== '00000000-0000-0000-0000-000000000000' + ); + } +} diff --git a/src/lib/server/tournament/index.ts b/src/lib/server/tournament/index.ts new file mode 100644 index 0000000..ee31a52 --- /dev/null +++ b/src/lib/server/tournament/index.ts @@ -0,0 +1,33 @@ +import { SchedulingMode } from '../../../types'; +import { DoubleEliminationGenerator } from './double-elimination'; +import { DoubleRoundRobinGenerator } from './double-round-robin'; +import { RoundRobinGenerator } from './round-robin'; +import { SingleEliminationGenerator } from './single-elimination'; +import { SwissGenerator } from './swiss'; +import type { TournamentGenerator } from './types'; + +/** + * Factory function to create the appropriate tournament generator based on the scheduling mode + */ +export function createTournamentGenerator( + mode: SchedulingMode, + competitionId: string, + teamsCount: number +): TournamentGenerator { + switch (mode) { + case SchedulingMode.single: + return new SingleEliminationGenerator(competitionId, teamsCount); + case SchedulingMode.double: + return new DoubleEliminationGenerator(competitionId, teamsCount); + case SchedulingMode.swiss: + return new SwissGenerator(competitionId, teamsCount); + case SchedulingMode.round_robin: + return new RoundRobinGenerator(competitionId, teamsCount); + case SchedulingMode.double_round_robin: + return new DoubleRoundRobinGenerator(competitionId, teamsCount); + default: + throw new Error(`Unsupported scheduling mode: ${mode}`); + } +} + +export * from './types'; diff --git a/src/lib/server/tournament/round-robin.ts b/src/lib/server/tournament/round-robin.ts new file mode 100644 index 0000000..6144f1c --- /dev/null +++ b/src/lib/server/tournament/round-robin.ts @@ -0,0 +1,247 @@ +import { eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; +import { BracketType, MatchStatus, SchedulingMode } from '@/types'; +import { db } from '../db'; +import { brackets, schedulingModes } from '../db/schema/brackets'; +import { fields } from '../db/schema/fields'; +import { type Match, matches } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import { rounds } from '../db/schema/rounds'; +import type { Team } from '../db/schema/teams'; +import { BaseTournamentGenerator } from './types'; + +export class RoundRobinGenerator extends BaseTournamentGenerator { + getMode(): SchedulingMode { + return SchedulingMode.round_robin; + } + + /** + * Generate a single main bracket for round robin + */ + async generateBrackets(): Promise { + const [bracket] = await db + .insert(brackets) + .values({ + id: v7(), + name: 'Main Bracket', + bracketType: BracketType.MAIN, + position: 1, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.round_robin + }) + .returning(); + + return [bracket.id]; + } + + /** + * Generate all rounds for a round robin tournament + * In round robin, each team plays against every other team once + */ + async generateRounds(bracketId: string): Promise { + // Number of rounds needed = n-1 where n is the number of teams + const totalRounds = this.teamsCount - 1; + const createdRounds: RoundInsert[] = []; + + for (let i = 0; i < totalRounds; i++) { + const roundNumber = i + 1; + const roundName = `Round ${roundNumber}`; + + // Each round has floor(n/2) matches + const matchesInRound = Math.floor(this.teamsCount / 2); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + + return createdRounds; + } + + /** + * Generate matches for a round robin tournament using the circle method + * This creates optimal pairings for each round + */ + async generateMatches(roundId: string, teams: Team[]): Promise { + // Get the round + const [round] = await db + .select() + .from(rounds) + .where(eq(rounds.id, roundId)); + + if (!round) { + throw new Error(`Round not found: ${roundId}`); + } + + if (!round.bracket_id) { + throw new Error(`Round ${roundId} has no bracket`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, round.bracket_id)); + + if (!bracket) { + throw new Error(`Bracket not found for round: ${roundId}`); + } + + // Default field (could be enhanced to assign different fields) + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Generate pairings using the circle method + const pairings = this.generateRoundRobinPairings(teams, round.round_number); + + // Create match objects + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); // Default 1-hour match + + return { + id: v7(), + match_number: index + 1, + team1_id: pairing.team1Id, + team2_id: pairing.team2Id, + start_date: now, + end_date: endTime, + position: index + 1, + table: index + 1, // Table assignment (could be enhanced) + round_id: roundId, + bracket_id: bracket.id, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert matches and return them + const createdMatches = await db + .insert(matches) + .values(matchesToCreate) + .returning(); + return createdMatches; + } + + /** + * In round robin, there's no "next round" generation based on results + * All rounds are created at the beginning + */ + async generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise { + // Get the previous round + const [previousRound] = await db + .select() + .from(rounds) + .where(eq(rounds.id, previousRoundId)); + + if (!previousRound) { + throw new Error(`Previous round not found: ${previousRoundId}`); + } + + // Get all rounds in the bracket + const allRounds = await db + .select() + .from(rounds) + .where(eq(rounds.bracket_id, bracketId)) + .orderBy(rounds.round_number); + + // Check if this was the final round + if (previousRound.round_number === allRounds.length) { + return null; // Tournament is complete + } + + // Find the next round + const nextRound = allRounds.find( + (r) => r.round_number === previousRound.round_number + 1 + ); + + if (!nextRound) { + throw new Error( + `Next round not found for round ${previousRound.round_number}` + ); + } + + return nextRound; + } + + /** + * Generate pairings for a round robin tournament using the circle method + * In this method, one team stays fixed (team at index 0) and others rotate clockwise + */ + private generateRoundRobinPairings(teams: Team[], roundNumber: number) { + // If odd number of teams, add a "bye" team + if (teams.length % 2 !== 0) { + teams.push({ + id: '00000000-0000-0000-0000-000000000000', + name: '', + created_at: new Date(Date.now()), + updated_at: null, + deleted_at: null, + competition_id: '' + }); // Bye team ID + } + + const n = teams.length; + const pairings: { team1Id: string; team2Id: string }[] = []; + + // Create a copy of the teams array that we can manipulate + const teamsForRound = [...teams]; + + // Rotate the teams (except the first one) based on the round number + // For round 1, use teams as is + // For subsequent rounds, rotate teams[1...n-1] clockwise + if (roundNumber > 1) { + // Apply rotation (roundNumber - 1) times + for (let i = 0; i < roundNumber - 1; i++) { + const lastTeam = teamsForRound.pop(); + if (!lastTeam) { + throw new Error('No last team found'); + } + teamsForRound.splice(1, 0, lastTeam); + } + } + + // Create pairings for this round + for (let i = 0; i < n / 2; i++) { + // Match teams[i] with teams[n-1-i] + pairings.push({ + team1Id: teamsForRound[i].id, + team2Id: teamsForRound[n - 1 - i].id + }); + } + + // Filter out pairings with the bye team + return pairings.filter( + (pairing) => + pairing.team1Id !== '00000000-0000-0000-0000-000000000000' && + pairing.team2Id !== '00000000-0000-0000-0000-000000000000' + ); + } +} diff --git a/src/lib/server/tournament/single-elimination.ts b/src/lib/server/tournament/single-elimination.ts new file mode 100644 index 0000000..8e91f12 --- /dev/null +++ b/src/lib/server/tournament/single-elimination.ts @@ -0,0 +1,321 @@ +import { eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; +import { BracketType, MatchStatus, SchedulingMode } from '@/types'; +import { db } from '../db'; +import { brackets } from '../db/schema/brackets'; +import { fields } from '../db/schema/fields'; +import { type Match, matches } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import { rounds } from '../db/schema/rounds'; +import type { Team } from '../db/schema/teams'; +import { BaseTournamentGenerator, type SeededTeam } from './types'; + +export class SingleEliminationGenerator extends BaseTournamentGenerator { + getMode(): SchedulingMode { + return SchedulingMode.single; + } + + /** + * Generate a single bracket for the single elimination tournament + */ + async generateBrackets(): Promise { + // Insert the winner's bracket + const [bracket] = await db + .insert(brackets) + .values({ + name: 'Winner Bracket', + bracketType: BracketType.WINNER, + position: 1, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.single + }) + .returning(); + + return [bracket.id]; + } + + /** + * Generate all rounds needed for a single elimination tournament + */ + async generateRounds(bracketId: string): Promise { + const totalRounds = this.calculateRoundsNeeded(); + const createdRounds: RoundInsert[] = []; + + for (let i = 0; i < totalRounds; i++) { + const roundNumber = i + 1; + let roundName = ''; + + // Name the rounds appropriately + if (i === totalRounds - 1) { + roundName = 'Final'; + } else if (i === totalRounds - 2) { + roundName = 'Semi-Finals'; + } else if (i === totalRounds - 3) { + roundName = 'Quarter-Finals'; + } else { + roundName = `Round ${roundNumber}`; + } + + // Calculate number of matches in this round + const matchesInRound = Math.floor(this.teamsCount / 2 ** i); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + // Insert the round + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + + return createdRounds; + } + + /** + * Generate matches for the first round of a single elimination tournament + * For subsequent rounds, use generateNextRound + */ + async generateMatches(roundId: string, teams: Team[]): Promise { + // Get the round + const [round] = await db + .select() + .from(rounds) + .where(eq(rounds.id, roundId)); + + if (!round) { + throw new Error(`Round not found: ${roundId}`); + } + + if (!round.bracket_id) { + throw new Error(`Round has no bracket: ${roundId}`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, round.bracket_id)); + + if (!bracket) { + throw new Error(`Bracket not found for round: ${roundId}`); + } + + // Seed the teams (this is a simple seeding, could be enhanced) + const seededTeams: SeededTeam[] = teams.map((team, index) => ({ + teamId: team.id, + seed: index + 1 + })); + + // Distribute teams according to standard tournament seeding + const pairings = this.createSingleEliminationPairings( + seededTeams, + round.round_number + ); + + // Default field (could be enhanced to assign different fields) + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Create match objects + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); // Default 1-hour match + + return { + id: v7(), + match_number: index + 1, + team1_id: pairing.team1Id, + team2_id: pairing.team2Id || '00000000-0000-0000-0000-000000000000', // Default "bye" UUID if needed + start_date: now, + end_date: endTime, + position: index + 1, + table: 0, // Not relevant for elimination tournaments + round_id: roundId, + bracket_id: bracket.id, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert matches and return them + const createdMatches = await db + .insert(matches) + .values(matchesToCreate) + .returning(); + return createdMatches; + } + + /** + * Generate the next round based on the results of a previous round + */ + async generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise { + // Get the previous round + const [previousRound] = await db + .select() + .from(rounds) + .where(eq(rounds.id, previousRoundId)); + + if (!previousRound) { + throw new Error(`Previous round not found: ${previousRoundId}`); + } + + // Check if this was the final round + if (previousRound.nb_matches === 1) { + return null; // Tournament is complete + } + + // Get the previous round's matches + const previousMatches = await db + .select() + .from(matches) + .where(eq(matches.round_id, previousRoundId)) + .orderBy(matches.position); + + // Check if all matches have winners + const allMatchesComplete = previousMatches.every( + (match) => match.winner_id + ); + + if (!allMatchesComplete) { + throw new Error( + 'Cannot generate next round until all matches in the current round have winners' + ); + } + + // Create the next round + const nextRoundNumber = previousRound.round_number + 1; + const nextRoundMatchCount = Math.floor(previousRound.nb_matches / 2); + + let roundName = ''; + if (nextRoundMatchCount === 1) { + roundName = 'Final'; + } else if (nextRoundMatchCount === 2) { + roundName = 'Semi-Finals'; + } else if (nextRoundMatchCount === 4) { + roundName = 'Quarter-Finals'; + } else { + roundName = `Round ${nextRoundNumber}`; + } + + const nextRoundData: RoundInsert = { + name: roundName, + round_number: nextRoundNumber, + nb_matches: nextRoundMatchCount, + bracket_id: bracketId + }; + + // Insert the next round + const [nextRound] = await db + .insert(rounds) + .values(nextRoundData) + .returning(); + + // Create matches for the next round + const nextRoundMatches: Match[] = []; + + // Create pairings for the next round based on winners + for (let i = 0; i < nextRoundMatchCount; i++) { + const team1Id = previousMatches[i * 2].winner_id; + const team2Id = previousMatches[i * 2 + 1].winner_id; + + if (!team1Id || !team2Id) { + throw new Error('Missing winner ID for matches'); + } + + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + // Get the same field from previous match or default + const field_id = previousMatches[i].field_id; + + nextRoundMatches.push({ + id: v7(), + match_number: i + 1, + team1_id: team1Id, + team2_id: team2Id, + start_date: now, + end_date: endTime, + position: i + 1, + table: 0, + round_id: nextRound.id, + bracket_id: bracketId, + field_id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }); + } + + // Insert the matches for the next round + await db.insert(matches).values(nextRoundMatches); + + return nextRound; + } + + /** + * Creates optimal pairings for a single elimination tournament + * Uses the standard tournament bracket seeding algorithm + */ + private createSingleEliminationPairings( + seededTeams: SeededTeam[], + roundNumber: number + ): { team1Id: string; team2Id: string | null }[] { + // Handle first round with proper seeding + if (roundNumber === 1) { + const totalTeamsInFullBracket = seededTeams.length; + const pairings: { team1Id: string; team2Id: string | null }[] = []; + const nextPowerOfTwo = 1 << Math.ceil(Math.log2(totalTeamsInFullBracket)); + // Sort teams by seed + const sortedTeams = [...seededTeams].sort((a, b) => a.seed - b.seed); + + if (sortedTeams.length % 2 !== 0) { + sortedTeams.push({ + teamId: '00000000-0000-0000-0000-000000000000', + seed: sortedTeams.length + 1 + }); + } + + for (let i = 0; i < nextPowerOfTwo; i += 2) { + pairings.push({ + team1Id: sortedTeams[i].teamId, + team2Id: sortedTeams[i + 1].teamId + }); + } + + return pairings; + } + + // For other rounds, this should not be called directly + // Use generateNextRound instead + throw new Error('Use generateNextRound for rounds after the first round'); + } +} diff --git a/src/lib/server/tournament/swiss.ts b/src/lib/server/tournament/swiss.ts new file mode 100644 index 0000000..ec7b0ff --- /dev/null +++ b/src/lib/server/tournament/swiss.ts @@ -0,0 +1,520 @@ +import { and, eq } from 'drizzle-orm'; +import { v7 } from 'uuid'; +import { BracketType, MatchStatus, SchedulingMode } from '@/types'; +import { db } from '../db'; +import { brackets } from '../db/schema/brackets'; +import { fields } from '../db/schema/fields'; +import { type Match, matches } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import { rounds } from '../db/schema/rounds'; +import { type Team, teams } from '../db/schema/teams'; +import { BaseTournamentGenerator } from './types'; + +export class SwissGenerator extends BaseTournamentGenerator { + getMode(): SchedulingMode { + return SchedulingMode.swiss; + } + + /** + * Generate a single main bracket for Swiss tournament + */ + async generateBrackets(): Promise { + const [bracket] = await db + .insert(brackets) + .values({ + name: 'Swiss Bracket', + bracketType: BracketType.MAIN, + position: 1, + isActive: true, + competition_id: this.competitionId, + scheduling_mode: SchedulingMode.swiss + }) + .returning(); + + return [bracket.id]; + } + + /** + * Generate rounds for a Swiss tournament + * In Swiss, the number of rounds is typically log2(n), where n is the number of teams + * This ensures that a single undefeated team will emerge + */ + async generateRounds(bracketId: string): Promise { + // Recommended number of rounds is log2(n) rounded up + const recommendedRounds = Math.ceil(Math.log2(this.teamsCount)); + const totalRounds = Math.min(recommendedRounds, this.teamsCount - 1); + const createdRounds: RoundInsert[] = []; + + for (let i = 0; i < totalRounds; i++) { + const roundNumber = i + 1; + const roundName = `Round ${roundNumber}`; + + // Each round has floor(n/2) matches + const matchesInRound = Math.floor(this.teamsCount / 2); + + const roundData: RoundInsert = { + name: roundName, + round_number: roundNumber, + nb_matches: matchesInRound, + bracket_id: bracketId + }; + + const [insertedRound] = await db + .insert(rounds) + .values(roundData) + .returning(); + createdRounds.push(insertedRound); + } + + return createdRounds; + } + + /** + * Generate matches for a Swiss tournament + * First round is random or seeded pairings + * Subsequent rounds are handled by generateNextRound + */ + async generateMatches(roundId: string, teams: Team[]): Promise { + // Get the round + const [round] = await db + .select() + .from(rounds) + .where(eq(rounds.id, roundId)); + + if (!round) { + throw new Error(`Round not found: ${roundId}`); + } + + if (!round.bracket_id) { + throw new Error(`Round ${roundId} has no bracket`); + } + + // Get the bracket + const [bracket] = await db + .select() + .from(brackets) + .where(eq(brackets.id, round.bracket_id)); + + if (!bracket) { + throw new Error(`Bracket not found for round: ${roundId}`); + } + + // Default field (could be enhanced to assign different fields) + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // For first round, generate random pairings + // In a real implementation, this could be seeded pairings + const pairings = this.generateFirstRoundPairings(teams); + + // Create match objects + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); // Default 1-hour match + + return { + id: v7(), + match_number: index + 1, + team1_id: pairing.team1.id, + team2_id: pairing.team2?.id || '00000000-0000-0000-0000-000000000000', // Default "bye" UUID if needed + start_date: now, + end_date: endTime, + position: index + 1, + table: index + 1, // Table assignment + round_id: roundId, + bracket_id: bracket.id, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert matches and return them + const createdMatches = await db + .insert(matches) + .values(matchesToCreate) + .returning(); + return createdMatches; + } + + /** + * Generate the next round based on current standings + * This is the core of the Swiss system - pair teams with similar records + */ + async generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise { + // Get the previous round + const [previousRound] = await db + .select() + .from(rounds) + .where(eq(rounds.id, previousRoundId)); + + if (!previousRound) { + throw new Error(`Previous round not found: ${previousRoundId}`); + } + + // Get all rounds in the bracket + const allRounds = await db + .select() + .from(rounds) + .where(eq(rounds.bracket_id, bracketId)) + .orderBy(rounds.round_number); + + // Check if this was the final round + if (previousRound.round_number === allRounds.length) { + return null; // Tournament is complete + } + + // Find the next round + const nextRound = allRounds.find( + (r) => r.round_number === previousRound.round_number + 1 + ); + + if (!nextRound) { + throw new Error( + `Next round not found for round ${previousRound.round_number}` + ); + } + + // Calculate standings to generate pairings + const standings = await this.calculateStandings(bracketId); + + // Generate pairings based on standings + const pairings = this.generateSwissPairings(standings); + + // Default field + const [defaultField] = await db + .select() + .from(fields) + .where(eq(fields.competition_id, this.competitionId)) + .limit(1); + + if (!defaultField) { + throw new Error('No field available for matches'); + } + + // Create matches for the next round + const matchesToCreate: Match[] = pairings.map((pairing, index) => { + const now = new Date(); + const endTime = new Date(now); + endTime.setHours(endTime.getHours() + 1); + + return { + id: v7(), + match_number: index + 1, + team1_id: pairing.team1Id, + team2_id: pairing.team2Id || '00000000-0000-0000-0000-000000000000', + start_date: now, + end_date: endTime, + position: index + 1, + table: index + 1, + round_id: nextRound.id, + bracket_id: bracketId, + field_id: defaultField.id, + score1: 0, + score2: 0, + status: MatchStatus.PENDING, + winner_id: null, + created_at: now, + updated_at: null, + deleted_at: null + }; + }); + + // Insert the matches for the next round + await db.insert(matches).values(matchesToCreate); + + return nextRound; + } + + /** + * Generate pairings for the first round + * In Swiss, the first round can be random or seeded + */ + private generateFirstRoundPairings( + teams: Team[] + ): { team1: Team; team2: Team | null }[] { + const pairings: { team1: Team; team2: Team | null }[] = []; + + // Handle odd number of teams + if (teams.length % 2 !== 0) { + // Give the bye to a random team + const byeTeamIndex = Math.floor(Math.random() * teams.length); + const byeTeam = teams.splice(byeTeamIndex, 1)[0]; + pairings.push({ team1: byeTeam, team2: null }); + } + + // Shuffle the remaining teams for random pairings + // In a real system, this could be seeded based on team rankings + this.shuffleArray(teams); + + // Create pairings + for (let i = 0; i < teams.length; i += 2) { + pairings.push({ + team1: teams[i], + team2: teams[i + 1] + }); + } + + return pairings; + } + + /** + * Calculate current standings for all teams + * This is a key component for Swiss pairings + */ + private async calculateStandings(bracketId: string): Promise { + // Get all completed matches in the bracket + const completedMatches = await db + .select() + .from(matches) + .where( + and( + eq(matches.bracket_id, bracketId), + eq(matches.status, MatchStatus.FINISHED) + ) + ); + + // Get all teams in the competition + const teamList = await db + .select() + .from(teams) + .where(eq(teams.competition_id, this.competitionId)); + + // Calculate standings + const standings: Record = {}; + + // Initialize standings for all teams + teamList.forEach((team) => { + standings[team.id] = { + teamId: team.id, + wins: 0, + losses: 0, + draws: 0, + points: 0, + opponentWinPercentage: 0, // For tiebreakers + previousOpponents: [] + }; + }); + + // Update standings based on match results + completedMatches.forEach((match) => { + const team1 = standings[match.team1_id]; + const team2 = standings[match.team2_id]; + + // Record that these teams played each other + if (team1 && team2) { + team1.previousOpponents.push(match.team2_id); + team2.previousOpponents.push(match.team1_id); + } + + // If there's a winner, update win/loss records + if (match.winner_id) { + if (match.winner_id === match.team1_id) { + if (team1) { + team1.wins++; + team1.points += 3; // Typical scoring: 3 points for a win + } + if (team2) { + team2.losses++; + } + } else { + if (team2) { + team2.wins++; + team2.points += 3; + } + if (team1) { + team1.losses++; + } + } + } else if (match.score1 === match.score2) { + // Draw + if (team1) { + team1.draws++; + team1.points += 1; // Typical scoring: 1 point for a draw + } + if (team2) { + team2.draws++; + team2.points += 1; + } + } + }); + + // Calculate opponent win percentage (Buchholz tiebreaker) + Object.values(standings).forEach((standing) => { + if (standing.previousOpponents.length > 0) { + const opponentWins = standing.previousOpponents.reduce( + (sum, opponentId) => { + return sum + (standings[opponentId]?.wins || 0); + }, + 0 + ); + const opponentMatches = standing.previousOpponents.reduce( + (sum, opponentId) => { + const opponent = standings[opponentId]; + return ( + sum + + (opponent ? opponent.wins + opponent.losses + opponent.draws : 0) + ); + }, + 0 + ); + + standing.opponentWinPercentage = + opponentMatches > 0 ? opponentWins / opponentMatches : 0; + } + }); + + return Object.values(standings); + } + + /** + * Generate Swiss pairings based on current standings + * Pairs teams with similar records while avoiding rematches + */ + private generateSwissPairings( + standings: TeamStanding[] + ): { team1Id: string; team2Id: string | null }[] { + // Sort standings by points (descending), then by tiebreaker + const sortedStandings = [...standings].sort((a, b) => { + if (a.points !== b.points) { + return b.points - a.points; // Sort by points (descending) + } + return b.opponentWinPercentage - a.opponentWinPercentage; // Then by opponent win % + }); + + const pairings: { team1Id: string; team2Id: string | null }[] = []; + const unpairedTeams = [...sortedStandings]; + + // Handle odd number of teams + if (unpairedTeams.length % 2 !== 0) { + // Find the lowest-ranked team without a bye yet + // In a real implementation, you would track byes across rounds + const byeTeamIndex = unpairedTeams.length - 1; + const byeTeam = unpairedTeams.splice(byeTeamIndex, 1)[0]; + pairings.push({ team1Id: byeTeam.teamId, team2Id: null }); + } + + // Group teams by points + const teamsByPoints: Record = {}; + unpairedTeams.forEach((team) => { + if (!teamsByPoints[team.points]) { + teamsByPoints[team.points] = []; + } + teamsByPoints[team.points].push(team); + }); + + // Sort point groups in descending order + const pointGroups = Object.keys(teamsByPoints) + .map(Number) + .sort((a, b) => b - a); + + // Try to pair within same point group first + for (const points of pointGroups) { + const teamsInGroup = teamsByPoints[points]; + + // For each team in this group + while (teamsInGroup.length > 0) { + const team1 = teamsInGroup.shift(); + if (!team1) { + break; + } + let paired = false; + + // Try to find a valid opponent in the same group + for (let i = 0; i < teamsInGroup.length; i++) { + const team2 = teamsInGroup[i]; + + // Check if these teams have already played each other + if (!team1.previousOpponents.includes(team2.teamId)) { + // Valid pairing found + teamsInGroup.splice(i, 1); + pairings.push({ team1Id: team1.teamId, team2Id: team2.teamId }); + paired = true; + break; + } + } + + // If no valid pairing found in the same group + if (!paired) { + // Put this team back and we'll handle cross-group pairings later + teamsInGroup.unshift(team1); + break; + } + } + } + + // Handle remaining unpaired teams (cross-group pairings) + const remainingTeams = pointGroups.flatMap( + (points) => teamsByPoints[points] + ); + + while (remainingTeams.length > 0) { + const team1 = remainingTeams.shift(); + + if (!team1) { + break; + } + + // Find the best opponent that hasn't already played against team1 + let bestOpponentIndex = -1; + + for (let i = 0; i < remainingTeams.length; i++) { + if (!team1.previousOpponents.includes(remainingTeams[i].teamId)) { + bestOpponentIndex = i; + break; + } + } + + // If no valid opponent is found, this shouldn't happen with proper implementation + // In a real system, you might relax constraints or create a "forced" pairing + if (bestOpponentIndex === -1) { + bestOpponentIndex = 0; // Force a rematch as last resort + } + + const team2 = remainingTeams.splice(bestOpponentIndex, 1)[0]; + pairings.push({ team1Id: team1.teamId, team2Id: team2.teamId }); + } + + return pairings; + } + + /** + * Utility function to shuffle an array (Fisher-Yates algorithm) + */ + private shuffleArray(array: T[]): T[] { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + return array; + } +} + +/** + * Interface representing a team's standing in a Swiss tournament + */ +interface TeamStanding { + teamId: string; + wins: number; + losses: number; + draws: number; + points: number; + opponentWinPercentage: number; + previousOpponents: string[]; +} diff --git a/src/lib/server/tournament/types.ts b/src/lib/server/tournament/types.ts new file mode 100644 index 0000000..37601e7 --- /dev/null +++ b/src/lib/server/tournament/types.ts @@ -0,0 +1,100 @@ +import type { BracketType, SchedulingMode } from '@/types'; +import type { Match } from '../db/schema/matches'; +import type { RoundInsert } from '../db/schema/rounds'; +import type { Team } from '../db/schema/teams'; + +/** + * Interface for generating tournament structures + */ +export interface TournamentGenerator { + /** + * Get the scheduling mode this generator implements + */ + getMode(): SchedulingMode; + + /** + * Generate the bracket structure needed for this tournament type + * Returns an array of bracket IDs that were created + */ + generateBrackets(): Promise; + + /** + * Generate all rounds for a specific bracket + * @param bracketId The bracket to generate rounds for + */ + generateRounds(bracketId: string): Promise; + + /** + * Generate all matches for a specific round + * @param roundId The round to generate matches for + * @param teams Array of team IDs participating in the tournament + */ + generateMatches(roundId: string, teams: Team[]): Promise; + + /** + * Generate the next round based on previous round results + * @param previousRoundId ID of the previous round + * @param bracketId ID of the bracket + */ + generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise; +} + +/** + * Represents a team seeded in the tournament + */ +export interface SeededTeam { + teamId: string; + seed: number; +} + +/** + * Configuration for bracket generation + */ +export interface BracketConfig { + name: string; + bracketType: BracketType; + position: number; + isActive: boolean; +} + +/** + * Base class for all tournament generators + */ +export abstract class BaseTournamentGenerator implements TournamentGenerator { + protected competitionId: string; + protected teamsCount: number; + + constructor(competitionId: string, teamsCount: number) { + this.competitionId = competitionId; + this.teamsCount = teamsCount; + } + + abstract getMode(): SchedulingMode; + abstract generateBrackets(): Promise; + abstract generateRounds(bracketId: string): Promise; + abstract generateMatches(roundId: string, teams: Team[]): Promise; + abstract generateNextRound( + previousRoundId: string, + bracketId: string + ): Promise; + + /** + * Calculate the number of rounds needed for a single elimination tournament + */ + protected calculateRoundsNeeded(): number { + return Math.ceil(Math.log2(this.teamsCount)); + } + + /** + * Calculate the number of matches in the first round + */ + protected calculateFirstRoundMatches(): number { + const roundsNeeded = this.calculateRoundsNeeded(); + const fullBracketTeams = 2 ** roundsNeeded; + const byes = fullBracketTeams - this.teamsCount; + return this.teamsCount - byes; + } +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..cc59364 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,28 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type WithoutChild = T extends { child?: any } ? Omit : T; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type WithoutChildren = T extends { children?: any } + ? Omit + : T; +export type WithoutChildrenOrChild = WithoutChildren>; +export type WithElementRef = T & { + ref?: U | null; +}; + +export function formatDate(date: Date) { + return date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + }); +} +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const instanceOf = (value: any, fieldName: string): value is T => + fieldName in value; diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts new file mode 100644 index 0000000..b9300a6 --- /dev/null +++ b/src/routes/+layout.server.ts @@ -0,0 +1,9 @@ +import type { LayoutServerLoad } from './$types'; + +export const load: LayoutServerLoad = ({ locals }) => { + return { + user: locals.user, + roles: locals.roles, + permissions: locals.permissions + }; +}; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..b40bb24 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,23 @@ + + + + +{@render children()} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..e63de8c --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1,14 @@ +import { browser } from '$app/environment'; +import '$lib/i18n'; // Import to initialize. Important :) +import { locale, waitLocale } from 'svelte-i18n'; +import type { LayoutLoad, LayoutLoadEvent } from './$types'; + +export const load: LayoutLoad = async ({ data }: LayoutLoadEvent) => { + if (browser) { + locale.set(window.navigator.language); + } + await waitLocale(); + + // return server data + return data; +}; diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..4f6eedf --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,28 @@ +import { getCompetitionsWithAll } from '@/lib/server/db/queries/competitions'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ locals }) => { + // Check if user is authenticated + const user = locals.user; + + // If user is not authenticated, return an empty array for competitions + if (!user) { + return { + competitions: [] + }; + } + + try { + // Fetch competitions from the database + const userCompetitions = getCompetitionsWithAll(); + + return { + competitions: await userCompetitions + }; + } catch (error) { + console.error('Error fetching competitions:', error); + return { + competitions: [] + }; + } +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..4610eb6 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,204 @@ + + + + Home - FlbxCup + + + + +
    + +
    +

    + Welcome to FlbxCup +

    +

    + Your platform for managing competitions, teams, and scheduling all in one place. +

    + {#if !user} +
    + + +
    + {/if} +
    + + +
    +
    +

    Competitions

    + {#if user} + + {/if} +
    + + {#if !user} +
    +

    Sign in to view available competitions

    +

    + Access all competitions, teams, and match schedules by signing in to your account. +

    +
    + +
    +
    + {:else} + {#await data.competitions} +
    + {#each Array(3) as _} + + + + + + +
    + + + +
    +
    + + + +
    + {/each} +
    + {:then competitions} + {#if data.competitions.length === 0} + + +

    No competitions found

    +
    + + + +
    + {:else} +
    + {#each competitions as competition} + + +
    +
    + {competition.name} + ID: {competition.id} +
    + + {competition.teams?.length || 0} Teams + +
    +
    + +

    {competition.description}

    +
    +
    + + {formatDate(competition.start_date)} +
    +
    + + {competition.location} +
    +
    + + {competition.teams?.length || 0} teams registered max +
    +
    +
    + + + +
    + {/each} +
    + {/if} + {:catch error} + {toast(error)} + {/await} + {/if} +
    + + +
    +

    Platform Features

    +
    + + + Competition Management + + +

    + Create and manage competitions with customizable settings, team limits, and scheduling + options. +

    +
    +
    + + + Team Registration + + +

    + Streamline team registration with custom forms, roster management, and team + communication tools. +

    +
    +
    + + + Smart Scheduling + + +

    + Automatically generate fair match schedules, manage fields, and handle complex + tournament formats. +

    +
    +
    +
    +
    +
    +
    diff --git a/src/routes/api/competitions/[id]/+server.ts b/src/routes/api/competitions/[id]/+server.ts new file mode 100644 index 0000000..44472d8 --- /dev/null +++ b/src/routes/api/competitions/[id]/+server.ts @@ -0,0 +1,88 @@ +import { getBracketsByListIds } from '@/lib/server/db/queries/brackets'; +import { getCompetitionWithAll } from '@/lib/server/db/queries/competitions'; +import type { RoundInsert } from '@/lib/server/db/schema/rounds'; +import { createTournamentGenerator } from '@/lib/server/tournament'; +import { SchedulingMode } from '@/types'; +import type { RequestHandler } from './$types'; + +export const POST: RequestHandler = async ({ request, params, locals }) => { + // get body from request + // get competition id from url + const body = await request.json(); + let competitionId: string; + try { + competitionId = params.id; + } catch { + throw new Error('Invalid competition id'); + } + if (competitionId === '') { + throw new Error('Invalid competition id'); + } + + // get competition + const competition = await getCompetitionWithAll(competitionId); + + if (!competition) { + throw new Error('Competition not found'); + } + + if (competition.owner !== locals.user.id) { + throw new Error('YYou are not the owner of this competition'); + } + + let schedulingMode: SchedulingMode; + let name: string; + let size: number; + + try { + schedulingMode = + SchedulingMode[body.scheduling_mode as keyof typeof SchedulingMode]; + name = body.name; + size = body.size; + } catch { + throw new Error('Invalid scheduling mode'); + } + + // generate bracket + const tournamentGenerator = createTournamentGenerator( + schedulingMode, + competitionId, + size + ); + const bracketsIds = await tournamentGenerator.generateBrackets(); + if (bracketsIds.length === 0) { + throw new Error('No brackets created'); + } + const brackets = await getBracketsByListIds(bracketsIds, {}); + + if (brackets.length === 0) { + throw new Error('No brackets created'); + } + + let rounds: RoundInsert[] = []; + + const firstRoundOfBracket: RoundInsert[] = []; + + for (const bracketId of bracketsIds) { + const roundInserts = await tournamentGenerator.generateRounds(bracketId); + rounds = [...rounds, ...roundInserts]; + firstRoundOfBracket.push(roundInserts[0]); + } + + // only generate first round matches of each bracket + brackets.forEach(async (_, index) => { + if (!firstRoundOfBracket[index].id) { + throw new Error('First round of bracket not found'); + } + await tournamentGenerator.generateMatches( + firstRoundOfBracket[index].id, + competition.teams + ); + }); + + return new Response(JSON.stringify(brackets), { + headers: { + 'Content-Type': 'application/json' + } + }); +}; diff --git a/src/routes/auth/callback/+server.ts b/src/routes/auth/callback/+server.ts new file mode 100644 index 0000000..0654762 --- /dev/null +++ b/src/routes/auth/callback/+server.ts @@ -0,0 +1,122 @@ +import type { RequestEvent } from '@sveltejs/kit'; +import { decodeIdToken, type OAuth2Tokens } from 'arctic'; +import { eq } from 'drizzle-orm'; +import { v7 as uuid } from 'uuid'; +import { + createSession, + keycloak, + setSessionTokenCookie +} from '$lib/server/auth'; +import { db } from '$lib/server/db'; +import { type User, users } from '$lib/server/db/schema/users'; + +export async function GET(event: RequestEvent): Promise { + const code = event.url.searchParams.get('code'); + const state = event.url.searchParams.get('state'); + const storedState = event.cookies.get('keycloak_oauth_state') ?? null; + const codeVerifier = event.cookies.get('keycloak_code_verifier') ?? null; + if ( + code === null || + state === null || + storedState === null || + codeVerifier === null + ) { + return new Response(null, { + status: 400 + }); + } + if (state !== storedState) { + return new Response(null, { + status: 400 + }); + } + + let tokens: OAuth2Tokens; + try { + tokens = await keycloak.validateAuthorizationCode(code, codeVerifier); + } catch { + // Invalid code or client credentials + return new Response(null, { + status: 400 + }); + } + const claims = decodeIdToken(tokens.idToken()); + if ( + !( + 'sub' in claims && + typeof claims.sub === 'string' && + 'name' in claims && + typeof claims.name === 'string' && + 'email' in claims && + typeof claims.email === 'string' + ) + ) { + // Invalid token + return new Response(null, { + status: 400 + }); + } + const keycloakUserId = claims.sub; + const username = claims.name; + const email = claims.email; + + // TODO: Replace this with your own DB query. + const existingUser = await getUserFromKeycloakId(keycloakUserId); + + if (existingUser !== null) { + const session = await createSession(existingUser.id); + setSessionTokenCookie(event, session.token, session.session.expires_at); + return new Response(null, { + status: 302, + headers: { + Location: '/' + } + }); + } + + const user = await createUser(keycloakUserId, username, email); + + const session = await createSession(user.id); + setSessionTokenCookie(event, session.token, session.session.expires_at); + return new Response(null, { + status: 302, + headers: { + Location: '/' + } + }); +} + +async function getUserFromKeycloakId( + keycloakUserId: string +): Promise { + const [result] = await db + .select({ + user: users + }) + .from(users) + .where(eq(users.oauth_id, keycloakUserId)); + return result ? result.user : null; +} + +async function createUser( + keycloakUserId: string, + username: string, + email: string +): Promise { + const [result] = await db + .insert(users) + .values({ + id: uuid(), + oauth_id: keycloakUserId, + username, + email, + created_at: new Date(Date.now()), + deleted_at: new Date(), + updated_at: new Date(Date.now()) + }) + .returning(); + + // add user to default role + + return result; +} diff --git a/src/routes/auth/login/+server.ts b/src/routes/auth/login/+server.ts new file mode 100644 index 0000000..d1e3c92 --- /dev/null +++ b/src/routes/auth/login/+server.ts @@ -0,0 +1,32 @@ +import type { RequestEvent } from '@sveltejs/kit'; +import { generateCodeVerifier, generateState } from 'arctic'; +import { keycloak } from '$lib/server/auth'; + +export async function GET(event: RequestEvent): Promise { + const state = generateState(); + const codeVerifier = generateCodeVerifier(); + const url = keycloak.createAuthorizationURL(state, codeVerifier, [ + 'openid', + 'profile' + ]); + + event.cookies.set('keycloak_oauth_state', state, { + path: '/', + httpOnly: true, + maxAge: 60 * 10, // 10 minutes + sameSite: 'lax' + }); + event.cookies.set('keycloak_code_verifier', codeVerifier, { + path: '/', + httpOnly: true, + maxAge: 60 * 10, // 10 minutes + sameSite: 'lax' + }); + + return new Response(null, { + status: 302, + headers: { + Location: url.toString() + } + }); +} diff --git a/src/routes/auth/logout/+server.ts b/src/routes/auth/logout/+server.ts new file mode 100644 index 0000000..50bdb57 --- /dev/null +++ b/src/routes/auth/logout/+server.ts @@ -0,0 +1,15 @@ +import { redirect } from '@sveltejs/kit'; +import * as auth from '$lib/server/auth'; +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ url, locals, cookies }) => { + if (!locals.session) { + return new Response(null, { + status: 302, + headers: { Location: url.origin } + }); + } + await auth.invalidateSession(locals.session.id); + auth.deleteSessionTokenCookie(cookies); + return redirect(302, '/'); +}; diff --git a/src/routes/competitions/[id]/+page.server.ts b/src/routes/competitions/[id]/+page.server.ts new file mode 100644 index 0000000..4b09724 --- /dev/null +++ b/src/routes/competitions/[id]/+page.server.ts @@ -0,0 +1,261 @@ +import { error, redirect } from '@sveltejs/kit'; +import { and, eq } from 'drizzle-orm'; +import { superValidate } from 'sveltekit-superforms'; +import { zod } from 'sveltekit-superforms/adapters'; +import { getCompetitionWithAll } from '@/lib/server/db/queries/competitions'; +import { fields } from '@/lib/server/db/schema/fields'; +import { db } from '$lib/server/db'; +import { competitions } from '$lib/server/db/schema/competitions'; +import { teams } from '$lib/server/db/schema/teams'; +import type { Actions, PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ params, locals }) => { + try { + const competition = await getCompetitionWithAll(params.id); + + if (!competition) { + throw error(404, 'Competition not found'); + } + + if (competition.owner !== locals.user.id) { + throw error(403, 'You are not authorized to view this competition'); + } + + return { + competition: competition + }; + } catch { + return redirect(302, '/'); + } +}; + +export const actions = { + addTeam: async (event) => { + const data = await event.request.formData(); + + const teamName = data.get('team_name')?.toString(); + + if (!teamName) { + throw error(400, 'Team name is required'); + } + + // get competition id from url + const id = event.params.id; + + if (id === '') { + throw error(400, 'Invalid competition id'); + } + + let [competition] = await db + .select() + .from(competitions) + .leftJoin(teams, eq(competitions.id, teams.competition_id)) + .where( + and( + eq(competitions.id, id), + eq(competitions.owner, event.locals.user.id) + ) + ); + + if (!competition) { + throw error(404, 'Competition not found'); + } + + // add team to competition's teams array + await db.insert(teams).values({ + competition_id: id, + name: teamName + }); + const comp = await getCompetitionWithAll(id); + + if (!comp || comp.owner !== event.locals.user.id) { + throw error(403, 'You are not authorized to update this competition'); + } + + return { + comp + }; + }, + deleteTeam: async (event) => { + const data = await event.request.formData(); + + const team = data.get('id')?.toString(); + + if (!team) { + throw error(400, 'Team name is required'); + } + + const teamId = team; + + // get competition id from url + const id = event.params.id; + + if (id === '') { + throw error(400, 'Invalid competition id'); + } + + let [competition] = await db + .select() + .from(competitions) + .leftJoin(teams, eq(competitions.id, teams.competition_id)) + .where( + and( + eq(competitions.id, id), + eq(competitions.owner, event.locals.user.id) + ) + ); + + if (!competition) { + throw error(404, 'Competition not found'); + } + + // remove team to competition's teams array + await db + .delete(teams) + .where(and(eq(teams.id, teamId), eq(teams.competition_id, id))); + const comp = await getCompetitionWithAll(id); + + if (!comp || comp.owner !== event.locals.user.id) { + throw error(403, 'You are not authorized to update this competition'); + } + + return { + comp + }; + }, + updateDescription: async (event) => { + const data = await event.request.formData(); + const description = data.get('description')?.toString(); + + // get competition id from url + const id = event.params.id; + + if (id === '') { + console.log(id); + throw error(400, 'Invalid competition id'); + } + + let [competition] = await db + .select() + .from(competitions) + .leftJoin(teams, eq(competitions.id, teams.competition_id)) + .where( + and( + eq(competitions.id, id), + eq(competitions.owner, event.locals.user.id) + ) + ); + + if (!competition) { + console.log(competition); + throw error(404, 'Competition not found'); + } + + // update competition's description + await db + .update(competitions) + .set({ description }) + .where(eq(competitions.id, id)); + + const comp = await getCompetitionWithAll(id); + + if (!comp || comp.owner !== event.locals.user.id) { + throw error(403, 'You are not authorized to update this competition'); + } + + return { + comp + }; + }, + addField: async (event) => { + const data = await event.request.formData(); + + const fieldName = data.get('field_name')?.toString(); + + if (!fieldName) { + throw error(400, 'Field name is required'); + } + + // get competition id from url + const id = event.params.id; + + if (id === '') { + throw error(400, 'Invalid competition id'); + } + + let [competition] = await db + .select() + .from(competitions) + .leftJoin(fields, eq(competitions.id, fields.competition_id)) + .where( + and( + eq(competitions.id, id), + eq(competitions.owner, event.locals.user.id) + ) + ); + + if (!competition) { + throw error(404, 'Competition not found'); + } + + // add field to competition's fields array + await db.insert(fields).values({ + competition_id: id, + name: fieldName + }); + const comp = await getCompetitionWithAll(id); + + if (!comp || comp.owner !== event.locals.user.id) { + throw error(403, 'You are not authorized to update this competition'); + } + + return { + comp + }; + }, + deleteField: async (event) => { + const data = await event.request.formData(); + + const fieldId = data.get('id')?.toString(); + + if (!fieldId) { + throw error(400, 'Team name is required'); + } + + // get competition id from url + const id = event.params.id; + + if (id === '') { + throw error(400, 'Invalid competition id'); + } + + let [competition] = await db + .select() + .from(competitions) + .leftJoin(fields, eq(competitions.id, fields.competition_id)) + .where( + and( + eq(competitions.id, id), + eq(competitions.owner, event.locals.user.id) + ) + ); + + if (!competition) { + throw error(404, 'Competition not found'); + } + + // remove team to competition's teams array + await db + .delete(fields) + .where(and(eq(fields.id, fieldId), eq(fields.competition_id, id))); + const comp = await getCompetitionWithAll(id); + + if (!comp || comp.owner !== event.locals.user.id) { + throw error(403, 'You are not authorized to update this competition'); + } + + return { + comp + }; + } +} satisfies Actions; diff --git a/src/routes/competitions/[id]/+page.svelte b/src/routes/competitions/[id]/+page.svelte new file mode 100644 index 0000000..8de67a6 --- /dev/null +++ b/src/routes/competitions/[id]/+page.svelte @@ -0,0 +1,309 @@ + + + + {competition.name} | Competition Details + + + +
    +
    +
    +
    +

    {competition.name}

    +

    + {#if competition.description} + {competition.description} + {:else} + No description available + {/if} +

    +
    +
    + + Created: {formatDate(new Date(competition.created_at))} +
    +
    + + + {formatDate(new Date(competition.start_date))} + + {#if competition.location} + + + {competition.location} + + {/if} + + + Teams: {competition.teams?.length || 0} + + + + {formatDate(new Date(competition.start_date))} + +
    +
    + {#if competition.updated_at} +
    + + Updated: {formatDate(new Date(competition.updated_at))} +
    + {/if} +
    +
    +
    + +
    +
    + + +
    + + General + Brackets + + +
    + + + + + +

    Teams

    +
    + + {#if !competition.teams || competition.teams.length === 0} +

    No teams have been added yet

    + {:else} +
    + {#each competition.teams as team} +
    + +
    + + + {team.name} +
    + + +
    + {/each} +
    + {/if} + {#if showInputTeam} +
    + + +
    + {/if} +
    + + + +
    + +

    Fields

    + {#if !competition.fields || competition.fields.length === 0} +

    No Fields have been added yet

    + {:else} +
    + {#each competition.fields as field (field.id)} +
    +
    +
    + + + {field.name} +
    + +
    +
    + {/each} +
    + {/if} + {#if showInputField} +
    + + +
    + {/if}
    + +
    +
    + + + {#if showAddBracket || !competition.brackets || competition.brackets.length === 0} + + {:else} + {#each competition.brackets as bracket (bracket.id)} + + {/each} + {/if} + +
    +
    +
    diff --git a/src/routes/competitions/[id]/bracket/[bracket_id]/+page.server.ts b/src/routes/competitions/[id]/bracket/[bracket_id]/+page.server.ts new file mode 100644 index 0000000..c514e25 --- /dev/null +++ b/src/routes/competitions/[id]/bracket/[bracket_id]/+page.server.ts @@ -0,0 +1,34 @@ +import { getBracketWithRoundsAndMatches } from '@/lib/server/db/queries/brackets'; +import { getCompetition } from '@/lib/server/db/queries/competitions'; +import { getRound } from '@/lib/server/db/queries/rounds'; +import { getTeamsByCompetition } from '@/lib/server/db/queries/teams'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ params, locals }) => { + const competitionId = params.id; + const bracketId = params.bracket_id; + const { user } = locals; + if (!user) { + throw new Error('Unauthorized'); + } + if (competitionId === '') { + throw new Error('Invalid competition id'); + } + if (bracketId === '') { + throw new Error('Invalid round id'); + } + + const competition = await getCompetition(competitionId); + if (!competition) { + throw new Error('Invalid competition'); + } + if (competition.owner !== locals.user.id) { + throw new Error('Unauthorized'); + } + const bracket = await getBracketWithRoundsAndMatches(bracketId); + if (!bracket) { + throw new Error('Invalid round'); + } + + return { competition: competition, bracket }; +}; diff --git a/src/routes/competitions/[id]/bracket/[bracket_id]/+page.svelte b/src/routes/competitions/[id]/bracket/[bracket_id]/+page.svelte new file mode 100644 index 0000000..b7340fd --- /dev/null +++ b/src/routes/competitions/[id]/bracket/[bracket_id]/+page.svelte @@ -0,0 +1,37 @@ + + + + {#if data.bracket.scheduling_mode === SchedulingMode.single} + + {:else if data.bracket.scheduling_mode === SchedulingMode.double} + double + {:else if data.bracket.scheduling_mode === SchedulingMode.round_robin} + round_robin + {:else if data.bracket.scheduling_mode === SchedulingMode.swiss} + swiss + {:else if data.bracket.scheduling_mode === SchedulingMode.double_round_robin} + double_round_robin + {/if} + diff --git a/src/routes/competitions/new/+page.server.ts b/src/routes/competitions/new/+page.server.ts new file mode 100644 index 0000000..f7ab1a9 --- /dev/null +++ b/src/routes/competitions/new/+page.server.ts @@ -0,0 +1,55 @@ +import { fail, redirect } from '@sveltejs/kit'; +import { db } from '$lib/server/db'; +import { competitions } from '$lib/server/db/schema/competitions'; +import type { Actions } from './$types'; + +export const actions = { + default: async (event) => { + const data = await event.request.formData(); + + console.log('data', data); + const name = data.get('name')?.toString(); + const description = data.get('description')?.toString() || null; + const startDateStr = data.get('start_date')?.toString(); + const location = data.get('location')?.toString() || null; + + // Validate required fields + if (!name) { + console.log('name', name); + return fail(400, { error: 'Competition name is required' }); + } + + if (!startDateStr) { + console.log('startDateStr', startDateStr); + return fail(400, { error: 'Start date is required' }); + } + + let startDate: Date; + try { + startDate = new Date(startDateStr); + if (Number.isNaN(startDate.getTime())) { + console.log('startDate', startDate); + throw new Error('Invalid date'); + } + } catch { + console.log('invalid start date format'); + return fail(400, { error: 'Invalid start date format' }); + } + + // Create the competition + const [competition] = await db + .insert(competitions) + .values({ + name, + description, + start_date: startDate, + location, + owner: event.locals.user.id, + created_at: new Date(), + updated_at: new Date() + }) + .returning(); + + throw redirect(303, `/competitions/${competition.id}`); + } +} satisfies Actions; diff --git a/src/routes/competitions/new/+page.svelte b/src/routes/competitions/new/+page.svelte new file mode 100644 index 0000000..e4f5deb --- /dev/null +++ b/src/routes/competitions/new/+page.svelte @@ -0,0 +1,183 @@ + + + + Create Competition | FlbxCup + + + +
    +
    +
    +
    + +
    +

    Create New Competition

    +

    Set up your tournament and start competing

    +
    + + + + + + Competition Details + + Fill in the information below to create your competition + + +
    +
    + +
    + + + {#if errors.name} +

    {errors.name}

    + {/if} +
    + + +
    + +
    + +
    + {#if errors.start_date} +

    {errors.start_date}

    + {/if} +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    + {#if errors.max_number_teams} +

    {errors.max_number_teams}

    + {/if} +
    +
    + + +
    + +