feat(movies): switch provider to TMDb and store full actor image URLs\n\n- Add TmdbMovieProvider (v3 endpoints, v4 Bearer auth); set TMDb as default provider\n- Update config/movies.php with TMDb image base and profile size; add TMDB_PROFILE_SIZE\n- Upsert: persist actor profile_path as FULL TMDb CDN URL; backfill existing rows\n- Migrations: add actors.profile_path and backfill full URLs\n- Models: allow mass-assign profile_path on Actor\n- Admin: default provider from config; comments and docs updated\n- Frontend: show actor image on /actors/{id}; minor TMDb wording fixes in admin UI\n- Docs: update root and Movies module READMEs; env example for TMDb\n- Tests: adjust for TMDb defaults and provider IDs\n\nIncludes updated public/build assets and manifest.

This commit is contained in:
Funky Waddle 2025-12-07 01:28:02 -06:00
parent 3013bb5740
commit 6ca368c237
65 changed files with 737 additions and 325 deletions

View file

@ -20,10 +20,18 @@ LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug LOG_LEVEL=debug
# Movies / OMDb # Movies Provider (tmdb by default)
OMDB_API_KEY= MOVIES_PROVIDER=tmdb
OMDB_LANGUAGE=en-US
OMDB_CACHE_TTL=3600 # TMDb (The Movie Database)
# Use a TMDb v4 Read Access Token (Bearer) for API access.
TMDB_API_TOKEN=
TMDB_LANGUAGE=en-US
TMDB_CACHE_TTL=3600
TMDB_IMAGE_BASE=https://image.tmdb.org/t/p/
TMDB_POSTER_SIZE=w500
TMDB_BACKDROP_SIZE=w780
TMDB_PROFILE_SIZE=w185
DB_CONNECTION=sqlite DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1 # DB_HOST=127.0.0.1

45
.github/workflows/lint.yml vendored Normal file
View file

@ -0,0 +1,45 @@
name: linter
on:
push:
branches:
- develop
- main
pull_request:
branches:
- develop
- main
permissions:
contents: write
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
- name: Install Dependencies
run: |
composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
npm install
- name: Run Pint
run: vendor/bin/pint
- name: Format Frontend
run: npm run format
- name: Lint Frontend
run: npm run lint
# - name: Commit Changes
# uses: stefanzweifel/git-auto-commit-action@v5
# with:
# commit_message: fix code style
# commit_options: '--no-verify'

50
.github/workflows/tests.yml vendored Normal file
View file

@ -0,0 +1,50 @@
name: tests
on:
push:
branches:
- develop
- main
pull_request:
branches:
- develop
- main
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
tools: composer:v2
coverage: xdebug
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install Node Dependencies
run: npm ci
- name: Install Dependencies
run: composer install --no-interaction --prefer-dist --optimize-autoloader
- name: Copy Environment File
run: cp .env.example .env
- name: Generate Application Key
run: php artisan key:generate
- name: Build Assets
run: npm run build
- name: Tests
run: ./vendor/bin/pest

View file

