diff --git a/app/Filament/Resources/ArticleResource.php b/app/Filament/Resources/ArticleResource.php index f6cf99cd..86af781f 100644 --- a/app/Filament/Resources/ArticleResource.php +++ b/app/Filament/Resources/ArticleResource.php @@ -6,10 +6,17 @@ use App\Filament\Resources\ArticleResource\Pages; use App\Models\Article; +use Filament\Forms\Components\RichEditor; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\SpatieMediaLibraryFileUpload; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; use Filament\Resources\Form; use Filament\Resources\Resource; use Filament\Resources\Table; use Filament\Tables; +use Filament\Tables\Filters\Layout; +use Filament\Tables\Filters\SelectFilter; class ArticleResource extends Resource { @@ -17,6 +24,12 @@ class ArticleResource extends Resource protected static ?string $navigationGroup = 'Administrează'; + protected static ?string $navigationLabel = 'Articole'; + + protected static ?string $label = 'Articol'; + + protected static ?string $pluralLabel = 'Articole'; + protected static ?int $navigationSort = 7; protected static ?string $navigationIcon = 'heroicon-o-collection'; @@ -25,22 +38,59 @@ public static function form(Form $form): Form { return $form ->schema([ - // - ]); + TextInput::make('title') + ->required() + ->label(__('article.title')) + ->required() + ->maxLength(255), + Select::make('category_id') + ->relationship('category', 'name') + ->required() + ->label(__('article.category')), + RichEditor::make('content') + ->required() + ->label(__('article.content'))->columnSpanFull(), + TextInput::make('author') + ->required() + ->label(__('article.author')) + ->required() + ->maxLength(255), + Toggle::make('is_active') + ->label(__('article.is_active')) + ->required(), + SpatieMediaLibraryFileUpload::make('cover') + ->collection('cover') + ->label(__('article.cover_image')) + ->required() + ->acceptedFileTypes(['image/*']) + ->columnSpanFull(), + SpatieMediaLibraryFileUpload::make('gallery')->collection('gallery') + ->multiple() + ->label(__('article.gallery')) + ->enableReordering()->columnSpanFull(), + + ]); } public static function table(Table $table): Table { return $table ->columns([ - // + Tables\Columns\TextColumn::make('title')->searchable()->label(__('article.title'))->searchable(), + Tables\Columns\TextColumn::make('category.name')->searchable()->label(__('article.category'))->sortable(), + Tables\Columns\TextColumn::make('created_at')->label(__('article.created_at'))->sortable(), + ]) ->filters([ - // + SelectFilter::make('category') + ->multiple() + ->relationship('category', 'name') + ->label(__('article.filter.category')), ]) ->actions([ Tables\Actions\EditAction::make(), ]) + ->filtersLayout(Layout::AboveContent) ->bulkActions([ Tables\Actions\DeleteBulkAction::make(), ]); diff --git a/app/Filament/Resources/BadgeResource.php b/app/Filament/Resources/BadgeResource.php index 80528c19..4f01b711 100644 --- a/app/Filament/Resources/BadgeResource.php +++ b/app/Filament/Resources/BadgeResource.php @@ -6,6 +6,8 @@ use App\Filament\Resources\BadgeResource\Pages; use App\Models\Badge; +use Filament\Forms\Components\SpatieMediaLibraryFileUpload; +use Filament\Forms\Components\TextInput; use Filament\Resources\Form; use Filament\Resources\Resource; use Filament\Resources\Table; @@ -25,7 +27,13 @@ public static function form(Form $form): Form { return $form ->schema([ - // + TextInput::make('name')->required()->label(__('badge.name'))->maxLength(255), + SpatieMediaLibraryFileUpload::make('cover') + ->collection('cover') + ->label(__('badge.cover_image')) + ->required() + ->acceptedFileTypes(['image/*']) + ->columnSpanFull(), ]); } @@ -33,7 +41,9 @@ public static function table(Table $table): Table { return $table ->columns([ - // + Tables\Columns\TextColumn::make('name') + ->searchable() + ->sortable(), ]) ->filters([ // diff --git a/app/Filament/Resources/ChampionshipResource/RelationManagers/StagesRelationManager.php b/app/Filament/Resources/ChampionshipResource/RelationManagers/StagesRelationManager.php index 177abdc0..edcc0dc8 100644 --- a/app/Filament/Resources/ChampionshipResource/RelationManagers/StagesRelationManager.php +++ b/app/Filament/Resources/ChampionshipResource/RelationManagers/StagesRelationManager.php @@ -23,7 +23,7 @@ public static function form(Form $form): Form Forms\Components\TextInput::make('name') ->required() ->maxLength(255), - Forms\Components\DatePicker::make('start_date')->after(now())->required(), + Forms\Components\DatePicker::make('start_date')->after('today')->required(), Forms\Components\DatePicker::make('end_date')->after('start_date')->required(), Forms\Components\Toggle::make('is_current') ->nullable(), diff --git a/app/Http/Controllers/ArticleController.php b/app/Http/Controllers/ArticleController.php index 7b19aa73..2bd8f79e 100644 --- a/app/Http/Controllers/ArticleController.php +++ b/app/Http/Controllers/ArticleController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Models\Article; +use App\Models\ArticleCategory; use Illuminate\Http\Request; use Inertia\Inertia; @@ -14,192 +15,34 @@ public function index(Request $request) { // $query = Article::query(); - $categories = ['SOCIAL', 'EDUCATIE', 'MEDIU', 'LOREM', 'LOREM IPSUM']; + $categories = ArticleCategory::whereHas('articles', function ($query) { + $query->where('is_active', true); + })->get(); - $query = [ - 'current_page' => 1, - 'data' => [ - [ - 'id' => 1, - 'title' => 'Importanța educației remediale în România în timpul pandemiei', - 'content' => '

Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto accusantium praesentium eius, ut atque fuga culpa, similique sequi cum eos quis dolorum.

', - 'author' => 'Ion Popescu', - 'ong' => 'Asociatia Pentru Tine', - 'image' => '/images/project_img.png', - 'category' => 'SOCIAL', - 'created_at' => '15.02.2022', - ], - [ - 'id' => 2, - 'title' => 'Importanța educației remediale în România în timpul pandemiei', - 'content' => 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto accusantium praesentium eius, ut atque fuga culpa, similique sequi cum eos quis dolorum.', - 'author' => 'Ion Popescu', - 'ong' => 'Asociatia Pentru Tine', - 'image' => '/images/project_img.png', - 'category' => 'SOCIAL', - 'created_at' => '15.02.2022', - ], - [ - 'id' => 3, - 'title' => 'Importanța educației remediale în România în timpul pandemiei', - 'content' => '
', - 'author' => 'Ion Popescu', - 'ong' => 'Asociatia Pentru Tine', - 'image' => '/images/project_img.png', - 'category' => 'SOCIAL', - 'created_at' => '15.02.2022', - ], - ], - 'first_page_url' => 'http://bursabinelui.test/articole?page=1', - 'from' => 1, - 'last_page' => 2, - 'last_page_url'=> 'http://bursabinelui.test/articole?page=2', - 'links' => [ - [ - 'url' => 'http://bursabinelui.test/articole?page=1', - 'label' => '1', - 'active' => true, - ], - [ - 'url'=> 'http://bursabinelui.test/articole?page=2', - 'label'=> '2', - 'active'=> false, - ], - ], - 'next_page_url'=> 'http://bursabinelui.test/articole?page=1', - 'path'=> 'http://bursabinelui.test/articole', - 'per_page' =>15, - 'prev_page_url' => null, - 'to' => 15, - 'total' => 20, - - ]; + $articles = Article::active()->with('category'); + if ($request->get('category')) { + $category = $categories->search(function (ArticleCategory $item) use ($request) { + return $item['slug'] == $request->get('category'); + }); + $articles = $articles->where('article_category_id', $category); + } + $articles = $articles->paginate(10); return Inertia::render('Public/Articles/Articles', [ 'categories' => $categories, - 'query' => $query, + 'query' => $articles, ]); } public function article(Article $article) { - $article = [ - 'id' => 1, - 'title' => 'Importanța educației remediale în România în timpul pandemiei', - 'content' => '

Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto accusantium praesentium eius, ut atque fuga culpa, similique sequi cum eos quis dolorum.

', - 'author' => 'Ion Popescu', - 'ong' => 'Asociatia Pentru Tine', - 'image' => '/images/project_img.png', - 'category' => 'SOCIAL', - 'created_at' => '15.02.2022', - ]; - - $gallery = [ - [ - 'src' => 'https://youtu.be/f-t2nWVauSE', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => 'https://youtu.be/f-t2nWVauSE', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => 'https://youtu.be/f-t2nWVauSE', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => 'https://youtu.be/f-t2nWVauSE', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => 'https://youtu.be/f-t2nWVauSE', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'video', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - [ - 'src' => '/images/project_img.png', - 'type' => 'image', - ], - ]; + $article->load('category'); + $gallery = $article->getMedia('gallery'); return Inertia::render('Public/Articles/Article', [ 'article' => $article, 'gallery' => $gallery, + 'related' => $article->relatedArticles()->get() ]); } } diff --git a/app/Models/Article.php b/app/Models/Article.php index e461c7dd..590c140f 100644 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -4,10 +4,74 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Str; +use Spatie\Image\Manipulations; +use Spatie\MediaLibrary\HasMedia; +use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; -class Article extends Model +class Article extends Model implements HasMedia { use HasFactory; + use InteractsWithMedia; + + protected $fillable = [ + 'title', + 'slug', + 'content', + 'is_active', + 'article_category_id', + 'author', + ]; + + protected static function boot() + { + parent::boot(); // TODO: Change the autogenerated stub + static::creating(function ($article) { + $article->slug = Str::slug($article->title); + }); + } + + protected $casts = [ + 'created_at' => 'date:y-m-d h:i', + 'updated_at' => 'date:y-m-d h:i', + ]; + protected $with = ['media']; + protected $appends = ['cover_image']; + + public function registerMediaConversions(Media $media = null): void + { + $this + ->addMediaConversion('preview') + ->fit(Manipulations::FIT_CROP, 300, 300) + ->nonQueued(); + } + + public function category(): BelongsTo + { + return $this->belongsTo(ArticleCategory::class, 'article_category_id', 'id'); + } + + public function scopeActive(Builder $query): Builder + { + return $query->where('is_active', true); + } + + public function getCoverImageAttribute(): string + { + return $this->getFirstMediaUrl('cover', 'preview') ?? ''; + } + + public function relatedArticles(): Builder + { + return self::active() + ->where('article_category_id', $this->article_category_id) + ->where('id', '!=', $this->id) + ->limit(3); + } + } diff --git a/app/Models/ArticleCategory.php b/app/Models/ArticleCategory.php index b1524c4f..7b60dd6e 100644 --- a/app/Models/ArticleCategory.php +++ b/app/Models/ArticleCategory.php @@ -6,8 +6,21 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; class ArticleCategory extends Model { use HasFactory; + + protected $fillable = [ + 'name', + 'slug', + 'is_active', + ]; + + public function articles(): HasMany + { + return $this->hasMany(Article::class); + } + } diff --git a/app/Models/Badge.php b/app/Models/Badge.php new file mode 100644 index 00000000..a37de55f --- /dev/null +++ b/app/Models/Badge.php @@ -0,0 +1,33 @@ +addMediaConversion('preview') + ->fit(Manipulations::FIT_CROP, 300, 300) + ->nonQueued(); + } + +} diff --git a/app/Models/Testimonial.php b/app/Models/Testimonial.php new file mode 100644 index 00000000..eb9c3a60 --- /dev/null +++ b/app/Models/Testimonial.php @@ -0,0 +1,11 @@ +faker->word; + return [ + 'name' => $name, + 'slug' => \Str::slug($name), + 'is_active' => $this->faker->boolean, + ]; + } +} diff --git a/database/factories/ArticleFactory.php b/database/factories/ArticleFactory.php index 00907a4a..45aeca3e 100644 --- a/database/factories/ArticleFactory.php +++ b/database/factories/ArticleFactory.php @@ -13,8 +13,14 @@ class ArticleFactory extends Factory public function definition(): array { + $title = $this->faker->sentence; return [ - + 'title' => $title, + 'slug' => \Str::slug($title), + 'content' => $this->faker->paragraph, + 'is_active' => $this->faker->boolean, + 'author' => $this->faker->name, + 'article_category_id' => ArticleCategoryFactory::new(), ]; } } diff --git a/database/factories/BadgeFactory.php b/database/factories/BadgeFactory.php new file mode 100644 index 00000000..df51e8fe --- /dev/null +++ b/database/factories/BadgeFactory.php @@ -0,0 +1,23 @@ + + */ +class BadgeFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => $this->faker->name, + ]; + } +} diff --git a/database/factories/TestimonialFactory.php b/database/factories/TestimonialFactory.php new file mode 100644 index 00000000..97aa5b5d --- /dev/null +++ b/database/factories/TestimonialFactory.php @@ -0,0 +1,25 @@ + + */ +class TestimonialFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'title' => $this->faker->word, + 'content' => $this->faker->paragraph, + 'author' => $this->faker->name, + ]; + } +} diff --git a/database/migrations/2023_06_25_012356_create_article_categories_table.php b/database/migrations/2023_06_25_012356_create_article_categories_table.php index 6ee39b9b..b07edb13 100644 --- a/database/migrations/2023_06_25_012356_create_article_categories_table.php +++ b/database/migrations/2023_06_25_012356_create_article_categories_table.php @@ -16,6 +16,8 @@ public function up(): void Schema::create('article_categories', function (Blueprint $table) { $table->id(); $table->string('name'); + $table->string('slug'); + $table->boolean('is_active')->default(true); $table->timestamps(); }); } diff --git a/database/migrations/2023_06_25_110506_create_articles_table.php b/database/migrations/2023_06_25_110506_create_articles_table.php index 66190bf4..05eabb7f 100644 --- a/database/migrations/2023_06_25_110506_create_articles_table.php +++ b/database/migrations/2023_06_25_110506_create_articles_table.php @@ -19,8 +19,9 @@ public function up(): void $table->foreignIdFor(\App\Models\Championship::class)->nullable()->constrained()->cascadeOnDelete(); $table->string('title'); $table->string('slug'); - $table->text('description'); + $table->text('content'); $table->string('author'); + $table->boolean('is_active')->default(true); $table->timestamps(); }); } diff --git a/database/migrations/2023_07_04_005236_create_badges_table.php b/database/migrations/2023_07_04_005236_create_badges_table.php new file mode 100644 index 00000000..854fd83d --- /dev/null +++ b/database/migrations/2023_07_04_005236_create_badges_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('badges'); + } +}; diff --git a/database/migrations/2023_07_04_005415_create_testimonials_table.php b/database/migrations/2023_07_04_005415_create_testimonials_table.php new file mode 100644 index 00000000..dd702f43 --- /dev/null +++ b/database/migrations/2023_07_04_005415_create_testimonials_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('title'); + $table->string('content'); + $table->string('author'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('testimonials'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 0048e01a..5f625a22 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -7,11 +7,13 @@ // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use App\Enums\ActivityDomain as ActivityDomainEnum; use App\Models\ActivityDomain; +use App\Models\Article; use App\Models\Championship; use App\Models\Organization; use App\Models\Project; use App\Models\User; use App\Models\Volunteer; +use Database\Factories\ArticleFactory; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -63,6 +65,12 @@ public function run(): void for ($i = 0; $i < self::USER_BB_ADMIN_NUMBER; $i++) { User::factory()->bbAdmin()->create(); } + + $articleCategories = ['Social', 'Educație', 'Sănătate', 'Cultură', 'Mediu', 'Sport', 'Animale', 'Altele']; + foreach ($articleCategories as $category) { + \App\Models\ArticleCategory::factory(['name' => $category, 'slug' => \Str::slug($category)]) + ->has(Article::factory()->count(4))->create(); + } } } } diff --git a/lang/ro/article.php b/lang/ro/article.php new file mode 100644 index 00000000..6778ad08 --- /dev/null +++ b/lang/ro/article.php @@ -0,0 +1,19 @@ + 'Articol', + 'articles' => 'Articole', + 'title' => 'Titlu', + 'content' => 'Conținut', + 'is_active' => 'Activ', + 'category' => 'Categorie articol', + 'author' => 'Autor', + 'created_at' => 'Creat la', + 'updated_at' => 'Actualizat la', + 'cover_image' => 'Imagine de copertă', + 'gallery' => 'Galerie de imagini', + 'filter' => [ + 'category' => 'Filtreați după categorie', + ], + +]; diff --git a/lang/ro/badge.php b/lang/ro/badge.php new file mode 100644 index 00000000..c5161447 --- /dev/null +++ b/lang/ro/badge.php @@ -0,0 +1,8 @@ + 'Nume', + 'cover_image' => 'Imagine de copertă', + + +]; diff --git a/lang/ro/testimonial.php b/lang/ro/testimonial.php new file mode 100644 index 00000000..6778ad08 --- /dev/null +++ b/lang/ro/testimonial.php @@ -0,0 +1,19 @@ + 'Articol', + 'articles' => 'Articole', + 'title' => 'Titlu', + 'content' => 'Conținut', + 'is_active' => 'Activ', + 'category' => 'Categorie articol', + 'author' => 'Autor', + 'created_at' => 'Creat la', + 'updated_at' => 'Actualizat la', + 'cover_image' => 'Imagine de copertă', + 'gallery' => 'Galerie de imagini', + 'filter' => [ + 'category' => 'Filtreați după categorie', + ], + +]; diff --git a/package-lock.json b/package-lock.json index 00628a00..4882b69c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,7 @@ "@headlessui/vue": "^1.7.13", "@heroicons/vue": "^2.0.17", "@tailwindcss/aspect-ratio": "^0.4.2", - "@types/d3": "^7.4.0", "chart.js": "^4.3.0", - "d3": "^7.8.5", "vite-svg-loader": "^4.0.0", "vue-chartjs": "^5.2.0", "vue-i18n": "^9.2.2", @@ -659,233 +657,6 @@ "node": ">=10.13.0" } }, - "node_modules/@types/d3": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", - "integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==", - "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz", - "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==" - }, - "node_modules/@types/d3-axis": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz", - "integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-brush": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz", - "integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-chord": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz", - "integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==" - }, - "node_modules/@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" - }, - "node_modules/@types/d3-contour": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz", - "integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==", - "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", - "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==" - }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz", - "integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==" - }, - "node_modules/@types/d3-drag": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz", - "integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz", - "integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==", - "dependencies": { - "@types/d3-dsv": "*" - } - }, - "node_modules/@types/d3-force": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz", - "integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==" - }, - "node_modules/@types/d3-format": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", - "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==" - }, - "node_modules/@types/d3-geo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz", - "integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz", - "integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==" - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz", - "integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==" - }, - "node_modules/@types/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "node_modules/@types/d3-selection": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.5.tgz", - "integrity": "sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w==" - }, - "node_modules/@types/d3-shape": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", - "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz", - "integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" - }, - "node_modules/@types/d3-transition": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz", - "integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.3.tgz", - "integrity": "sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==", - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, "node_modules/@vitejs/plugin-vue": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz", @@ -1342,384 +1113,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, - "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -1729,14 +1122,6 @@ "node": ">=0.10.0" } }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2057,17 +1442,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2082,14 +1456,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2633,11 +1999,6 @@ "node": ">=0.10.0" } }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, "node_modules/rollup": { "version": "3.21.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.4.tgz", @@ -2676,16 +2037,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", diff --git a/resources/js/Pages/Auth/Register.vue b/resources/js/Pages/Auth/Register.vue index d7dab05f..9d425bb8 100644 --- a/resources/js/Pages/Auth/Register.vue +++ b/resources/js/Pages/Auth/Register.vue @@ -165,7 +165,7 @@ const submit = () => { /** After user is registered update data. */ const success = () => { - social.put(route('register'), { + social.put(route('profile.update'), { onError: (error) => {} }); } diff --git a/resources/js/Pages/Public/Articles/Article.vue b/resources/js/Pages/Public/Articles/Article.vue index 571112da..6017d061 100644 --- a/resources/js/Pages/Public/Articles/Article.vue +++ b/resources/js/Pages/Public/Articles/Article.vue @@ -6,14 +6,14 @@
imagine proiect
- {{ article.category }} + {{ article.category.name }}

{{ article.title }}

@@ -38,8 +38,7 @@ />
-

{{ article.author }} | 

-

{{ article.ong }}

+

{{ article.author }}

{{ article.created_at }}

@@ -59,9 +58,7 @@
    - - - +
@@ -86,6 +83,7 @@ import SharePage from '@/Components/SharePage.vue'; const props = defineProps({ article: Object, - gallery: Array + gallery: Array, + related: Array, }); diff --git a/resources/js/Pages/Public/Articles/Articles.vue b/resources/js/Pages/Public/Articles/Articles.vue index 7dc6f1fc..261d11af 100644 --- a/resources/js/Pages/Public/Articles/Articles.vue +++ b/resources/js/Pages/Public/Articles/Articles.vue @@ -10,20 +10,19 @@
- {{ article.category }} + {{ article.category.name }}

{{ article.title }}

-

{{ article.author }} | 

-

{{ article.ong }}

+

{{ article.author }}

{{ $t('read_article') }} @@ -38,7 +37,7 @@
- +
@@ -64,7 +63,7 @@ ]" >
- {{ article.category }} + {{ article.category.name }}
@@ -87,14 +86,14 @@

{{ article.author }}

- {{ article.title }} + {{ article.title }}

{{ article.created_at }}

{{ $t('read_article') }} @@ -125,7 +124,7 @@ class="inline-flex items-center px-3 py-1 text-base font-semibold rounded-full cursor-pointer text-primary-500 bg-primary-50 gap-x-1" @click="filterArticles(category)" > - {{ category }} + {{ category.name }}
@@ -138,12 +137,12 @@ class="w-full p-6 mb-6 space-y-6 border-l-8 rounded shadow border-primary-500" >
- {{ article.category }} + {{ article.category.name }}
-

{{ article.author }} | 

-

{{ article.ong }}

+

{{ article.author }}

+

{{ article.title }}

@@ -190,7 +189,8 @@ const props = defineProps({ const filter = ref({ category : null }); const filterArticles = (value) => { - filter.value.category = value; + filter.value.category = value.slug; + console.log(filter.value); router.visit(route('articles'), { method: 'get', diff --git a/routes/articles.php b/routes/articles.php index 83358e5d..f84c8a3b 100644 --- a/routes/articles.php +++ b/routes/articles.php @@ -7,4 +7,4 @@ /* Public routes. */ Route::get('articole', [ArticleController::class, 'index'])->name('articles'); -Route::get('articol/{id}', [ArticleController::class, 'article'])->name('article'); +Route::get('articol/{article:slug}', [ArticleController::class, 'article'])->name('article');