@ -13,7 +13,7 @@ class ExistsMovieController extends Controller
ExistsMovieRequest $request, ExistsMovieRequest $request,
CheckMovieExistsServiceInterface $service CheckMovieExistsServiceInterface $service
): JsonResponse { ): JsonResponse {
$provider = $request->validated('provider') ?? 'omdb'; $provider = $request->validated('provider') ?? config('movies.provider', 'tmdb');
$providerId = $request->validated('provider_id'); $providerId = $request->validated('provider_id');
$movie = $service->findByProviderId($provider, $providerId); $movie = $service->findByProviderId($provider, $providerId);

View file

@ -11,7 +11,7 @@ class Actor extends Model
{ {
use HasFactory; use HasFactory;
protected $table = 'actors'; protected $table = 'actors';
protected $fillable = ['name']; protected $fillable = ['name', 'profile_path'];
public function movies(): BelongsToMany { return $this->belongsToMany(Movie::class, 'movie_actor'); } public function movies(): BelongsToMany { return $this->belongsToMany(Movie::class, 'movie_actor'); }

View file

@ -6,6 +6,7 @@ use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Modules\Movies\Services\Contracts\MovieProvider; use App\Modules\Movies\Services\Contracts\MovieProvider;
use App\Modules\Movies\Services\Omdb\OmdbMovieProvider; use App\Modules\Movies\Services\Omdb\OmdbMovieProvider;
use App\Modules\Movies\Services\Tmdb\TmdbMovieProvider;
use App\Modules\Movies\Services\Contracts\ListMoviesServiceInterface; use App\Modules\Movies\Services\Contracts\ListMoviesServiceInterface;
use App\Modules\Movies\Services\Contracts\ShowMovieServiceInterface; use App\Modules\Movies\Services\Contracts\ShowMovieServiceInterface;
use App\Modules\Movies\Services\Contracts\UpsertMovieServiceInterface; use App\Modules\Movies\Services\Contracts\UpsertMovieServiceInterface;
@ -25,10 +26,11 @@ class MoviesServiceProvider extends ServiceProvider
{ {
// Bind movie provider based on config // Bind movie provider based on config
$this->app->bind(MovieProvider::class, function () { $this->app->bind(MovieProvider::class, function () {
$provider = config('movies.provider', 'omdb'); $provider = config('movies.provider', 'tmdb');
return match ($provider) { return match ($provider) {
'tmdb' => new TmdbMovieProvider(),
'omdb' => new OmdbMovieProvider(), 'omdb' => new OmdbMovieProvider(),
default => new OmdbMovieProvider(), default => new TmdbMovieProvider(),
}; };
}); });

View file

@ -1,7 +1,7 @@
# Movies Module # Movies Module
This module implements service-first Movies functionality, including: This module implements service-first Movies functionality, including:
- Admin search + accept flow (OMDb) - Admin search + accept flow (TMDb)
- Public browsing (Inertia pages) backed by JSON API - Public browsing (Inertia pages) backed by JSON API
- Strict controller→service separation - Strict controller→service separation
@ -9,7 +9,7 @@ This module implements service-first Movies functionality, including:
Admin (auth required) Admin (auth required)
- GET /admin/movies → Inertia admin page (search + accept) - GET /admin/movies → Inertia admin page (search + accept)
- GET /admin/movies/search?q=&page= → JSON results from OMDb (10 per page) - GET /admin/movies/search?q=&page= → JSON results from TMDb (20 per page)
- GET /admin/movies/exists?provider_id= → Duplicate check - GET /admin/movies/exists?provider_id= → Duplicate check
- POST /admin/movies/accept { provider_id, mode: overwrite|duplicate } → Persist movie - POST /admin/movies/accept { provider_id, mode: overwrite|duplicate } → Persist movie
@ -23,14 +23,14 @@ Public
- Images are stored as remote URLs only (not downloaded). - Images are stored as remote URLs only (not downloaded).
## Services & Contracts ## Services & Contracts
- Provider: App\\Modules\\Movies\\Services\\Contracts\\MovieProvider (OMDb implementation) - Provider: App\\Modules\\Movies\\Services\\Contracts\\MovieProvider (TMDb implementation)
- Browse: ListMoviesServiceInterface, ShowMovieServiceInterface - Browse: ListMoviesServiceInterface, ShowMovieServiceInterface
- Admin: UpsertMovieServiceInterface, CheckMovieExistsServiceInterface - Admin: UpsertMovieServiceInterface, CheckMovieExistsServiceInterface
All DI bindings are registered in MoviesServiceProvider. All DI bindings are registered in MoviesServiceProvider.
## Admin flow ## Admin flow
1. Search calls /admin/movies/search (OMDb search). List shows poster, title, year only (no details calls). 1. Search calls /admin/movies/search (TMDb search). List shows poster, title, year only (no details calls).
2. Accept button: 2. Accept button:
- If unique, accepts immediately (no modal). - If unique, accepts immediately (no modal).
- If duplicate exists by provider_id, shows modal: Overwrite | Save as Duplicate | Cancel. - If duplicate exists by provider_id, shows modal: Overwrite | Save as Duplicate | Cancel.
@ -43,12 +43,24 @@ All DI bindings are registered in MoviesServiceProvider.
## Environment ## Environment
Add to .env (values shown as placeholders): Add to .env (values shown as placeholders):
``` ```
OMDB_API_KEY= # Active provider
OMDB_LANGUAGE=en-US MOVIES_PROVIDER=tmdb
OMDB_CACHE_TTL=3600
# TMDb (v4 Read Access Token recommended)
TMDB_API_TOKEN=
TMDB_LANGUAGE=en-US
TMDB_CACHE_TTL=3600
TMDB_IMAGE_BASE=https://image.tmdb.org/t/p/
TMDB_POSTER_SIZE=w500
TMDB_BACKDROP_SIZE=w780
TMDB_PROFILE_SIZE=w185
``` ```
Set your real OMDb key locally (per user decision). Timezone is America/Chicago. Set your real TMDb token locally (you will provide it). Timezone is America/Chicago.
Actor images
- When accepting a movie, actor profile images are stored on the `actors.profile_path` column as FULL TMDb CDN URLs (e.g., `https://image.tmdb.org/t/p/w185/abc123.jpg`).
- You can adjust the size used via `TMDB_PROFILE_SIZE`.
## Development ## Development
- Run backend: `php artisan serve` - Run backend: `php artisan serve`
@ -56,5 +68,5 @@ Set your real OMDb key locally (per user decision). Timezone is America/Chicago.
- Tests: `./vendor/bin/pest` - Tests: `./vendor/bin/pest`
## Notes ## Notes
- Pagination: OMDb search uses 10/page; public DB pagination defaults to 20/page (configurable at request). - Pagination: TMDb search uses 20/page; public DB pagination defaults to 20/page (configurable at request).
- Controller classes contain no business logic; all logic resides in services. - Controller classes contain no business logic; all logic resides in services.

View file

@ -0,0 +1,170 @@
<?php
namespace App\Modules\Movies\Services\Tmdb;
use App\Modules\Movies\Services\Contracts\MovieProvider;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Collection;
class TmdbMovieProvider implements MovieProvider
{
protected string $baseUrl;
protected ?string $apiToken;
protected string $language;
protected string $imageBase;
protected string $posterSize;
protected string $backdropSize;
protected string $profileSize;
protected int $cacheTtl;
public function __construct()
{
$this->baseUrl = rtrim(config('movies.tmdb.base_url', 'https://api.themoviedb.org/3'), '/');
$this->apiToken = config('movies.tmdb.api_token');
$this->language = (string) config('movies.tmdb.language', 'en-US');
$this->imageBase = rtrim(config('movies.tmdb.image_base', 'https://image.tmdb.org/t/p/'), '/');
$this->posterSize = (string) config('movies.tmdb.poster_size', 'w500');
$this->backdropSize = (string) config('movies.tmdb.backdrop_size', 'w780');
$this->profileSize = (string) config('movies.tmdb.profile_size', 'w185');
$this->cacheTtl = (int) config('movies.tmdb.cache_ttl', 3600);
}
public function search(string $query, int $page = 1): array
{
$query = trim($query);
if ($query === '') {
return ['results' => collect(), 'total' => 0, 'page' => 1, 'has_more' => false];
}
$cacheKey = sprintf('tmdb.search.%s.p%s.%s', md5($query), $page, $this->language);
$data = Cache::remember($cacheKey, $this->cacheTtl, function () use ($query, $page) {
$response = Http::acceptJson()
->withHeaders($this->authHeaders())
->timeout(6)
->retry(3, 300)
->get($this->baseUrl . '/search/movie', [
'query' => $query,
'page' => $page,
'include_adult' => false,
'language' => $this->language,
]);
if ($response->failed()) {
abort(502, "Couldnt reach TMDb. Please try again.");
}
return $response->json();
});
$total = (int) ($data['total_results'] ?? 0);
$hasMore = ($data['page'] ?? 1) < ($data['total_pages'] ?? 1);
$results = collect($data['results'] ?? [])->map(function ($item) {
return [
'provider' => 'tmdb',
'provider_id' => isset($item['id']) ? (string) $item['id'] : null,
'title' => $item['title'] ?? ($item['original_title'] ?? null),
'year' => isset($item['release_date']) && $item['release_date'] ? (int) substr($item['release_date'], 0, 4) : null,
'poster_url' => $this->buildImageUrl($item['poster_path'] ?? null, true),
];
});
return [
'results' => $results,
'total' => $total,
'page' => (int) ($data['page'] ?? $page),
'has_more' => $hasMore,
];
}
public function details(string $id): array
{
$id = trim($id);
$cacheKey = sprintf('tmdb.details.%s.%s', $id, $this->language);
$data = Cache::remember($cacheKey, $this->cacheTtl, function () use ($id) {
$response = Http::acceptJson()
->withHeaders($this->authHeaders())
->timeout(6)
->retry(3, 300)
->get($this->baseUrl . "/movie/{$id}", [
'append_to_response' => 'credits,external_ids',
'language' => $this->language,
]);
if ($response->failed()) {
abort(502, "Couldnt reach TMDb. Please try again.");
}
return $response->json();
});
if (!isset($data['id'])) {
abort(404, 'Movie not found in TMDb');
}
$genres = collect($data['genres'] ?? [])->pluck('name')->filter()->values()->all();
$cast = collect($data['credits']['cast'] ?? [])->sortByDesc('popularity')->take(15);
$actors = $cast->pluck('name')->filter()->values()->all();
// Map of actor name => TMDb profile image URL (FULL URL), used to store on Actor records
$actorsProfiles = $cast
->mapWithKeys(function ($c) {
$name = $c['name'] ?? null;
$path = $c['profile_path'] ?? null;
if (!$name || !$path) return [];
return [$name => $this->buildProfileUrl($path)];
})
->all();
$directors = collect($data['credits']['crew'] ?? [])->filter(fn($c) => ($c['job'] ?? null) === 'Director')->pluck('name')->unique()->values()->all();
$studios = collect($data['production_companies'] ?? [])->pluck('name')->filter()->values()->all();
$countries = collect($data['production_countries'] ?? [])->pluck('name')->filter()->values()->all();
$languages = collect($data['spoken_languages'] ?? [])->pluck('english_name')->filter()->values()->all();
// External IDs include imdb_id when available
$external = [
'tmdb' => isset($data['id']) ? (string) $data['id'] : null,
];
if (!empty($data['external_ids']['imdb_id'])) {
$external['imdb'] = $data['external_ids']['imdb_id'];
}
return [
'provider' => 'tmdb',
'provider_id' => isset($data['id']) ? (string) $data['id'] : null,
'external_ids' => $external,
'title' => $data['title'] ?? null,
'original_title' => $data['original_title'] ?? ($data['title'] ?? null),
'description' => $data['overview'] ?? null,
'poster_url' => $this->buildImageUrl($data['poster_path'] ?? null, true),
'backdrop_url' => $this->buildImageUrl($data['backdrop_path'] ?? null, false),
'genres' => $genres,
'rating' => null, // Certification requires extra call; left null for now
'release_date' => $data['release_date'] ?? null,
'year' => isset($data['release_date']) && $data['release_date'] ? (int) substr($data['release_date'], 0, 4) : null,
'runtime' => isset($data['runtime']) ? (int) $data['runtime'] : null,
'actors' => $actors,
'actors_profiles' => $actorsProfiles,
'directors' => $directors,
'studios' => $studios,
'countries' => $countries,
'languages' => $languages,
];
}
protected function authHeaders(): array
{
return $this->apiToken ? ['Authorization' => 'Bearer ' . $this->apiToken] : [];
}
protected function buildImageUrl(?string $path, bool $poster = true): ?string
{
if (!$path) return null;
$size = $poster ? $this->posterSize : $this->backdropSize;
return rtrim($this->imageBase, '/') . '/' . trim($size, '/') . $path;
}
protected function buildProfileUrl(?string $path): ?string
{
if (!$path) return null;
return rtrim($this->imageBase, '/') . '/' . trim($this->profileSize, '/') . $path;
}
}

View file

@ -53,7 +53,12 @@ class UpsertMovieFromProvider implements UpsertMovieServiceInterface
// Sync relations using names from details payload // Sync relations using names from details payload
$this->syncByNames($movie, Genre::class, 'genres', $details['genres'] ?? []); $this->syncByNames($movie, Genre::class, 'genres', $details['genres'] ?? []);
$this->syncByNames($movie, Actor::class, 'actors', $details['actors'] ?? []); // Actors: also persist profile_path when available; backfill if missing
$this->syncActorsWithProfiles(
$movie,
$details['actors'] ?? [],
$details['actors_profiles'] ?? []
);
$this->syncByNames($movie, Director::class, 'directors', $details['directors'] ?? []); $this->syncByNames($movie, Director::class, 'directors', $details['directors'] ?? []);
$this->syncByNames($movie, Studio::class, 'studios', $details['studios'] ?? []); $this->syncByNames($movie, Studio::class, 'studios', $details['studios'] ?? []);
$this->syncByNames($movie, Country::class, 'countries', $details['countries'] ?? []); $this->syncByNames($movie, Country::class, 'countries', $details['countries'] ?? []);
@ -105,6 +110,55 @@ class UpsertMovieFromProvider implements UpsertMovieServiceInterface
} }
} }
/**
* Sync actors and persist their TMDb profile image path when available.
* If an actor already exists without image data, update the record.
*
* @param Movie $movie
* @param array $names List of actor names
* @param array $profiles Map of name => profile_path (relative path from TMDb)
*/
protected function syncActorsWithProfiles(Movie $movie, array $names, array $profiles = []): void
{
$ids = collect($names)
->filter()
->map(function ($name) use ($profiles) {
$original = (string) $name;
$normalized = $this->normalizeName($original);
if ($normalized === '') return null;
/** @var Actor|null $existing */
$existing = Actor::query()
->whereRaw('lower(name) = ?', [mb_strtolower($normalized)])
->first();
$profilePath = $profiles[$original] ?? $profiles[$normalized] ?? null;
if ($existing) {
if ($profilePath && empty($existing->profile_path)) {
$existing->profile_path = $profilePath;
$existing->save();
}
return $existing->getKey();
}
$actor = new Actor();
$actor->setAttribute('name', $normalized);
if ($profilePath) {
$actor->setAttribute('profile_path', $profilePath);
}
$actor->save();
return $actor->getKey();
})
->filter()
->values()
->all();
if (method_exists($movie, 'actors')) {
$movie->actors()->sync($ids);
}
}
/** /**
* Normalize a person/genre/studio/etc name for de-duplication. * Normalize a person/genre/studio/etc name for de-duplication.
*/ */

View file

@ -13,7 +13,7 @@ use App\Modules\Movies\Http\Controllers\Admin\DeleteMovieController;
// Admin Movies list page (shows local DB movies) // Admin Movies list page (shows local DB movies)
Route::get('/', [MoviesListPageController::class, '__invoke'])->name('index'); Route::get('/', [MoviesListPageController::class, '__invoke'])->name('index');
// Admin Add Movie page (OMDb search + accept flow) // Admin Add Movie page (TMDb search + accept flow)
Route::get('add', [MoviesPageController::class, '__invoke'])->name('add'); Route::get('add', [MoviesPageController::class, '__invoke'])->name('add');
Route::get('search', [SearchMoviesController::class, '__invoke'])->name('search'); Route::get('search', [SearchMoviesController::class, '__invoke'])->name('search');

View file

@ -1,8 +1,25 @@
<?php <?php
return [ return [
'provider' => 'omdb', // Set the active external provider for admin search/details ingestion
'provider' => env('MOVIES_PROVIDER', 'tmdb'),
// TMDb (The Movie Database) configuration
'tmdb' => [
'base_url' => env('TMDB_BASE_URL', 'https://api.themoviedb.org/3'),
// TMDb v4 API token (recommended). Use a "Read Access Token" and pass via Bearer auth
'api_token' => env('TMDB_API_TOKEN'),
'language' => env('TMDB_LANGUAGE', 'en-US'),
// Images
'image_base' => env('TMDB_IMAGE_BASE', 'https://image.tmdb.org/t/p/'),
'poster_size' => env('TMDB_POSTER_SIZE', 'w500'),
'backdrop_size' => env('TMDB_BACKDROP_SIZE', 'w780'),
'profile_size' => env('TMDB_PROFILE_SIZE', 'w185'),
// Cache duration in seconds
'cache_ttl' => env('TMDB_CACHE_TTL', 3600),
],
// Legacy OMDb configuration (kept for reference/backward-compat)
'omdb' => [ 'omdb' => [
'base_url' => env('OMDB_BASE_URL', 'https://www.omdbapi.com/'), 'base_url' => env('OMDB_BASE_URL', 'https://www.omdbapi.com/'),
'api_key' => env('OMDB_API_KEY'), 'api_key' => env('OMDB_API_KEY'),

View file

@ -15,11 +15,11 @@ class MovieFactory extends Factory
public function definition(): array public function definition(): array
{ {
return [ return [
'provider' => 'omdb', 'provider' => 'tmdb',
'provider_id' => $this->faker->unique()->bothify('tt########'), 'provider_id' => (string) $this->faker->unique()->numberBetween(1000, 99999999),
'external_ids' => [ 'external_ids' => [
'tmdb' => (string) $this->faker->numberBetween(1000, 99999999),
'imdb' => $this->faker->bothify('tt########'), 'imdb' => $this->faker->bothify('tt########'),
'omdb' => $this->faker->bothify('tt########'),
], ],
'title' => $this->faker->sentence(3), 'title' => $this->faker->sentence(3),
'original_title' => $this->faker->sentence(3), 'original_title' => $this->faker->sentence(3),

View file

@ -0,0 +1,21 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::table('actors', function (Blueprint $table) {
$table->string('profile_path')->nullable()->after('name');
});
}
public function down(): void
{
Schema::table('actors', function (Blueprint $table) {
$table->dropColumn('profile_path');
});
}
};

View file

@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration {
public function up(): void
{
// Build the TMDb image base prefix for profile images.
$imageBase = rtrim((string) config('movies.tmdb.image_base', 'https://image.tmdb.org/t/p/'), '/');
$profileSize = trim((string) config('movies.tmdb.profile_size', 'w185'), '/');
$prefix = $imageBase . '/' . $profileSize; // no trailing slash; profile_path begins with '/'
// Update existing rows that still store relative paths (do not start with http)
DB::statement(
"UPDATE actors SET profile_path = CONCAT(?, profile_path) WHERE profile_path IS NOT NULL AND profile_path NOT LIKE 'http%'",
[$prefix]
);
}
public function down(): void
{
// Irreversible safely; no action.
}
};

View file

@ -1 +1 @@
import{d as m,J as k,a as i,F as y,g as x,b as n,k as d,I as f,t as g,K as b,u as r,o as t,w as l,f as e,h as v}from"./app-CClrM5Yi.js";import{c as o}from"./createLucideIcon-ZFd4jktC.js";import{e as I,_ as M,a as w}from"./Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js";import{_ as A}from"./AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import"./useForwardExpose-BhawR5VU.js";import"./index-C4J_hXM0.js";import"./index--H2rh_A_.js";import"./VisuallyHidden-Cu70tzB6.js";import"./RovingFocusGroup-CNFroA6Y.js";import"./useArrowNavigation-C6Y-ieo6.js";const C=o("MonitorIcon",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const $=o("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);const B=o("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),S={class:"inline-flex gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-800"},z=["onClick"],D={class:"ml-1.5 text-sm"},L=m({__name:"AppearanceTabs",setup(u){const{appearance:a,updateAppearance:c}=k(),p=[{value:"light",Icon:B,label:"Light"},{value:"dark",Icon:$,label:"Dark"},{value:"system",Icon:C,label:"System"}];return(q,F)=>(t(),i("div",S,[(t(),i(y,null,x(p,({value:s,Icon:h,label:_})=>n("button",{key:s,onClick:N=>r(c)(s),class:b(["flex items-center rounded-md px-3.5 py-1.5 transition-colors",r(a)===s?"bg-white shadow-xs dark:bg-neutral-700 dark:text-neutral-100":"text-neutral-500 hover:bg-neutral-200/60 hover:text-black dark:text-neutral-400 dark:hover:bg-neutral-700/60"])},[(t(),d(f(h),{class:"-ml-1 h-4 w-4"})),n("span",D,g(_),1)],10,z)),64))]))}}),j={class:"space-y-6"},Q=m({__name:"Appearance",setup(u){const a=[{title:"Appearance settings",href:I().url}];return(c,p)=>(t(),d(A,{breadcrumbs:a},{default:l(()=>[e(r(v),{title:"Appearance settings"}),e(M,null,{default:l(()=>[n("div",j,[e(w,{title:"Appearance settings",description:"Update your account's appearance settings"}),e(L)])]),_:1})]),_:1}))}});export{Q as default}; import{d as m,J as k,a as i,F as y,g as x,b as n,k as d,I as f,t as g,K as b,u as r,o as t,w as l,f as e,h as v}from"./app-BXYcVHqk.js";import{c as o}from"./createLucideIcon-BlA39rtn.js";import{e as I,_ as M,a as w}from"./Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js";import{_ as A}from"./AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import"./useForwardExpose-Djbxsgaa.js";import"./index-C4J_hXM0.js";import"./index--H2rh_A_.js";import"./VisuallyHidden-BvthYHr5.js";import"./RovingFocusGroup-dmigQ6Dy.js";import"./useArrowNavigation-C6Y-ieo6.js";const C=o("MonitorIcon",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const $=o("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);const B=o("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),S={class:"inline-flex gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-800"},z=["onClick"],D={class:"ml-1.5 text-sm"},L=m({__name:"AppearanceTabs",setup(u){const{appearance:a,updateAppearance:c}=k(),p=[{value:"light",Icon:B,label:"Light"},{value:"dark",Icon:$,label:"Dark"},{value:"system",Icon:C,label:"System"}];return(q,F)=>(t(),i("div",S,[(t(),i(y,null,x(p,({value:s,Icon:h,label:_})=>n("button",{key:s,onClick:N=>r(c)(s),class:b(["flex items-center rounded-md px-3.5 py-1.5 transition-colors",r(a)===s?"bg-white shadow-xs dark:bg-neutral-700 dark:text-neutral-100":"text-neutral-500 hover:bg-neutral-200/60 hover:text-black dark:text-neutral-400 dark:hover:bg-neutral-700/60"])},[(t(),d(f(h),{class:"-ml-1 h-4 w-4"})),n("span",D,g(_),1)],10,z)),64))]))}}),j={class:"space-y-6"},Q=m({__name:"Appearance",setup(u){const a=[{title:"Appearance settings",href:I().url}];return(c,p)=>(t(),d(A,{breadcrumbs:a},{default:l(()=>[e(r(v),{title:"Appearance settings"}),e(M,null,{default:l(()=>[n("div",j,[e(w,{title:"Appearance settings",description:"Update your account's appearance settings"}),e(L)])]),_:1})]),_:1}))}});export{Q as default};

View file

@ -1 +1 @@
import{a as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{h as m}from"./index-C4J_hXM0.js";import{d as c,a as u,b as e,G as n,f as i,w as l,t as o,u as a,m as _,o as r,k as h}from"./app-CClrM5Yi.js";const p={class:"flex min-h-svh flex-col items-center justify-center gap-6 bg-background p-6 md:p-10"},x={class:"w-full max-w-sm"},g={class:"flex flex-col gap-8"},v={class:"flex flex-col items-center gap-4"},k={class:"mb-1 flex h-9 w-9 items-center justify-center rounded-md"},y={class:"sr-only"},w={class:"space-y-2 text-center"},b={class:"text-xl font-medium"},B={class:"text-center text-sm text-muted-foreground"},$=c({__name:"AuthSimpleLayout",props:{title:{},description:{}},setup(t){return(s,d)=>(r(),u("div",p,[e("div",x,[e("div",g,[e("div",v,[i(a(_),{href:a(m)(),class:"flex flex-col items-center gap-2 font-medium"},{default:l(()=>[e("div",k,[i(f,{class:"size-9 fill-current text-[var(--foreground)] dark:text-white"})]),e("span",y,o(t.title),1)]),_:1},8,["href"]),e("div",w,[e("h1",b,o(t.title),1),e("p",B,o(t.description),1)])]),n(s.$slots,"default")])])]))}}),C=c({__name:"AuthLayout",props:{title:{},description:{}},setup(t){return(s,d)=>(r(),h($,{title:t.title,description:t.description},{default:l(()=>[n(s.$slots,"default")]),_:3},8,["title","description"]))}});export{C as _}; import{a as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{h as m}from"./index-C4J_hXM0.js";import{d as c,a as u,b as e,G as n,f as i,w as l,t as o,u as a,m as _,o as r,k as h}from"./app-BXYcVHqk.js";const p={class:"flex min-h-svh flex-col items-center justify-center gap-6 bg-background p-6 md:p-10"},x={class:"w-full max-w-sm"},g={class:"flex flex-col gap-8"},v={class:"flex flex-col items-center gap-4"},k={class:"mb-1 flex h-9 w-9 items-center justify-center rounded-md"},y={class:"sr-only"},w={class:"space-y-2 text-center"},b={class:"text-xl font-medium"},B={class:"text-center text-sm text-muted-foreground"},$=c({__name:"AuthSimpleLayout",props:{title:{},description:{}},setup(t){return(s,d)=>(r(),u("div",p,[e("div",x,[e("div",g,[e("div",v,[i(a(_),{href:a(m)(),class:"flex flex-col items-center gap-2 font-medium"},{default:l(()=>[e("div",k,[i(f,{class:"size-9 fill-current text-[var(--foreground)] dark:text-white"})]),e("span",y,o(t.title),1)]),_:1},8,["href"]),e("div",w,[e("h1",b,o(t.title),1),e("p",B,o(t.description),1)])]),n(s.$slots,"default")])])]))}}),C=c({__name:"AuthLayout",props:{title:{},description:{}},setup(t){return(s,d)=>(r(),h($,{title:t.title,description:t.description},{default:l(()=>[n(s.$slots,"default")]),_:3},8,["title","description"]))}});export{C as _};

View file

@ -1 +1 @@
import{_ as n}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as p}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as c}from"./Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js";import{_ as l}from"./Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js";import{_ as u}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{s as w}from"./index-BCC4ahRc.js";import{d as C,k as i,w as e,f as o,u as s,h as b,A as h,B as $,b as r,l as m,i as g,o as d}from"./app-CClrM5Yi.js";import"./useForwardExpose-BhawR5VU.js";import"./createLucideIcon-ZFd4jktC.js";import"./index-C4J_hXM0.js";const k={class:"space-y-6"},x={class:"grid gap-2"},y={class:"flex items-center"},G=C({__name:"ConfirmPassword",setup(P){return(B,a)=>(d(),i(u,{title:"Confirm your password",description:"This is a secure area of the application. Please confirm your password before continuing."},{default:e(()=>[o(s(b),{title:"Confirm password"}),o(s(h),$(s(w).form(),{"reset-on-success":""}),{default:e(({errors:f,processing:t})=>[r("div",k,[r("div",x,[o(s(c),{htmlFor:"password"},{default:e(()=>[...a[0]||(a[0]=[m("Password",-1)])]),_:1}),o(s(_),{id:"password",type:"password",name:"password",class:"mt-1 block w-full",required:"",autocomplete:"current-password",autofocus:""}),o(n,{message:f.password},null,8,["message"])]),r("div",y,[o(s(p),{class:"w-full",disabled:t,"data-test":"confirm-password-button"},{default:e(()=>[t?(d(),i(s(l),{key:0})):g("",!0),a[1]||(a[1]=m(" Confirm Password ",-1))]),_:2},1032,["disabled"])])])]),_:1},16)]),_:1}))}});export{G as default}; import{_ as n}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as p}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as c}from"./Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js";import{_ as l}from"./Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js";import{_ as u}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{s as w}from"./index-BCC4ahRc.js";import{d as C,k as i,w as e,f as o,u as s,h as b,A as h,B as $,b as r,l as m,i as g,o as d}from"./app-BXYcVHqk.js";import"./useForwardExpose-Djbxsgaa.js";import"./createLucideIcon-BlA39rtn.js";import"./index-C4J_hXM0.js";const k={class:"space-y-6"},x={class:"grid gap-2"},y={class:"flex items-center"},G=C({__name:"ConfirmPassword",setup(P){return(B,a)=>(d(),i(u,{title:"Confirm your password",description:"This is a secure area of the application. Please confirm your password before continuing."},{default:e(()=>[o(s(b),{title:"Confirm password"}),o(s(h),$(s(w).form(),{"reset-on-success":""}),{default:e(({errors:f,processing:t})=>[r("div",k,[r("div",x,[o(s(c),{htmlFor:"password"},{default:e(()=>[...a[0]||(a[0]=[m("Password",-1)])]),_:1}),o(s(_),{id:"password",type:"password",name:"password",class:"mt-1 block w-full",required:"",autocomplete:"current-password",autofocus:""}),o(n,{message:f.password},null,8,["message"])]),r("div",y,[o(s(p),{class:"w-full",disabled:t,"data-test":"confirm-password-button"},{default:e(()=>[t?(d(),i(s(l),{key:0})):g("",!0),a[1]||(a[1]=m(" Confirm Password ",-1))]),_:2},1032,["disabled"])])])]),_:1},16)]),_:1}))}});export{G as default};

View file

@ -1 +1 @@
import{_ as y}from"./AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js";import{d as k}from"./index-C4J_hXM0.js";import{d as v,c as w,a as s,b as e,o as r,r as _,e as $,f as l,u as M,h as j,w as L,t as n,F as f,g as m,i as c}from"./app-CClrM5Yi.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import"./useForwardExpose-BhawR5VU.js";import"./VisuallyHidden-Cu70tzB6.js";import"./RovingFocusGroup-CNFroA6Y.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./createLucideIcon-ZFd4jktC.js";const D={class:"absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20",fill:"none"},N=["id"],V=["fill"],p=v({__name:"PlaceholderPattern",setup(b){const u=w(()=>`pattern-${Math.random().toString(36).substring(2,9)}`);return(i,o)=>(r(),s("svg",D,[e("defs",null,[e("pattern",{id:u.value,x:"0",y:"0",width:"8",height:"8",patternUnits:"userSpaceOnUse"},[...o[0]||(o[0]=[e("path",{d:"M-1 5L5 -1M3 9L8.5 3.5","stroke-width":"0.5"},null,-1)])],8,N)]),e("rect",{stroke:"none",fill:`url(#${u.value})`,width:"100%",height:"100%"},null,8,V)]))}}),A={class:"flex h-full flex-1 flex-col gap-4 overflow-x-auto rounded-xl p-4"},B={class:"grid auto-rows-min gap-4 md:grid-cols-3"},C={class:"relative overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},F={class:"p-4"},P={key:0,class:"rounded-md border border-red-300 bg-red-50 p-3 text-red-800 dark:border-red-800 dark:bg-red-950 dark:text-red-200"},S={key:1},U={key:0,class:"space-y-3"},q=["aria-busy"],z=["href"],E={class:"h-20 w-14 shrink-0 overflow-hidden rounded bg-muted"},R=["src","alt"],X={class:"flex min-w-0 flex-1 flex-col"},H={class:"flex items-center justify-between gap-2"},I={class:"truncate font-medium"},O={class:"text-xs text-muted-foreground"},W={class:"mt-1 text-xs text-muted-foreground"},G={key:0,class:"mr-2 rounded border px-1 py-0.5"},J={key:1},K={key:0,class:"px-2 py-2 text-sm text-muted-foreground"},Q={class:"relative aspect-video overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},T={class:"relative aspect-video overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},Y={class:"relative min-h-[100vh] flex-1 rounded-xl border border-sidebar-border/70 md:min-h-min dark:border-sidebar-border"},le=v({__name:"Dashboard",setup(b){const u=[{title:"Dashboard",href:k().url}],i=_(!1),o=_(null),h=_([]);async function x(){i.value=!0,o.value=null;try{const d=await fetch("/api/movies?sort=newest&per_page=3",{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"},credentials:"same-origin"});if(!d.ok)throw new Error(`Failed: ${d.status}`);const a=await d.json();h.value=a.data}catch(d){o.value=d?.message??"Unexpected error"}finally{i.value=!1}}return $(x),(d,a)=>(r(),s(f,null,[l(M(j),{title:"Dashboard"}),l(y,{breadcrumbs:u},{default:L(()=>[e("div",A,[e("div",B,[e("div",C,[e("div",F,[a[1]||(a[1]=e("div",{class:"mb-3 flex items-center justify-between gap-2"},[e("h2",{class:"text-sm font-semibold"},"Last Movies Added"),e("a",{href:"/movies",class:"text-xs text-primary underline-offset-2 hover:underline"},"View all")],-1)),o.value?(r(),s("div",P,n(o.value),1)):(r(),s("div",S,[i.value?(r(),s("div",U,[(r(),s(f,null,m(3,t=>e("div",{key:t,class:"flex gap-3"},[...a[0]||(a[0]=[e("div",{class:"h-20 w-14 shrink-0 rounded bg-muted animate-pulse"},null,-1),e("div",{class:"flex min-w-0 flex-1 flex-col gap-2"},[e("div",{class:"h-4 w-1/2 rounded bg-muted animate-pulse"}),e("div",{class:"h-3 w-2/3 rounded bg-muted animate-pulse"}),e("div",{class:"h-3 w-1/3 rounded bg-muted animate-pulse"})],-1)])])),64))])):(r(),s("ul",{key:1,class:"divide-y divide-muted-foreground/20","aria-busy":i.value?"true":"false"},[(r(!0),s(f,null,m(h.value,t=>(r(),s("li",{key:t.id,class:"py-2"},[e("a",{href:`/movies/${t.id}`,class:"flex gap-3 rounded px-2 py-2 hover:bg-muted/40 focus:bg-muted/40 focus:outline-none"},[e("div",E,[t.poster_url?(r(),s("img",{key:0,src:t.poster_url,alt:`Poster for ${t.title}`,loading:"lazy",class:"h-full w-full object-cover"},null,8,R)):c("",!0)]),e("div",X,[e("div",H,[e("div",I,n(t.title),1),e("div",O,n(t.year??""),1)]),e("div",W,[t.rating?(r(),s("span",G,n(t.rating),1)):c("",!0),t.genres?.length?(r(),s("span",J,n(t.genres.map(g=>g.name).join(", ")),1)):c("",!0)])])],8,z)]))),128)),h.value.length?c("",!0):(r(),s("li",K,"No movies yet — add some from Admin → Movies."))],8,q))]))])]),e("div",Q,[l(p)]),e("div",T,[l(p)])]),e("div",Y,[l(p)])])]),_:1})],64))}});export{le as default}; import{_ as y}from"./AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js";import{d as k}from"./index-C4J_hXM0.js";import{d as v,c as w,a as s,b as e,o as r,r as _,e as $,f as l,u as M,h as j,w as L,t as n,F as f,g as m,i as c}from"./app-BXYcVHqk.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import"./useForwardExpose-Djbxsgaa.js";import"./VisuallyHidden-BvthYHr5.js";import"./RovingFocusGroup-dmigQ6Dy.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./createLucideIcon-BlA39rtn.js";const D={class:"absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20",fill:"none"},N=["id"],V=["fill"],p=v({__name:"PlaceholderPattern",setup(b){const u=w(()=>`pattern-${Math.random().toString(36).substring(2,9)}`);return(i,o)=>(r(),s("svg",D,[e("defs",null,[e("pattern",{id:u.value,x:"0",y:"0",width:"8",height:"8",patternUnits:"userSpaceOnUse"},[...o[0]||(o[0]=[e("path",{d:"M-1 5L5 -1M3 9L8.5 3.5","stroke-width":"0.5"},null,-1)])],8,N)]),e("rect",{stroke:"none",fill:`url(#${u.value})`,width:"100%",height:"100%"},null,8,V)]))}}),A={class:"flex h-full flex-1 flex-col gap-4 overflow-x-auto rounded-xl p-4"},B={class:"grid auto-rows-min gap-4 md:grid-cols-3"},C={class:"relative overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},F={class:"p-4"},P={key:0,class:"rounded-md border border-red-300 bg-red-50 p-3 text-red-800 dark:border-red-800 dark:bg-red-950 dark:text-red-200"},S={key:1},U={key:0,class:"space-y-3"},q=["aria-busy"],z=["href"],E={class:"h-20 w-14 shrink-0 overflow-hidden rounded bg-muted"},R=["src","alt"],X={class:"flex min-w-0 flex-1 flex-col"},H={class:"flex items-center justify-between gap-2"},I={class:"truncate font-medium"},O={class:"text-xs text-muted-foreground"},W={class:"mt-1 text-xs text-muted-foreground"},G={key:0,class:"mr-2 rounded border px-1 py-0.5"},J={key:1},K={key:0,class:"px-2 py-2 text-sm text-muted-foreground"},Q={class:"relative aspect-video overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},T={class:"relative aspect-video overflow-hidden rounded-xl border border-sidebar-border/70 dark:border-sidebar-border"},Y={class:"relative min-h-[100vh] flex-1 rounded-xl border border-sidebar-border/70 md:min-h-min dark:border-sidebar-border"},le=v({__name:"Dashboard",setup(b){const u=[{title:"Dashboard",href:k().url}],i=_(!1),o=_(null),h=_([]);async function x(){i.value=!0,o.value=null;try{const d=await fetch("/api/movies?sort=newest&per_page=3",{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"},credentials:"same-origin"});if(!d.ok)throw new Error(`Failed: ${d.status}`);const a=await d.json();h.value=a.data}catch(d){o.value=d?.message??"Unexpected error"}finally{i.value=!1}}return $(x),(d,a)=>(r(),s(f,null,[l(M(j),{title:"Dashboard"}),l(y,{breadcrumbs:u},{default:L(()=>[e("div",A,[e("div",B,[e("div",C,[e("div",F,[a[1]||(a[1]=e("div",{class:"mb-3 flex items-center justify-between gap-2"},[e("h2",{class:"text-sm font-semibold"},"Last Movies Added"),e("a",{href:"/movies",class:"text-xs text-primary underline-offset-2 hover:underline"},"View all")],-1)),o.value?(r(),s("div",P,n(o.value),1)):(r(),s("div",S,[i.value?(r(),s("div",U,[(r(),s(f,null,m(3,t=>e("div",{key:t,class:"flex gap-3"},[...a[0]||(a[0]=[e("div",{class:"h-20 w-14 shrink-0 rounded bg-muted animate-pulse"},null,-1),e("div",{class:"flex min-w-0 flex-1 flex-col gap-2"},[e("div",{class:"h-4 w-1/2 rounded bg-muted animate-pulse"}),e("div",{class:"h-3 w-2/3 rounded bg-muted animate-pulse"}),e("div",{class:"h-3 w-1/3 rounded bg-muted animate-pulse"})],-1)])])),64))])):(r(),s("ul",{key:1,class:"divide-y divide-muted-foreground/20","aria-busy":i.value?"true":"false"},[(r(!0),s(f,null,m(h.value,t=>(r(),s("li",{key:t.id,class:"py-2"},[e("a",{href:`/movies/${t.id}`,class:"flex gap-3 rounded px-2 py-2 hover:bg-muted/40 focus:bg-muted/40 focus:outline-none"},[e("div",E,[t.poster_url?(r(),s("img",{key:0,src:t.poster_url,alt:`Poster for ${t.title}`,loading:"lazy",class:"h-full w-full object-cover"},null,8,R)):c("",!0)]),e("div",X,[e("div",H,[e("div",I,n(t.title),1),e("div",O,n(t.year??""),1)]),e("div",W,[t.rating?(r(),s("span",G,n(t.rating),1)):c("",!0),t.genres?.length?(r(),s("span",J,n(t.genres.map(g=>g.name).join(", ")),1)):c("",!0)])])],8,z)]))),128)),h.value.length?c("",!0):(r(),s("li",K,"No movies yet — add some from Admin → Movies."))],8,q))]))])]),e("div",Q,[l(p)]),e("div",T,[l(p)])]),e("div",Y,[l(p)])])]),_:1})],64))}});export{le as default};

View file

@ -1 +1 @@
import{u as D,d as x}from"./VisuallyHidden-Cu70tzB6.js";import{a as h,b as B,c as b,d as w,D as v,X as C,f as P,g as $}from"./AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js";import{d as r,k as p,u as e,B as u,w as d,G as c,o as i,c as m,f as _,b as k,a as z,K as O}from"./app-CClrM5Yi.js";import{c as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";const N=r({__name:"Dialog",props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean}},emits:["update:open"],setup(s,{emit:a}){const t=D(s,a);return(n,y)=>(i(),p(e(h),u({"data-slot":"dialog"},e(t)),{default:d(()=>[c(n.$slots,"default")]),_:3},16))}}),F=r({__name:"DialogOverlay",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:l,...t}=a;return t});return(l,t)=>(i(),p(e(B),u({"data-slot":"dialog-overlay"},o.value,{class:e(f)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",a.class)}),{default:d(()=>[c(l.$slots,"default")]),_:3},16,["class"]))}}),T=r({__name:"DialogContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(s,{emit:a}){const o=s,l=a,t=m(()=>{const{class:y,...g}=o;return g}),n=D(t,l);return(y,g)=>(i(),p(e(b),null,{default:d(()=>[_(F),_(e(w),u({"data-slot":"dialog-content"},e(n),{class:e(f)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",o.class)}),{default:d(()=>[c(y.$slots,"default"),_(e(v),{class:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"},{default:d(()=>[_(e(C)),g[0]||(g[0]=k("span",{class:"sr-only"},"Close",-1))]),_:1})]),_:3},16,["class"])]),_:3}))}}),V=r({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:t,...n}=a;return n}),l=x(o);return(t,n)=>(i(),p(e(P),u({"data-slot":"dialog-description"},e(l),{class:e(f)("text-muted-foreground text-sm",a.class)}),{default:d(()=>[c(t.$slots,"default")]),_:3},16,["class"]))}}),G=r({__name:"DialogHeader",props:{class:{}},setup(s){const a=s;return(o,l)=>(i(),z("div",{"data-slot":"dialog-header",class:O(e(f)("flex flex-col gap-2 text-center sm:text-left",a.class))},[c(o.$slots,"default")],2))}}),H=r({__name:"DialogTitle",props:{asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:t,...n}=a;return n}),l=x(o);return(t,n)=>(i(),p(e($),u({"data-slot":"dialog-title"},e(l),{class:e(f)("text-lg leading-none font-semibold",a.class)}),{default:d(()=>[c(t.$slots,"default")]),_:3},16,["class"]))}});export{T as _,G as a,H as b,V as c,N as d}; import{u as D,d as x}from"./VisuallyHidden-BvthYHr5.js";import{a as h,b as B,c as b,d as w,D as v,X as C,f as P,g as $}from"./AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js";import{d as r,k as p,u as e,B as u,w as d,G as c,o as i,c as m,f as _,b as k,a as z,K as O}from"./app-BXYcVHqk.js";import{c as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";const N=r({__name:"Dialog",props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean}},emits:["update:open"],setup(s,{emit:a}){const t=D(s,a);return(n,y)=>(i(),p(e(h),u({"data-slot":"dialog"},e(t)),{default:d(()=>[c(n.$slots,"default")]),_:3},16))}}),F=r({__name:"DialogOverlay",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:l,...t}=a;return t});return(l,t)=>(i(),p(e(B),u({"data-slot":"dialog-overlay"},o.value,{class:e(f)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",a.class)}),{default:d(()=>[c(l.$slots,"default")]),_:3},16,["class"]))}}),T=r({__name:"DialogContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(s,{emit:a}){const o=s,l=a,t=m(()=>{const{class:y,...g}=o;return g}),n=D(t,l);return(y,g)=>(i(),p(e(b),null,{default:d(()=>[_(F),_(e(w),u({"data-slot":"dialog-content"},e(n),{class:e(f)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",o.class)}),{default:d(()=>[c(y.$slots,"default"),_(e(v),{class:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"},{default:d(()=>[_(e(C)),g[0]||(g[0]=k("span",{class:"sr-only"},"Close",-1))]),_:1})]),_:3},16,["class"])]),_:3}))}}),V=r({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:t,...n}=a;return n}),l=x(o);return(t,n)=>(i(),p(e(P),u({"data-slot":"dialog-description"},e(l),{class:e(f)("text-muted-foreground text-sm",a.class)}),{default:d(()=>[c(t.$slots,"default")]),_:3},16,["class"]))}}),G=r({__name:"DialogHeader",props:{class:{}},setup(s){const a=s;return(o,l)=>(i(),z("div",{"data-slot":"dialog-header",class:O(e(f)("flex flex-col gap-2 text-center sm:text-left",a.class))},[c(o.$slots,"default")],2))}}),H=r({__name:"DialogTitle",props:{asChild:{type:Boolean},as:{},class:{}},setup(s){const a=s,o=m(()=>{const{class:t,...n}=a;return n}),l=x(o);return(t,n)=>(i(),p(e($),u({"data-slot":"dialog-title"},e(l),{class:e(f)("text-lg leading-none font-semibold",a.class)}),{default:d(()=>[c(t.$slots,"default")]),_:3},16,["class"]))}});export{T as _,G as a,H as b,V as c,N as d};

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{_}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as p}from"./TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js";import{_ as u}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as c}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as x}from"./Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js";import{_ as g}from"./Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js";import{_ as k}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{l as w}from"./index-C4J_hXM0.js";import{e as y}from"./index-vZYIBGLo.js";import{d as v,k as d,w as a,f as s,a as $,i as n,b as o,u as t,h as b,o as r,t as h,A as B,C,D as E,l as i}from"./app-CClrM5Yi.js";import"./useForwardExpose-BhawR5VU.js";import"./createLucideIcon-ZFd4jktC.js";import"./index-BCC4ahRc.js";const N={key:0,class:"mb-4 text-center text-sm font-medium text-green-600"},V={class:"space-y-6"},F={class:"grid gap-2"},P={class:"my-6 flex items-center justify-start"},D={class:"space-x-1 text-center text-sm text-muted-foreground"},M=v({__name:"ForgotPassword",props:{status:{}},setup(m){return(j,e)=>(r(),d(k,{title:"Forgot password",description:"Enter your email to receive a password reset link"},{default:a(()=>[s(t(b),{title:"Forgot password"}),m.status?(r(),$("div",N,h(m.status),1)):n("",!0),o("div",V,[s(t(B),C(E(t(y).form())),{default:a(({errors:f,processing:l})=>[o("div",F,[s(t(x),{for:"email"},{default:a(()=>[...e[0]||(e[0]=[i("Email address",-1)])]),_:1}),s(t(c),{id:"email",type:"email",name:"email",autocomplete:"off",autofocus:"",placeholder:"email@example.com"}),s(_,{message:f.email},null,8,["message"])]),o("div",P,[s(t(u),{class:"w-full",disabled:l,"data-test":"email-password-reset-link-button"},{default:a(()=>[l?(r(),d(t(g),{key:0})):n("",!0),e[1]||(e[1]=i(" Email password reset link ",-1))]),_:2},1032,["disabled"])])]),_:1},16),o("div",D,[e[3]||(e[3]=o("span",null,"Or, return to",-1)),s(p,{href:t(w)()},{default:a(()=>[...e[2]||(e[2]=[i("log in",-1)])]),_:1},8,["href"])])])]),_:1}))}});export{M as default}; import{_}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as p}from"./TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js";import{_ as u}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as c}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as x}from"./Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js";import{_ as g}from"./Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js";import{_ as k}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{l as w}from"./index-C4J_hXM0.js";import{e as y}from"./index-vZYIBGLo.js";import{d as v,k as d,w as a,f as s,a as $,i as n,b as o,u as t,h as b,o as r,t as h,A as B,C,D as E,l as i}from"./app-BXYcVHqk.js";import"./useForwardExpose-Djbxsgaa.js";import"./createLucideIcon-BlA39rtn.js";import"./index-BCC4ahRc.js";const N={key:0,class:"mb-4 text-center text-sm font-medium text-green-600"},V={class:"space-y-6"},F={class:"grid gap-2"},P={class:"my-6 flex items-center justify-start"},D={class:"space-x-1 text-center text-sm text-muted-foreground"},M=v({__name:"ForgotPassword",props:{status:{}},setup(m){return(j,e)=>(r(),d(k,{title:"Forgot password",description:"Enter your email to receive a password reset link"},{default:a(()=>[s(t(b),{title:"Forgot password"}),m.status?(r(),$("div",N,h(m.status),1)):n("",!0),o("div",V,[s(t(B),C(E(t(y).form())),{default:a(({errors:f,processing:l})=>[o("div",F,[s(t(x),{for:"email"},{default:a(()=>[...e[0]||(e[0]=[i("Email address",-1)])]),_:1}),s(t(c),{id:"email",type:"email",name:"email",autocomplete:"off",autofocus:"",placeholder:"email@example.com"}),s(_,{message:f.email},null,8,["message"])]),o("div",P,[s(t(u),{class:"w-full",disabled:l,"data-test":"email-password-reset-link-button"},{default:a(()=>[l?(r(),d(t(g),{key:0})):n("",!0),e[1]||(e[1]=i(" Email password reset link ",-1))]),_:2},1032,["disabled"])])]),_:1},16),o("div",D,[e[3]||(e[3]=o("span",null,"Or, return to",-1)),s(p,{href:t(w)()},{default:a(()=>[...e[2]||(e[2]=[i("log in",-1)])]),_:1},8,["href"])])])]),_:1}))}});export{M as default};

View file

@ -0,0 +1 @@
.fade-enter-active[data-v-0cff14f2],.fade-leave-active[data-v-0cff14f2]{transition:opacity .2s}.fade-enter-from[data-v-0cff14f2],.fade-leave-to[data-v-0cff14f2]{opacity:0}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
.fade-enter-active[data-v-e85a9790],.fade-leave-active[data-v-e85a9790]{transition:opacity .2s}.fade-enter-from[data-v-e85a9790],.fade-leave-to[data-v-e85a9790]{opacity:0}

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{d as s,q as n,v as d,u as a,a as u,K as m,N as p,o as f}from"./app-CClrM5Yi.js";import{c}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{b}from"./useForwardExpose-BhawR5VU.js";const h=s({__name:"Input",props:{defaultValue:{},modelValue:{},class:{}},emits:["update:modelValue"],setup(r,{emit:o}){const e=r,t=b(e,"modelValue",o,{passive:!0,defaultValue:e.defaultValue});return(x,i)=>n((f(),u("input",{"onUpdate:modelValue":i[0]||(i[0]=l=>p(t)?t.value=l:null),"data-slot":"input",class:m(a(c)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e.class))},null,2)),[[d,a(t)]])}});export{h as _}; import{d as s,q as n,v as d,u as a,a as u,K as m,N as p,o as f}from"./app-BXYcVHqk.js";import{c}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{b}from"./useForwardExpose-Djbxsgaa.js";const h=s({__name:"Input",props:{defaultValue:{},modelValue:{},class:{}},emits:["update:modelValue"],setup(r,{emit:o}){const e=r,t=b(e,"modelValue",o,{passive:!0,defaultValue:e.defaultValue});return(x,i)=>n((f(),u("input",{"onUpdate:modelValue":i[0]||(i[0]=l=>p(t)?t.value=l:null),"data-slot":"input",class:m(a(c)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e.class))},null,2)),[[d,a(t)]])}});export{h as _};

View file

@ -1 +1 @@
import{d as s,q as t,L as a,a as r,b as o,t as n,o as c}from"./app-CClrM5Yi.js";const i={class:"text-sm text-red-600 dark:text-red-500"},l=s({__name:"InputError",props:{message:{}},setup(e){return(m,d)=>t((c(),r("div",null,[o("p",i,n(e.message),1)],512)),[[a,e.message]])}});export{l as _}; import{d as s,q as t,L as a,a as r,b as o,t as n,o as c}from"./app-BXYcVHqk.js";const i={class:"text-sm text-red-600 dark:text-red-500"},l=s({__name:"InputError",props:{message:{}},setup(e){return(m,d)=>t((c(),r("div",null,[o("p",i,n(e.message),1)],512)),[[a,e.message]])}});export{l as _};

View file

@ -1 +1 @@
import{P as c,c as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{a as _}from"./useForwardExpose-BhawR5VU.js";import{d as l,k as d,w as n,G as p,B as u,u as o,o as i,c as m}from"./app-CClrM5Yi.js";var b=l({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(s){const t=s;return _(),(r,a)=>(i(),d(o(c),u(t,{onMousedown:a[0]||(a[0]=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()})}),{default:n(()=>[p(r.$slots,"default")]),_:3},16))}}),g=b;const x=l({__name:"Label",props:{for:{},asChild:{type:Boolean},as:{},class:{}},setup(s){const t=s,r=m(()=>{const{class:a,...e}=t;return e});return(a,e)=>(i(),d(o(g),u({"data-slot":"label"},r.value,{class:o(f)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t.class)}),{default:n(()=>[p(a.$slots,"default")]),_:3},16,["class"]))}});export{x as _}; import{P as c,c as f}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{a as _}from"./useForwardExpose-Djbxsgaa.js";import{d as l,k as d,w as n,G as p,B as u,u as o,o as i,c as m}from"./app-BXYcVHqk.js";var b=l({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(s){const t=s;return _(),(r,a)=>(i(),d(o(c),u(t,{onMousedown:a[0]||(a[0]=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()})}),{default:n(()=>[p(r.$slots,"default")]),_:3},16))}}),g=b;const x=l({__name:"Label",props:{for:{},asChild:{type:Boolean},as:{},class:{}},setup(s){const t=s,r=m(()=>{const{class:a,...e}=t;return e});return(a,e)=>(i(),d(o(g),u({"data-slot":"label"},r.value,{class:o(f)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t.class)}),{default:n(()=>[p(a.$slots,"default")]),_:3},16,["class"]))}});export{x as _};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{d as y,k as v,w as d,f as s,u as t,h as b,b as i,A as q,B as Q,l as u,T as P,q as $,L as x,o as C}from"./app-CClrM5Yi.js";import{q as _}from"./index-C4J_hXM0.js";import{_ as m}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as k}from"./AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js";import{b as N,_ as T,a as B}from"./Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js";import{_ as S}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as l}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as p}from"./Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js";import"./useForwardExpose-BhawR5VU.js";import"./VisuallyHidden-Cu70tzB6.js";import"./RovingFocusGroup-CNFroA6Y.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./createLucideIcon-ZFd4jktC.js";import"./index--H2rh_A_.js";const r=e=>({url:r.url(e),method:"get"});r.definition={methods:["get","head"],url:"/settings/password"};r.url=e=>r.definition.url+_(e);r.get=e=>({url:r.url(e),method:"get"});r.head=e=>({url:r.url(e),method:"head"});const c=e=>({action:r.url(e),method:"get"});c.get=e=>({action:r.url(e),method:"get"});c.head=e=>({action:r.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"HEAD",...e?.query??e?.mergeQuery??{}}}),method:"get"});r.form=c;const a=e=>({url:a.url(e),method:"put"});a.definition={methods:["put"],url:"/settings/password"};a.url=e=>a.definition.url+_(e);a.put=e=>({url:a.url(e),method:"put"});const f=e=>({action:a.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...e?.query??e?.mergeQuery??{}}}),method:"post"});f.put=e=>({action:a.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...e?.query??e?.mergeQuery??{}}}),method:"post"});a.form=f;const U={edit:r,update:a},V={class:"space-y-6"},A={class:"grid gap-2"},D={class:"grid gap-2"},E={class:"grid gap-2"},F={class:"flex items-center gap-4"},H={class:"text-sm text-neutral-600"},se=y({__name:"Password",setup(e){const w=[{title:"Password settings",href:N().url}];return(I,o)=>(C(),v(k,{breadcrumbs:w},{default:d(()=>[s(t(b),{title:"Password settings"}),s(T,null,{default:d(()=>[i("div",V,[s(B,{title:"Update password",description:"Ensure your account is using a long, random password to stay secure"}),s(t(q),Q(t(U).update.form(),{options:{preserveScroll:!0},"reset-on-success":"","reset-on-error":["password","password_confirmation","current_password"],class:"space-y-6"}),{default:d(({errors:n,processing:g,recentlySuccessful:h})=>[i("div",A,[s(t(p),{for:"current_password"},{default:d(()=>[...o[0]||(o[0]=[u("Current password",-1)])]),_:1}),s(t(l),{id:"current_password",name:"current_password",type:"password",class:"mt-1 block w-full",autocomplete:"current-password",placeholder:"Current password"}),s(m,{message:n.current_password},null,8,["message"])]),i("div",D,[s(t(p),{for:"password"},{default:d(()=>[...o[1]||(o[1]=[u("New password",-1)])]),_:1}),s(t(l),{id:"password",name:"password",type:"password",class:"mt-1 block w-full",autocomplete:"new-password",placeholder:"New password"}),s(m,{message:n.password},null,8,["message"])]),i("div",E,[s(t(p),{for:"password_confirmation"},{default:d(()=>[...o[2]||(o[2]=[u("Confirm password",-1)])]),_:1}),s(t(l),{id:"password_confirmation",name:"password_confirmation",type:"password",class:"mt-1 block w-full",autocomplete:"new-password",placeholder:"Confirm password"}),s(m,{message:n.password_confirmation},null,8,["message"])]),i("div",F,[s(t(S),{disabled:g,"data-test":"update-password-button"},{default:d(()=>[...o[3]||(o[3]=[u("Save password",-1)])]),_:1},8,["disabled"]),s(P,{"enter-active-class":"transition ease-in-out","enter-from-class":"opacity-0","leave-active-class":"transition ease-in-out","leave-to-class":"opacity-0"},{default:d(()=>[$(i("p",H," Saved. ",512),[[x,h]])]),_:2},1024)])]),_:1},16)])]),_:1})]),_:1}))}});export{se as default}; import{d as y,k as v,w as d,f as s,u as t,h as b,b as i,A as q,B as Q,l as u,T as P,q as $,L as x,o as C}from"./app-BXYcVHqk.js";import{q as _}from"./index-C4J_hXM0.js";import{_ as m}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as k}from"./AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js";import{b as N,_ as T,a as B}from"./Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js";import{_ as S}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as l}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as p}from"./Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js";import"./useForwardExpose-Djbxsgaa.js";import"./VisuallyHidden-BvthYHr5.js";import"./RovingFocusGroup-dmigQ6Dy.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./createLucideIcon-BlA39rtn.js";import"./index--H2rh_A_.js";const r=e=>({url:r.url(e),method:"get"});r.definition={methods:["get","head"],url:"/settings/password"};r.url=e=>r.definition.url+_(e);r.get=e=>({url:r.url(e),method:"get"});r.head=e=>({url:r.url(e),method:"head"});const c=e=>({action:r.url(e),method:"get"});c.get=e=>({action:r.url(e),method:"get"});c.head=e=>({action:r.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"HEAD",...e?.query??e?.mergeQuery??{}}}),method:"get"});r.form=c;const a=e=>({url:a.url(e),method:"put"});a.definition={methods:["put"],url:"/settings/password"};a.url=e=>a.definition.url+_(e);a.put=e=>({url:a.url(e),method:"put"});const f=e=>({action:a.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...e?.query??e?.mergeQuery??{}}}),method:"post"});f.put=e=>({action:a.url({[e?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...e?.query??e?.mergeQuery??{}}}),method:"post"});a.form=f;const U={edit:r,update:a},V={class:"space-y-6"},A={class:"grid gap-2"},D={class:"grid gap-2"},E={class:"grid gap-2"},F={class:"flex items-center gap-4"},H={class:"text-sm text-neutral-600"},se=y({__name:"Password",setup(e){const w=[{title:"Password settings",href:N().url}];return(I,o)=>(C(),v(k,{breadcrumbs:w},{default:d(()=>[s(t(b),{title:"Password settings"}),s(T,null,{default:d(()=>[i("div",V,[s(B,{title:"Update password",description:"Ensure your account is using a long, random password to stay secure"}),s(t(q),Q(t(U).update.form(),{options:{preserveScroll:!0},"reset-on-success":"","reset-on-error":["password","password_confirmation","current_password"],class:"space-y-6"}),{default:d(({errors:n,processing:g,recentlySuccessful:h})=>[i("div",A,[s(t(p),{for:"current_password"},{default:d(()=>[...o[0]||(o[0]=[u("Current password",-1)])]),_:1}),s(t(l),{id:"current_password",name:"current_password",type:"password",class:"mt-1 block w-full",autocomplete:"current-password",placeholder:"Current password"}),s(m,{message:n.current_password},null,8,["message"])]),i("div",D,[s(t(p),{for:"password"},{default:d(()=>[...o[1]||(o[1]=[u("New password",-1)])]),_:1}),s(t(l),{id:"password",name:"password",type:"password",class:"mt-1 block w-full",autocomplete:"new-password",placeholder:"New password"}),s(m,{message:n.password},null,8,["message"])]),i("div",E,[s(t(p),{for:"password_confirmation"},{default:d(()=>[...o[2]||(o[2]=[u("Confirm password",-1)])]),_:1}),s(t(l),{id:"password_confirmation",name:"password_confirmation",type:"password",class:"mt-1 block w-full",autocomplete:"new-password",placeholder:"Confirm password"}),s(m,{message:n.password_confirmation},null,8,["message"])]),i("div",F,[s(t(S),{disabled:g,"data-test":"update-password-button"},{default:d(()=>[...o[3]||(o[3]=[u("Save password",-1)])]),_:1},8,["disabled"]),s(P,{"enter-active-class":"transition ease-in-out","enter-from-class":"opacity-0","leave-active-class":"transition ease-in-out","leave-to-class":"opacity-0"},{default:d(()=>[$(i("p",H," Saved. ",512),[[x,h]])]),_:2},1024)])]),_:1},16)])]),_:1})]),_:1}))}});export{se as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{_ as n}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as g}from"./TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js";import{_ as w}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as l}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as p}from"./Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js";import{_ as x}from"./Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js";import{_ as b}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{q as y,l as h}from"./index-C4J_hXM0.js";import{d as v,k as f,w as r,f as e,u as a,h as C,A as $,B as q,b as d,l as i,i as N,o as _}from"./app-CClrM5Yi.js";import"./useForwardExpose-BhawR5VU.js";import"./createLucideIcon-ZFd4jktC.js";const t=o=>({url:t.url(o),method:"post"});t.definition={methods:["post"],url:"/register"};t.url=o=>t.definition.url+y(o);t.post=o=>({url:t.url(o),method:"post"});const c=o=>({action:t.url(o),method:"post"});c.post=o=>({action:t.url(o),method:"post"});t.form=c;Object.assign(t,t);const k={class:"grid gap-6"},B={class:"grid gap-2"},P={class:"grid gap-2"},V={class:"grid gap-2"},A={class:"grid gap-2"},E={class:"text-center text-sm text-muted-foreground"},K=v({__name:"Register",setup(o){return(F,s)=>(_(),f(b,{title:"Create an account",description:"Enter your details below to create your account"},{default:r(()=>[e(a(C),{title:"Register"}),e(a($),q(a(t).form(),{"reset-on-success":["password","password_confirmation"],class:"flex flex-col gap-6"}),{default:r(({errors:m,processing:u})=>[d("div",k,[d("div",B,[e(a(p),{for:"name"},{default:r(()=>[...s[0]||(s[0]=[i("Name",-1)])]),_:1}),e(a(l),{id:"name",type:"text",required:"",autofocus:"",tabindex:1,autocomplete:"name",name:"name",placeholder:"Full name"}),e(n,{message:m.name},null,8,["message"])]),d("div",P,[e(a(p),{for:"email"},{default:r(()=>[...s[1]||(s[1]=[i("Email address",-1)])]),_:1}),e(a(l),{id:"email",type:"email",required:"",tabindex:2,autocomplete:"email",name:"email",placeholder:"email@example.com"}),e(n,{message:m.email},null,8,["message"])]),d("div",V,[e(a(p),{for:"password"},{default:r(()=>[...s[2]||(s[2]=[i("Password",-1)])]),_:1}),e(a(l),{id:"password",type:"password",required:"",tabindex:3,autocomplete:"new-password",name:"password",placeholder:"Password"}),e(n,{message:m.password},null,8,["message"])]),d("div",A,[e(a(p),{for:"password_confirmation"},{default:r(()=>[...s[3]||(s[3]=[i("Confirm password",-1)])]),_:1}),e(a(l),{id:"password_confirmation",type:"password",required:"",tabindex:4,autocomplete:"new-password",name:"password_confirmation",placeholder:"Confirm password"}),e(n,{message:m.password_confirmation},null,8,["message"])]),e(a(w),{type:"submit",class:"mt-2 w-full",tabindex:"5",disabled:u,"data-test":"register-user-button"},{default:r(()=>[u?(_(),f(a(x),{key:0})):N("",!0),s[4]||(s[4]=i(" Create account ",-1))]),_:2},1032,["disabled"])]),d("div",E,[s[6]||(s[6]=i(" Already have an account? ",-1)),e(g,{href:a(h)(),class:"underline underline-offset-4",tabindex:6},{default:r(()=>[...s[5]||(s[5]=[i("Log in",-1)])]),_:1},8,["href"])])]),_:1},16)]),_:1}))}});export{K as default}; import{_ as n}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as g}from"./TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js";import{_ as w}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as l}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as p}from"./Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js";import{_ as x}from"./Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js";import{_ as b}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{q as y,l as h}from"./index-C4J_hXM0.js";import{d as v,k as f,w as r,f as e,u as a,h as C,A as $,B as q,b as d,l as i,i as N,o as _}from"./app-BXYcVHqk.js";import"./useForwardExpose-Djbxsgaa.js";import"./createLucideIcon-BlA39rtn.js";const t=o=>({url:t.url(o),method:"post"});t.definition={methods:["post"],url:"/register"};t.url=o=>t.definition.url+y(o);t.post=o=>({url:t.url(o),method:"post"});const c=o=>({action:t.url(o),method:"post"});c.post=o=>({action:t.url(o),method:"post"});t.form=c;Object.assign(t,t);const k={class:"grid gap-6"},B={class:"grid gap-2"},P={class:"grid gap-2"},V={class:"grid gap-2"},A={class:"grid gap-2"},E={class:"text-center text-sm text-muted-foreground"},K=v({__name:"Register",setup(o){return(F,s)=>(_(),f(b,{title:"Create an account",description:"Enter your details below to create your account"},{default:r(()=>[e(a(C),{title:"Register"}),e(a($),q(a(t).form(),{"reset-on-success":["password","password_confirmation"],class:"flex flex-col gap-6"}),{default:r(({errors:m,processing:u})=>[d("div",k,[d("div",B,[e(a(p),{for:"name"},{default:r(()=>[...s[0]||(s[0]=[i("Name",-1)])]),_:1}),e(a(l),{id:"name",type:"text",required:"",autofocus:"",tabindex:1,autocomplete:"name",name:"name",placeholder:"Full name"}),e(n,{message:m.name},null,8,["message"])]),d("div",P,[e(a(p),{for:"email"},{default:r(()=>[...s[1]||(s[1]=[i("Email address",-1)])]),_:1}),e(a(l),{id:"email",type:"email",required:"",tabindex:2,autocomplete:"email",name:"email",placeholder:"email@example.com"}),e(n,{message:m.email},null,8,["message"])]),d("div",V,[e(a(p),{for:"password"},{default:r(()=>[...s[2]||(s[2]=[i("Password",-1)])]),_:1}),e(a(l),{id:"password",type:"password",required:"",tabindex:3,autocomplete:"new-password",name:"password",placeholder:"Password"}),e(n,{message:m.password},null,8,["message"])]),d("div",A,[e(a(p),{for:"password_confirmation"},{default:r(()=>[...s[3]||(s[3]=[i("Confirm password",-1)])]),_:1}),e(a(l),{id:"password_confirmation",type:"password",required:"",tabindex:4,autocomplete:"new-password",name:"password_confirmation",placeholder:"Confirm password"}),e(n,{message:m.password_confirmation},null,8,["message"])]),e(a(w),{type:"submit",class:"mt-2 w-full",tabindex:"5",disabled:u,"data-test":"register-user-button"},{default:r(()=>[u?(_(),f(a(x),{key:0})):N("",!0),s[4]||(s[4]=i(" Create account ",-1))]),_:2},1032,["disabled"])]),d("div",E,[s[6]||(s[6]=i(" Already have an account? ",-1)),e(g,{href:a(h)(),class:"underline underline-offset-4",tabindex:6},{default:r(()=>[...s[5]||(s[5]=[i("Log in",-1)])]),_:1},8,["href"])])]),_:1},16)]),_:1}))}});export{K as default};

View file

@ -1 +1 @@
import{_ as d}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as c}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as i}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as n}from"./Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js";import{_ as g}from"./Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js";import{_ as k}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{u as b}from"./index-vZYIBGLo.js";import{d as y,r as V,k as u,w as o,f as s,u as a,h as v,A as P,B as $,b as r,l as m,i as C,o as w}from"./app-CClrM5Yi.js";import"./useForwardExpose-BhawR5VU.js";import"./createLucideIcon-ZFd4jktC.js";import"./index-C4J_hXM0.js";import"./index-BCC4ahRc.js";const x={class:"grid gap-6"},B={class:"grid gap-2"},N={class:"grid gap-2"},R={class:"grid gap-2"},K=y({__name:"ResetPassword",props:{token:{},email:{}},setup(l){const p=V(l.email);return(A,e)=>(w(),u(k,{title:"Reset password",description:"Please enter your new password below"},{default:o(()=>[s(a(v),{title:"Reset password"}),s(a(P),$(a(b).form(),{transform:t=>({...t,token:l.token,email:l.email}),"reset-on-success":["password","password_confirmation"]}),{default:o(({errors:t,processing:f})=>[r("div",x,[r("div",B,[s(a(n),{for:"email"},{default:o(()=>[...e[1]||(e[1]=[m("Email",-1)])]),_:1}),s(a(i),{id:"email",type:"email",name:"email",autocomplete:"email",modelValue:p.value,"onUpdate:modelValue":e[0]||(e[0]=_=>p.value=_),class:"mt-1 block w-full",readonly:""},null,8,["modelValue"]),s(d,{message:t.email,class:"mt-2"},null,8,["message"])]),r("div",N,[s(a(n),{for:"password"},{default:o(()=>[...e[2]||(e[2]=[m("Password",-1)])]),_:1}),s(a(i),{id:"password",type:"password",name:"password",autocomplete:"new-password",class:"mt-1 block w-full",autofocus:"",placeholder:"Password"}),s(d,{message:t.password},null,8,["message"])]),r("div",R,[s(a(n),{for:"password_confirmation"},{default:o(()=>[...e[3]||(e[3]=[m(" Confirm Password ",-1)])]),_:1}),s(a(i),{id:"password_confirmation",type:"password",name:"password_confirmation",autocomplete:"new-password",class:"mt-1 block w-full",placeholder:"Confirm password"}),s(d,{message:t.password_confirmation},null,8,["message"])]),s(a(c),{type:"submit",class:"mt-4 w-full",disabled:f,"data-test":"reset-password-button"},{default:o(()=>[f?(w(),u(a(g),{key:0})):C("",!0),e[4]||(e[4]=m(" Reset password ",-1))]),_:2},1032,["disabled"])])]),_:1},16,["transform"])]),_:1}))}});export{K as default}; import{_ as d}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as c}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as i}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as n}from"./Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js";import{_ as g}from"./Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js";import{_ as k}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{u as b}from"./index-vZYIBGLo.js";import{d as y,r as V,k as u,w as o,f as s,u as a,h as v,A as P,B as $,b as r,l as m,i as C,o as w}from"./app-BXYcVHqk.js";import"./useForwardExpose-Djbxsgaa.js";import"./createLucideIcon-BlA39rtn.js";import"./index-C4J_hXM0.js";import"./index-BCC4ahRc.js";const x={class:"grid gap-6"},B={class:"grid gap-2"},N={class:"grid gap-2"},R={class:"grid gap-2"},K=y({__name:"ResetPassword",props:{token:{},email:{}},setup(l){const p=V(l.email);return(A,e)=>(w(),u(k,{title:"Reset password",description:"Please enter your new password below"},{default:o(()=>[s(a(v),{title:"Reset password"}),s(a(P),$(a(b).form(),{transform:t=>({...t,token:l.token,email:l.email}),"reset-on-success":["password","password_confirmation"]}),{default:o(({errors:t,processing:f})=>[r("div",x,[r("div",B,[s(a(n),{for:"email"},{default:o(()=>[...e[1]||(e[1]=[m("Email",-1)])]),_:1}),s(a(i),{id:"email",type:"email",name:"email",autocomplete:"email",modelValue:p.value,"onUpdate:modelValue":e[0]||(e[0]=_=>p.value=_),class:"mt-1 block w-full",readonly:""},null,8,["modelValue"]),s(d,{message:t.email,class:"mt-2"},null,8,["message"])]),r("div",N,[s(a(n),{for:"password"},{default:o(()=>[...e[2]||(e[2]=[m("Password",-1)])]),_:1}),s(a(i),{id:"password",type:"password",name:"password",autocomplete:"new-password",class:"mt-1 block w-full",autofocus:"",placeholder:"Password"}),s(d,{message:t.password},null,8,["message"])]),r("div",R,[s(a(n),{for:"password_confirmation"},{default:o(()=>[...e[3]||(e[3]=[m(" Confirm Password ",-1)])]),_:1}),s(a(i),{id:"password_confirmation",type:"password",name:"password_confirmation",autocomplete:"new-password",class:"mt-1 block w-full",placeholder:"Confirm password"}),s(d,{message:t.password_confirmation},null,8,["message"])]),s(a(c),{type:"submit",class:"mt-4 w-full",disabled:f,"data-test":"reset-password-button"},{default:o(()=>[f?(w(),u(a(g),{key:0})):C("",!0),e[4]||(e[4]=m(" Reset password ",-1))]),_:2},1032,["disabled"])])]),_:1},16,["transform"])]),_:1}))}});export{K as default};

View file

@ -1,3 +1,3 @@
import{a4 as L,r as E,p as w,H as q,E as B,c as b,d as M,Q as x,a5 as G,a6 as C,a7 as V,a8 as j,R as K,a9 as Y,k as z,o as W,w as _,f as H,u as T,G as Q}from"./app-CClrM5Yi.js";import{r as J,S as O,P as X}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{q as Z,i as ee,u as te,b as ne}from"./useForwardExpose-BhawR5VU.js";import{b as R,g as P,c as ae,a as oe}from"./VisuallyHidden-Cu70tzB6.js";function Ee(t,e="reka"){return`${e}-${L?.()}`}function re(t,e){const i=E(t);function a(d){return e[i.value][d]??i.value}return{state:i,dispatch:d=>{i.value=a(d)}}}function ie(t,e){const i=E({}),a=E("none"),s=E(t),d=t.value?"mounted":"unmounted";let c;const v=e.value?.ownerDocument.defaultView??Z,{state:m,dispatch:u}=re(d,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),n=o=>{if(ee){const r=new CustomEvent(o,{bubbles:!1,cancelable:!1});e.value?.dispatchEvent(r)}};w(t,async(o,r)=>{const h=r!==o;if(await q(),h){const I=a.value,p=N(e.value);o?(u("MOUNT"),n("enter"),p==="none"&&n("after-enter")):p==="none"||p==="undefined"||i.value?.display==="none"?(u("UNMOUNT"),n("leave"),n("after-leave")):r&&I!==p?(u("ANIMATION_OUT"),n("leave")):(u("UNMOUNT"),n("after-leave"))}},{immediate:!0});const l=o=>{const r=N(e.value),h=r.includes(CSS.escape(o.animationName)),I=m.value==="mounted"?"enter":"leave";if(o.target===e.value&&h&&(n(`after-${I}`),u("ANIMATION_END"),!s.value)){const p=e.value.style.animationFillMode;e.value.style.animationFillMode="forwards",c=v?.setTimeout(()=>{e.value?.style.animationFillMode==="forwards"&&(e.value.style.animationFillMode=p)})}o.target===e.value&&r==="none"&&u("ANIMATION_END")},f=o=>{o.target===e.value&&(a.value=N(e.value))},A=w(e,(o,r)=>{o?(i.value=getComputedStyle(o),o.addEventListener("animationstart",f),o.addEventListener("animationcancel",l),o.addEventListener("animationend",l)):(u("ANIMATION_END"),c!==void 0&&v?.clearTimeout(c),r?.removeEventListener("animationstart",f),r?.removeEventListener("animationcancel",l),r?.removeEventListener("animationend",l))},{immediate:!0}),g=w(m,()=>{const o=N(e.value);a.value=m.value==="mounted"?o:"none"});return B(()=>{A(),g()}),{isPresent:b(()=>["mounted","unmountSuspended"].includes(m.value))}}function N(t){return t&&getComputedStyle(t).animationName||"none"}var Ie=M({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(t,{slots:e,expose:i}){const{present:a,forceMount:s}=x(t),d=E(),{isPresent:c}=ie(a,d);i({present:c});let v=e.default({present:c.value});v=J(v||[]);const m=G();if(v&&v?.length>1){const u=m?.parent?.type.name?`<${m.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${u}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(n=>` - ${n}`).join(` import{a4 as L,r as E,p as w,H as q,E as B,c as b,d as M,Q as x,a5 as G,a6 as C,a7 as V,a8 as j,R as K,a9 as Y,k as z,o as W,w as _,f as H,u as T,G as Q}from"./app-BXYcVHqk.js";import{r as J,S as O,P as X}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{q as Z,i as ee,u as te,b as ne}from"./useForwardExpose-Djbxsgaa.js";import{b as R,g as P,c as ae,a as oe}from"./VisuallyHidden-BvthYHr5.js";function Ee(t,e="reka"){return`${e}-${L?.()}`}function re(t,e){const i=E(t);function a(d){return e[i.value][d]??i.value}return{state:i,dispatch:d=>{i.value=a(d)}}}function ie(t,e){const i=E({}),a=E("none"),s=E(t),d=t.value?"mounted":"unmounted";let c;const v=e.value?.ownerDocument.defaultView??Z,{state:m,dispatch:u}=re(d,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),n=o=>{if(ee){const r=new CustomEvent(o,{bubbles:!1,cancelable:!1});e.value?.dispatchEvent(r)}};w(t,async(o,r)=>{const h=r!==o;if(await q(),h){const I=a.value,p=N(e.value);o?(u("MOUNT"),n("enter"),p==="none"&&n("after-enter")):p==="none"||p==="undefined"||i.value?.display==="none"?(u("UNMOUNT"),n("leave"),n("after-leave")):r&&I!==p?(u("ANIMATION_OUT"),n("leave")):(u("UNMOUNT"),n("after-leave"))}},{immediate:!0});const l=o=>{const r=N(e.value),h=r.includes(CSS.escape(o.animationName)),I=m.value==="mounted"?"enter":"leave";if(o.target===e.value&&h&&(n(`after-${I}`),u("ANIMATION_END"),!s.value)){const p=e.value.style.animationFillMode;e.value.style.animationFillMode="forwards",c=v?.setTimeout(()=>{e.value?.style.animationFillMode==="forwards"&&(e.value.style.animationFillMode=p)})}o.target===e.value&&r==="none"&&u("ANIMATION_END")},f=o=>{o.target===e.value&&(a.value=N(e.value))},A=w(e,(o,r)=>{o?(i.value=getComputedStyle(o),o.addEventListener("animationstart",f),o.addEventListener("animationcancel",l),o.addEventListener("animationend",l)):(u("ANIMATION_END"),c!==void 0&&v?.clearTimeout(c),r?.removeEventListener("animationstart",f),r?.removeEventListener("animationcancel",l),r?.removeEventListener("animationend",l))},{immediate:!0}),g=w(m,()=>{const o=N(e.value);a.value=m.value==="mounted"?o:"none"});return B(()=>{A(),g()}),{isPresent:b(()=>["mounted","unmountSuspended"].includes(m.value))}}function N(t){return t&&getComputedStyle(t).animationName||"none"}var Ie=M({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(t,{slots:e,expose:i}){const{present:a,forceMount:s}=x(t),d=E(),{isPresent:c}=ie(a,d);i({present:c});let v=e.default({present:c.value});v=J(v||[]);const m=G();if(v&&v?.length>1){const u=m?.parent?.type.name?`<${m.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${u}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(n=>` - ${n}`).join(`
`)].join(` `)].join(`
`))}return()=>s.value||a.value||c.value?C(e.default({present:c.value})[0],{ref:u=>{const n=te(u);return typeof n?.hasAttribute>"u"||(n?.hasAttribute("data-reka-popper-content-wrapper")?d.value=n.firstElementChild:d.value=n),n}}):null}});const U="data-reka-collection-item";function se(t={}){const{key:e="",isProvider:i=!1}=t,a=`${e}CollectionProvider`;let s;if(i){const n=E(new Map);s={collectionRef:E(),itemMap:n},V(a,s)}else s=j(a);const d=(n=!1)=>{const l=s.collectionRef.value;if(!l)return[];const f=Array.from(l.querySelectorAll(`[${U}]`)),g=Array.from(s.itemMap.value.values()).sort((S,o)=>f.indexOf(S.ref)-f.indexOf(o.ref));return n?g:g.filter(S=>S.ref.dataset.disabled!=="")},c=M({name:"CollectionSlot",setup(n,{slots:l}){const{primitiveElement:f,currentElement:A}=R();return w(A,()=>{s.collectionRef.value=A.value}),()=>C(O,{ref:f},l)}}),v=M({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(n,{slots:l,attrs:f}){const{primitiveElement:A,currentElement:g}=R();return K(S=>{if(g.value){const o=Y(g.value);s.itemMap.value.set(o,{ref:g.value,value:n.value}),S(()=>s.itemMap.value.delete(o))}}),()=>C(O,{...f,[U]:"",ref:A},l)}}),m=b(()=>Array.from(s.itemMap.value.values())),u=b(()=>s.itemMap.value.size);return{getItems:d,reactiveItems:m,itemMapSize:u,CollectionSlot:c,CollectionItem:v}}const ue="rovingFocusGroup.onEntryFocus",le={bubbles:!1,cancelable:!0},ce={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function de(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function ye(t,e,i){const a=de(t.key,i);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return ce[a]}function fe(t,e=!1){const i=P();for(const a of t)if(a===i||(a.focus({preventScroll:e}),P()!==i))return}function Se(t,e){return t.map((i,a)=>t[(e+a)%t.length])}const[Te,me]=ae("RovingFocusGroup");var ve=M({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(t,{expose:e,emit:i}){const a=t,s=i,{loop:d,orientation:c,dir:v}=x(a),m=oe(v),u=ne(a,"currentTabStopId",s,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),n=E(!1),l=E(!1),f=E(0),{getItems:A,CollectionSlot:g}=se({isProvider:!0});function S(r){const h=!l.value;if(r.currentTarget&&r.target===r.currentTarget&&h&&!n.value){const I=new CustomEvent(ue,le);if(r.currentTarget.dispatchEvent(I),s("entryFocus",I),!I.defaultPrevented){const p=A().map(y=>y.ref).filter(y=>y.dataset.disabled!==""),F=p.find(y=>y.getAttribute("data-active")===""),D=p.find(y=>y.getAttribute("data-highlighted")===""),$=p.find(y=>y.id===u.value),k=[F,D,$,...p].filter(Boolean);fe(k,a.preventScrollOnEntryFocus)}}l.value=!1}function o(){setTimeout(()=>{l.value=!1},1)}return e({getItems:A}),me({loop:d,dir:m,orientation:c,currentTabStopId:u,onItemFocus:r=>{u.value=r},onItemShiftTab:()=>{n.value=!0},onFocusableItemAdd:()=>{f.value++},onFocusableItemRemove:()=>{f.value--}}),(r,h)=>(W(),z(T(g),null,{default:_(()=>[H(T(X),{tabindex:n.value||f.value===0?-1:0,"data-orientation":T(c),as:r.as,"as-child":r.asChild,dir:T(m),style:{outline:"none"},onMousedown:h[0]||(h[0]=I=>l.value=!0),onMouseup:o,onFocus:S,onBlur:h[1]||(h[1]=I=>n.value=!1)},{default:_(()=>[Q(r.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),Ne=ve;export{Ie as P,Ne as R,se as a,fe as f,ye as g,Te as i,Ee as u,Se as w}; `))}return()=>s.value||a.value||c.value?C(e.default({present:c.value})[0],{ref:u=>{const n=te(u);return typeof n?.hasAttribute>"u"||(n?.hasAttribute("data-reka-popper-content-wrapper")?d.value=n.firstElementChild:d.value=n),n}}):null}});const U="data-reka-collection-item";function se(t={}){const{key:e="",isProvider:i=!1}=t,a=`${e}CollectionProvider`;let s;if(i){const n=E(new Map);s={collectionRef:E(),itemMap:n},V(a,s)}else s=j(a);const d=(n=!1)=>{const l=s.collectionRef.value;if(!l)return[];const f=Array.from(l.querySelectorAll(`[${U}]`)),g=Array.from(s.itemMap.value.values()).sort((S,o)=>f.indexOf(S.ref)-f.indexOf(o.ref));return n?g:g.filter(S=>S.ref.dataset.disabled!=="")},c=M({name:"CollectionSlot",setup(n,{slots:l}){const{primitiveElement:f,currentElement:A}=R();return w(A,()=>{s.collectionRef.value=A.value}),()=>C(O,{ref:f},l)}}),v=M({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(n,{slots:l,attrs:f}){const{primitiveElement:A,currentElement:g}=R();return K(S=>{if(g.value){const o=Y(g.value);s.itemMap.value.set(o,{ref:g.value,value:n.value}),S(()=>s.itemMap.value.delete(o))}}),()=>C(O,{...f,[U]:"",ref:A},l)}}),m=b(()=>Array.from(s.itemMap.value.values())),u=b(()=>s.itemMap.value.size);return{getItems:d,reactiveItems:m,itemMapSize:u,CollectionSlot:c,CollectionItem:v}}const ue="rovingFocusGroup.onEntryFocus",le={bubbles:!1,cancelable:!0},ce={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function de(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function ye(t,e,i){const a=de(t.key,i);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return ce[a]}function fe(t,e=!1){const i=P();for(const a of t)if(a===i||(a.focus({preventScroll:e}),P()!==i))return}function Se(t,e){return t.map((i,a)=>t[(e+a)%t.length])}const[Te,me]=ae("RovingFocusGroup");var ve=M({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(t,{expose:e,emit:i}){const a=t,s=i,{loop:d,orientation:c,dir:v}=x(a),m=oe(v),u=ne(a,"currentTabStopId",s,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),n=E(!1),l=E(!1),f=E(0),{getItems:A,CollectionSlot:g}=se({isProvider:!0});function S(r){const h=!l.value;if(r.currentTarget&&r.target===r.currentTarget&&h&&!n.value){const I=new CustomEvent(ue,le);if(r.currentTarget.dispatchEvent(I),s("entryFocus",I),!I.defaultPrevented){const p=A().map(y=>y.ref).filter(y=>y.dataset.disabled!==""),F=p.find(y=>y.getAttribute("data-active")===""),D=p.find(y=>y.getAttribute("data-highlighted")===""),$=p.find(y=>y.id===u.value),k=[F,D,$,...p].filter(Boolean);fe(k,a.preventScrollOnEntryFocus)}}l.value=!1}function o(){setTimeout(()=>{l.value=!1},1)}return e({getItems:A}),me({loop:d,dir:m,orientation:c,currentTabStopId:u,onItemFocus:r=>{u.value=r},onItemShiftTab:()=>{n.value=!0},onFocusableItemAdd:()=>{f.value++},onFocusableItemRemove:()=>{f.value--}}),(r,h)=>(W(),z(T(g),null,{default:_(()=>[H(T(X),{tabindex:n.value||f.value===0?-1:0,"data-orientation":T(c),as:r.as,"as-child":r.asChild,dir:T(m),style:{outline:"none"},onMousedown:h[0]||(h[0]=I=>l.value=!0),onMouseup:o,onFocus:S,onBlur:h[1]||(h[1]=I=>n.value=!1)},{default:_(()=>[Q(r.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),Ne=ve;export{Ie as P,Ne as R,se as a,fe as f,ye as g,Te as i,Ee as u,Se as w};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
.fade-enter-active[data-v-57497e98],.fade-leave-active[data-v-57497e98]{transition:opacity .2s}.fade-enter-from[data-v-57497e98],.fade-leave-to[data-v-57497e98]{opacity:0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
.fade-enter-active[data-v-1101142c],.fade-leave-active[data-v-1101142c]{transition:opacity .2s}.fade-enter-from[data-v-1101142c],.fade-leave-to[data-v-1101142c]{opacity:0}

View file

@ -1 +1 @@
import{c as o}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{c as r}from"./createLucideIcon-ZFd4jktC.js";import{d as c,k as n,u as a,K as t,o as l}from"./app-CClrM5Yi.js";const i=r("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),f=c({__name:"Spinner",props:{class:{}},setup(s){const e=s;return(p,m)=>(l(),n(a(i),{role:"status","aria-label":"Loading",class:t(a(o)("size-4 animate-spin",e.class))},null,8,["class"]))}});export{f as _}; import{c as o}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{c as r}from"./createLucideIcon-BlA39rtn.js";import{d as c,k as n,u as a,K as t,o as l}from"./app-BXYcVHqk.js";const i=r("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]),f=c({__name:"Spinner",props:{class:{}},setup(s){const e=s;return(p,m)=>(l(),n(a(i),{role:"status","aria-label":"Loading",class:t(a(o)("size-4 animate-spin",e.class))},null,8,["class"]))}});export{f as _};

View file

@ -1 +1 @@
import{d as a,k as n,u as o,m as r,w as d,G as s,o as i}from"./app-CClrM5Yi.js";const l=a({__name:"TextLink",props:{href:{},tabindex:{},method:{},as:{}},setup(e){return(t,u)=>(i(),n(o(r),{href:e.href,tabindex:e.tabindex,method:e.method,as:e.as,class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500"},{default:d(()=>[s(t.$slots,"default")]),_:3},8,["href","tabindex","method","as"]))}});export{l as _}; import{d as a,k as n,u as o,m as r,w as d,G as s,o as i}from"./app-BXYcVHqk.js";const l=a({__name:"TextLink",props:{href:{},tabindex:{},method:{},as:{}},setup(e){return(t,u)=>(i(),n(o(r),{href:e.href,tabindex:e.tabindex,method:e.method,as:e.as,class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500"},{default:d(()=>[s(t.$slots,"default")]),_:3},8,["href","tabindex","method","as"]))}});export{l as _};

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{_ as v}from"./InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js";import{_ as y}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as V}from"./Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js";import{_ as B,a as E,b as F}from"./PinInputSlot.vue_vue_type_script_setup_true_lang-D_qQ1GfR.js";import{_ as j}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{s as g}from"./index--H2rh_A_.js";import{d as A,c as x,r as b,k as m,w as a,f as n,b as o,u as t,h as N,o as d,A as h,B as k,a as R,F as P,g as q,l as C,t as w}from"./app-CClrM5Yi.js";import"./useForwardExpose-BhawR5VU.js";import"./VisuallyHidden-Cu70tzB6.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./VisuallyHiddenInput-Drd3EMOd.js";import"./index-C4J_hXM0.js";const D={class:"space-y-6"},I=["value"],L={class:"flex flex-col items-center justify-center space-y-3 text-center"},M={class:"flex w-full items-center justify-center"},S={class:"text-center text-sm text-muted-foreground"},U=["onClick"],z={class:"text-center text-sm text-muted-foreground"},G=["onClick"],ae=A({__name:"TwoFactorChallenge",setup(H){const l=x(()=>r.value?{title:"Recovery Code",description:"Please confirm access to your account by entering one of your emergency recovery codes.",toggleText:"login using an authentication code"}:{title:"Authentication Code",description:"Enter the authentication code provided by your authenticator application.",toggleText:"login using a recovery code"}),r=b(!1),p=_=>{r.value=!r.value,_(),s.value=[]},s=b([]),$=x(()=>s.value.join(""));return(_,e)=>(d(),m(j,{title:l.value.title,description:l.value.description},{default:a(()=>[n(t(N),{title:"Two-Factor Authentication"}),o("div",D,[r.value?(d(),m(t(h),k({key:1},t(g).form(),{class:"space-y-4","reset-on-error":""}),{default:a(({errors:i,processing:u,clearErrors:c})=>[n(t(V),{name:"recovery_code",type:"text",placeholder:"Enter recovery code",autofocus:r.value,required:""},null,8,["autofocus"]),n(v,{message:i.recovery_code},null,8,["message"]),n(t(y),{type:"submit",class:"w-full",disabled:u},{default:a(()=>[...e[4]||(e[4]=[C("Continue",-1)])]),_:1},8,["disabled"]),o("div",z,[e[5]||(e[5]=o("span",null,"or you can ",-1)),o("button",{type:"button",class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500",onClick:()=>p(c)},w(l.value.toggleText),9,G)])]),_:1},16)):(d(),m(t(h),k({key:0},t(g).form(),{class:"space-y-4","reset-on-error":"",onError:e[1]||(e[1]=i=>s.value=[])}),{default:a(({errors:i,processing:u,clearErrors:c})=>[o("input",{type:"hidden",name:"code",value:$.value},null,8,I),o("div",L,[o("div",M,[n(t(B),{id:"otp",placeholder:"○",modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=f=>s.value=f),type:"number",otp:""},{default:a(()=>[n(t(E),null,{default:a(()=>[(d(),R(P,null,q(6,(f,T)=>n(t(F),{key:f,index:T,disabled:u,autofocus:""},null,8,["index","disabled"])),64))]),_:2},1024)]),_:2},1032,["modelValue"])]),n(v,{message:i.code},null,8,["message"])]),n(t(y),{type:"submit",class:"w-full",disabled:u},{default:a(()=>[...e[2]||(e[2]=[C("Continue",-1)])]),_:1},8,["disabled"]),o("div",S,[e[3]||(e[3]=o("span",null,"or you can ",-1)),o("button",{type:"button",class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500",onClick:()=>p(c)},w(l.value.toggleText),9,U)])]),_:1},16))])]),_:1},8,["title","description"]))}});export{ae as default}; import{_ as v}from"./InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js";import{_ as y}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as V}from"./Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js";import{_ as B,a as E,b as F}from"./PinInputSlot.vue_vue_type_script_setup_true_lang-D1xXx8BE.js";import{_ as j}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{s as g}from"./index--H2rh_A_.js";import{d as A,c as x,r as b,k as m,w as a,f as n,b as o,u as t,h as N,o as d,A as h,B as k,a as R,F as P,g as q,l as C,t as w}from"./app-BXYcVHqk.js";import"./useForwardExpose-Djbxsgaa.js";import"./VisuallyHidden-BvthYHr5.js";import"./useArrowNavigation-C6Y-ieo6.js";import"./VisuallyHiddenInput-BVzeYF-P.js";import"./index-C4J_hXM0.js";const D={class:"space-y-6"},I=["value"],L={class:"flex flex-col items-center justify-center space-y-3 text-center"},M={class:"flex w-full items-center justify-center"},S={class:"text-center text-sm text-muted-foreground"},U=["onClick"],z={class:"text-center text-sm text-muted-foreground"},G=["onClick"],ae=A({__name:"TwoFactorChallenge",setup(H){const l=x(()=>r.value?{title:"Recovery Code",description:"Please confirm access to your account by entering one of your emergency recovery codes.",toggleText:"login using an authentication code"}:{title:"Authentication Code",description:"Enter the authentication code provided by your authenticator application.",toggleText:"login using a recovery code"}),r=b(!1),p=_=>{r.value=!r.value,_(),s.value=[]},s=b([]),$=x(()=>s.value.join(""));return(_,e)=>(d(),m(j,{title:l.value.title,description:l.value.description},{default:a(()=>[n(t(N),{title:"Two-Factor Authentication"}),o("div",D,[r.value?(d(),m(t(h),k({key:1},t(g).form(),{class:"space-y-4","reset-on-error":""}),{default:a(({errors:i,processing:u,clearErrors:c})=>[n(t(V),{name:"recovery_code",type:"text",placeholder:"Enter recovery code",autofocus:r.value,required:""},null,8,["autofocus"]),n(v,{message:i.recovery_code},null,8,["message"]),n(t(y),{type:"submit",class:"w-full",disabled:u},{default:a(()=>[...e[4]||(e[4]=[C("Continue",-1)])]),_:1},8,["disabled"]),o("div",z,[e[5]||(e[5]=o("span",null,"or you can ",-1)),o("button",{type:"button",class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500",onClick:()=>p(c)},w(l.value.toggleText),9,G)])]),_:1},16)):(d(),m(t(h),k({key:0},t(g).form(),{class:"space-y-4","reset-on-error":"",onError:e[1]||(e[1]=i=>s.value=[])}),{default:a(({errors:i,processing:u,clearErrors:c})=>[o("input",{type:"hidden",name:"code",value:$.value},null,8,I),o("div",L,[o("div",M,[n(t(B),{id:"otp",placeholder:"○",modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=f=>s.value=f),type:"number",otp:""},{default:a(()=>[n(t(E),null,{default:a(()=>[(d(),R(P,null,q(6,(f,T)=>n(t(F),{key:f,index:T,disabled:u,autofocus:""},null,8,["index","disabled"])),64))]),_:2},1024)]),_:2},1032,["modelValue"])]),n(v,{message:i.code},null,8,["message"])]),n(t(y),{type:"submit",class:"w-full",disabled:u},{default:a(()=>[...e[2]||(e[2]=[C("Continue",-1)])]),_:1},8,["disabled"]),o("div",S,[e[3]||(e[3]=o("span",null,"or you can ",-1)),o("button",{type:"button",class:"text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500",onClick:()=>p(c)},w(l.value.toggleText),9,U)])]),_:1},16))])]),_:1},8,["title","description"]))}});export{ae as default};

View file

@ -1 +1 @@
import{_ as l}from"./TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js";import{_ as d}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";import{_ as u}from"./Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js";import{_ as c}from"./AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js";import{b as _}from"./index-C4J_hXM0.js";import{s as p}from"./index-DZxzsgmi.js";import{d as k,k as r,w as a,f as s,a as y,i as m,u as e,h as x,o as i,A as b,B as v,l as n}from"./app-CClrM5Yi.js";import"./createLucideIcon-ZFd4jktC.js";const g={key:0,class:"mb-4 text-center text-sm font-medium text-green-600"},P=k({__name:"VerifyEmail",props:{status:{}},setup(f){return(h,t)=>(i(),r(c,{title:"Verify email",description:"Please verify your email address by clicking on the link we just emailed to you."},{default:a(()=>[s(e(x),{title:"Email verification"}),f.status==="verification-link-sent"?(i(),y("div",g," A new verification link has been sent to the email address you provided during registration. ")):m("",!0),s(e(b),v(e(p).form(),{class:"space-y-6 text-center"}),{default:a(({processing:o})=>[s(e(d),{disabled:o,variant:"secondary"},{default:a(()=>[o?(i(),r(e(u),{key:0})):m("",!0),t[0]||(t[0]=n(" Resend verification email ",-1))]),_:2},1032,["disabled"]),s(l,{href:e(_)(),as:"button",class:"mx-auto block text-sm"},{default:a(()=>[...t[1]||(t[1]=[n(" Log out ",-1)])]),_:1},8,["href"])]),_:1},16)]),_:1}))}});export{P as default}; import{_ as l}from"./TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js";import{_ as d}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";import{_ as u}from"./Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js";import{_ as c}from"./AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js";import{b as _}from"./index-C4J_hXM0.js";import{s as p}from"./index-DZxzsgmi.js";import{d as k,k as r,w as a,f as s,a as y,i as m,u as e,h as x,o as i,A as b,B as v,l as n}from"./app-BXYcVHqk.js";import"./createLucideIcon-BlA39rtn.js";const g={key:0,class:"mb-4 text-center text-sm font-medium text-green-600"},P=k({__name:"VerifyEmail",props:{status:{}},setup(f){return(h,t)=>(i(),r(c,{title:"Verify email",description:"Please verify your email address by clicking on the link we just emailed to you."},{default:a(()=>[s(e(x),{title:"Email verification"}),f.status==="verification-link-sent"?(i(),y("div",g," A new verification link has been sent to the email address you provided during registration. ")):m("",!0),s(e(b),v(e(p).form(),{class:"space-y-6 text-center"}),{default:a(({processing:o})=>[s(e(d),{disabled:o,variant:"secondary"},{default:a(()=>[o?(i(),r(e(u),{key:0})):m("",!0),t[0]||(t[0]=n(" Resend verification email ",-1))]),_:2},1032,["disabled"]),s(l,{href:e(_)(),as:"button",class:"mx-auto block text-sm"},{default:a(()=>[...t[1]||(t[1]=[n(" Log out ",-1)])]),_:1},8,["href"])]),_:1},16)]),_:1}))}});export{P as default};

View file

@ -1 +1 @@
import{a8 as f,a7 as p,r as u,c as l,a5 as d,aa as m,ab as c,ac as h,d as v,k as y,o as w,w as g,G as P,u as b}from"./app-CClrM5Yi.js";import{u as E}from"./useForwardExpose-BhawR5VU.js";import{P as x}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js";function _(e,t){const s=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(s);return[n=>{const i=f(o,n);if(i||i===null)return i;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},n=>(p(o,n),n)]}function R(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const[C]=_("ConfigProvider");function V(e){const t=C({dir:u("ltr")});return l(()=>e?.value||t.dir?.value||"ltr")}function j(e){const t=d(),s=t?.type.emits,o={};return s?.length||console.warn(`No emitted event found. Please check component: ${t?.type.__name}`),s?.forEach(r=>{o[m(c(r))]=(...a)=>e(r,...a)}),o}function $(e){const t=d(),s=Object.keys(t?.type.props??{}).reduce((r,a)=>{const n=(t?.type.props[a]).default;return n!==void 0&&(r[a]=n),r},{}),o=h(e);return l(()=>{const r={},a=t?.vnode.props??{};return Object.keys(a).forEach(n=>{r[c(n)]=a[n]}),Object.keys({...s,...r}).reduce((n,i)=>(o.value[i]!==void 0&&(n[i]=o.value[i]),n),{})})}function q(e,t){const s=$(e),o=t?j(t):{};return l(()=>({...s.value,...o}))}function B(){const e=u(),t=l(()=>["#text","#comment"].includes(e.value?.$el.nodeName)?e.value?.$el.nextElementSibling:E(e));return{primitiveElement:e,currentElement:t}}var k=v({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,s)=>(w(),y(b(x),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:g(()=>[P(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),O=k;export{O as V,V as a,B as b,_ as c,$ as d,j as e,R as g,C as i,q as u}; import{a8 as f,a7 as p,r as u,c as l,a5 as d,aa as m,ab as c,ac as h,d as v,k as y,o as w,w as g,G as P,u as b}from"./app-BXYcVHqk.js";import{u as E}from"./useForwardExpose-Djbxsgaa.js";import{P as x}from"./AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js";function _(e,t){const s=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(s);return[n=>{const i=f(o,n);if(i||i===null)return i;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},n=>(p(o,n),n)]}function R(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const[C]=_("ConfigProvider");function V(e){const t=C({dir:u("ltr")});return l(()=>e?.value||t.dir?.value||"ltr")}function j(e){const t=d(),s=t?.type.emits,o={};return s?.length||console.warn(`No emitted event found. Please check component: ${t?.type.__name}`),s?.forEach(r=>{o[m(c(r))]=(...a)=>e(r,...a)}),o}function $(e){const t=d(),s=Object.keys(t?.type.props??{}).reduce((r,a)=>{const n=(t?.type.props[a]).default;return n!==void 0&&(r[a]=n),r},{}),o=h(e);return l(()=>{const r={},a=t?.vnode.props??{};return Object.keys(a).forEach(n=>{r[c(n)]=a[n]}),Object.keys({...s,...r}).reduce((n,i)=>(o.value[i]!==void 0&&(n[i]=o.value[i]),n),{})})}function q(e,t){const s=$(e),o=t?j(t):{};return l(()=>({...s.value,...o}))}function B(){const e=u(),t=l(()=>["#text","#comment"].includes(e.value?.$el.nodeName)?e.value?.$el.nextElementSibling:E(e));return{primitiveElement:e,currentElement:t}}var k=v({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,s)=>(w(),y(b(x),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:g(()=>[P(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),O=k;export{O as V,V as a,B as b,_ as c,$ as d,j as e,R as g,C as i,q as u};

View file

@ -1 +1 @@
import{b as g,V as h}from"./VisuallyHidden-Cu70tzB6.js";import{d as y,c as o,p as B,k as p,o as n,B as d,a as f,i as E,F as c,g as V}from"./app-CClrM5Yi.js";var k=y({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(i){const e=i,{primitiveElement:s,currentElement:l}=g(),t=o(()=>e.checked??e.value);return B(t,(r,a)=>{if(!l.value)return;const u=l.value,_=window.HTMLInputElement.prototype,v=Object.getOwnPropertyDescriptor(_,"value").set;if(v&&r!==a){const b=new Event("input",{bubbles:!0}),q=new Event("change",{bubbles:!0});v.call(u,r),u.dispatchEvent(b),u.dispatchEvent(q)}}),(r,a)=>(n(),p(h,d({ref_key:"primitiveElement",ref:s},{...e,...r.$attrs},{as:"input"}),null,16))}}),m=k,A=y({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(i){const e=i,s=o(()=>typeof e.value=="object"&&Array.isArray(e.value)&&e.value.length===0&&e.required),l=o(()=>typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"||e.value===null||e.value===void 0?[{name:e.name,value:e.value}]:typeof e.value=="object"&&Array.isArray(e.value)?e.value.flatMap((t,r)=>typeof t=="object"?Object.entries(t).map(([a,u])=>({name:`${e.name}[${r}][${a}]`,value:u})):{name:`${e.name}[${r}]`,value:t}):e.value!==null&&typeof e.value=="object"&&!Array.isArray(e.value)?Object.entries(e.value).map(([t,r])=>({name:`${e.name}[${t}]`,value:r})):[]);return(t,r)=>(n(),f(c,null,[E(" We render single input if it's required "),s.value?(n(),p(m,d({key:t.name},{...e,...t.$attrs},{name:t.name,value:t.value}),null,16,["name","value"])):(n(!0),f(c,{key:1},V(l.value,a=>(n(),p(m,d({key:a.name},{ref_for:!0},{...e,...t.$attrs},{name:a.name,value:a.value}),null,16,["name","value"]))),128))],2112))}}),w=A;export{w as V}; import{b as g,V as h}from"./VisuallyHidden-BvthYHr5.js";import{d as y,c as o,p as B,k as p,o as n,B as d,a as f,i as E,F as c,g as V}from"./app-BXYcVHqk.js";var k=y({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(i){const e=i,{primitiveElement:s,currentElement:l}=g(),t=o(()=>e.checked??e.value);return B(t,(r,a)=>{if(!l.value)return;const u=l.value,_=window.HTMLInputElement.prototype,v=Object.getOwnPropertyDescriptor(_,"value").set;if(v&&r!==a){const b=new Event("input",{bubbles:!0}),q=new Event("change",{bubbles:!0});v.call(u,r),u.dispatchEvent(b),u.dispatchEvent(q)}}),(r,a)=>(n(),p(h,d({ref_key:"primitiveElement",ref:s},{...e,...r.$attrs},{as:"input"}),null,16))}}),m=k,A=y({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(i){const e=i,s=o(()=>typeof e.value=="object"&&Array.isArray(e.value)&&e.value.length===0&&e.required),l=o(()=>typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"||e.value===null||e.value===void 0?[{name:e.name,value:e.value}]:typeof e.value=="object"&&Array.isArray(e.value)?e.value.flatMap((t,r)=>typeof t=="object"?Object.entries(t).map(([a,u])=>({name:`${e.name}[${r}][${a}]`,value:u})):{name:`${e.name}[${r}]`,value:t}):e.value!==null&&typeof e.value=="object"&&!Array.isArray(e.value)?Object.entries(e.value).map(([t,r])=>({name:`${e.name}[${t}]`,value:r})):[]);return(t,r)=>(n(),f(c,null,[E(" We render single input if it's required "),s.value?(n(),p(m,d({key:t.name},{...e,...t.$attrs},{name:t.name,value:t.value}),null,16,["name","value"])):(n(!0),f(c,{key:1},V(l.value,a=>(n(),p(m,d({key:a.name},{ref_for:!0},{...e,...t.$attrs},{name:a.name,value:a.value}),null,16,["name","value"]))),128))],2112))}}),w=A;export{w as V};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{c}from"./createLucideIcon-ZFd4jktC.js";const o=c("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);export{o as C}; import{c}from"./createLucideIcon-BlA39rtn.js";const o=c("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);export{o as C};

View file

@ -1 +1 @@
import{a6 as a}from"./app-CClrM5Yi.js";const d=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var o={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const h=({size:e,strokeWidth:t=2,absoluteStrokeWidth:r,color:s,iconNode:n,name:i,class:w,...l},{slots:c})=>a("svg",{...o,width:e||o.width,height:e||o.height,stroke:s||o.stroke,"stroke-width":r?Number(t)*24/Number(e):t,class:["lucide",`lucide-${d(i??"icon")}`],...l},[...n.map(u=>a(...u)),...c.default?[c.default()]:[]]);const m=(e,t)=>(r,{slots:s})=>a(h,{...r,iconNode:t,name:e},s);export{m as c}; import{a6 as a}from"./app-BXYcVHqk.js";const d=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var o={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const h=({size:e,strokeWidth:t=2,absoluteStrokeWidth:r,color:s,iconNode:n,name:i,class:w,...l},{slots:c})=>a("svg",{...o,width:e||o.width,height:e||o.height,stroke:s||o.stroke,"stroke-width":r?Number(t)*24/Number(e):t,class:["lucide",`lucide-${d(i??"icon")}`],...l},[...n.map(u=>a(...u)),...c.default?[c.default()]:[]]);const m=(e,t)=>(r,{slots:s})=>a(h,{...r,iconNode:t,name:e},s);export{m as c};

View file

@ -1,133 +1,133 @@
{ {
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js": { "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js": {
"file": "assets/AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "file": "assets/AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"name": "AppLayout.vue_vue_type_script_setup_true_lang", "name": "AppLayout.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
] ]
}, },
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js": { "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js": {
"file": "assets/AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "file": "assets/AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"name": "AppLogoIcon.vue_vue_type_script_setup_true_lang", "name": "AppLogoIcon.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js": { "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js": {
"file": "assets/AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "file": "assets/AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"name": "AuthLayout.vue_vue_type_script_setup_true_lang", "name": "AuthLayout.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_DialogTitle.vue_vue_type_script_setup_true_lang-Dg2xd9QK.js": { "_DialogTitle.vue_vue_type_script_setup_true_lang-BKahKO_t.js": {
"file": "assets/DialogTitle.vue_vue_type_script_setup_true_lang-Dg2xd9QK.js", "file": "assets/DialogTitle.vue_vue_type_script_setup_true_lang-BKahKO_t.js",
"name": "DialogTitle.vue_vue_type_script_setup_true_lang", "name": "DialogTitle.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"resources/js/app.ts", "resources/js/app.ts",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js" "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js"
] ]
}, },
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js": { "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js": {
"file": "assets/Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "file": "assets/Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"name": "Input.vue_vue_type_script_setup_true_lang", "name": "Input.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js" "_useForwardExpose-Djbxsgaa.js"
] ]
}, },
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js": { "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js": {
"file": "assets/InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "file": "assets/InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"name": "InputError.vue_vue_type_script_setup_true_lang", "name": "InputError.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js": { "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js": {
"file": "assets/Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "file": "assets/Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"name": "Label.vue_vue_type_script_setup_true_lang", "name": "Label.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js": { "_Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js": {
"file": "assets/Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js", "file": "assets/Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js",
"name": "Layout.vue_vue_type_script_setup_true_lang", "name": "Layout.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_index--H2rh_A_.js" "_index--H2rh_A_.js"
] ]
}, },
"_PinInputSlot.vue_vue_type_script_setup_true_lang-D_qQ1GfR.js": { "_PinInputSlot.vue_vue_type_script_setup_true_lang-D1xXx8BE.js": {
"file": "assets/PinInputSlot.vue_vue_type_script_setup_true_lang-D_qQ1GfR.js", "file": "assets/PinInputSlot.vue_vue_type_script_setup_true_lang-D1xXx8BE.js",
"name": "PinInputSlot.vue_vue_type_script_setup_true_lang", "name": "PinInputSlot.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_VisuallyHiddenInput-Drd3EMOd.js" "_VisuallyHiddenInput-BVzeYF-P.js"
] ]
}, },
"_RovingFocusGroup-CNFroA6Y.js": { "_RovingFocusGroup-dmigQ6Dy.js": {
"file": "assets/RovingFocusGroup-CNFroA6Y.js", "file": "assets/RovingFocusGroup-dmigQ6Dy.js",
"name": "RovingFocusGroup", "name": "RovingFocusGroup",
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js" "_VisuallyHidden-BvthYHr5.js"
] ]
}, },
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js": { "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js": {
"file": "assets/Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "file": "assets/Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"name": "Spinner.vue_vue_type_script_setup_true_lang", "name": "Spinner.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js": { "_TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js": {
"file": "assets/TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js", "file": "assets/TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js",
"name": "TextLink.vue_vue_type_script_setup_true_lang", "name": "TextLink.vue_vue_type_script_setup_true_lang",
"imports": [ "imports": [
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"_VisuallyHidden-Cu70tzB6.js": { "_VisuallyHidden-BvthYHr5.js": {
"file": "assets/VisuallyHidden-Cu70tzB6.js", "file": "assets/VisuallyHidden-BvthYHr5.js",
"name": "VisuallyHidden", "name": "VisuallyHidden",
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js" "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js"
] ]
}, },
"_VisuallyHiddenInput-Drd3EMOd.js": { "_VisuallyHiddenInput-BVzeYF-P.js": {
"file": "assets/VisuallyHiddenInput-Drd3EMOd.js", "file": "assets/VisuallyHiddenInput-BVzeYF-P.js",
"name": "VisuallyHiddenInput", "name": "VisuallyHiddenInput",
"imports": [ "imports": [
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
@ -135,15 +135,15 @@
"file": "assets/_plugin-vue_export-helper-DlAUqK2U.js", "file": "assets/_plugin-vue_export-helper-DlAUqK2U.js",
"name": "_plugin-vue_export-helper" "name": "_plugin-vue_export-helper"
}, },
"_check-BNffy8wt.js": { "_check-DM1YWYaE.js": {
"file": "assets/check-BNffy8wt.js", "file": "assets/check-DM1YWYaE.js",
"name": "check", "name": "check",
"imports": [ "imports": [
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
] ]
}, },
"_createLucideIcon-ZFd4jktC.js": { "_createLucideIcon-BlA39rtn.js": {
"file": "assets/createLucideIcon-ZFd4jktC.js", "file": "assets/createLucideIcon-BlA39rtn.js",
"name": "createLucideIcon", "name": "createLucideIcon",
"imports": [ "imports": [
"resources/js/app.ts" "resources/js/app.ts"
@ -186,15 +186,15 @@
"file": "assets/useArrowNavigation-C6Y-ieo6.js", "file": "assets/useArrowNavigation-C6Y-ieo6.js",
"name": "useArrowNavigation" "name": "useArrowNavigation"
}, },
"_useForwardExpose-BhawR5VU.js": { "_useForwardExpose-Djbxsgaa.js": {
"file": "assets/useForwardExpose-BhawR5VU.js", "file": "assets/useForwardExpose-Djbxsgaa.js",
"name": "useForwardExpose", "name": "useForwardExpose",
"imports": [ "imports": [
"resources/js/app.ts" "resources/js/app.ts"
] ]
}, },
"resources/js/app.ts": { "resources/js/app.ts": {
"file": "assets/app-CClrM5Yi.js", "file": "assets/app-BXYcVHqk.js",
"name": "app", "name": "app",
"src": "resources/js/app.ts", "src": "resources/js/app.ts",
"isEntry": true, "isEntry": true,
@ -223,28 +223,28 @@
"resources/js/pages/studios/Show.vue" "resources/js/pages/studios/Show.vue"
], ],
"css": [ "css": [
"assets/app-BUIfoF4D.css" "assets/app-C_XNTc3U.css"
] ]
}, },
"resources/js/pages/Dashboard.vue": { "resources/js/pages/Dashboard.vue": {
"file": "assets/Dashboard-BZ90YdF3.js", "file": "assets/Dashboard-CFdKPMzj.js",
"name": "Dashboard", "name": "Dashboard",
"src": "resources/js/pages/Dashboard.vue", "src": "resources/js/pages/Dashboard.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"resources/js/app.ts", "resources/js/app.ts",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
] ]
}, },
"resources/js/pages/Welcome.vue": { "resources/js/pages/Welcome.vue": {
"file": "assets/Welcome-1IB3Dtj8.js", "file": "assets/Welcome-O_P1SsIM.js",
"name": "Welcome", "name": "Welcome",
"src": "resources/js/pages/Welcome.vue", "src": "resources/js/pages/Welcome.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
@ -254,419 +254,419 @@
] ]
}, },
"resources/js/pages/actors/Show.vue": { "resources/js/pages/actors/Show.vue": {
"file": "assets/Show-BCIzyp2I.js", "file": "assets/Show-BND-fsBv.js",
"name": "Show", "name": "Show",
"src": "resources/js/pages/actors/Show.vue", "src": "resources/js/pages/actors/Show.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Show-Cm2t8bQb.css" "assets/Show-Gr7GKjC3.css"
] ]
}, },
"resources/js/pages/admin/movies/Edit.vue": { "resources/js/pages/admin/movies/Edit.vue": {
"file": "assets/Edit-CORuyxK8.js", "file": "assets/Edit-BGSmNGbP.js",
"name": "Edit", "name": "Edit",
"src": "resources/js/pages/admin/movies/Edit.vue", "src": "resources/js/pages/admin/movies/Edit.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Edit-CBkUZj2d.css" "assets/Edit-CBkUZj2d.css"
] ]
}, },
"resources/js/pages/admin/movies/Index.vue": { "resources/js/pages/admin/movies/Index.vue": {
"file": "assets/Index-Dc3cIue4.js", "file": "assets/Index-BdIxoUYY.js",
"name": "Index", "name": "Index",
"src": "resources/js/pages/admin/movies/Index.vue", "src": "resources/js/pages/admin/movies/Index.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Index-BrX3yilR.css" "assets/Index-B9wSodOw.css"
] ]
}, },
"resources/js/pages/admin/movies/List.vue": { "resources/js/pages/admin/movies/List.vue": {
"file": "assets/List-C_4Kh8Sa.js", "file": "assets/List--GExccxm.js",
"name": "List", "name": "List",
"src": "resources/js/pages/admin/movies/List.vue", "src": "resources/js/pages/admin/movies/List.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/List-CVA9NIjL.css" "assets/List-CVA9NIjL.css"
] ]
}, },
"resources/js/pages/auth/ConfirmPassword.vue": { "resources/js/pages/auth/ConfirmPassword.vue": {
"file": "assets/ConfirmPassword-wh4eUhzq.js", "file": "assets/ConfirmPassword-B6O1LD69.js",
"name": "ConfirmPassword", "name": "ConfirmPassword",
"src": "resources/js/pages/auth/ConfirmPassword.vue", "src": "resources/js/pages/auth/ConfirmPassword.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-BCC4ahRc.js", "_index-BCC4ahRc.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index-C4J_hXM0.js" "_index-C4J_hXM0.js"
] ]
}, },
"resources/js/pages/auth/ForgotPassword.vue": { "resources/js/pages/auth/ForgotPassword.vue": {
"file": "assets/ForgotPassword-BI_N76PO.js", "file": "assets/ForgotPassword-AD9ZLowk.js",
"name": "ForgotPassword", "name": "ForgotPassword",
"src": "resources/js/pages/auth/ForgotPassword.vue", "src": "resources/js/pages/auth/ForgotPassword.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js", "_TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index-vZYIBGLo.js", "_index-vZYIBGLo.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index-BCC4ahRc.js" "_index-BCC4ahRc.js"
] ]
}, },
"resources/js/pages/auth/Login.vue": { "resources/js/pages/auth/Login.vue": {
"file": "assets/Login-4gIV6O-Y.js", "file": "assets/Login-DPWFjlev.js",
"name": "Login", "name": "Login",
"src": "resources/js/pages/auth/Login.vue", "src": "resources/js/pages/auth/Login.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js", "_TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"resources/js/app.ts", "resources/js/app.ts",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_VisuallyHiddenInput-Drd3EMOd.js", "_VisuallyHiddenInput-BVzeYF-P.js",
"_check-BNffy8wt.js", "_check-DM1YWYaE.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index-vZYIBGLo.js", "_index-vZYIBGLo.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index-BCC4ahRc.js" "_index-BCC4ahRc.js"
] ]
}, },
"resources/js/pages/auth/Register.vue": { "resources/js/pages/auth/Register.vue": {
"file": "assets/Register-kQGfWF-K.js", "file": "assets/Register-UZ1nsWPC.js",
"name": "Register", "name": "Register",
"src": "resources/js/pages/auth/Register.vue", "src": "resources/js/pages/auth/Register.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js", "_TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
] ]
}, },
"resources/js/pages/auth/ResetPassword.vue": { "resources/js/pages/auth/ResetPassword.vue": {
"file": "assets/ResetPassword-BPOrjW9k.js", "file": "assets/ResetPassword-hpGi5-g3.js",
"name": "ResetPassword", "name": "ResetPassword",
"src": "resources/js/pages/auth/ResetPassword.vue", "src": "resources/js/pages/auth/ResetPassword.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-vZYIBGLo.js", "_index-vZYIBGLo.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index-BCC4ahRc.js" "_index-BCC4ahRc.js"
] ]
}, },
"resources/js/pages/auth/TwoFactorChallenge.vue": { "resources/js/pages/auth/TwoFactorChallenge.vue": {
"file": "assets/TwoFactorChallenge-BSzmROh9.js", "file": "assets/TwoFactorChallenge-DMm8cjEf.js",
"name": "TwoFactorChallenge", "name": "TwoFactorChallenge",
"src": "resources/js/pages/auth/TwoFactorChallenge.vue", "src": "resources/js/pages/auth/TwoFactorChallenge.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_PinInputSlot.vue_vue_type_script_setup_true_lang-D_qQ1GfR.js", "_PinInputSlot.vue_vue_type_script_setup_true_lang-D1xXx8BE.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index--H2rh_A_.js", "_index--H2rh_A_.js",
"resources/js/app.ts", "resources/js/app.ts",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_VisuallyHiddenInput-Drd3EMOd.js", "_VisuallyHiddenInput-BVzeYF-P.js",
"_index-C4J_hXM0.js" "_index-C4J_hXM0.js"
] ]
}, },
"resources/js/pages/auth/VerifyEmail.vue": { "resources/js/pages/auth/VerifyEmail.vue": {
"file": "assets/VerifyEmail-DZQcbTya.js", "file": "assets/VerifyEmail-B313sHZj.js",
"name": "VerifyEmail", "name": "VerifyEmail",
"src": "resources/js/pages/auth/VerifyEmail.vue", "src": "resources/js/pages/auth/VerifyEmail.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_TextLink.vue_vue_type_script_setup_true_lang-JYycsYY3.js", "_TextLink.vue_vue_type_script_setup_true_lang-CEF924Ry.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_AuthLayout.vue_vue_type_script_setup_true_lang-B14CUTB5.js", "_AuthLayout.vue_vue_type_script_setup_true_lang-Chpkpy8i.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index-DZxzsgmi.js", "_index-DZxzsgmi.js",
"resources/js/app.ts", "resources/js/app.ts",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
] ]
}, },
"resources/js/pages/directors/Show.vue": { "resources/js/pages/directors/Show.vue": {
"file": "assets/Show-CLkQumZS.js", "file": "assets/Show-Bg2WY_KO.js",
"name": "Show", "name": "Show",
"src": "resources/js/pages/directors/Show.vue", "src": "resources/js/pages/directors/Show.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Show-B-qGUz9l.css" "assets/Show-B-qGUz9l.css"
] ]
}, },
"resources/js/pages/genres/Show.vue": { "resources/js/pages/genres/Show.vue": {
"file": "assets/Show-y_rWxQ3Z.js", "file": "assets/Show-DeHiSsqs.js",
"name": "Show", "name": "Show",
"src": "resources/js/pages/genres/Show.vue", "src": "resources/js/pages/genres/Show.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Show-DB_iXr9H.css" "assets/Show-DB_iXr9H.css"
] ]
}, },
"resources/js/pages/movies/Index.vue": { "resources/js/pages/movies/Index.vue": {
"file": "assets/Index-CYUFIW2Y.js", "file": "assets/Index-DePos18c.js",
"name": "Index", "name": "Index",
"src": "resources/js/pages/movies/Index.vue", "src": "resources/js/pages/movies/Index.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Index-BJjYncZL.css" "assets/Index-BJjYncZL.css"
] ]
}, },
"resources/js/pages/movies/Show.vue": { "resources/js/pages/movies/Show.vue": {
"file": "assets/Show-B81d5hyh.js", "file": "assets/Show-B054TjDf.js",
"name": "Show", "name": "Show",
"src": "resources/js/pages/movies/Show.vue", "src": "resources/js/pages/movies/Show.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Show-u0mnbIJy.css" "assets/Show-u0mnbIJy.css"
] ]
}, },
"resources/js/pages/settings/Appearance.vue": { "resources/js/pages/settings/Appearance.vue": {
"file": "assets/Appearance-x5-Kktlh.js", "file": "assets/Appearance-xAaPb6Fu.js",
"name": "Appearance", "name": "Appearance",
"src": "resources/js/pages/settings/Appearance.vue", "src": "resources/js/pages/settings/Appearance.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js", "_Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index--H2rh_A_.js", "_index--H2rh_A_.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js" "_useArrowNavigation-C6Y-ieo6.js"
] ]
}, },
"resources/js/pages/settings/Password.vue": { "resources/js/pages/settings/Password.vue": {
"file": "assets/Password-Cz_oOx7m.js", "file": "assets/Password-DawXCzGr.js",
"name": "Password", "name": "Password",
"src": "resources/js/pages/settings/Password.vue", "src": "resources/js/pages/settings/Password.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js", "_Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index--H2rh_A_.js" "_index--H2rh_A_.js"
] ]
}, },
"resources/js/pages/settings/Profile.vue": { "resources/js/pages/settings/Profile.vue": {
"file": "assets/Profile-DvBzD9G7.js", "file": "assets/Profile-D53Bi8OH.js",
"name": "Profile", "name": "Profile",
"src": "resources/js/pages/settings/Profile.vue", "src": "resources/js/pages/settings/Profile.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_index-DZxzsgmi.js", "_index-DZxzsgmi.js",
"_Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js", "_Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js",
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_DialogTitle.vue_vue_type_script_setup_true_lang-Dg2xd9QK.js", "_DialogTitle.vue_vue_type_script_setup_true_lang-BKahKO_t.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_Input.vue_vue_type_script_setup_true_lang-BcBrC1ED.js", "_Input.vue_vue_type_script_setup_true_lang-Caepq1Nz.js",
"_Label.vue_vue_type_script_setup_true_lang-Dbqibcwo.js", "_Label.vue_vue_type_script_setup_true_lang-CLMgeKfL.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_index--H2rh_A_.js" "_index--H2rh_A_.js"
] ]
}, },
"resources/js/pages/settings/TwoFactor.vue": { "resources/js/pages/settings/TwoFactor.vue": {
"file": "assets/TwoFactor-CEzdBq7S.js", "file": "assets/TwoFactor-CVXaGPyO.js",
"name": "TwoFactor", "name": "TwoFactor",
"src": "resources/js/pages/settings/TwoFactor.vue", "src": "resources/js/pages/settings/TwoFactor.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"_Layout.vue_vue_type_script_setup_true_lang-ROf3tZlv.js", "_Layout.vue_vue_type_script_setup_true_lang-CqO9sNxz.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"resources/js/app.ts", "resources/js/app.ts",
"_createLucideIcon-ZFd4jktC.js", "_createLucideIcon-BlA39rtn.js",
"_InputError.vue_vue_type_script_setup_true_lang-DxwKzEqx.js", "_InputError.vue_vue_type_script_setup_true_lang-CQ06D4fO.js",
"_Spinner.vue_vue_type_script_setup_true_lang-BPOcqWqa.js", "_Spinner.vue_vue_type_script_setup_true_lang-NJl11ITg.js",
"_DialogTitle.vue_vue_type_script_setup_true_lang-Dg2xd9QK.js", "_DialogTitle.vue_vue_type_script_setup_true_lang-BKahKO_t.js",
"_PinInputSlot.vue_vue_type_script_setup_true_lang-D_qQ1GfR.js", "_PinInputSlot.vue_vue_type_script_setup_true_lang-D1xXx8BE.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_check-BNffy8wt.js", "_check-DM1YWYaE.js",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_index--H2rh_A_.js", "_index--H2rh_A_.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_VisuallyHiddenInput-Drd3EMOd.js", "_VisuallyHiddenInput-BVzeYF-P.js",
"_RovingFocusGroup-CNFroA6Y.js" "_RovingFocusGroup-dmigQ6Dy.js"
] ]
}, },
"resources/js/pages/studios/Show.vue": { "resources/js/pages/studios/Show.vue": {
"file": "assets/Show-BGTgh0m1.js", "file": "assets/Show-D_R328ht.js",
"name": "Show", "name": "Show",
"src": "resources/js/pages/studios/Show.vue", "src": "resources/js/pages/studios/Show.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"resources/js/app.ts", "resources/js/app.ts",
"_AppLayout.vue_vue_type_script_setup_true_lang-DESMBqxz.js", "_AppLayout.vue_vue_type_script_setup_true_lang-86gE95Fg.js",
"__plugin-vue_export-helper-DlAUqK2U.js", "__plugin-vue_export-helper-DlAUqK2U.js",
"_AppLogoIcon.vue_vue_type_script_setup_true_lang-7XZAfK5W.js", "_AppLogoIcon.vue_vue_type_script_setup_true_lang-BzXwPo6R.js",
"_useForwardExpose-BhawR5VU.js", "_useForwardExpose-Djbxsgaa.js",
"_VisuallyHidden-Cu70tzB6.js", "_VisuallyHidden-BvthYHr5.js",
"_RovingFocusGroup-CNFroA6Y.js", "_RovingFocusGroup-dmigQ6Dy.js",
"_useArrowNavigation-C6Y-ieo6.js", "_useArrowNavigation-C6Y-ieo6.js",
"_index-C4J_hXM0.js", "_index-C4J_hXM0.js",
"_createLucideIcon-ZFd4jktC.js" "_createLucideIcon-BlA39rtn.js"
], ],
"css": [ "css": [
"assets/Show-Csw6sC-4.css" "assets/Show-Csw6sC-4.css"

View file

@ -24,7 +24,7 @@ type MoviesPage = {
} }
type ApiResponse = { type ApiResponse = {
entity: { id: number; name: string } entity: { id: number; name: string; profile_path: string | null }
movies: MoviesPage movies: MoviesPage
} }
@ -38,7 +38,7 @@ const loading = ref(false)
const error = ref<string | null>(null) const error = ref<string | null>(null)
const showToast = ref(false) const showToast = ref(false)
const toastText = ref('') const toastText = ref('')
const entity = ref<{ id: number; name: string } | null>(null) const entity = ref<{ id: number; name: string; profile_path: string | null } | null>(null)
let debounceTimer: any = null let debounceTimer: any = null
@ -142,8 +142,16 @@ watch(sentinel, (el, prev) => {
<div class="h-4 w-40 rounded bg-muted animate-pulse"></div> <div class="h-4 w-40 rounded bg-muted animate-pulse"></div>
</div> </div>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<!-- Neutral placeholder for person --> <!-- Actor avatar -->
<div class="h-12 w-12 shrink-0 rounded-full bg-muted"></div> <div class="h-12 w-12 shrink-0 overflow-hidden rounded-full bg-muted">
<img
v-if="entity?.profile_path"
:src="entity.profile_path"
:alt="entity?.name ? `${entity.name} profile photo` : 'Actor profile photo'"
loading="lazy"
class="h-full w-full object-cover"
/>
</div>
<div class="min-w-0 flex-1"> <div class="min-w-0 flex-1">
<h1 class="truncate text-lg font-semibold">{{ entity?.name ?? '…' }}</h1> <h1 class="truncate text-lg font-semibold">{{ entity?.name ?? '…' }}</h1>
</div> </div>

View file

@ -72,7 +72,7 @@ async function fetchPage(reset = false) {
function onSearchInput() { function onSearchInput() {
// Only trigger search when length is divisible by 3 (3, 6, 9, ...) // Only trigger search when length is divisible by 3 (3, 6, 9, ...)
// Per request, we do not hit OMDb otherwise (unless Enter is pressed) // Per request, we do not hit TMDb otherwise (unless Enter is pressed)
clearTimeout(debounceTimer) clearTimeout(debounceTimer)
const len = q.value.trim().length const len = q.value.trim().length
if (len >= 3 && len % 3 === 0) { if (len >= 3 && len % 3 === 0) {

View file

@ -38,11 +38,11 @@ class AdminExistsMovieTest extends TestCase
{ {
$this->signIn(); $this->signIn();
$movie = Movie::factory()->create([ $movie = Movie::factory()->create([
'provider' => 'omdb', 'provider' => 'tmdb',
'provider_id' => 'tt1234567', 'provider_id' => '1234567',
]); ]);
$res = $this->getJson('/admin/movies/exists?provider_id=tt1234567'); $res = $this->getJson('/admin/movies/exists?provider_id=1234567');
$res->assertOk() $res->assertOk()
->assertJson([ ->assertJson([
'exists' => true, 'exists' => true,