This commit is contained in:
f4ilji
2024-10-28 12:57:16 +05:00
parent e4678fc0d2
commit 6d516d1750
233 changed files with 6312 additions and 1314 deletions
-3
View File
@@ -5,7 +5,6 @@
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
<sourceFolder url="file://$MODULE_DIR$/database/factories" isTestSource="false" packagePrefix="Database\Factories\" />
<sourceFolder url="file://$MODULE_DIR$/database/seeders" isTestSource="false" packagePrefix="Database\Seeders\" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="Tests\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
<excludeFolder url="file://$MODULE_DIR$/vendor/carbonphp/carbon-doctrine-types" />
@@ -161,8 +160,6 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/ueberdosis/tiptap-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/protonemedia/laravel-cross-eloquent-search" />
<excludeFolder url="file://$MODULE_DIR$/vendor/xvladqt/faker-lorem-flickr" />
<excludeFolder url="file://$MODULE_DIR$/vendor/barryvdh/laravel-debugbar" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maximebf/debugbar" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ezyang/htmlpurifier" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maatwebsite/excel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maennchen/zipstream-php" />
Generated
-2
View File
@@ -171,8 +171,6 @@
<path value="$PROJECT_DIR$/vendor/protonemedia/laravel-cross-eloquent-search" />
<path value="$PROJECT_DIR$/vendor/mohamedsabil83/filament-forms-tinyeditor" />
<path value="$PROJECT_DIR$/vendor/xvladqt/faker-lorem-flickr" />
<path value="$PROJECT_DIR$/vendor/maximebf/debugbar" />
<path value="$PROJECT_DIR$/vendor/barryvdh/laravel-debugbar" />
<path value="$PROJECT_DIR$/vendor/phpoffice/phpspreadsheet" />
<path value="$PROJECT_DIR$/vendor/maennchen/zipstream-php" />
<path value="$PROJECT_DIR$/vendor/maatwebsite/excel" />
+2
View File
@@ -1,5 +1,7 @@
server {
client_max_body_size 200M;
large_client_header_buffers 4 128k;
root /var/www/public;
location / {
add_header Access-Control-Allow-Origin *;
@@ -8,6 +8,7 @@ use App\Helpers\ByteConverter;
use App\Models\Category;
use App\Models\CustomForm;
use App\Models\Page;
use App\Models\PageReferenceList;
use App\Models\Post;
use Filament\Forms;
use Filament\Forms\Components\Builder;
@@ -379,6 +380,13 @@ class ContentBuilderItem
->searchable()
->required(),
])->label('Форма'),
Builder\Block::make('pageResourceList')
->schema([
Select::make('resource')
->options(PageReferenceList::query()->where('is_active', true)->pluck('title', 'slug'))
->searchable()
->required(),
])->label('Ресурсы'),
])
->collapsed()
->blockNumbers(false)
+38 -2
View File
@@ -9,10 +9,13 @@ use App\Helpers\ByteConverter;
use App\Models\Category;
use App\Models\CustomForm;
use App\Models\Page;
use App\Models\PageReferenceList;
use App\Models\Post;
use Filament\Forms;
use Filament\Forms\Components\Builder;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\Section;
@@ -23,6 +26,8 @@ use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\CreateRecord;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
@@ -79,6 +84,30 @@ class PostForm
SpatieTagsInput::make('tags')->label('Тэги'),
Forms\Components\TagsInput::make('authors')
->label('Авторы')->placeholder('Добавить автора'),
Section::make('Отложенная публикация')->schema([
Grid::make(2)->schema([
Toggle::make('publish_setting.publish_after')
->label('Включить')
->inline(false)
->default(false)
->live(),
DateTimePicker::make('publish_setting.publish_at')
->label('Дата публикации')
->native()
->displayFormat('d/m/Y')
->required(fn (Forms\Get $get) => $get('publish_setting.publish_after'))
->disabled(fn (Forms\Get $get) => !$get('publish_setting.publish_after'))
->minDate(Carbon::now()->subWeek())
->maxDate(Carbon::now()->addMonth()),
]),
]),
Section::make('Публикация в сервисах')->schema([
Forms\Components\Grid::make()->schema([
Toggle::make('publication.vk')->label('Публикация в VK')->default(true),
Toggle::make('publication.telegram')->label('Публикация в Telegram')->default(true),
]),
]),
]),
Tabs\Tab::make('Содержание новости')
->schema([
@@ -89,7 +118,7 @@ class PostForm
TextInput::make('content')
->label('')
->live(onBlur: true)
->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) {
->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set, $get) {
}),
]),
Builder\Block::make('paragraph')->label('Текст')
@@ -440,8 +469,16 @@ class PostForm
->searchable()
->required(),
])->label('Форма'),
Builder\Block::make('PageResourceList')
->schema([
Select::make('resource')
->options(PageReferenceList::query()->where('is_active', true)->pluck('title', 'slug'))
->searchable()
->required(),
])->label('Ресурсы'),
])
->collapsed()
->required()
->blockNumbers(false)
->collapsible()
->blockPickerColumns(3)
@@ -468,7 +505,6 @@ class PostForm
->directory('images'),
]),
]),
])
]);
}
@@ -125,8 +125,6 @@ class MainSliderResource extends Resource
Toggle::make('is_active')->default(true)->label('Активный слайдер')->inline(false),
]),
]);
}
@@ -0,0 +1,177 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\PageReferenceListResource\Pages;
use App\Filament\Resources\PageReferenceListResource\RelationManagers;
use App\Models\Event;
use App\Models\Page;
use App\Models\PageReferenceList;
use App\Models\Post;
use Filament\Forms;
use Filament\Forms\Components\ColorPicker;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Str;
class PageReferenceListResource extends Resource
{
protected static ?string $model = PageReferenceList::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Section::make('')->schema([
Tabs::make('Tabs')
->tabs([
Tabs\Tab::make('Основная информация')
->schema([
Forms\Components\Grid::make(2)->schema([
TextInput::make('title')->label('Название ресурса')->required()
->live(onBlur: true)
->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set) {
$set('slug', Str::slug($state));
$set('seo.title', $state);
}),
TextInput::make('slug')->label('Slug')->unique(ignoreRecord: true)->readOnly()->required(),
Toggle::make('is_active')->default(true)->label('Активный ресурс')->inline(false),
])
]),
Tabs\Tab::make('Содержание новости')
->schema([
Repeater::make('content')->schema([
Forms\Components\Section::make('Быстрая настройка ресурса')->schema([
Forms\Components\Grid::make()->schema([
Forms\Components\Select::make('model_select')
->name('')
->label('Выбор типа данных')
->options([
'Post' => 'Новость',
'Page' => 'Страница',
'Event' => 'Мероприятие',
'Custom' => 'Кастомная ссылка',
])
->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set, Forms\Get $get) {
if ($get('model_select') === 'Custom') {
$set('model', null);
$set('title', null);
$set('content', null);
$set('link', null);
};
})->live(onBlur: true),
Forms\Components\Select::make('model')
->label('Поиск данных')
->name('')
->live(onBlur: true)
->searchable()
->live(onBlur: true)
->afterStateUpdated(function (string $operation, string|null $state, Forms\Set $set, Forms\Get $get) {
if ($get('model_select') === 'Post') {
$post = Post::find($state);
$set('title', $post->title);
$relativeUrl = parse_url(route('client.post.show', $post->slug), PHP_URL_PATH);
$set('link', $relativeUrl);
};
if ($get('model_select') === 'Page') {
$page = Page::find($state);
$set('title', $page->title);
$set('link', $page->path);
};
if ($get('model_select') === 'Event') {
$event = Event::find($state);
$set('title', $event->title);
$relativeUrl = parse_url(route('client.event.show', $event->slug), PHP_URL_PATH);
$set('link', $relativeUrl);
};
})
->options(function (Forms\Get $get) {
if ($get('model_select') === 'Post') {
return Post::where('status', '=', 'published')->pluck('title', 'id');
};
if ($get('model_select') === 'Page') {
return Page::where('title', '!=', null)->pluck('title', 'id');
};
if ($get('model_select') === 'Event') {
return Event::all()->pluck('title', 'id');
};
if ($get('model_select') === 'Custom') {
return [];
};
}),
]),
]),
TextInput::make('title')->label('Title')->required(),
FileUpload::make('image')
->label('Изображение')
->image()
->optimize('webp')
->resize(50)
->disk('public')
->directory('images')
->imageEditor(),
Forms\Components\Grid::make(2)->schema([
Forms\Components\TextInput::make('link')
->label('Ссылка ресурса')
->required(),
Forms\Components\TextInput::make('link_text')
->default('Читать')
->label('Текст кнопки')
->required(),
]),
])->collapsed()->required(),
]),
]),
]),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListPageReferenceLists::route('/'),
'create' => Pages\CreatePageReferenceList::route('/create'),
'edit' => Pages\EditPageReferenceList::route('/{record}/edit'),
];
}
}
@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\PageReferenceListResource\Pages;
use App\Filament\Resources\PageReferenceListResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreatePageReferenceList extends CreateRecord
{
protected static string $resource = PageReferenceListResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\PageReferenceListResource\Pages;
use App\Filament\Resources\PageReferenceListResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditPageReferenceList extends EditRecord
{
protected static string $resource = PageReferenceListResource::class;
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\PageReferenceListResource\Pages;
use App\Filament\Resources\PageReferenceListResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListPageReferenceLists extends ListRecords
{
protected static string $resource = PageReferenceListResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}
+2 -1
View File
@@ -103,7 +103,8 @@ class PostResource extends Resource implements HasShieldPermissions
'update',
'delete',
'delete_any',
'publish'
'publish',
'view_only_own_records'
];
}
@@ -4,8 +4,10 @@ namespace App\Filament\Resources\PostResource\Pages;
use App\Enums\PostStatus;
use App\Filament\Resources\PostResource;
use App\Jobs\CreateVkPost;
use App\Models\Post;
use App\Models\User;
use App\Services\VK\VkService;
use Carbon\Carbon;
use Closure;
use Filament\Actions;
@@ -14,6 +16,7 @@ use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use PhpParser\Node\Expr\AssignOp\Mod;
use VK\Client\VKApiClient;
@@ -28,12 +31,17 @@ class CreatePost extends CreateRecord
protected static string $resource = PostResource::class;
protected array $seoData;
protected array $publicationAgreements;
protected function mutateFormDataBeforeCreate(array $data): array
{
$this->publicationAgreements = $data['publication'];
unset($data['publication']);
$this->seoData = $this->generateSeo($data);
$data['preview_text'] = $this->setPreviewText($data);
$data['publish_at'] = $this->setPublishDateTime($data['status']);
$data['publish_at'] = $this->setPublishDateTime($data['publish_setting']);
unset($data['publish_setting']);
$data['search_data'] = $this->generateSearchData($data['content']);
$data['reading_time'] = $this->calculateReadingTime($data['search_data']);
return $data;
@@ -43,6 +51,7 @@ class CreatePost extends CreateRecord
{
$this->record->seo()->create($this->seoData);
$this->sendNotify($this->record, auth()->user());
$this->postToSocialMedia($this->publicationAgreements, $this->record->content, $this->record->title, Carbon::parse($this->record->publish_at)->timestamp);
}
private function generateSeo(array $data) : array
@@ -62,7 +71,6 @@ class CreatePost extends CreateRecord
];
}
private function setPreviewText(array $data) : string
{
$rowData = $this->getBlockBySeoActiveState('paragraph', $data['content']);
@@ -126,10 +134,10 @@ class CreatePost extends CreateRecord
])->sendToDatabase($recipient);
}
private function setPublishDateTime(PostStatus $status) : Carbon|null
private function setPublishDateTime(array $data) : Carbon|null
{
if ($status !== PostStatus::PUBLISHED) {
return null;
if ($data['publish_after'] === true) {
return Carbon::parse($data['publish_at']);
}
return Carbon::now();
}
@@ -243,6 +251,58 @@ class CreatePost extends CreateRecord
return $data;
}
private function postToSocialMedia($settings, $content, $title, $publish_date) : void
{
if ($this->record->status === PostStatus::PUBLISHED) {
if ($settings['vk']) {
$text = "";
foreach ($content as $block) {
$text .= $this->generateContentToVK($block);
}
$images = $this->generateImageLinksToVK($this->record->images);
$post_id = $this->record->id;
dispatch(new CreateVkPost($title, $text, $images, $post_id, $publish_date));
}
}
}
private function generateContentToVK($block) : string
{
$data = "";
switch ($block['type']) {
case 'paragraph':
// Удаляем все HTML-теги и заменяем закрывающие теги p и h2 на двойной отступ
$content = preg_replace('/<\/(p|h2)>/', "\n\n", $block['data']['content']);
$data .= strip_tags($content);
break;
case 'heading':
// Удаляем теги заголовка и добавляем двойной отступ
$data .= $block['data']['content'] . "\n\n";
break;
}
return $data;
}
private function generateImageLinksToVK($images)
{
$imageUrls = array_map(function ($file) {
return url(Storage::url($file)); // Добавляем домен
}, $images);
return $imageUrls; // Возвращаем массив с полными URL изображений
}
}
@@ -4,9 +4,11 @@ namespace App\Filament\Resources\PostResource\Pages;
use App\Enums\PostStatus;
use App\Filament\Resources\PostResource;
use App\Jobs\UpdateVkPost;
use Carbon\Carbon;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class EditPost extends EditRecord
@@ -14,11 +16,14 @@ class EditPost extends EditRecord
protected static string $resource = PostResource::class;
protected array $seoData;
protected array $publicationAgreements;
protected function mutateFormDataBeforeSave(array $data): array
{
$this->seoData = $this->generateSeo($data);
$this->publicationAgreements = $data['publication'];
unset($data['publication']);
$data['preview_text'] = $this->setPreviewText($data);
$data['publish_at'] = $this->setPublishDateTime($data['status'], $this->record->publish_at);
$data['search_data'] = $this->generateSearchData($data['content']);
@@ -30,6 +35,7 @@ class EditPost extends EditRecord
protected function afterSave(): void
{
$this->record->seo()->update($this->seoData);
$this->postToSocialMedia($this->publicationAgreements, $this->record->content, $this->record->title, Carbon::parse($this->record->publish_at)->timestamp);
}
private function setPreviewText(array $data) : string
@@ -59,8 +65,6 @@ class EditPost extends EditRecord
return $block;
}
private function generateSeo(array $data) : array
{
$title = $data['title'];
@@ -166,6 +170,59 @@ class EditPost extends EditRecord
return $data;
}
private function generateContentToVK($block) : string
{
$data = "";
switch ($block['type']) {
case 'paragraph':
// Удаляем все HTML-теги и заменяем закрывающие теги p и h2 на двойной отступ
$content = preg_replace('/<\/(p|h2)>/', "\n\n", $block['data']['content']);
$data .= strip_tags($content);
break;
case 'heading':
// Удаляем теги заголовка и добавляем двойной отступ
$data .= $block['data']['content'] . "\n\n";
break;
}
return $data;
}
private function postToSocialMedia($settings, $content, $title, $publish_date) : void
{
if ($this->record->status === PostStatus::PUBLISHED) {
if ($settings['vk']) {
$text = "";
foreach ($content as $block) {
$text .= $this->generateContentToVK($block);
}
$images = $this->generateImageLinksToVK($this->record->images);
$post_id = $this->record->id;
dispatch(new UpdateVkPost($title, $text, $images, $post_id, $publish_date));
}
}
}
private function generateImageLinksToVK($images)
{
$imageUrls = array_map(function ($file) {
return url(Storage::url($file)); // Добавляем домен
}, $images);
return $imageUrls; // Возвращаем массив с полными URL изображений
}
@@ -9,21 +9,26 @@ use Filament\Actions;
use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\ListRecords;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\DB;
class ListPosts extends ListRecords
{
public \Illuminate\Support\Collection $postsByStatuses;
protected static string $resource = PostResource::class;
public function __construct()
public function getPostsByStatuses(): \Illuminate\Support\Collection
{
$this->postsByStatuses = Post::select('status', DB::raw('count(*) as post_count'))
return Post::select('status', DB::raw('count(*) as post_count'))
->groupBy('status')
->when($this->canViewOnlyOwnRecords(), function (Builder $query) {
$query->where('user_id', auth()->id());
})
->pluck('post_count', 'status');
}
protected static string $resource = PostResource::class;
protected function canViewOnlyOwnRecords(): bool
{
return auth()->user()->can('view_only_own_records_post');
}
protected function getHeaderActions(): array
{
@@ -34,11 +39,21 @@ class ListPosts extends ListRecords
public function getTabs(): array
{
$postsByStatuses = $this->getPostsByStatuses();
return [
'status' => Tab::make('Новости на рассмотрении')->modifyQueryUsing(function (Builder $query) {
$query->where('status', '=', PostStatus::VERIFICATION->value);
})->badge($this->postsByStatuses[PostStatus::VERIFICATION->value] ?? 0),
'All' => Tab::make('Все новости'),
if ($this->canViewOnlyOwnRecords()) {
$query->where('user_id', auth()->id());
}
})->badge($postsByStatuses[PostStatus::VERIFICATION->value] ?? 0),
'All' => Tab::make('Все новости')->modifyQueryUsing(function (Builder $query) {
if ($this->canViewOnlyOwnRecords()) {
$query->where('user_id', auth()->id());
}
}),
];
}
}
@@ -0,0 +1,402 @@
<?php
namespace App\Filament\Resources\Shield;
use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions;
use BezhanSalleh\FilamentShield\Facades\FilamentShield;
use BezhanSalleh\FilamentShield\FilamentShieldPlugin;
use BezhanSalleh\FilamentShield\Forms\ShieldSelectAllToggle;
use App\Filament\Resources\Shield\RoleResource\Pages;
use BezhanSalleh\FilamentShield\Support\Utils;
use Filament\Forms;
use Filament\Forms\Components\Component;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Str;
class RoleResource extends Resource implements HasShieldPermissions
{
protected static ?string $recordTitleAttribute = 'name';
public static function getPermissionPrefixes(): array
{
return [
'view',
'view_any',
'create',
'update',
'delete',
'delete_any',
];
}
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Grid::make()
->schema([
Forms\Components\Section::make()
->schema([
Forms\Components\TextInput::make('name')
->label(__('filament-shield::filament-shield.field.name'))
->unique(ignoreRecord: true)
->required()
->maxLength(255),
Forms\Components\TextInput::make('guard_name')
->label(__('filament-shield::filament-shield.field.guard_name'))
->default(Utils::getFilamentAuthGuard())
->nullable()
->maxLength(255),
ShieldSelectAllToggle::make('select_all')
->onIcon('heroicon-s-shield-check')
->offIcon('heroicon-s-shield-exclamation')
->label(__('filament-shield::filament-shield.field.select_all.name'))
->helperText(fn (): HtmlString => new HtmlString(__('filament-shield::filament-shield.field.select_all.message')))
->dehydrated(fn ($state): bool => $state),
])
->columns([
'sm' => 2,
'lg' => 3,
]),
]),
Forms\Components\Tabs::make('Permissions')
->contained()
->tabs([
static::getTabFormComponentForResources(),
static::getTabFormComponentForPage(),
static::getTabFormComponentForWidget(),
static::getTabFormComponentForCustomPermissions(),
])
->columnSpan('full'),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')
->badge()
->label(__('filament-shield::filament-shield.column.name'))
->formatStateUsing(fn ($state): string => Str::headline($state))
->colors(['primary'])
->searchable(),
Tables\Columns\TextColumn::make('guard_name')
->badge()
->label(__('filament-shield::filament-shield.column.guard_name')),
Tables\Columns\TextColumn::make('permissions_count')
->badge()
->label(__('filament-shield::filament-shield.column.permissions'))
->counts('permissions')
->colors(['success']),
Tables\Columns\TextColumn::make('updated_at')
->label(__('filament-shield::filament-shield.column.updated_at'))
->dateTime(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListRoles::route('/'),
'create' => Pages\CreateRole::route('/create'),
'view' => Pages\ViewRole::route('/{record}'),
'edit' => Pages\EditRole::route('/{record}/edit'),
];
}
public static function getCluster(): ?string
{
return Utils::getResourceCluster() ?? static::$cluster;
}
public static function getModel(): string
{
return Utils::getRoleModel();
}
public static function getModelLabel(): string
{
return __('filament-shield::filament-shield.resource.label.role');
}
public static function getPluralModelLabel(): string
{
return __('filament-shield::filament-shield.resource.label.roles');
}
public static function shouldRegisterNavigation(): bool
{
return Utils::isResourceNavigationRegistered();
}
public static function getNavigationGroup(): ?string
{
return Utils::isResourceNavigationGroupEnabled()
? __('filament-shield::filament-shield.nav.group')
: '';
}
public static function getNavigationLabel(): string
{
return __('filament-shield::filament-shield.nav.role.label');
}
public static function getNavigationIcon(): string
{
return __('filament-shield::filament-shield.nav.role.icon');
}
public static function getNavigationSort(): ?int
{
return Utils::getResourceNavigationSort();
}
public static function getSlug(): string
{
return Utils::getResourceSlug();
}
public static function getNavigationBadge(): ?string
{
return Utils::isResourceNavigationBadgeEnabled()
? strval(static::getEloquentQuery()->count())
: null;
}
public static function isScopedToTenant(): bool
{
return Utils::isScopedToTenant();
}
public static function canGloballySearch(): bool
{
return Utils::isResourceGloballySearchable() && count(static::getGloballySearchableAttributes()) && static::canViewAny();
}
public static function getResourceEntitiesSchema(): ?array
{
return collect(FilamentShield::getResources())
->sortKeys()
->map(function ($entity) {
$sectionLabel = strval(
static::shield()->hasLocalizedPermissionLabels()
? FilamentShield::getLocalizedResourceLabel($entity['fqcn'])
: $entity['model']
);
return Forms\Components\Section::make($sectionLabel)
->description(fn () => new HtmlString('<span style="word-break: break-word;">' . Utils::showModelPath($entity['fqcn']) . '</span>'))
->compact()
->schema([
static::getCheckBoxListComponentForResource($entity),
])
->columnSpan(static::shield()->getSectionColumnSpan())
->collapsible();
})
->toArray();
}
public static function getResourceTabBadgeCount(): ?int
{
return collect(FilamentShield::getResources())
->map(fn ($resource) => count(static::getResourcePermissionOptions($resource)))
->sum();
}
public static function getResourcePermissionOptions(array $entity): array
{
return collect(Utils::getResourcePermissionPrefixes($entity['fqcn']))
->flatMap(function ($permission) use ($entity) {
$name = $permission . '_' . $entity['resource'];
$label = static::shield()->hasLocalizedPermissionLabels()
? FilamentShield::getLocalizedResourcePermissionLabel($permission)
: $name;
return [
$name => $label,
];
})
->toArray();
}
public static function setPermissionStateForRecordPermissions(Component $component, string $operation, array $permissions, ?Model $record): void
{
if (in_array($operation, ['edit', 'view'])) {
if (blank($record)) {
return;
}
if ($component->isVisible() && count($permissions) > 0) {
$component->state(
collect($permissions)
/** @phpstan-ignore-next-line */
->filter(fn ($value, $key) => $record->checkPermissionTo($key))
->keys()
->toArray()
);
}
}
}
public static function getPageOptions(): array
{
return collect(FilamentShield::getPages())
->flatMap(fn ($page) => [
$page['permission'] => static::shield()->hasLocalizedPermissionLabels()
? FilamentShield::getLocalizedPageLabel($page['class'])
: $page['permission'],
])
->toArray();
}
public static function getWidgetOptions(): array
{
return collect(FilamentShield::getWidgets())
->flatMap(fn ($widget) => [
$widget['permission'] => static::shield()->hasLocalizedPermissionLabels()
? FilamentShield::getLocalizedWidgetLabel($widget['class'])
: $widget['permission'],
])
->toArray();
}
public static function getCustomPermissionOptions(): ?array
{
return FilamentShield::getCustomPermissions()
->mapWithKeys(fn ($customPermission) => [
$customPermission => static::shield()->hasLocalizedPermissionLabels() ? str($customPermission)->headline()->toString() : $customPermission,
])
->toArray();
}
public static function getTabFormComponentForResources(): Component
{
return static::shield()->hasSimpleResourcePermissionView()
? static::getTabFormComponentForSimpleResourcePermissionsView()
: Forms\Components\Tabs\Tab::make('resources')
->label(__('filament-shield::filament-shield.resources'))
->visible(fn (): bool => (bool) Utils::isResourceEntityEnabled())
->badge(static::getResourceTabBadgeCount())
->schema([
Forms\Components\Grid::make()
->schema(static::getResourceEntitiesSchema())
->columns(static::shield()->getGridColumns()),
]);
}
public static function getCheckBoxListComponentForResource(array $entity): Component
{
$permissionsArray = static::getResourcePermissionOptions($entity);
return static::getCheckboxListFormComponent($entity['resource'], $permissionsArray, false);
}
public static function getTabFormComponentForPage(): Component
{
$options = static::getPageOptions();
$count = count($options);
return Forms\Components\Tabs\Tab::make('pages')
->label(__('filament-shield::filament-shield.pages'))
->visible(fn (): bool => (bool) Utils::isPageEntityEnabled() && $count > 0)
->badge($count)
->schema([
static::getCheckboxListFormComponent('pages_tab', $options),
]);
}
public static function getTabFormComponentForWidget(): Component
{
$options = static::getWidgetOptions();
$count = count($options);
return Forms\Components\Tabs\Tab::make('widgets')
->label(__('filament-shield::filament-shield.widgets'))
->visible(fn (): bool => (bool) Utils::isWidgetEntityEnabled() && $count > 0)
->badge($count)
->schema([
static::getCheckboxListFormComponent('widgets_tab', $options),
]);
}
public static function getTabFormComponentForCustomPermissions(): Component
{
$options = static::getCustomPermissionOptions();
$count = count($options);
return Forms\Components\Tabs\Tab::make('custom')
->label(__('filament-shield::filament-shield.custom'))
->visible(fn (): bool => (bool) Utils::isCustomPermissionEntityEnabled() && $count > 0)
->badge($count)
->schema([
static::getCheckboxListFormComponent('custom_permissions', $options),
]);
}
public static function getTabFormComponentForSimpleResourcePermissionsView(): Component
{
$options = FilamentShield::getAllResourcePermissions();
$count = count($options);
return Forms\Components\Tabs\Tab::make('resources')
->label(__('filament-shield::filament-shield.resources'))
->visible(fn (): bool => (bool) Utils::isResourceEntityEnabled() && $count > 0)
->badge($count)
->schema([
static::getCheckboxListFormComponent('resources_tab', $options),
]);
}
public static function getCheckboxListFormComponent(string $name, array $options, bool $searchable = true): Component
{
return Forms\Components\CheckboxList::make($name)
->label('')
->options(fn (): array => $options)
->searchable($searchable)
->afterStateHydrated(
fn (Component $component, string $operation, ?Model $record) => static::setPermissionStateForRecordPermissions(
component: $component,
operation: $operation,
permissions: $options,
record: $record
)
)
->dehydrated(fn ($state) => ! blank($state))
->bulkToggleable()
->gridDirection('row')
->columns(static::shield()->getCheckboxListColumns())
->columnSpan(static::shield()->getCheckboxListColumnSpan());
}
public static function shield(): FilamentShieldPlugin
{
return FilamentShieldPlugin::get();
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Filament\Resources\Shield\RoleResource\Pages;
use App\Filament\Resources\Shield\RoleResource;
use BezhanSalleh\FilamentShield\Support\Utils;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
class CreateRole extends CreateRecord
{
protected static string $resource = RoleResource::class;
public Collection $permissions;
protected function mutateFormDataBeforeCreate(array $data): array
{
$this->permissions = collect($data)
->filter(function ($permission, $key) {
return ! in_array($key, ['name', 'guard_name', 'select_all']);
})
->values()
->flatten()
->unique();
return Arr::only($data, ['name', 'guard_name']);
}
protected function afterCreate(): void
{
$permissionModels = collect();
$this->permissions->each(function ($permission) use ($permissionModels) {
$permissionModels->push(Utils::getPermissionModel()::firstOrCreate([
/** @phpstan-ignore-next-line */
'name' => $permission,
'guard_name' => $this->data['guard_name'],
]));
});
$this->record->syncPermissions($permissionModels);
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Filament\Resources\Shield\RoleResource\Pages;
use App\Filament\Resources\Shield\RoleResource;
use BezhanSalleh\FilamentShield\Support\Utils;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
class EditRole extends EditRecord
{
protected static string $resource = RoleResource::class;
public Collection $permissions;
protected function getActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
protected function mutateFormDataBeforeSave(array $data): array
{
$this->permissions = collect($data)
->filter(function ($permission, $key) {
return ! in_array($key, ['name', 'guard_name', 'select_all']);
})
->values()
->flatten()
->unique();
return Arr::only($data, ['name', 'guard_name']);
}
protected function afterSave(): void
{
$permissionModels = collect();
$this->permissions->each(function ($permission) use ($permissionModels) {
$permissionModels->push(Utils::getPermissionModel()::firstOrCreate([
'name' => $permission,
'guard_name' => $this->data['guard_name'],
]));
});
$this->record->syncPermissions($permissionModels);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Shield\RoleResource\Pages;
use App\Filament\Resources\Shield\RoleResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListRoles extends ListRecords
{
protected static string $resource = RoleResource::class;
protected function getActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Shield\RoleResource\Pages;
use App\Filament\Resources\Shield\RoleResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewRole extends ViewRecord
{
protected static string $resource = RoleResource::class;
protected function getActions(): array
{
return [
Actions\EditAction::make(),
];
}
}
+13
View File
@@ -37,11 +37,24 @@ class UserResource extends Resource implements HasShieldPermissions
->required()
->maxLength(255),
Forms\Components\DateTimePicker::make('email_verified_at'),
Forms\Components\TextInput::make('password')
->password()
->required(fn (string $context): bool => $context === 'create')
->dehydrated(fn ($state) => filled($state))
->maxLength(255),
Forms\Components\Select::make('roles')
->relationship('roles', 'name')
->multiple()
->preload()
->searchable(),
Forms\Components\Select::make('permissions')
->relationship('permissions', 'name')
->multiple()
->preload()
->searchable()
]);
}
@@ -6,10 +6,14 @@ use App\Enums\FormEducation;
use App\Http\Resources\AdditionalEducationCategoryPreviewResource;
use App\Http\Resources\AdditionalEducationCategoryResource;
use App\Http\Resources\AdditionalEducationResource;
use App\Http\Resources\ClientBreadcrumbPage;
use App\Http\Resources\ClientBreadcrumbSection;
use App\Http\Resources\ClientBreadcrumbSubSection;
use App\Http\Resources\DirectionAdditionalEducationResource;
use App\Models\AdditionalEducation;
use App\Models\AdditionalEducationCategory;
use App\Models\DirectionAdditionalEducation;
use App\Models\Page;
use Illuminate\Http\Request;
use Inertia\Inertia;
@@ -85,19 +89,51 @@ class ClientAdditionalEducationController extends Controller
'content' => $categoriesContent,
],
];
$routeUrl = route('client.additionalEducation.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$breadcrumbs = null;
}
return Inertia::render('Client/Additional-educations/Index',
compact(
'directionAdditionalEducations',
'additionalEducations',
'filters',
'forms_education',
'categories'
'categories',
'breadcrumbs'
));
}
public function show(string $slug)
{
$additionalEducation = new AdditionalEducationResource(AdditionalEducation::query()->with('category.direction')->where('slug', $slug)->first());
return Inertia::render('Client/Additional-educations/Show', compact('additionalEducation'));
$routeUrl = route('client.additionalEducation.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$breadcrumbs = null;
}
return Inertia::render('Client/Additional-educations/Show', compact('additionalEducation', 'breadcrumbs'));
}
}
+37 -2
View File
@@ -2,12 +2,16 @@
namespace App\Http\Controllers;
use App\Http\Resources\ClientBreadcrumbPage;
use App\Http\Resources\ClientBreadcrumbSection;
use App\Http\Resources\ClientBreadcrumbSubSection;
use App\Http\Resources\ClientEventCategoryResource;
use App\Http\Resources\ClientEventFullResource;
use App\Http\Resources\ClientEventResource;
use App\Http\Resources\ClientNavigationResource;
use App\Models\Event;
use App\Models\EventCategory;
use App\Models\Page;
use Carbon\Carbon;
use DateTime;
use Illuminate\Http\Request;
@@ -24,13 +28,44 @@ class ClientEventController extends Controller
$events = $this->getEvents($currentDate);
$categories = ClientEventCategoryResource::collection(EventCategory::has('events')->get());
return Inertia::render('Client/Events/Index', compact('eventDates', 'events', 'currentDate', 'filters', 'categories'));
$routeUrl = route('client.event.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$breadcrumbs = null;
}
return Inertia::render('Client/Events/Index', compact('eventDates', 'events', 'currentDate', 'filters', 'categories', 'breadcrumbs'));
}
public function show(string $slug)
{
$event = new ClientEventFullResource(Event::where('slug', '=', $slug)->with('category')->first());
return Inertia::render('Client/Events/Show', compact('event'));
$routeUrl = route('client.event.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$breadcrumbs = null;
}
return Inertia::render('Client/Events/Show', compact('event', 'breadcrumbs'));
}
private function getCurrentDate(Request $request): array
+40 -3
View File
@@ -3,15 +3,21 @@
namespace App\Http\Controllers;
use App\Http\Resources\CategoryResource;
use App\Http\Resources\ClientBreadcrumbPage;
use App\Http\Resources\ClientBreadcrumbSection;
use App\Http\Resources\ClientBreadcrumbSubSection;
use App\Http\Resources\ClientNavigationResource;
use App\Http\Resources\ClientPostListResource;
use App\Http\Resources\ClientTagResource;
use App\Http\Resources\MainSectionResource;
use App\Http\Resources\PageResource;
use App\Http\Resources\PostResource;
use App\Models\Category;
use App\Models\MainSection;
use App\Models\Page;
use App\Models\Post;
use App\Models\Tag;
use Carbon\Carbon;
use Doctrine\DBAL\Schema\Column;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -33,6 +39,7 @@ class ClientPostController extends Controller
->with('category')
->select('title', 'slug', 'authors', 'category_id', 'preview', 'search_data', 'created_at')
->where('status', '=', 'published')
->where('publish_at', '<', Carbon::now())
->when(request()->input('search'), function ($query, $search) {
$query->whereRaw('LOWER(title) like ?', ["%".strtolower($search)."%"]);
})
@@ -100,13 +107,43 @@ class ClientPostController extends Controller
],
];
return Inertia::render('Client/Posts/Index', compact('filters', 'posts', 'categories', 'tags'));
$routeUrl = route('client.post.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$breadcrumbs = null;
}
return Inertia::render('Client/Posts/Index', compact('filters', 'posts', 'categories', 'tags', 'breadcrumbs'));
}
public function show(Request $request, $slug)
{
$post = new PostResource(Post::where('slug', $slug)->firstOrFail());
return Inertia::render('Client/Posts/Show', compact('post'));
$post = new PostResource(Post::where('slug', $slug)->where('publish_at', '<', Carbon::now())->firstOrFail());
$routeUrl = route('client.post.index');
$path = ltrim(parse_url($routeUrl, PHP_URL_PATH), '/');
$page = Page::where('path', '=', $path)->with('section.pages.section', 'section.mainSection')->first();
if (isset($page->section)) {
$breadcrumbs = [
'mainSection' => new ClientBreadcrumbSection($page->section->mainSection),
'subSection' => new ClientBreadcrumbSubSection($page->section),
'page' => new ClientBreadcrumbPage($page),
];
} else {
$subSectionPages = null;
$breadcrumbs = null;
}
return Inertia::render('Client/Posts/Show', compact('post', 'breadcrumbs'));
}
@@ -0,0 +1,15 @@
<?php
namespace App\Http\Controllers;
use App\Http\Resources\ClientPageReferenceListResource;
use App\Models\PageReferenceList;
use Illuminate\Http\Request;
class ClientWidgetPageReferenceListController extends Controller
{
public function show(string $slug)
{
return new ClientPageReferenceListResource(PageReferenceList::query()->where('slug', $slug)->first());
}
}
+3
View File
@@ -22,6 +22,8 @@ use App\Models\MainSection;
use App\Models\MainSlider;
use App\Models\Post;
use App\Services\Filament\Icon\ArrayToCollectionService;
use App\Services\Vicon\EducationalProgram\EducationalProgramService;
use Carbon\Carbon;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
@@ -63,6 +65,7 @@ class MainController extends Controller
$posts = PostThumbnailResource::collection(Post::query()
->select('title', 'slug', 'authors', 'preview_text', 'category_id', 'preview', 'search_data', 'created_at')
->with('category')
->where('publish_at', '<', Carbon::now())
->where('status', '=', PostStatus::PUBLISHED)
->orderBy('publish_at', 'desc')->limit(3)
->get());
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use Carbon\Carbon;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Inertia\Inertia;
class VkAuthController extends Controller
{
}
+34 -16
View File
@@ -2,8 +2,16 @@
namespace App\Http\Controllers;
use App\Jobs\CreateVkPost;
use App\Services\VK\VkAuthService;
use App\Services\VK\VkService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Inertia\Inertia;
use Symfony\Component\Finder\Finder;
use VK\Client\VKApiClient;
use VK\OAuth\Scopes\VKOAuthUserScope;
use VK\OAuth\VKOAuth;
@@ -16,33 +24,43 @@ class VkPostController extends Controller
private VkService $vkService;
public function __construct()
{
$this->vkService = new VkService(new VKApiClient());
$this->wall_token = env('WALL_ACCESS_VK_TOKEN');
}
public function index()
{
$oauth = new VKOAuth();
$client_id = 52468445;
$redirect_uri = 'https://crawdad-fresh-bream.ngrok-free.app/';
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthUserScope::WALL, VKOAuthUserScope::PHOTOS);
$state = 'dJZ3N05uZc9jpcEgxD6y';
$groups_ids = array(227826614);
$browser_url = $oauth->getAuthorizeUrl(VKOAuthResponseType::TOKEN, $client_id, $redirect_uri, $display, $scope, $state, $groups_ids);
return redirect($browser_url);
}
public function wall()
{
return $this->vkService->createAlbum('Тестовый альбом');
dd($this->vkService->getPostById(39));
}
public function getImages()
{
// Укажите путь к директории
$directory = 'public/images';
// Получаем все файлы из директории
$files = Storage::files($directory);
// Фильтруем только изображения (например, jpg, png)
$images = array_filter($files, function ($file) {
return in_array(pathinfo($file, PATHINFO_EXTENSION), ['webp', 'jpeg', 'png', 'gif']);
});
// Формируем полный URL для каждого изображения
$imageUrls = array_map(function ($file) {
return url(Storage::url($file)); // Добавляем домен
}, $images);
return $imageUrls; // Возвращаем массив с полными URL изображений
}
}
+1
View File
@@ -21,6 +21,7 @@ class Kernel extends HttpKernel
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ClientPageReferenceListResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return parent::toArray($request);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ClientPageReferenceResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return parent::toArray($request);
}
}
+59
View File
@@ -0,0 +1,59 @@
<?php
namespace App\Jobs;
use App\Enums\LevelEducational;
use App\Models\DirectionStudy;
use App\Services\Vicon\DirectionStudy\DirectionStudyService;
use App\Services\VK\VkService;
use Carbon\Carbon;
use Filament\Notifications\Notification;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use VK\Client\VKApiClient;
class CreateVkPost implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct(
readonly private string $title,
readonly private string $text,
readonly private array $images = [],
readonly private int $post_id,
readonly private int $publish_date,
)
{}
public function handle()
{
try {
$vkService = new VkService();
$vk_post = $vkService->createPost($this->title, $this->text, $this->images, $this->publish_date);
DB::table('posts_vk_posts')->insert(
[
'post_id' => $this->post_id,
'vk_post_id' => $vk_post['post_id'],
'unchange_time_after' => Carbon::now()->addWeek(),
]
);
} catch (\Exception $e) {
Log::error('Ошибка при создании поста: ' . $e->getMessage());
throw $e; // Перебрасываем исключение для повторной попытки
}
}
}
+51
View File
@@ -0,0 +1,51 @@
<?php
namespace App\Jobs;
use App\Enums\LevelEducational;
use App\Models\DirectionStudy;
use App\Services\Vicon\DirectionStudy\DirectionStudyService;
use App\Services\VK\VkService;
use Carbon\Carbon;
use Filament\Notifications\Notification;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use VK\Client\VKApiClient;
class UpdateVkPost implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct(
readonly private string $title,
readonly private string $text,
readonly private array $images = [],
readonly private int $post_id,
readonly private int $publish_date,
)
{}
public function handle()
{
try {
$postRelation = DB::table('posts_vk_posts')->select()->where('post_id', $this->post_id)->first();
$vkService = new VkService();
$vkService->updatePost($postRelation->vk_post_id, $this->title, $this->text, $this->images, $this->publish_date);
} catch (\Exception $e) {
Log::error('Ошибка при создании поста: ' . $e->getMessage());
throw $e; // Перебрасываем исключение для повторной попытки
}
}
}
+3
View File
@@ -76,6 +76,9 @@ class AcceptInvitation extends SimplePage
'email' => $this->invitationModel->email,
]);
$user->assignRole(config('filament-shield.invited_user.name', 'invited_user'));
AcceptedInvitation::create([
'sender_id' => $this->invitationModel->user_id,
'receiver_id' => $user->id,
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PageReferenceList extends Model
{
use HasFactory;
protected $guarded = false;
protected $casts = [
'content' => 'array',
];
}
+1 -2
View File
@@ -15,13 +15,12 @@ class Post extends Model
protected $guarded = false;
public function category() : BelongsTo
{
return $this->belongsTo(Category::class);
}
public function seo()
{
return $this->morphOne(Seo::class, 'seoable');
+3 -1
View File
@@ -106,7 +106,9 @@ class User extends Authenticatable implements FilamentUser
case "admin":
return $this->hasRole(Utils::getSuperAdminName());
case "dashboard":
return $this->hasRole(config('filament-shield.dashboard_user.name', 'dashboard_user')) || $this->hasRole(Utils::getSuperAdminName());
return $this->hasRole(config('filament-shield.dashboard_user.name', 'dashboard_user'))
|| $this->hasRole(Utils::getSuperAdminName())
|| $this->hasRole(config('filament-shield.invited_user.name', 'invited_user'));
default:
return false;
}
+108
View File
@@ -0,0 +1,108 @@
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\PageReferenceList;
use Illuminate\Auth\Access\HandlesAuthorization;
class PageReferenceListPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return $user->can('view_any_page::reference::list');
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('view_page::reference::list');
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return $user->can('create_page::reference::list');
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('update_page::reference::list');
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('delete_page::reference::list');
}
/**
* Determine whether the user can bulk delete.
*/
public function deleteAny(User $user): bool
{
return $user->can('delete_any_page::reference::list');
}
/**
* Determine whether the user can permanently delete.
*/
public function forceDelete(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('force_delete_page::reference::list');
}
/**
* Determine whether the user can permanently bulk delete.
*/
public function forceDeleteAny(User $user): bool
{
return $user->can('force_delete_any_page::reference::list');
}
/**
* Determine whether the user can restore.
*/
public function restore(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('restore_page::reference::list');
}
/**
* Determine whether the user can bulk restore.
*/
public function restoreAny(User $user): bool
{
return $user->can('restore_any_page::reference::list');
}
/**
* Determine whether the user can replicate.
*/
public function replicate(User $user, PageReferenceList $pageReferenceList): bool
{
return $user->can('replicate_page::reference::list');
}
/**
* Determine whether the user can reorder.
*/
public function reorder(User $user): bool
{
return $user->can('reorder_page::reference::list');
}
}
+6 -6
View File
@@ -15,7 +15,7 @@ class RolePolicy
*/
public function viewAny(User $user): bool
{
return $user->can('view_any_role');
return $user->can('view_any_shield::role');
}
/**
@@ -23,7 +23,7 @@ class RolePolicy
*/
public function view(User $user, Role $role): bool
{
return $user->can('view_role');
return $user->can('view_shield::role');
}
/**
@@ -31,7 +31,7 @@ class RolePolicy
*/
public function create(User $user): bool
{
return $user->can('create_role');
return $user->can('create_shield::role');
}
/**
@@ -39,7 +39,7 @@ class RolePolicy
*/
public function update(User $user, Role $role): bool
{
return $user->can('update_role');
return $user->can('update_shield::role');
}
/**
@@ -47,7 +47,7 @@ class RolePolicy
*/
public function delete(User $user, Role $role): bool
{
return $user->can('delete_role');
return $user->can('delete_shield::role');
}
/**
@@ -55,7 +55,7 @@ class RolePolicy
*/
public function deleteAny(User $user): bool
{
return $user->can('delete_any_role');
return $user->can('delete_any_shield::role');
}
/**
+128 -8
View File
@@ -2,36 +2,140 @@
namespace App\Services\VK\Album;
use App\Services\VK\VkAuthService;
use CURLFile;
use GuzzleHttp\Client;
use Illuminate\Http\Client\RequestException;
use Illuminate\Support\Facades\Log;
use VK\Client\VKApiClient;
class VkAlbumService
{
private VKApiClient $vk;
private VkAuthService $vkAuthService;
private string $wallToken;
private string $serviceToken;
private string $publicId;
private string $publicDomain;
public function __construct(VKApiClient $vk) {
$this->vk = $vk;
$this->wallToken = env('WALL_ACCESS_VK_TOKEN');
$this->vkAuthService = new VkAuthService();
$this->serviceToken = env('SERVICE_ACCESS_VK_KEY');
$this->publicId = env('PUBLIC_ID');
$this->publicDomain = env('PUBLIC_DOMAIN');
}
public function getServerForUploadImages()
public function getServerForUploadImages($album_id, $group_id)
{
return $this->vk->photos()->getUploadServer($this->wallToken, array(
''
));
return $this->vk->photos()->getUploadServer(
$this->vkAuthService->getToken()->access_token,
array(
'album_id' => $album_id,
'group_id' => $group_id,
)
);
}
public function uploadImagesToUploadServer($uploadUrl, $images)
{
// Массив для хранения локальных путей к загруженным изображениям
$localFiles = [];
// Загрузка изображений из URL
foreach ($images as $imageUrl) {
$localFile = tempnam(sys_get_temp_dir(), 'img_') . '.webp';
file_put_contents($localFile, file_get_contents($imageUrl));
$localFiles[] = $localFile;
}
// Подготовка данных для отправки
$postFields = [];
foreach ($localFiles as $index => $localFile) {
// Добавляем файл в массив
$postFields['file' . ($index + 1)] = new CURLFile($localFile);
}
// Инициализация cURL
$ch = curl_init();
// Установка параметров cURL
curl_setopt($ch, CURLOPT_URL, $uploadUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
// Выполнение запроса
$response = curl_exec($ch);
curl_close($ch);
// Проверка на ошибки
if (curl_errno($ch)) {
return 'Ошибка cURL: ' . curl_error($ch);
}
// Закрытие cURL
// Обработка ответа
$responseData = json_decode($response, true);
// Удаление временных файлов
foreach ($localFiles as $localFile) {
unlink($localFile);
}
return $responseData;
}
public function saveImagesToUploadServer($albumId, $server, $photosList, $hash)
{
// URL для запроса
$url = 'https://api.vk.com/method/photos.save';
// Подготовка данных для отправки
$postFields = [
'album_id' => $albumId,
'server' => $server,
'group_id' => env('PUBLIC_ID'),
'photos_list' => $photosList, // Преобразуем массив в JSON-строку
'hash' => $hash,
'access_token' => $this->vkAuthService->getToken()->access_token,
'v' => '5.131', // Версия API
];
// Инициализация cURL
$ch = curl_init();
// Установка параметров cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
// Выполнение запроса
$response = curl_exec($ch);
// Проверка на ошибки
if (curl_errno($ch)) {
return 'Ошибка cURL: ' . curl_error($ch);
}
// Закрытие cURL
curl_close($ch);
// Обработка ответа
$responseData = json_decode($response, true);
return $responseData;
}
public function createAlbum(string $title)
{
try {
return $this->vk->photos()->createAlbum($this->wallToken, array(
return $this->vk->photos()->createAlbum($this->vkAuthService->getToken()->access_token, array(
'title' => $title,
'group_id' => $this->publicId,
'privacy' => 0,
@@ -46,4 +150,20 @@ class VkAlbumService
}
}
public function deleteAlbum(int $album_id, int $group_id)
{
try {
return $this->vk->photos()->deleteAlbum($this->vkAuthService->getToken()->access_token, array(
'album_id' => $album_id,
'group_id' => $group_id,
));
} catch (\Exception $e) {
Log::error('Ошибка при удалении альбома: ' . $e->getMessage());
return [
'success' => false,
'message' => 'Не удалось удалить альбом: ' . $e->getMessage(),
];
}
}
}
+220
View File
@@ -0,0 +1,220 @@
<?php
namespace App\Services\VK;
use App\Services\VK\Album\VkAlbumService;
use App\Services\VK\Wall\VkWallService;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use VK\Client\VKApiClient;
class VkAuthService
{
public function getToken()
{
try {
// Получаем последний токен
$token = DB::table('vk_tokens')->latest()->first();
// Проверяем, существует ли токен и является ли он валидным
if ($token && !$this->isTokenValid($token)) {
// Если токен не валиден, обновляем его
return $this->refresh();
}
return $token;
} catch (\Exception $e) {
// Обработка ошибок, например, логирование
Log::error('Ошибка при получении токена: ' . $e->getMessage());
return null; // Или выбросьте исключение, если это необходимо
}
}
public function redirectToProvider()
{
$state = bin2hex(random_bytes(16)); // Генерация случайной строки состояния
session(['vk_state' => $state]);
$code_verifier = $this->generateCodeVerifier();
$code_challenge = $this->generateCodeChallenge($code_verifier);
session(['vk_code_verifier' => $code_verifier]);
$url = 'https://id.vk.com/authorize?' . http_build_query([
'response_type' => 'code',
'client_id' => env('VK_APP_ID'),
'redirect_uri' => env('VK_REDIRECT_URI'),
'state' => $state,
'scope' => 'photos wall', // Укажите необходимые права доступа
'code_challenge' => $code_challenge, // Добавьте код, если используете PKCE
'code_challenge_method' => 's256',
]);
return redirect($url);
}
public function handleProviderCallback(Request $request)
{
$this->validateState($request);
$codeVerifier = session('vk_code_verifier');
$tokenData = $this->exchangeCodeForTokens($request, $codeVerifier);
if (isset($tokenData->error)) {
return response()->json(['error' => $tokenData->error_description], 400);
}
return $this->storeTokenData($tokenData, $request);
}
public function refresh()
{
$token = DB::table('vk_tokens')->latest()->first();
$newTokenData = $this->refreshToken($token->refresh_token, bin2hex(random_bytes(16)), $token->device_id);
return $this->storeRefreshTokenData($newTokenData['data']);
}
public function logout()
{
session()->forget('vk_state');
session()->forget('vk_code_verifier');
return redirect('/'); // Перенаправление на главную страницу
}
private function exchangeCodeForTokens(Request $request, $codeVerifier)
{
return Http::asForm()->post('https://id.vk.com/oauth2/auth', [
'grant_type' => 'authorization_code',
'code_verifier' => $codeVerifier,
'redirect_uri' => env('VK_REDIRECT_URI_AFTER_AUTH'),
'code' => $request->code,
'client_id' => env('VK_APP_ID'),
'device_id' => $request->device_id,
'state' => $request->state,
'scope' => 'photos wall',
])->object();
}
private function refreshToken($refresh_token, $state, $device_id)
{
$response = Http::asForm()->post('https://id.vk.com/oauth2/auth', [
'grant_type' => 'refresh_token',
'refresh_token' => $refresh_token,
'client_id' => env('VK_APP_ID'),
'device_id' => $device_id,
'state' => $state,
'scope' => 'photos wall',
]);
if ($response->failed()) {
// Обработка ошибок
return [
'success' => false,
'error' => $response->json(), // Возвращаем детали ошибки
];
}
return [
'success' => true,
'data' => $response->object(), // Успешный ответ
];
}
private function storeTokenData($tokenData, Request $request)
{
try {
DB::table('vk_tokens')->updateOrInsert(
['user_id' => $tokenData->user_id],
[
'user_id' => $tokenData->user_id,
'access_token' => $tokenData->access_token,
'refresh_token' => $tokenData->refresh_token,
'id_token' => $tokenData->id_token,
'state' => $tokenData->state,
'scope' => $tokenData->scope,
'device_id' => $request->device_id,
'token_expire' => Carbon::createFromTimestamp(Carbon::now()->timestamp + $tokenData->expires_in),
'updated_at' => now(),
]
);
} catch (\Exception $e) {
Log::error('Ошибка при обновлении или вставке токена: ' . $e->getMessage());
return response()->json([
'success' => false,
'message' => 'Произошла ошибка при обновлении или создания токена.',
'error_message' => $e->getMessage()
], 500);
}
return redirect('/'); // Перенаправление после успешной авторизации
}
private function storeRefreshTokenData($tokenData)
{
try {
// Обновляем запись и получаем количество затронутых строк
$updatedRows = DB::table('vk_tokens')->where('user_id', $tokenData->user_id)->update(
[
'access_token' => $tokenData->access_token,
'refresh_token' => $tokenData->refresh_token,
'state' => $tokenData->state,
'scope' => $tokenData->scope,
'token_expire' => Carbon::createFromTimestamp(Carbon::now()->timestamp + $tokenData->expires_in),
'updated_at' => now(),
]
);
// Если обновление прошло успешно, получаем обновленную запись
if ($updatedRows > 0) {
return DB::table('vk_tokens')->where('user_id', $tokenData->user_id)->first();
}
// Если запись не найдена, можно вернуть null или выбросить исключение
return response()->json([
'success' => false,
'message' => 'Запись не найдена для обновления.',
], 404);
} catch (\Exception $e) {
Log::error('Ошибка при обновлении токена: ' . $e->getMessage());
return response()->json([
'success' => false,
'message' => 'Произошла ошибка при обновлении токена.',
'error_message' => $e->getMessage()
], 500);
}
}
private function generateCodeVerifier($length = 128)
{
return bin2hex(random_bytes($length / 2));
}
private function generateCodeChallenge($code_verifier)
{
return rtrim(strtr(base64_encode(hash('sha256', $code_verifier, true)), '+/', '-_'), '=');
}
private function validateState(Request $request)
{
if ($request->input('state') !== session('vk_state')) {
abort(403, 'Invalid state');
}
}
private function isTokenValid($token)
{
if (Carbon::now() > $token->token_expire) {
return false;
}
return true;
}
}
+64 -5
View File
@@ -10,9 +10,12 @@ class VkService
{
protected VkWallService $wallService;
protected VkAlbumService $albumService;
public function __construct(VKApiClient $vk) {
protected int $public_id;
public function __construct() {
$vk = new VKApiClient();
$this->wallService = new VkWallService($vk);
$this->albumService = new VkAlbumService($vk);
$this->public_id = env('PUBLIC_ID');
}
public function getPosts(int $count = 10)
@@ -20,14 +23,70 @@ class VkService
return $this->wallService->getPosts($count);
}
public function createPost(string $message, int $from_group = 1)
public function getPostById(int $id)
{
return $this->wallService->createPost($message, $from_group);
return $this->wallService->getPostById($id);
}
public function createAlbum(string $title)
public function createPost(string $title, string $message, array $images = [], int $publish_date = null)
{
return $this->albumService->createAlbum($title);
$from_group = 1;
$album_attachment = '';
if ($images !== []) {
$album = $this->createAlbum($title, $images);
$album_attachment = $this->createAlbumAttachmentParam($album['id']);
}
return $this->wallService->createPost($message, $from_group, $album_attachment, $publish_date);
}
public function updatePost(int $id, string $title, string $message, array $images = [], int $publish_date = null)
{
$from_group = 1;
$vk_post = $this->wallService->getPostById($id);
$album_attachment = '';
if ($vk_post['attachments']) {
if ($this->getAlbumAttachment($vk_post['attachments'])) {
$album = $this->getAlbumAttachment($vk_post['attachments']);
$this->albumService->deleteAlbum($album['album']['id'], $this->public_id);
}
}
if ($images !== []) {
$album = $this->createAlbum($title, $images);
$album_attachment = $this->createAlbumAttachmentParam($album['id']);
}
return $this->wallService->updatePost($id, $message, $from_group, $album_attachment, $publish_date);
}
public function createAlbum(string $title, $images)
{
$album = $this->albumService->createAlbum($title);
$uploadServer = $this->albumService->getServerForUploadImages($album['id'], env('PUBLIC_ID'));
foreach (array_chunk($images, 4) as $images_slice) {
$images_data = $this->albumService->uploadImagesToUploadServer($uploadServer['upload_url'], $images_slice);
$this->albumService->saveImagesToUploadServer(
$images_data['aid'],
$images_data['server'],
$images_data['photos_list'],
$images_data['hash']
);
}
return $album;
}
private function createAlbumAttachmentParam(int $attachmentId)
{
return $this->wallService->generateAttachmentsParams('album', $attachmentId);
}
private function getAlbumAttachment(array $attachments)
{
$data = collect($attachments);
$filteredAttachment = $data->filter(function($attachment) {
return $attachment['type'] === 'album';
});
return (isset($filteredAttachment[0]) ? $filteredAttachment[0] : null);
}
}
+92 -7
View File
@@ -2,6 +2,10 @@
namespace App\Services\VK\Wall;
use App\Services\VK\VkAuthService;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use VK\Client\VKApiClient;
@@ -19,6 +23,8 @@ class VkWallService
$this->serviceToken = env('SERVICE_ACCESS_VK_KEY');
$this->publicId = env('PUBLIC_ID');
$this->publicDomain = env('PUBLIC_DOMAIN');
$this->vkAuthService = new VkAuthService();
}
public function getPosts(int $count)
@@ -30,15 +36,40 @@ class VkWallService
));
}
public function createPost(string $message, int $from_group, string $attachments = '')
public function getPostById(int $id)
{
$post = $this->vk->wall()->getById($this->serviceToken, array(
'posts' => '-'. $this->publicId . '_' . $id,
));
return $post[0];
}
public function createPost(string $message, int $from_group, string $attachments = '', int $publish_date)
{
$params = [
'owner_id' => '-' . $this->publicId,
'from_group' => $from_group,
'message' => $message,
'attachments' => $attachments,
'access_token' => $this->wallToken,
'publish_date' => $publish_date,
'v' => '5.131',
];
try {
return $this->vk->wall()->post($this->wallToken, array(
'owner_id' => '-' . $this->publicId,
'from_group' => $from_group,
'message' => $message,
'attachments' => $attachments
));
$response = Http::asForm()->post('https://api.vk.com/method/wall.post', $params);
if ($response->successful() && isset($response['response'])) {
return [
'success' => true,
'post_id' => $response['response']['post_id'],
];
} else {
throw new \Exception('Ошибка API: ' . json_encode($response->json()));
}
} catch (\Exception $e) {
Log::error('Ошибка при создании поста: ' . $e->getMessage());
return [
@@ -47,4 +78,58 @@ class VkWallService
];
}
}
public function updatePost(int $post_id, string $message = '', int $from_group = 1, string $attachments = '', int $publish_date)
{
if (empty($message) && empty($attachments)) {
return [
'success' => false,
'message' => 'Необходимо указать либо сообщение, либо вложения.',
];
}
$params = [
'owner_id' => '-' . $this->publicId,
'post_id' => $post_id,
'message' => $message,
'attachments' => $attachments,
'access_token' => $this->wallToken,
'v' => '5.131',
];
try {
return $this->vk->wall()->edit(
$this->vkAuthService->getToken()->access_token,
array(
'owner_id' => '-' . $this->publicId,
'post_id' => $post_id,
'message' => $message,
'attachments' => $attachments,
'publish_date' => $publish_date,
),
);
} catch (\Exception $e) {
Log::error('Ошибка при обновлении новости SDK: ' . $e->getMessage());
return [
'success' => false,
'message' => 'Не удалось обновить новость SDK: ' . $e->getMessage(),
];
}
}
public function generateAttachmentsParams(string $attachmentType, int $attachmentId)
{
$pubic_id = env('PUBLIC_ID');
switch ($attachmentType) {
case 'album': {
return "album-{$pubic_id}_{$attachmentId}";
}
case 'doc': {
}
}
}
}
+2 -2
View File
@@ -25,10 +25,10 @@
"symfony/filesystem": "^6.3",
"tightenco/ziggy": "^1.0",
"vkcom/vk-php-sdk": "^5.131",
"xvladqt/faker-lorem-flickr": "^1.0"
"xvladqt/faker-lorem-flickr": "^1.0",
"ext-curl": "*"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.13",
"fakerphp/faker": "^1.9.1",
"laravel/breeze": "^1.25",
"laravel/pint": "^1.0",
Generated
+3 -155
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8ae3153fd7e3bc311dcec5d0a14ade8d",
"content-hash": "6cfaed46970b24b641b3caedbebbdbe4",
"packages": [
{
"name": "anourvalar/eloquent-serialize",
@@ -9666,90 +9666,6 @@
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
"version": "v3.14.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "16a13cc5221aee90ae20aa59083ced2211e714eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/16a13cc5221aee90ae20aa59083ced2211e714eb",
"reference": "16a13cc5221aee90ae20aa59083ced2211e714eb",
"shasum": ""
},
"require": {
"illuminate/routing": "^9|^10|^11",
"illuminate/session": "^9|^10|^11",
"illuminate/support": "^9|^10|^11",
"maximebf/debugbar": "~1.23.0",
"php": "^8.0",
"symfony/finder": "^6|^7"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench-dusk": "^5|^6|^7|^8|^9",
"phpunit/phpunit": "^9.6|^10.5",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.14-dev"
},
"laravel": {
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
}
}
},
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Barryvdh\\Debugbar\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "PHP Debugbar integration for Laravel",
"keywords": [
"debug",
"debugbar",
"laravel",
"profiler",
"webprofiler"
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.0"
},
"funding": [
{
"url": "https://fruitcake.nl",
"type": "custom"
},
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
"time": "2024-09-20T12:16:37+00:00"
},
{
"name": "filp/whoops",
"version": "2.15.4",
@@ -10063,74 +9979,6 @@
},
"time": "2024-09-11T20:14:29+00:00"
},
{
"name": "maximebf/debugbar",
"version": "v1.23.2",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
"reference": "689720d724c771ac4add859056744b7b3f2406da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/689720d724c771ac4add859056744b7b3f2406da",
"reference": "689720d724c771ac4add859056744b7b3f2406da",
"shasum": ""
},
"require": {
"php": "^7.2|^8",
"psr/log": "^1|^2|^3",
"symfony/var-dumper": "^4|^5|^6|^7"
},
"require-dev": {
"dbrekelmans/bdi": "^1",
"phpunit/phpunit": "^8|^9",
"symfony/panther": "^1|^2.1",
"twig/twig": "^1.38|^2.7|^3.0"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
"monolog/monolog": "Log using Monolog",
"predis/predis": "Redis storage"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.23-dev"
}
},
"autoload": {
"psr-4": {
"DebugBar\\": "src/DebugBar/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maxime Bouroumeau-Fuseau",
"email": "maxime.bouroumeau@gmail.com",
"homepage": "http://maximebf.com"
},
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Debug bar in the browser for php application",
"homepage": "https://github.com/maximebf/php-debugbar",
"keywords": [
"debug",
"debugbar"
],
"support": {
"issues": "https://github.com/maximebf/php-debugbar/issues",
"source": "https://github.com/maximebf/php-debugbar/tree/v1.23.2"
},
"time": "2024-09-16T11:23:09+00:00"
},
{
"name": "mockery/mockery",
"version": "1.6.12",
@@ -11950,12 +11798,12 @@
],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": [],
"stability-flags": {},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.1"
},
"platform-dev": [],
"platform-dev": {},
"plugin-api-version": "2.6.0"
}
+6 -5
View File
@@ -24,16 +24,17 @@ return [
'intercept_gate' => 'before', // after
],
'panel_user' => [
'enabled' => false,
'name' => 'panel_user',
],
'dashboard_user' => [
'enabled' => true,
'name' => 'dashboard_user',
],
'invited_user' => [
'enabled' => true,
'name' => 'invited_user',
],
'permission_prefixes' => [
'resource' => [
'view',
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('vk_tokens', function (Blueprint $table) {
$table->id(); // Автоинкрементный ID
$table->string('user_id')->unique(); // ID пользователя VK
$table->text('access_token'); // Access token
$table->text('refresh_token'); // Refresh token
$table->text('id_token')->nullable(); // ID token (если требуется)
$table->string('state');
$table->string('scope');
$table->text('device_id');
$table->timestamp('token_expire');
$table->timestamps(); // Поля created_at и updated_at
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('vk_tokens');
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts_vk_posts', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('post_id'); // Поле post_id
$table->unsignedBigInteger('vk_post_id'); // Поле vk_post_id
$table->dateTime('unchange_time_after');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts_vk_posts');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('page_reference_lists', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug');
$table->text('content');
$table->boolean('is_active')->default(true);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('page_reference_lists');
}
};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{m as g,o as i,c as l,b as t,t as n,h as m,v as h,F as d,d as c,l as u}from"./app-lT3z3TR3.js";import{_ as f}from"./_plugin-vue_export-helper-DlAUqK2U.js";const p={name:"AdditionalEducationalChoiceBlock",data(){return{additionalEducationalPrograms:null,loading:!0,activeProgramPage:null,isActiveProgramPage:!1}},methods:{getPrograms(){return g.get(route("client.widget.additional.program.index")).then(o=>{this.additionalEducationalPrograms=o.data,this.loading=!1}).catch(o=>{console.error("Ошибка:",o),this.loading=!1})},isAdditionalEducationalRoute(){const o=this.getSlugFromUrl(this.$page.props.ziggy.location);return this.$page.props.ziggy.location===route("client.additionalEducation.show",o)},getSlugFromUrl(o){const e=o.split("/");return e[e.length-1]},findItemBySlug(){const o=this.getSlugFromUrl(this.$page.props.ziggy.location);return this.additionalEducationalPrograms.data.find(e=>e.slug===o)||null}},mounted(){this.getPrograms().then(()=>{this.isAdditionalEducationalRoute()&&(this.isActiveProgramPage=!0,this.activeProgramPage=this.findItemBySlug().title)})},props:{block:{type:Object},error:{type:Object}}},b={key:0,class:"mt-5 space-y-3 flex flex-col animate-pulse"},x={key:1,class:"mb-4 sm:mb-8"},y=["for"],_={class:"relative"},v=["name","disabled"],k=["value"],P={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},w={class:"flex items-center mt-2 justify-between flex-wrap"},E={key:0,class:"text-sm text-gray-500",id:"hs-input-helper-text"},B={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function A(o,e,s,S,r,F){return r.loading?(i(),l("ul",b,e[1]||(e[1]=[t("li",{class:"w-full h-4 bg-gray-200 rounded-full"},null,-1),t("li",{class:"w-full h-8 bg-gray-200 rounded-full"},null,-1)]))):(i(),l("div",x,[t("label",{for:s.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},n(s.block.data.title_field),9,y),t("div",_,[m(t("select",{name:s.block.data.name_field,disabled:r.isActiveProgramPage,"onUpdate:modelValue":e[0]||(e[0]=a=>r.activeProgramPage=a),class:"py-3 px-4 pe-9 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none"},[e[2]||(e[2]=t("option",{selected:""},"Open this select menu",-1)),(i(!0),l(d,null,c(r.additionalEducationalPrograms.data,a=>(i(),l("option",{value:a.title},n(a.title),9,k))),256))],8,v),[[h,r.activeProgramPage]]),s.error?(i(),l("div",P,e[3]||(e[3]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):u("",!0)]),t("div",w,[s.error?u("",!0):(i(),l("p",E,n(s.block.data.description),1))]),(i(!0),l(d,null,c(s.error,a=>(i(),l("p",B,n(a),1))),256))]))}const C=f(p,[["render",A]]);export{C as default};
@@ -1 +1 @@
import{_ as r}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,x as s}from"./app-lWrE2aWG.js";const n={name:"AdminIndexHeader"},a={class:"px-4 py-4 gap-3 flex justify-center md:items-center border-gray-200"};function c(e,d,p,i,m,_){return t(),o("div",a,[s(e.$slots,"default")])}const x=r(n,[["render",c]]);export{x as A};
import{_ as r}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,x as s}from"./app-lT3z3TR3.js";const n={name:"AdminIndexHeader"},a={class:"px-4 py-4 gap-3 flex justify-center md:items-center border-gray-200"};function c(e,d,p,i,m,_){return t(),o("div",a,[s(e.$slots,"default")])}const x=r(n,[["render",c]]);export{x as A};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{i as u,Z as _,r as e,c as b,a,w as P,b as t,F as f,o as v,t as h}from"./app-lT3z3TR3.js";import{F as x}from"./v3-B5UP5GZw.js";import{C as y}from"./SearchModal-YI3bdWA9.js";import{P as B,a as w,b as k,c as N}from"./PageNavigateLinks-DI4_-k66.js";import{P as S}from"./PageSubSectionLinks-CCuKIYQx.js";import{M as L}from"./MainPageNavbar-BfM50q-7.js";import{_ as F}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./PageSkeleton-BoZKiMn9.js";const C={name:"Page",data(){return{headerNavs:this.page.data.content.filter(n=>n.type==="heading").map(n=>({id:n.data.id,text:n.data.content}))}},props:{navigation:{type:Object},page:{type:Object},subSectionPages:{type:Object},breadcrumbs:{type:Object}},components:{MainPageNavBar:L,PageSubSectionLinks:S,PageNavigateLinks:B,PageTitle:w,PageBreadcrumbs:k,PageBuilder:N,ClientFooterDown:y,Link:u,FsLightbox:x,Head:_},methods:{},computed:{}},j={class:"flex flex-col h-screen justify-between"},D={class:"relative mx-auto mb-auto mt-[67px] max-w-screen-xl w-full px-4 py-10 md:flex md:flex-row md:py-10"},M={class:"w-full min-w-0 mt-1 max-w-6xl px-1 md:px-6",style:{}},O={class:"space-y-5 md:space-y-5"},T={id:"page-area",class:"space-y-4"};function H(n,o,s,V,E,Y){const i=e("Head"),c=e("MainPageNavBar"),r=e("PageSubSectionLinks"),l=e("PageNavigateLinks"),d=e("PageBreadcrumbs"),m=e("PageTitle"),p=e("PageBuilder"),g=e("ClientFooterDown");return v(),b(f,null,[a(i,null,{default:P(()=>[t("title",null,h(s.page.data.title),1),o[0]||(o[0]=t("meta",{name:"description",content:"Your page description"},null,-1))]),_:1}),t("div",j,[a(c,{class:"border-b",sections:n.$page.props.navigation},null,8,["sections"]),t("div",D,[a(r,{"sub-section-pages":s.subSectionPages,"current-section":s.page.data.section},null,8,["sub-section-pages","current-section"]),a(l,{"header-navs":this.headerNavs},null,8,["header-navs"]),t("div",M,[t("div",O,[a(d,{breadcrumbs:s.breadcrumbs,"page-title":s.page.data.title},null,8,["breadcrumbs","page-title"]),a(m,{header:s.page.data.title},null,8,["header"]),t("div",T,[a(p,{blocks:this.page.data.content},null,8,["blocks"])])])])]),a(g)])],64)}const Q=F(C,[["render",H]]);export{Q as default};
@@ -1 +0,0 @@
import{i as u,Z as _,r as e,c as b,a,w as P,b as t,F as f,o as v,t as h}from"./app-lWrE2aWG.js";import{F as x}from"./v3-CDJmn87G.js";import{C as y}from"./SearchModal-CGHtjMJb.js";import{P as B,a as w,b as k,c as N}from"./PageNavigateLinks-C0dfJuyt.js";import{P as S}from"./PageSubSectionLinks-DpXoUZcw.js";import{M as L}from"./MainPageNavbar-BsdceJwT.js";import{_ as F}from"./_plugin-vue_export-helper-DlAUqK2U.js";const C={name:"Page",data(){return{headerNavs:this.page.data.content.filter(n=>n.type==="heading").map(n=>({id:n.data.id,text:n.data.content}))}},props:{navigation:{type:Object},page:{type:Object},subSectionPages:{type:Object},breadcrumbs:{type:Object}},components:{MainPageNavBar:L,PageSubSectionLinks:S,PageNavigateLinks:B,PageTitle:w,PageBreadcrumbs:k,PageBuilder:N,ClientFooterDown:y,Link:u,FsLightbox:x,Head:_},methods:{},computed:{}},j={class:"flex flex-col h-screen justify-between"},D={class:"relative mx-auto mb-auto mt-[67px] max-w-screen-xl w-full px-4 py-10 md:flex md:flex-row md:py-10"},M={class:"w-full min-w-0 mt-1 max-w-6xl px-1 md:px-6",style:{}},O={class:"space-y-5 md:space-y-5"},T={id:"page-area",class:"space-y-4"};function H(n,o,s,V,E,Y){const i=e("Head"),c=e("MainPageNavBar"),r=e("PageSubSectionLinks"),l=e("PageNavigateLinks"),d=e("PageBreadcrumbs"),m=e("PageTitle"),p=e("PageBuilder"),g=e("ClientFooterDown");return v(),b(f,null,[a(i,null,{default:P(()=>[t("title",null,h(s.page.data.title),1),o[0]||(o[0]=t("meta",{name:"description",content:"Your page description"},null,-1))]),_:1}),t("div",j,[a(c,{class:"border-b",sections:n.$page.props.navigation},null,8,["sections"]),t("div",D,[a(r,{"sub-section-pages":s.subSectionPages,"current-section":s.page.data.section},null,8,["sub-section-pages","current-section"]),a(l,{"header-navs":this.headerNavs},null,8,["header-navs"]),t("div",M,[t("div",O,[a(d,{breadcrumbs:s.breadcrumbs,"page-title":s.page.data.title},null,8,["breadcrumbs","page-title"]),a(m,{header:s.page.data.title},null,8,["header"]),t("div",T,[a(p,{blocks:this.page.data.content},null,8,["blocks"])])])])]),a(g)])],64)}const K=F(C,[["render",H]]);export{K as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as s,b as e,F as c,d as i,t as n,n as p}from"./app-lWrE2aWG.js";const u={name:"ClientEventSelectDate",data(){return{date:this.currentDate}},methods:{filter(o){this.date=o,this.$inertia.reload({data:{date:o}})}},props:{dates:{type:Array},currentDate:{type:String}}},f={class:"relative rounded-xl overflow-auto"},h={class:"max-w-4xl mx-auto bg-white min-w-0"},m={class:"overflow-x-scroll flex no-scrollbar"},v={class:"flex items-center gap-x-3 whitespace-nowrap"},y={class:""},g={class:"flex flex-col items-center"},b={class:"text-[12px] text-gray-500"},w={class:"flex"},C={class:"flex"},k={class:"flex flex-col items-center"},S=["onClick"],B={class:"text-[12px] text-gray-500"};function E(o,$,l,F,d,_){return t(),s("div",f,[e("div",h,[e("div",m,[e("div",v,[(t(!0),s(c,null,i(l.dates,r=>(t(),s("div",y,[e("div",g,[e("span",b,n(r.month),1)]),e("div",w,[e("div",C,[(t(!0),s(c,null,i(r.events,a=>(t(),s("div",k,[e("button",{class:p([d.date==a.date?"active-button":"","min-h-[38px] duration-300 ease-linear min-w-[38px] flex justify-center items-center text-gray-800 hover:bg-gray-100 py-2 px-3 text-sm rounded-lg focus:outline-none focus:bg-gray-100 disabled:opacity-50 disabled:pointer-events-none"]),onClick:j=>_.filter(a.date),type:"button"},n(a.day),11,S),e("span",B,n(a.dayOfWeek),1)]))),256))])])]))),256))])])])])}const D=x(u,[["render",E],["__scopeId","data-v-6d0eb2ca"]]);export{D as C};
import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as s,b as e,F as c,d as i,t as n,n as p}from"./app-lT3z3TR3.js";const u={name:"ClientEventSelectDate",data(){return{date:this.currentDate}},methods:{filter(o){this.date=o,this.$inertia.reload({data:{date:o}})}},props:{dates:{type:Array},currentDate:{type:String}}},f={class:"relative rounded-xl overflow-auto"},h={class:"max-w-4xl mx-auto bg-white min-w-0"},m={class:"overflow-x-scroll flex no-scrollbar"},v={class:"flex items-center gap-x-3 whitespace-nowrap"},y={class:""},g={class:"flex flex-col items-center"},b={class:"text-[12px] text-gray-500"},w={class:"flex"},C={class:"flex"},k={class:"flex flex-col items-center"},S=["onClick"],B={class:"text-[12px] text-gray-500"};function E(o,$,l,F,d,_){return t(),s("div",f,[e("div",h,[e("div",m,[e("div",v,[(t(!0),s(c,null,i(l.dates,r=>(t(),s("div",y,[e("div",g,[e("span",b,n(r.month),1)]),e("div",w,[e("div",C,[(t(!0),s(c,null,i(r.events,a=>(t(),s("div",k,[e("button",{class:p([d.date==a.date?"active-button":"","min-h-[38px] duration-300 ease-linear min-w-[38px] flex justify-center items-center text-gray-800 hover:bg-gray-100 py-2 px-3 text-sm rounded-lg focus:outline-none focus:bg-gray-100 disabled:opacity-50 disabled:pointer-events-none"]),onClick:j=>_.filter(a.date),type:"button"},n(a.day),11,S),e("span",B,n(a.dayOfWeek),1)]))),256))])])]))),256))])])])])}const D=x(u,[["render",E],["__scopeId","data-v-6d0eb2ca"]]);export{D as C};
@@ -1 +1 @@
import{F as g}from"./v3-CDJmn87G.js";import{_ as m}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as l,c as i,b as s,F as c,d as f,n as x,t as p,a as b}from"./app-lWrE2aWG.js";const _={name:"ClientImageSlider",components:{FsLightbox:g},data(){return{currentIndex:0,items:this.block.data.url,toggler:!1,domainPath:null,slide:null}},props:{block:{type:Array}},methods:{prevSlide(){this.currentIndex===0?this.currentIndex=this.items.length-1:this.currentIndex--},nextSlide(){this.currentIndex===this.items.length-1?this.currentIndex=0:this.currentIndex++},openLightboxOnSlide:function(a){this.slide=a,this.toggler=!this.toggler}},mounted(){this.domainPath=window.location.origin}},v={class:"relative"},k={class:"flex"},I=["onClick","src"],S={class:"mt-3 text-sm text-center text-gray-500 dark:text-neutral-500"};function y(a,n,d,C,e,o){const u=h("FsLightbox");return l(),i(c,null,[s("div",v,[s("div",k,[(l(!0),i(c,null,f(e.items,(t,r)=>(l(),i("div",{key:r,class:x(["w-full",{block:e.currentIndex===r,hidden:e.currentIndex!==r}])},[s("img",{onClick:w=>o.openLightboxOnSlide(r+1),src:"/storage/"+t,class:"mx-auto max-h-[500px] object-cover rounded-md hover:opacity-95 hover:duration-200 transition"},null,8,I)],2))),128))]),s("button",{class:"absolute top-1/2 left-4 transform -translate-y-1/2 bg-white rounded-full p-2 shadow-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:n[0]||(n[0]=(...t)=>o.prevSlide&&o.prevSlide(...t))}," "),s("button",{class:"absolute top-1/2 right-4 transform -translate-y-1/2 bg-white rounded-full p-2 shadow-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:n[1]||(n[1]=(...t)=>o.nextSlide&&o.nextSlide(...t))}," ")]),s("figcaption",S,p(d.block.data.alt),1),b(u,{class:"",slide:e.slide,toggler:e.toggler,sources:e.items.map(t=>e.domainPath+"/storage/"+t)},null,8,["slide","toggler","sources"])],64)}const P=m(_,[["render",y]]);export{P as default};
import{F as g}from"./v3-B5UP5GZw.js";import{_ as m}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as h,o as l,c as i,b as s,F as c,d as f,n as x,t as p,a as b}from"./app-lT3z3TR3.js";const _={name:"ClientImageSlider",components:{FsLightbox:g},data(){return{currentIndex:0,items:this.block.data.url,toggler:!1,domainPath:null,slide:null}},props:{block:{type:Array}},methods:{prevSlide(){this.currentIndex===0?this.currentIndex=this.items.length-1:this.currentIndex--},nextSlide(){this.currentIndex===this.items.length-1?this.currentIndex=0:this.currentIndex++},openLightboxOnSlide:function(a){this.slide=a,this.toggler=!this.toggler}},mounted(){this.domainPath=window.location.origin}},v={class:"relative"},k={class:"flex"},I=["onClick","src"],S={class:"mt-3 text-sm text-center text-gray-500 dark:text-neutral-500"};function y(a,n,d,C,e,o){const u=h("FsLightbox");return l(),i(c,null,[s("div",v,[s("div",k,[(l(!0),i(c,null,f(e.items,(t,r)=>(l(),i("div",{key:r,class:x(["w-full",{block:e.currentIndex===r,hidden:e.currentIndex!==r}])},[s("img",{onClick:w=>o.openLightboxOnSlide(r+1),src:"/storage/"+t,class:"mx-auto max-h-[500px] object-cover rounded-md hover:opacity-95 hover:duration-200 transition"},null,8,I)],2))),128))]),s("button",{class:"absolute top-1/2 left-4 transform -translate-y-1/2 bg-white rounded-full p-2 shadow-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:n[0]||(n[0]=(...t)=>o.prevSlide&&o.prevSlide(...t))}," "),s("button",{class:"absolute top-1/2 right-4 transform -translate-y-1/2 bg-white rounded-full p-2 shadow-md hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:n[1]||(n[1]=(...t)=>o.nextSlide&&o.nextSlide(...t))}," ")]),s("figcaption",S,p(d.block.data.alt),1),b(u,{class:"",slide:e.slide,toggler:e.toggler,sources:e.items.map(t=>e.domainPath+"/storage/"+t)},null,8,["slide","toggler","sources"])],64)}const P=m(_,[["render",y]]);export{P as default};
@@ -1 +1 @@
import{_ as l}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,b as t,t as a,f as c}from"./app-lWrE2aWG.js";const d={name:"ClientPost",data(){return{}},methods:{textLimit(s,o){if(s.length>o){let e;return e=s.substring(0,o),e+"..."}return s}},props:{post:{type:Array}}},g={class:"group cursor-pointer"},h={class:"overflow-hidden rounded-md max-h-[250px] bg-gray-100 transition-all hover:scale-105 dark:bg-gray-800"},_=["href"],u=["src"],m={class:""},p={key:0,class:"flex gap-3"},x=["href"],f={class:"inline-block text-xs font-medium tracking-wider uppercase mt-5 text-blue-600"},y={key:1,class:"flex gap-3"},v={class:"text-lg font-semibold leading-snug tracking-tight mt-2 dark:text-white"},k=["href"],w={class:"duration-200 group-hover:text-gray-500"},b={class:""},C={class:"mt-2 line-clamp-3 text-sm text-gray-500 dark:text-gray-400"},B=["href"],L={class:"mt-3 flex items-center space-x-3 text-gray-500 dark:text-gray-400"},z={class:"flex items-center gap-3"},N={key:0,class:"truncate text-sm"},P={class:"truncate text-sm"};function T(s,o,e,V,j,r){return i(),n("div",g,[t("div",h,[t("a",{class:"relative block aspect-square",href:s.route("client.post.show",e.post.slug)},[t("img",{alt:"Thumbnail",loading:"lazy",decoding:"async","data-nimg":"fill",class:"object-cover transition-all",style:{position:"absolute",height:"100%",width:"100%",inset:"0px",color:"transparent"},sizes:"(max-width: 768px) 30vw, 33vw",src:e.post.preview?"/storage/"+e.post.preview:"/img/thumbnail-1.png"},null,8,u)],8,_)]),t("div",m,[t("div",null,[e.post.category?(i(),n("div",p,[t("a",{href:s.route("client.post.index",{"category[]":e.post.category.slug})},[t("span",f,a(e.post.category?e.post.category.title:"Новости"),1)],8,x)])):(i(),n("div",y,o[0]||(o[0]=[t("span",null,[t("span",{class:"inline-block text-xs font-medium tracking-wider uppercase mt-5 text-blue-600"}," Новости ")],-1)]))),t("h2",v,[t("a",{href:s.route("client.post.show",e.post.slug)},[t("span",w,a(e.post.title),1)],8,k)]),t("div",b,[t("p",C,[t("a",{href:s.route("client.post.show",e.post.slug)},a(e.post.preview_text),9,B)])]),t("div",L,[t("span",null,[t("div",z,[e.post?(i(),n("span",N,a(r.textLimit(e.post.authors[0],20)),1)):c("",!0)])]),o[1]||(o[1]=t("span",{class:"text-xs text-gray-300 dark:text-gray-600"},"•",-1)),t("span",P,a(e.post.created_post),1)])])])])}const D=l(d,[["render",T]]);export{D as C};
import{_ as l}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as n,b as t,t as a,l as c}from"./app-lT3z3TR3.js";const d={name:"ClientPost",data(){return{}},methods:{textLimit(s,o){if(s.length>o){let e;return e=s.substring(0,o),e+"..."}return s}},props:{post:{type:Array}}},g={class:"group cursor-pointer"},h={class:"overflow-hidden rounded-md max-h-[250px] bg-gray-100 transition-all hover:scale-105 dark:bg-gray-800"},_=["href"],u=["src"],m={class:""},p={key:0,class:"flex gap-3"},x=["href"],f={class:"inline-block text-xs font-medium tracking-wider uppercase mt-5 text-blue-600"},y={key:1,class:"flex gap-3"},v={class:"text-lg font-semibold leading-snug tracking-tight mt-2 dark:text-white"},k=["href"],w={class:"duration-200 group-hover:text-gray-500"},b={class:""},C={class:"mt-2 line-clamp-3 text-sm text-gray-500 dark:text-gray-400"},B=["href"],L={class:"mt-3 flex items-center space-x-3 text-gray-500 dark:text-gray-400"},z={class:"flex items-center gap-3"},N={key:0,class:"truncate text-sm"},P={class:"truncate text-sm"};function T(s,o,e,V,j,r){return i(),n("div",g,[t("div",h,[t("a",{class:"relative block aspect-square",href:s.route("client.post.show",e.post.slug)},[t("img",{alt:"Thumbnail",loading:"lazy",decoding:"async","data-nimg":"fill",class:"object-cover transition-all",style:{position:"absolute",height:"100%",width:"100%",inset:"0px",color:"transparent"},sizes:"(max-width: 768px) 30vw, 33vw",src:e.post.preview?"/storage/"+e.post.preview:"/img/thumbnail-1.png"},null,8,u)],8,_)]),t("div",m,[t("div",null,[e.post.category?(i(),n("div",p,[t("a",{href:s.route("client.post.index",{"category[]":e.post.category.slug})},[t("span",f,a(e.post.category?e.post.category.title:"Новости"),1)],8,x)])):(i(),n("div",y,o[0]||(o[0]=[t("span",null,[t("span",{class:"inline-block text-xs font-medium tracking-wider uppercase mt-5 text-blue-600"}," Новости ")],-1)]))),t("h2",v,[t("a",{href:s.route("client.post.show",e.post.slug)},[t("span",w,a(e.post.title),1)],8,k)]),t("div",b,[t("p",C,[t("a",{href:s.route("client.post.show",e.post.slug)},a(e.post.preview_text),9,B)])]),t("div",L,[t("span",null,[t("div",z,[e.post?(i(),n("span",N,a(r.textLimit(e.post.authors[0],20)),1)):c("",!0)])]),o[1]||(o[1]=t("span",{class:"text-xs text-gray-300 dark:text-gray-600"},"•",-1)),t("span",P,a(e.post.created_post),1)])])])])}const D=l(d,[["render",T]]);export{D as C};
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
@@ -1 +1 @@
import{_ as e}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o,c as t}from"./app-lWrE2aWG.js";const r={name:"ClientScrollTimeline"},c={id:"progress"};function n(s,a,i,_,l,p){return o(),t("div",c)}const m=e(r,[["render",n],["__scopeId","data-v-ffdaa09f"]]);export{m as C};
import{_ as e}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o,c as t}from"./app-lT3z3TR3.js";const r={name:"ClientScrollTimeline"},c={id:"progress"};function n(s,a,i,_,l,p){return o(),t("div",c)}const m=e(r,[["render",n],["__scopeId","data-v-ffdaa09f"]]);export{m as C};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as n}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as o,b as t,t as s,n as i,f as d,F as c,d as m}from"./app-lWrE2aWG.js";const u={name:"DateBlock",data(){return{}},methods:{},props:{block:{type:Object},error:{type:Object}}},b={class:"mb-4 sm:mb-8"},_=["for"],f={class:"relative"},k=["required","name","id","placeholder"],x={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},h={key:0,class:"mt-2 text-sm text-gray-500",id:"hs-input-helper-text"},y={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function g(p,a,e,v,w,B){return r(),o("div",b,[t("label",{for:e.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},s(e.block.data.title_field),9,_),t("div",f,[t("input",{required:e.block.data.rules.required,name:e.block.data.name_field,type:"date",id:e.block.data.name_field+"-id",class:i([e.error?"border-red-500 focus:border-red-500 focus:ring-red-500":"focus:border-blue-500 focus:ring-blue-500","py-3 px-4 block w-full border-gray-200 rounded-lg text-sm disabled:opacity-50 disabled:pointer-events-none"]),placeholder:e.block.data.title_field},null,10,k),e.error?(r(),o("div",x,a[0]||(a[0]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):d("",!0)]),e.error?d("",!0):(r(),o("p",h,s(e.block.data.description),1)),(r(!0),o(c,null,m(e.error,l=>(r(),o("p",y,s(l),1))),256))])}const C=n(u,[["render",g]]);export{C as default};
@@ -0,0 +1 @@
import{_ as n}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as o,b as t,t as s,n as i,l,F as c,d as m}from"./app-lT3z3TR3.js";const u={name:"DateBlock",data(){return{}},methods:{},props:{block:{type:Object},error:{type:Object}}},b={class:"mb-4 sm:mb-8"},_=["for"],f={class:"relative"},k=["required","name","id","placeholder"],x={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},h={key:0,class:"mt-2 text-sm text-gray-500",id:"hs-input-helper-text"},y={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function g(p,a,e,v,w,B){return r(),o("div",b,[t("label",{for:e.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},s(e.block.data.title_field),9,_),t("div",f,[t("input",{required:e.block.data.rules.required,name:e.block.data.name_field,type:"date",id:e.block.data.name_field+"-id",class:i([e.error?"border-red-500 focus:border-red-500 focus:ring-red-500":"focus:border-blue-500 focus:ring-blue-500","py-3 px-4 block w-full border-gray-200 rounded-lg text-sm disabled:opacity-50 disabled:pointer-events-none"]),placeholder:e.block.data.title_field},null,10,k),e.error?(r(),o("div",x,a[0]||(a[0]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):l("",!0)]),e.error?l("",!0):(r(),o("p",h,s(e.block.data.description),1)),(r(!0),o(c,null,m(e.error,d=>(r(),o("p",y,s(d),1))),256))])}const C=n(u,[["render",g]]);export{C as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{m as g,o as s,c as i,b as t,t as n,h as m,v as h,F as d,d as c,l as u}from"./app-lT3z3TR3.js";import{_ as f}from"./_plugin-vue_export-helper-DlAUqK2U.js";const p={name:"EducationalChoiceBlock",data(){return{additionalEducationalPrograms:null,loading:!0,activeProgramPage:null,isActiveProgramPage:!1}},methods:{getPrograms(){return g.get(route("client.widget.educational.program.index")).then(o=>{this.additionalEducationalPrograms=o.data,this.loading=!1}).catch(o=>{console.error("Ошибка:",o),this.loading=!1})},isAdditionalEducationalRoute(){const o=this.getSlugFromUrl(this.$page.props.ziggy.location);return this.$page.props.ziggy.location===route("client.program.show",o)},getSlugFromUrl(o){const e=o.split("/");return e[e.length-1]},findItemBySlug(){const o=this.getSlugFromUrl(this.$page.props.ziggy.location);return this.additionalEducationalPrograms.data.find(e=>e.slug===o)||null}},mounted(){this.getPrograms().then(()=>{this.isAdditionalEducationalRoute()&&(this.isActiveProgramPage=!0,this.activeProgramPage=this.findItemBySlug().name)})},props:{block:{type:Object},error:{type:Object}}},b={key:0,class:"mt-5 space-y-3 flex flex-col animate-pulse"},x={key:1,class:"mb-4 sm:mb-8"},y=["for"],_={class:"relative"},v=["name","disabled"],k=["value"],P={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},w={class:"flex items-center mt-2 justify-between flex-wrap"},E={key:0,class:"text-sm text-gray-500",id:"hs-input-helper-text"},B={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function S(o,e,l,A,r,F){return r.loading?(s(),i("ul",b,e[1]||(e[1]=[t("li",{class:"w-full h-4 bg-gray-200 rounded-full"},null,-1),t("li",{class:"w-full h-8 bg-gray-200 rounded-full"},null,-1)]))):(s(),i("div",x,[t("label",{for:l.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},n(l.block.data.title_field),9,y),t("div",_,[m(t("select",{name:l.block.data.name_field,disabled:r.isActiveProgramPage,"onUpdate:modelValue":e[0]||(e[0]=a=>r.activeProgramPage=a),class:"py-3 px-4 pe-9 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none"},[e[2]||(e[2]=t("option",{selected:""},"Open this select menu",-1)),(s(!0),i(d,null,c(r.additionalEducationalPrograms.data,a=>(s(),i("option",{value:a.name},n(a.name),9,k))),256))],8,v),[[h,r.activeProgramPage]]),l.error?(s(),i("div",P,e[3]||(e[3]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):u("",!0)]),t("div",w,[l.error?u("",!0):(s(),i("p",E,n(l.block.data.description),1))]),(s(!0),i(d,null,c(l.error,a=>(s(),i("p",B,n(a),1))),256))]))}const C=f(p,[["render",S]]);export{C as default};
@@ -1 +1 @@
import{_ as n}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as o,b as t,t as a,n as d,f as s,F as c,d as m}from"./app-lWrE2aWG.js";const u={name:"EmailBlock",data(){return{}},methods:{},props:{block:{type:Object},error:{type:Object}}},b={class:"mb-4 sm:mb-8"},_=["for"],f={class:"relative"},k=["required","name","min","max","id","placeholder"],x={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},h={key:0,class:"mt-2 text-sm text-gray-500",id:"hs-input-helper-text"},y={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function g(v,l,e,w,p,B){return r(),o("div",b,[t("label",{for:e.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},a(e.block.data.title_field),9,_),t("div",f,[t("input",{required:e.block.data.rules.required,name:e.block.data.name_field,min:e.block.data.rules.min,max:e.block.data.rules.max,type:"email",id:e.block.data.name_field+"-id",class:d([e.error?"border-red-500 focus:border-red-500 focus:ring-red-500":"focus:border-blue-500 focus:ring-blue-500","py-3 px-4 block w-full border-gray-200 rounded-lg text-sm disabled:opacity-50 disabled:pointer-events-none"]),placeholder:e.block.data.title_field},null,10,k),e.error?(r(),o("div",x,l[0]||(l[0]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):s("",!0)]),e.error?s("",!0):(r(),o("p",h,a(e.block.data.description),1)),(r(!0),o(c,null,m(e.error,i=>(r(),o("p",y,a(i),1))),256))])}const C=n(u,[["render",g]]);export{C as default};
import{_ as n}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as o,b as t,t as a,n as d,l as s,F as c,d as m}from"./app-lT3z3TR3.js";const u={name:"EmailBlock",data(){return{}},methods:{},props:{block:{type:Object},error:{type:Object}}},b={class:"mb-4 sm:mb-8"},_=["for"],k={class:"relative"},x=["required","name","min","max","id","placeholder"],f={key:0,class:"absolute inset-y-0 end-0 flex items-center pointer-events-none pe-3"},h={key:0,class:"mt-2 text-sm text-gray-500",id:"hs-input-helper-text"},y={class:"text-sm text-red-600 mt-2",id:"hs-validation-name-error-helper"};function g(v,l,e,w,p,B){return r(),o("div",b,[t("label",{for:e.block.data.name_field+"-id",class:"block mb-2 text-sm font-medium"},a(e.block.data.title_field),9,_),t("div",k,[t("input",{required:e.block.data.rules.required,name:e.block.data.name_field,min:e.block.data.rules.min,max:e.block.data.rules.max,type:"email",id:e.block.data.name_field+"-id",class:d([e.error?"border-red-500 focus:border-red-500 focus:ring-red-500":"focus:border-blue-500 focus:ring-blue-500","py-3 px-4 block w-full border-gray-200 rounded-lg text-sm disabled:opacity-50 disabled:pointer-events-none"]),placeholder:e.block.data.title_field},null,10,x),e.error?(r(),o("div",f,l[0]||(l[0]=[t("svg",{class:"shrink-0 size-4 text-red-500",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"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",x2:"12",y1:"8",y2:"12"}),t("line",{x1:"12",x2:"12.01",y1:"16",y2:"16"})],-1)]))):s("",!0)]),e.error?s("",!0):(r(),o("p",h,a(e.block.data.description),1)),(r(!0),o(c,null,m(e.error,i=>(r(),o("p",y,a(i),1))),256))])}const C=n(u,[["render",g]]);export{C as default};
@@ -1 +1 @@
import{A as c,r as s,c as d,a as n,w as p,b as e,t as r,g as m,F as u,o as f}from"./app-lWrE2aWG.js";import"./v3-CDJmn87G.js";import{C as x}from"./SearchModal-CGHtjMJb.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import{M as g}from"./MainPageNavbar-BsdceJwT.js";const h=c({components:{ClientFooterDown:x,MainPageNavBar:g},props:{status:Number},computed:{title(){return{503:"503",500:"500",404:"404",403:"403"}[this.status]},description(){return{503:"Простите, мы проводим технические работы на странице.",500:"Упс, проблема на стороне сервера. Мы уже решаем проблему!",404:"Упс, страница не найдена!",403:"Извините, у вас нет доступа к этой секции."}[this.status]}}}),w={class:"flex flex-col h-screen justify-between"},b={class:"max-w-[50rem] flex flex-col mx-auto size-full"},v={class:"my-auto",id:"content"},y={class:"text-center py-10 px-4 sm:px-6 lg:px-8"},k={class:"block text-7xl font-bold text-gray-800 sm:text-9xl"},C={class:"text-gray-600"},B={class:"mt-5 flex flex-col justify-center items-center gap-2 sm:flex-row sm:gap-3"},N=["href"];function F(t,o,$,j,D,M){const a=s("Head"),i=s("MainPageNavBar"),l=s("ClientFooterDown");return f(),d(u,null,[n(a,null,{default:p(()=>[e("title",null,"Ошибка "+r(t.title),1),o[0]||(o[0]=e("meta",{name:"description",content:"Your page description"},null,-1))]),_:1}),e("div",w,[n(i,{class:"border-b",sections:t.$page.props.navigation},null,8,["sections"]),e("div",b,[e("main",v,[e("div",y,[e("h1",k,r(t.title),1),e("p",C,r(t.description),1),e("div",B,[e("a",{href:t.route("index"),class:"w-full sm:w-auto py-3 px-4 inline-flex justify-center items-center gap-x-2 text-sm font-semibold rounded-lg border border-transparent bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50 disabled:pointer-events-none"},o[1]||(o[1]=[e("svg",{class:"flex-shrink-0 size-4",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"},[e("path",{d:"m15 18-6-6 6-6"})],-1),m(" На домашнюю страницу ")]),8,N)])])])]),n(l)])],64)}const I=_(h,[["render",F],["__scopeId","data-v-f864d284"]]);export{I as default};
import{A as c,r as s,c as d,a as n,w as p,b as e,t as r,j as m,F as u,o as f}from"./app-lT3z3TR3.js";import"./v3-B5UP5GZw.js";import{C as x}from"./SearchModal-YI3bdWA9.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import{M as g}from"./MainPageNavbar-BfM50q-7.js";const h=c({components:{ClientFooterDown:x,MainPageNavBar:g},props:{status:Number},computed:{title(){return{503:"503",500:"500",404:"404",403:"403"}[this.status]},description(){return{503:"Простите, мы проводим технические работы на странице.",500:"Упс, проблема на стороне сервера. Мы уже решаем проблему!",404:"Упс, страница не найдена!",403:"Извините, у вас нет доступа к этой секции."}[this.status]}}}),w={class:"flex flex-col h-screen justify-between"},b={class:"max-w-[50rem] flex flex-col mx-auto size-full"},v={class:"my-auto",id:"content"},y={class:"text-center py-10 px-4 sm:px-6 lg:px-8"},k={class:"block text-7xl font-bold text-gray-800 sm:text-9xl"},C={class:"text-gray-600"},B={class:"mt-5 flex flex-col justify-center items-center gap-2 sm:flex-row sm:gap-3"},N=["href"];function j(t,o,F,$,D,M){const a=s("Head"),i=s("MainPageNavBar"),l=s("ClientFooterDown");return f(),d(u,null,[n(a,null,{default:p(()=>[e("title",null,"Ошибка "+r(t.title),1),o[0]||(o[0]=e("meta",{name:"description",content:"Your page description"},null,-1))]),_:1}),e("div",w,[n(i,{class:"border-b",sections:t.$page.props.navigation},null,8,["sections"]),e("div",b,[e("main",v,[e("div",y,[e("h1",k,r(t.title),1),e("p",C,r(t.description),1),e("div",B,[e("a",{href:t.route("index"),class:"w-full sm:w-auto py-3 px-4 inline-flex justify-center items-center gap-x-2 text-sm font-semibold rounded-lg border border-transparent bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50 disabled:pointer-events-none"},o[1]||(o[1]=[e("svg",{class:"flex-shrink-0 size-4",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"},[e("path",{d:"m15 18-6-6 6-6"})],-1),m(" На домашнюю страницу ")]),8,N)])])])]),n(l)])],64)}const I=_(h,[["render",j],["__scopeId","data-v-f864d284"]]);export{I as default};
@@ -1 +1 @@
import{i,o as l,c,g as m,t as g,b as a,l as p,f as h,d as k,e as y,k as B,F as b}from"./app-lWrE2aWG.js";import"./SearchModal-CGHtjMJb.js";import{S as x,C as v}from"./SortingByFilter-DAe1p4QU.js";import{_ as u}from"./_plugin-vue_export-helper-DlAUqK2U.js";const _={name:"TagBadge",components:{Link:i},data(){return{}},methods:{clearFilter(){let r=new URL(window.location.href);const e=[];for(const[n]of r.searchParams)n.startsWith(this.filter.param)&&e.push(n);e.forEach(n=>r.searchParams.delete(n));let t=r.toString();this.$inertia.visit(t,{method:"get"})}},props:{filter:{type:Object}}},w={key:0,class:"inline-flex items-center gap-x-1.5 py-1.5 ps-3 pe-2 rounded-full text-xs font-medium bg-blue-100 text-blue-800"};function C(r,e,t,n,d,s){return this.filter.value!==null?(l(),c("span",w,[m(g(t.filter.value.length>1?"Тэг: "+t.filter.value.length+" значений":"#"+JSON.parse(t.filter.content[t.filter.value].data.name).ru)+" ",1),a("button",{onClick:e[0]||(e[0]=p((...o)=>s.clearFilter&&s.clearFilter(...o),["prevent"])),type:"button",class:"shrink-0 size-4 inline-flex items-center justify-center rounded-full hover:bg-blue-200 focus:outline-none focus:bg-blue-200 focus:text-blue-500"},e[1]||(e[1]=[a("span",{class:"sr-only"},"Remove badge",-1),a("svg",{class:"shrink-0 size-3",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"},[a("path",{d:"M18 6 6 18"}),a("path",{d:"m6 6 12 12"})],-1)]))])):h("",!0)}const S=u(_,[["render",C]]),F={name:"EventBadgeBuilder",components:{Link:i,SearchBadge:x,CategoryBadge:v,TagBadge:S},data(){return{}},methods:{getComponent(r){return{search:"SearchBadge",category:"CategoryBadge",tag:"TagBadge"}[r]||null}},props:{filters:{type:Object}}};function T(r,e,t,n,d,s){return l(!0),c(b,null,k(t.filters,(o,f)=>(l(),y(B(s.getComponent(o.type)),{key:f,filter:o},null,8,["filter"]))),128)}const P=u(F,[["render",T]]);export{P};
import{i,o as l,c,j as f,t as p,b as a,p as g,l as h,d as k,e as y,g as B,F as b}from"./app-lT3z3TR3.js";import"./SearchModal-YI3bdWA9.js";import{S as x,C as v}from"./SortingByFilter-CjZ8gKSr.js";import{_ as u}from"./_plugin-vue_export-helper-DlAUqK2U.js";const _={name:"TagBadge",components:{Link:i},data(){return{}},methods:{clearFilter(){let r=new URL(window.location.href);const e=[];for(const[n]of r.searchParams)n.startsWith(this.filter.param)&&e.push(n);e.forEach(n=>r.searchParams.delete(n));let t=r.toString();this.$inertia.visit(t,{method:"get"})}},props:{filter:{type:Object}}},w={key:0,class:"inline-flex items-center gap-x-1.5 py-1.5 ps-3 pe-2 rounded-full text-xs font-medium bg-blue-100 text-blue-800"};function C(r,e,t,n,d,s){return this.filter.value!==null?(l(),c("span",w,[f(p(t.filter.value.length>1?"Тэг: "+t.filter.value.length+" значений":"#"+JSON.parse(t.filter.content[t.filter.value].data.name).ru)+" ",1),a("button",{onClick:e[0]||(e[0]=g((...o)=>s.clearFilter&&s.clearFilter(...o),["prevent"])),type:"button",class:"shrink-0 size-4 inline-flex items-center justify-center rounded-full hover:bg-blue-200 focus:outline-none focus:bg-blue-200 focus:text-blue-500"},e[1]||(e[1]=[a("span",{class:"sr-only"},"Remove badge",-1),a("svg",{class:"shrink-0 size-3",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"},[a("path",{d:"M18 6 6 18"}),a("path",{d:"m6 6 12 12"})],-1)]))])):h("",!0)}const S=u(_,[["render",C]]),j={name:"EventBadgeBuilder",components:{Link:i,SearchBadge:x,CategoryBadge:v,TagBadge:S},data(){return{}},methods:{getComponent(r){return{search:"SearchBadge",category:"CategoryBadge",tag:"TagBadge"}[r]||null}},props:{filters:{type:Object}}};function F(r,e,t,n,d,s){return l(!0),c(b,null,k(t.filters,(o,m)=>(l(),y(B(s.getComponent(o.type)),{key:m,filter:o},null,8,["filter"]))),128)}const P=u(j,[["render",F]]);export{P};
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
@@ -1 +1 @@
import{B as d,s as m}from"./SearchModal-CGHtjMJb.js";import{F as u}from"./v3-CDJmn87G.js";import{_ as p}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as r,c as a,d as f,b as t,a as h,t as i,F as g}from"./app-lWrE2aWG.js";const x={name:"FileBlock",components:{BaseIcon:d,FsLightbox:u},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return m(e,{lower:!0,strict:!0,locale:"ru"})},textLimit(e,n){if(e.length>n){let s;return s=e.substring(0,n),s+"..."}return e}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},b={class:"mb-4"},y=["href"],B={class:"flex border rounded-lg px-4 py-2 items-center justify-between duration-300 hover:bg-gray-100"},w={class:"flex items-center justify-between"},k={class:"min-w-[30px] min-h-[30px] bg-[#303030] flex justify-center items-center rounded-md mr-2"},v={class:"text-sm text-gray-400"};function F(e,n,s,L,j,c){const l=_("BaseIcon");return r(!0),a(g,null,f(s.block.data.file,o=>(r(),a("div",b,[t("a",{class:"",href:"/storage/"+o.path,download:"",type:"button"},[t("div",B,[t("div",w,[t("div",k,[h(l,{name:o.expansion,class:"w-5 h-5 flex-shrink-0"},null,8,["name"])]),t("div",null,i(c.textLimit(o.title,70)),1)]),t("span",v,i(o.size),1)])],8,y)]))),256)}const V=p(x,[["render",F]]);export{V as default};
import{B as d,s as m}from"./SearchModal-YI3bdWA9.js";import{F as u}from"./v3-B5UP5GZw.js";import{_ as p}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as _,o as r,c as a,d as f,b as t,a as h,t as i,F as g}from"./app-lT3z3TR3.js";const x={name:"FileBlock",components:{BaseIcon:d,FsLightbox:u},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return m(e,{lower:!0,strict:!0,locale:"ru"})},textLimit(e,n){if(e.length>n){let s;return s=e.substring(0,n),s+"..."}return e}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},b={class:"mb-4"},y=["href"],B={class:"flex border rounded-lg px-4 py-2 items-center justify-between duration-300 hover:bg-gray-100"},w={class:"flex items-center justify-between"},k={class:"min-w-[30px] min-h-[30px] bg-[#303030] flex justify-center items-center rounded-md mr-2"},v={class:"text-sm text-gray-400"};function F(e,n,s,L,j,c){const l=_("BaseIcon");return r(!0),a(g,null,f(s.block.data.file,o=>(r(),a("div",b,[t("a",{class:"",href:"/storage/"+o.path,download:"",type:"button"},[t("div",B,[t("div",w,[t("div",k,[h(l,{name:o.expansion,class:"w-5 h-5 flex-shrink-0"},null,8,["name"])]),t("div",null,i(c.textLimit(o.title,70)),1)]),t("span",v,i(o.size),1)])],8,y)]))),256)}const V=p(x,[["render",F]]);export{V as default};
@@ -1 +1 @@
import{s as i}from"./SearchModal-CGHtjMJb.js";import{F as l}from"./v3-CDJmn87G.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,d,b as t,t as u,F as m}from"./app-lWrE2aWG.js";const p={name:"FileBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return i(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f={class:""},C=["href"],g={class:"flex border rounded-lg px-4 py-2 items-center justify-between duration-300 hover:bg-gray-100"},h={class:"flex items-center"};function _(e,o,a,V,w,x){return r(!0),n(m,null,d(a.block.data.file,s=>(r(),n("div",f,[t("a",{class:"",href:"/storage/"+s.path,download:"",type:"button"},[t("div",g,[t("div",h,[o[0]||(o[0]=t("div",{class:"w-[30px] h-[30px] bg-black flex justify-center items-center rounded-md mr-2"},[t("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M15.9375 12.2188H12.75C12.4682 12.2188 12.198 12.1068 11.9987 11.9076C11.7994 11.7083 11.6875 11.438 11.6875 11.1562V5.84375C11.6875 5.56196 11.7994 5.29171 11.9987 5.09245C12.198 4.89319 12.4682 4.78125 12.75 4.78125H15.9375V5.84375H12.75V11.1562H15.9375V12.2188ZM9.5625 12.2188H7.4375C7.15571 12.2188 6.88546 12.1068 6.6862 11.9076C6.48694 11.7083 6.375 11.438 6.375 11.1562V5.84375C6.375 5.56196 6.48694 5.29171 6.6862 5.09245C6.88546 4.89319 7.15571 4.78125 7.4375 4.78125H9.5625C9.84429 4.78125 10.1145 4.89319 10.3138 5.09245C10.5131 5.29171 10.625 5.56196 10.625 5.84375V11.1562C10.625 11.438 10.5131 11.7083 10.3138 11.9076C10.1145 12.1068 9.84429 12.2188 9.5625 12.2188ZM7.4375 5.84375V11.1562H9.5625V5.84375H7.4375ZM3.1875 12.2188H1.0625V4.78125H3.1875C3.75087 4.78195 4.29096 5.00606 4.68933 5.40442C5.08769 5.80279 5.3118 6.34288 5.3125 6.90625V10.0938C5.3118 10.6571 5.08769 11.1972 4.68933 11.5956C4.29096 11.9939 3.75087 12.218 3.1875 12.2188ZM2.125 11.1562H3.1875C3.46929 11.1562 3.73954 11.0443 3.9388 10.8451C4.13806 10.6458 4.25 10.3755 4.25 10.0938V6.90625C4.25 6.62446 4.13806 6.35421 3.9388 6.15495C3.73954 5.95569 3.46929 5.84375 3.1875 5.84375H2.125V11.1562Z",fill:"#F8F8F8"})])],-1)),t("div",null,u(s.title),1)])])],8,C)]))),256)}const y=c(p,[["render",_]]);export{y as default};
import{s as i}from"./SearchModal-YI3bdWA9.js";import{F as l}from"./v3-B5UP5GZw.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as n,d,b as t,t as u,F as m}from"./app-lT3z3TR3.js";const p={name:"FileBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return i(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f={class:""},C=["href"],g={class:"flex border rounded-lg px-4 py-2 items-center justify-between duration-300 hover:bg-gray-100"},h={class:"flex items-center"};function _(e,o,a,V,w,x){return r(!0),n(m,null,d(a.block.data.file,s=>(r(),n("div",f,[t("a",{class:"",href:"/storage/"+s.path,download:"",type:"button"},[t("div",g,[t("div",h,[o[0]||(o[0]=t("div",{class:"w-[30px] h-[30px] bg-black flex justify-center items-center rounded-md mr-2"},[t("svg",{width:"17",height:"17",viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M15.9375 12.2188H12.75C12.4682 12.2188 12.198 12.1068 11.9987 11.9076C11.7994 11.7083 11.6875 11.438 11.6875 11.1562V5.84375C11.6875 5.56196 11.7994 5.29171 11.9987 5.09245C12.198 4.89319 12.4682 4.78125 12.75 4.78125H15.9375V5.84375H12.75V11.1562H15.9375V12.2188ZM9.5625 12.2188H7.4375C7.15571 12.2188 6.88546 12.1068 6.6862 11.9076C6.48694 11.7083 6.375 11.438 6.375 11.1562V5.84375C6.375 5.56196 6.48694 5.29171 6.6862 5.09245C6.88546 4.89319 7.15571 4.78125 7.4375 4.78125H9.5625C9.84429 4.78125 10.1145 4.89319 10.3138 5.09245C10.5131 5.29171 10.625 5.56196 10.625 5.84375V11.1562C10.625 11.438 10.5131 11.7083 10.3138 11.9076C10.1145 12.1068 9.84429 12.2188 9.5625 12.2188ZM7.4375 5.84375V11.1562H9.5625V5.84375H7.4375ZM3.1875 12.2188H1.0625V4.78125H3.1875C3.75087 4.78195 4.29096 5.00606 4.68933 5.40442C5.08769 5.80279 5.3118 6.34288 5.3125 6.90625V10.0938C5.3118 10.6571 5.08769 11.1972 4.68933 11.5956C4.29096 11.9939 3.75087 12.218 3.1875 12.2188ZM2.125 11.1562H3.1875C3.46929 11.1562 3.73954 11.0443 3.9388 10.8451C4.13806 10.6458 4.25 10.3755 4.25 10.0938V6.90625C4.25 6.62446 4.13806 6.35421 3.9388 6.15495C3.73954 5.95569 3.46929 5.84375 3.1875 5.84375H2.125V11.1562Z",fill:"#F8F8F8"})])],-1)),t("div",null,u(s.title),1)])])],8,C)]))),256)}const y=c(p,[["render",_]]);export{y as default};
@@ -1 +0,0 @@
.fade-enter-active[data-v-11318db0],.fade-leave-active[data-v-11318db0]{transition:all .5s ease}.fade-enter-from[data-v-11318db0],.fade-leave-to[data-v-11318db0]{opacity:0;transform:translateY(30px)}.fslightbox-container{margin:0!important}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import"./SearchModal-YI3bdWA9.js";import"./v3-B5UP5GZw.js";import{_ as n}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{m as s,i,r as c,o as l,c as m,b as t,a as d}from"./app-lT3z3TR3.js";import{F as p}from"./FormBuilder-C25m8kmA.js";const f={name:"FormBlock",components:{FormBuilder:p,axios:s,Link:i},data(){return{form:null,loading:!0}},methods:{getForm(e){s.get(route("client.widget.form.single",e)).then(o=>{this.form=o.data,this.loading=!1}).catch(o=>{console.error("Ошибка:",o)})}},mounted(){var o;const e=((o=this.block)==null?void 0:o.data.form)||this.formId;this.getForm(e)},props:{block:{type:Object},formId:{type:String,default:null}}},u={key:0,class:"flex flex-col space-y-4"},g={key:1};function _(e,o,h,k,r,x){const a=c("FormBuilder");return r.loading?(l(),m("div",u,o[0]||(o[0]=[t("div",{class:"flex-col animate-pulse mt-10"},[t("div",{class:"w-[25rem] mx-auto h-8 bg-gray-200 rounded-full"}),t("div",{class:"mt-5 mx-auto w-[40rem] h-60 relative z-1000 border rounded-xl sm:mt-10 md:p-10 bg-gray-200"})],-1)]))):(l(),m("div",g,[d(a,{blocks:r.form},null,8,["blocks"])]))}const w=n(f,[["render",_]]);export{w as default};
@@ -0,0 +1 @@
.fade-enter-active[data-v-a4691de4],.fade-leave-active[data-v-a4691de4]{transition:all .5s ease}.fade-enter-from[data-v-a4691de4],.fade-leave-to[data-v-a4691de4]{opacity:0;transform:translateY(30px)}
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{s as a}from"./SearchModal-CGHtjMJb.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as r,b as s,t as l}from"./app-lWrE2aWG.js";const i={name:"HeadingBlock",methods:{generateSlug:function(t){return a(t,{lower:!0,strict:!0,locale:"ru"})}},props:{block:{type:Object}}},d=["id"];function u(t,f,e,_,m,o){return n(),r("div",null,[s("h2",{id:o.generateSlug(e.block.data.content),class:"font-bold text-xl"},l(e.block.data.content),9,d)])}const b=c(i,[["render",u]]);export{b as default};
import{s as a}from"./SearchModal-YI3bdWA9.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as r,b as s,t as l}from"./app-lT3z3TR3.js";const i={name:"HeadingBlock",methods:{generateSlug:function(t){return a(t,{lower:!0,strict:!0,locale:"ru"})}},props:{block:{type:Object}}},d=["id"];function u(t,f,e,_,m,o){return n(),r("div",null,[s("h2",{id:o.generateSlug(e.block.data.content),class:"font-bold text-xl"},l(e.block.data.content),9,d)])}const b=c(i,[["render",u]]);export{b as default};
@@ -1 +1 @@
import{s as o}from"./SearchModal-CGHtjMJb.js";import{_ as r}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c,b as n,t as s}from"./app-lWrE2aWG.js";const l={name:"HeadingBlock",methods:{generateSlug:function(t){return o(t,{lower:!0,strict:!0,locale:"ru"})}},props:{block:{type:Object}}},i={class:"md:font-bold md:text-xl text-lg font-medium text-gray-800"};function d(t,m,e,u,f,p){return a(),c("div",null,[n("h2",i,s(e.block.data.content),1)])}const k=r(l,[["render",d]]);export{k as default};
import{s as o}from"./SearchModal-YI3bdWA9.js";import{_ as r}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c,b as n,t as s}from"./app-lT3z3TR3.js";const l={name:"HeadingBlock",methods:{generateSlug:function(t){return o(t,{lower:!0,strict:!0,locale:"ru"})}},props:{block:{type:Object}}},i={class:"md:font-bold md:text-xl text-lg font-medium text-gray-800"};function d(t,m,e,u,f,p){return a(),c("div",null,[n("h2",i,s(e.block.data.content),1)])}const k=r(l,[["render",d]]);export{k as default};
@@ -1 +1 @@
import{s as a}from"./SearchModal-CGHtjMJb.js";import{F as l}from"./v3-CDJmn87G.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as g,c as m,b as n,a as u,F as d}from"./app-lWrE2aWG.js";const p={name:"ImageBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return a(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f=["src"];function _(e,t,r,h,o,b){const s=i("FsLightbox");return g(),m(d,null,[n("div",null,[n("img",{onClick:t[0]||(t[0]=k=>o.toggler=!o.toggler),loading:"lazy",class:"mx-auto object-cover rounded-md hover:opacity-95 hover:duration-200 transition",src:"/storage/"+r.block.data.url,alt:""},null,8,f)]),u(s,{class:"",toggler:o.toggler,sources:[o.domainPath+"/storage/"+r.block.data.url]},null,8,["toggler","sources"])],64)}const y=c(p,[["render",_]]);export{y as default};
import{s as a}from"./SearchModal-YI3bdWA9.js";import{F as l}from"./v3-B5UP5GZw.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as g,c as m,b as n,a as u,F as d}from"./app-lT3z3TR3.js";const p={name:"ImageBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return a(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f=["src"];function _(e,t,r,h,o,b){const s=i("FsLightbox");return g(),m(d,null,[n("div",null,[n("img",{onClick:t[0]||(t[0]=k=>o.toggler=!o.toggler),loading:"lazy",class:"mx-auto object-cover rounded-md hover:opacity-95 hover:duration-200 transition",src:"/storage/"+r.block.data.url,alt:""},null,8,f)]),u(s,{class:"",toggler:o.toggler,sources:[o.domainPath+"/storage/"+r.block.data.url]},null,8,["toggler","sources"])],64)}const y=c(p,[["render",_]]);export{y as default};
@@ -1 +1 @@
import{s as a}from"./SearchModal-CGHtjMJb.js";import{F as l}from"./v3-CDJmn87G.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as g,c as m,b as n,a as u,F as d}from"./app-lWrE2aWG.js";const p={name:"ImageBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return a(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f=["src"];function _(e,t,r,h,o,b){const s=i("FsLightbox");return g(),m(d,null,[n("div",null,[n("img",{onClick:t[0]||(t[0]=k=>o.toggler=!o.toggler),loading:"lazy",class:"mx-auto object-cover rounded-md hover:opacity-95 hover:duration-200 transition",src:"/storage/"+r.block.data.url,alt:""},null,8,f)]),u(s,{class:"",toggler:o.toggler,sources:[o.domainPath+"/storage/"+r.block.data.url]},null,8,["toggler","sources"])],64)}const y=c(p,[["render",_]]);export{y as default};
import{s as a}from"./SearchModal-YI3bdWA9.js";import{F as l}from"./v3-B5UP5GZw.js";import{_ as c}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as g,c as m,b as n,a as u,F as d}from"./app-lT3z3TR3.js";const p={name:"ImageBlock",components:{FsLightbox:l},data(){return{toggler:!1,domainPath:null}},methods:{generateSlug:function(e){return a(e,{lower:!0,strict:!0,locale:"ru"})}},mounted(){this.domainPath=window.location.origin},props:{block:{type:Object}}},f=["src"];function _(e,t,r,h,o,b){const s=i("FsLightbox");return g(),m(d,null,[n("div",null,[n("img",{onClick:t[0]||(t[0]=k=>o.toggler=!o.toggler),loading:"lazy",class:"mx-auto object-cover rounded-md hover:opacity-95 hover:duration-200 transition",src:"/storage/"+r.block.data.url,alt:""},null,8,f)]),u(s,{class:"",toggler:o.toggler,sources:[o.domainPath+"/storage/"+r.block.data.url]},null,8,["toggler","sources"])],64)}const y=c(p,[["render",_]]);export{y as default};
-1
View File
@@ -1 +0,0 @@
import{M as P}from"./MainNavbar-Ox7xJRDB.js";import{i as k,Z as F,r as o,c as n,a as l,w as h,b as e,t as f,F as c,d as p,o as s,e as E,g as w}from"./app-lWrE2aWG.js";import{F as L}from"./v3-CDJmn87G.js";import{C as B}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as N}from"./SearchModal-CGHtjMJb.js";import{A as T,a as M,b as I}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A as H}from"./AdminIndexHeader-BLYLBYAX.js";import{C as S,a as D}from"./ClientPostSearch-DByct-eL.js";import{C as V}from"./ClientPost-HujX0ISt.js";import{C as j,L as G}from"./ClientProgramFilter-C-_lryip.js";import{P as R,d as Y,c as Z,a as q,b as J}from"./PostGallery-BpzMY_Fm.js";import{P as K}from"./PostBuilder-BikqjS2v.js";import{M as O}from"./MainPageNavbar-BsdceJwT.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-DAe1p4QU.js";const U={name:"Index",components:{MainPageNavBar:O,PostGallery:R,PostBuilder:K,PostTitle:Y,PostBackButton:Z,PostTimeRead:q,PostAuthorsList:J,ClientProgramFilter:j,LevelEduFilter:G,AdminIndexHeaderTitle:T,AdminIndexHeader:H,AdminIndexFilter:M,AdminIndexSearch:I,ClientFooterDown:N,ClientScrollTimeline:B,ClientPostFilter:S,Link:k,MainNavbar:P,FsLightbox:L,Head:F,ClientPost:V,ClientPostSearch:D},data(){return{}},props:{campaignName:{type:String},levelsEducational:{type:Array},naprs:{type:Array},filters:{type:Array},formsEdu:{type:Array},budgetEdu:{type:Array},direction_studies:{type:Array}},methods:{transformToColumns(r){return((m,u)=>m.reduce((d,x,a)=>a%u?d:[...d,m.slice(a,a+u)],[]))(r,Math.ceil(r.length/2)).reverse()},textLimit(r,i){if(r.length>i){let t;return t=r.substring(0,i),t+"..."}return r}},mounted(){}},W={class:"flex flex-col h-screen"},X={class:"flex-grow"},z={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:py-10"},$={class:"w-100"},ee={class:"space-y-5 md:space-y-4"},te={class:"text-brand-primary text-center mb-3 mt-2 text-3xl font-semibold tracking-tight dark:text-white lg:text-[40px] lg:leading-tight"},re={class:"space-y-5 md:space-y-10"},se={class:"my-10 flex items-center justify-center gap-x-2"},ie={class:"container mx-auto xl:px-5 py-5 lg:py-4"},oe={class:"w-full mx-auto gap-x3 flex flex-wrap lg:justify-center"},ne={class:"flex flex-col"},ae={style:{height:"max-content"},class:"px-4"},le={class:"text-brand-primary mb-2 mt-2 text-lg font-semibold upper tracking-tight dark:text-white lg:text-md lg:leading-tight"};function de(r,i,t,m,u,d){const x=o("Head"),a=o("MainPageNavBar"),y=o("LevelEduFilter"),v=o("ClientProgramFilter"),b=o("Link"),C=o("ClientFooterDown");return s(),n(c,null,[l(x,null,{default:h(()=>i[0]||(i[0]=[e("title",null,"Приемная компания",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),l(a,{class:"border-b",sections:r.$page.props.navigation},null,8,["sections"]),e("div",W,[e("main",X,[e("div",z,[e("div",$,[e("div",null,[e("div",ee,[e("h1",te,f(this.campaignName),1),e("div",re,[e("div",null,[e("div",se,[l(y,{levels:t.levelsEducational,level_filter:t.filters.level_filter},null,8,["levels","level_filter"]),l(v,{budget_filter:t.filters.budget_filter,direction_filter:t.filters.direction_filter,formEdu_filter:t.filters.formEdu_filter,types_budget:t.budgetEdu,direction_studies:t.direction_studies,forms_educational:t.formsEdu},null,8,["budget_filter","direction_filter","formEdu_filter","types_budget","direction_studies","forms_educational"])]),e("div",ie,[e("div",oe,[(s(!0),n(c,null,p(d.transformToColumns(this.naprs.data),A=>(s(),n("div",ne,[(s(!0),n(c,null,p(A,g=>(s(),n("div",ae,[e("h1",le,f(g.name),1),(s(!0),n(c,null,p(g.programs,_=>(s(),E(b,{key:_.id,class:"block text-[#1E57A3] hover:text-blue-600 duration-200 text-sm underline underline-offset-2 py-1",href:r.route("client.program.show",_)},{default:h(()=>[w(f(_.name),1)]),_:2},1032,["href"]))),128))]))),256))]))),256))])])])])])])])])]),l(C)])],64)}const Fe=Q(U,[["render",de]]);export{Fe as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{M as y}from"./MainNavbar-Ox7xJRDB.js";import{i as h,Z as b,r as t,c as p,a as o,w as r,b as e,F as m,d as k,o as a,e as w}from"./app-lWrE2aWG.js";import{F as C}from"./v3-CDJmn87G.js";import{C as P}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as A}from"./SearchModal-CGHtjMJb.js";import{A as B,a as F,b as I}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A as H}from"./AdminIndexHeader-BLYLBYAX.js";import{C as M,a as $}from"./ClientPostSearch-DByct-eL.js";import{C as N}from"./ClientPost-HujX0ISt.js";import{E,a as L,T as S}from"./EventBuilder-Baz4pEov.js";import{M as T}from"./MainPageNavbar-BsdceJwT.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-DAe1p4QU.js";import"./ClientImageSlider-ZnyNtD9R.js";import"./PageTabBuilder-81M-YOIr.js";import"./HeadingBlock-iaPv_EZx.js";import"./ParagraphBlock-64oJsNrU.js";import"./ImageBlock-Bz4NDWK1.js";import"./FileBlock-DP4RAJQp.js";import"./PersonBlock-C8nng2Wc.js";import"./StepperBlock-Cnp91vN2.js";import"./VideoBlock-NJG_Gd3K.js";import"./PostListBlock-BoZg3Tch.js";const D={name:"Index",components:{MainPageNavBar:T,EventBuilder:E,EventBackButton:L,TitleEvent:S,AdminIndexHeaderTitle:B,AdminIndexHeader:H,AdminIndexFilter:F,AdminIndexSearch:I,ClientFooterDown:A,ClientScrollTimeline:P,ClientPostFilter:M,Link:h,MainNavbar:y,FsLightbox:C,Head:b,ClientPost:N,ClientPostSearch:$},data(){return{}},props:{posts:{type:Array},filters:{type:Array},categories:{type:Array},navigation:{type:Array}},methods:{},mounted(){}},z={class:"flex flex-col h-screen"},V={class:"flex-grow"},Y={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},Z={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},q={class:"space-y-5 md:space-y-4"},G={class:"space-y-5 md:space-y-4"},J={class:"container px-8 mx-auto xl:px-5 max-w-screen-lg py-5 lg:py-8"},K={class:"mt-10 grid gap-10 md:grid-cols-2 lg:gap-10 xl:grid-cols-3"},O={class:"mt-10 flex items-center justify-center"},Q={class:"isolate inline-flex -space-x-px rounded-md shadow-sm","aria-label":"Pagination"};function R(n,s,i,U,W,X){const c=t("Head"),u=t("MainPageNavBar"),g=t("ClientPostSearch"),x=t("ClientPostFilter"),f=t("AdminIndexHeader"),_=t("ClientPost"),l=t("Link"),v=t("ClientFooterDown");return a(),p(m,null,[o(c,null,{default:r(()=>s[0]||(s[0]=[e("title",null,"Новости",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),o(u,{class:"border-b",sections:n.$page.props.navigation},null,8,["sections"]),e("div",z,[e("main",V,[e("div",Y,[e("div",Z,[e("div",null,[o(f,null,{default:r(()=>[o(g),o(x,{items:i.categories},null,8,["items"])]),_:1}),e("div",q,[e("div",G,[e("div",null,[e("div",J,[e("div",K,[(a(!0),p(m,null,k(i.posts.data,d=>(a(),w(_,{key:d.id,post:d},null,8,["post"]))),128))]),e("div",O,[e("nav",Q,[o(l,{as:"button",href:n.$props.posts.links.prev,disabled:n.$props.posts.links.prev===null,class:"relative inline-flex items-center gap-1 rounded-l-md border border-gray-300 bg-white px-3 py-2 pr-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>s[1]||(s[1]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 19.5 8.25 12l7.5-7.5"})],-1),e("span",null,"Предыдущая",-1)])),_:1},8,["href","disabled"]),o(l,{as:"button",href:n.$props.posts.links.next,disabled:n.$props.posts.links.next===null,class:"relative inline-flex items-center gap-1 rounded-r-md border border-gray-300 bg-white px-3 py-2 pl-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>s[2]||(s[2]=[e("span",null,"Следующая",-1),e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m8.25 4.5 7.5 7.5-7.5 7.5"})],-1)])),_:1},8,["href","disabled"])])])])])])])])])])]),o(v)])],64)}const Ce=j(D,[["render",R]]);export{Ce as default};
import{M as y}from"./MainNavbar-5-nqk6c_.js";import{i as h,Z as b,r as t,c as p,a as o,w as r,b as e,F as m,d as k,o as a,e as w}from"./app-lT3z3TR3.js";import{F as C}from"./v3-B5UP5GZw.js";import{C as P}from"./ClientScrollTimeline-BxA_EWwM.js";import{C as A}from"./SearchModal-YI3bdWA9.js";import{A as B,a as F,b as I}from"./AdminIndexHeaderTitle-DyC17FG6.js";import{A as H}from"./AdminIndexHeader-Ci_3kRvq.js";import{C as M,a as $}from"./ClientPostSearch-85XLLeIC.js";import{C as N}from"./ClientPost-KvELvIac.js";import{E,a as L,T as S}from"./EventBuilder-Cx5Dh3-L.js";import{M as T}from"./MainPageNavbar-BfM50q-7.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-CjZ8gKSr.js";import"./ClientImageSlider-CGZZYYI8.js";import"./PageTabBuilder-CXLfoCo_.js";import"./HeadingBlock-DZAeIVzd.js";import"./ParagraphBlock-_EhfXk9v.js";import"./ImageBlock-cPU_Sbw4.js";import"./FileBlock-BU1S9yFx.js";import"./PersonBlock-MXpsfzV_.js";import"./StepperBlock-DhPHG4yx.js";import"./VideoBlock-BcEyk91j.js";import"./PostListBlock-Vo9iG3Sb.js";const D={name:"Index",components:{MainPageNavBar:T,EventBuilder:E,EventBackButton:L,TitleEvent:S,AdminIndexHeaderTitle:B,AdminIndexHeader:H,AdminIndexFilter:F,AdminIndexSearch:I,ClientFooterDown:A,ClientScrollTimeline:P,ClientPostFilter:M,Link:h,MainNavbar:y,FsLightbox:C,Head:b,ClientPost:N,ClientPostSearch:$},data(){return{}},props:{posts:{type:Array},filters:{type:Array},categories:{type:Array},navigation:{type:Array}},methods:{},mounted(){}},z={class:"flex flex-col h-screen"},V={class:"flex-grow"},Y={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},Z={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},q={class:"space-y-5 md:space-y-4"},G={class:"space-y-5 md:space-y-4"},J={class:"container px-8 mx-auto xl:px-5 max-w-screen-lg py-5 lg:py-8"},K={class:"mt-10 grid gap-10 md:grid-cols-2 lg:gap-10 xl:grid-cols-3"},O={class:"mt-10 flex items-center justify-center"},Q={class:"isolate inline-flex -space-x-px rounded-md shadow-sm","aria-label":"Pagination"};function R(n,s,i,U,W,X){const c=t("Head"),u=t("MainPageNavBar"),g=t("ClientPostSearch"),x=t("ClientPostFilter"),f=t("AdminIndexHeader"),_=t("ClientPost"),l=t("Link"),v=t("ClientFooterDown");return a(),p(m,null,[o(c,null,{default:r(()=>s[0]||(s[0]=[e("title",null,"Новости",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),o(u,{class:"border-b",sections:n.$page.props.navigation},null,8,["sections"]),e("div",z,[e("main",V,[e("div",Y,[e("div",Z,[e("div",null,[o(f,null,{default:r(()=>[o(g),o(x,{items:i.categories},null,8,["items"])]),_:1}),e("div",q,[e("div",G,[e("div",null,[e("div",J,[e("div",K,[(a(!0),p(m,null,k(i.posts.data,d=>(a(),w(_,{key:d.id,post:d},null,8,["post"]))),128))]),e("div",O,[e("nav",Q,[o(l,{as:"button",href:n.$props.posts.links.prev,disabled:n.$props.posts.links.prev===null,class:"relative inline-flex items-center gap-1 rounded-l-md border border-gray-300 bg-white px-3 py-2 pr-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>s[1]||(s[1]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 19.5 8.25 12l7.5-7.5"})],-1),e("span",null,"Предыдущая",-1)])),_:1},8,["href","disabled"]),o(l,{as:"button",href:n.$props.posts.links.next,disabled:n.$props.posts.links.next===null,class:"relative inline-flex items-center gap-1 rounded-r-md border border-gray-300 bg-white px-3 py-2 pl-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>s[2]||(s[2]=[e("span",null,"Следующая",-1),e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m8.25 4.5 7.5 7.5-7.5 7.5"})],-1)])),_:1},8,["href","disabled"])])])])])])])])])])]),o(v)])],64)}const Ce=j(D,[["render",R]]);export{Ce as default};
-1
View File
@@ -1 +0,0 @@
import{M as _}from"./MainNavbar-Ox7xJRDB.js";import{i as h,Z as f,r as s,c as i,a,w as l,b as e,F as d,d as v,o as n,e as w,t as m}from"./app-lWrE2aWG.js";import{F as b}from"./v3-CDJmn87G.js";import{C as y}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as k}from"./SearchModal-CGHtjMJb.js";import{A as C,a as F,b as B}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A}from"./AdminIndexHeader-BLYLBYAX.js";import{C as I,a as M}from"./ClientPostSearch-DByct-eL.js";import{C as N}from"./ClientPost-HujX0ISt.js";import{M as P}from"./MainPageNavbar-BsdceJwT.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-DAe1p4QU.js";const L={name:"Index",components:{MainPageNavBar:P,AdminIndexHeaderTitle:C,AdminIndexHeader:A,AdminIndexFilter:F,AdminIndexSearch:B,ClientFooterDown:k,ClientScrollTimeline:y,ClientPostFilter:I,Link:h,MainNavbar:_,FsLightbox:b,Head:f,ClientPost:N,ClientPostSearch:M},data(){return{}},props:{faculties:{type:Array}},methods:{},mounted(){}},D={class:"flex flex-col h-screen"},S={class:"flex-grow"},$={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},T={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},j={class:"space-y-5 md:space-y-4"},V={class:"space-y-5 md:space-y-4"},z={class:"max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto"},E={class:"grid sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-3 gap-3 sm:gap-6"},W={class:"p-4 md:p-5"},Y={class:"flex justify-between items-center gap-x-3"},Z={class:"grow"},q={class:"group-hover:text-blue-600 font-semibold text-gray-800"},G={class:"text-sm text-gray-500"};function J(r,t,c,K,O,Q){const p=s("Head"),x=s("MainPageNavBar"),g=s("Link"),u=s("ClientFooterDown");return n(),i(d,null,[a(p,null,{default:l(()=>t[0]||(t[0]=[e("title",null,"Факультеты",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),a(x,{class:"border-b",sections:r.$page.props.navigation},null,8,["sections"]),e("div",D,[e("main",S,[e("div",$,[e("div",T,[e("div",null,[e("div",j,[e("div",V,[e("div",z,[t[2]||(t[2]=e("div",{class:"max-w-2xl text-center mx-auto mb-10 lg:mb-14"},[e("h2",{class:"text-2xl font-bold md:text-4xl md:leading-tight dark:text-white"},"Факультеты и кафедры"),e("p",{class:"mt-1 text-gray-600 dark:text-neutral-400"},"We've helped some great companies brand, design and get to market.")],-1)),e("div",E,[(n(!0),i(d,null,v(c.faculties.data,o=>(n(),w(g,{href:r.route("client.faculty.show",o.slug),class:"group flex flex-col bg-white border shadow-sm rounded-xl hover:shadow-md focus:outline-none focus:shadow-md transition"},{default:l(()=>[e("div",W,[e("div",Y,[e("div",Z,[e("h3",q,m(o.shortTitle),1),e("p",G,m(o.title),1)]),t[1]||(t[1]=e("div",null,[e("svg",{class:"shrink-0 size-5 text-gray-800",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"},[e("path",{d:"m9 18 6-6-6-6"})])],-1))])])]),_:2},1032,["href"]))),256))])])])])])])])]),a(u)])],64)}const me=H(L,[["render",J]]);export{me as default};
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
@@ -1 +1 @@
import{i as g,Z as _,r as s,c as i,a as o,w as l,b as e,F as d,d as h,o as n,e as f,t as w}from"./app-lWrE2aWG.js";import{F as v}from"./v3-CDJmn87G.js";import{C as b}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as y}from"./SearchModal-CGHtjMJb.js";import{A as k,a as C,b as F}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A as B}from"./AdminIndexHeader-BLYLBYAX.js";import{C as A,a as I}from"./ClientPostSearch-DByct-eL.js";import{C as P}from"./ClientPost-HujX0ISt.js";import{M as H}from"./MainPageNavbar-BsdceJwT.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./SortingByFilter-DAe1p4QU.js";const N={name:"Index",components:{MainPageNavBar:H,AdminIndexHeaderTitle:k,AdminIndexHeader:B,AdminIndexFilter:C,AdminIndexSearch:F,ClientFooterDown:y,ClientScrollTimeline:b,ClientPostFilter:A,Link:g,FsLightbox:v,Head:_,ClientPost:P,ClientPostSearch:I},data(){return{}},props:{journals:{type:Array}},methods:{},mounted(){}},D={class:"flex flex-col h-screen"},M={class:"flex-grow"},S={class:"relative mb-auto mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},$={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},j={class:"space-y-5 md:space-y-4"},T={class:"space-y-5 md:space-y-4"},V={class:"max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto"},z={class:"grid sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-3 gap-3 sm:gap-6"},E={class:"p-4 md:p-5 w-full"},J={class:"flex justify-between items-center gap-x-3"},W={class:"grow"},Y={class:"group-hover:text-blue-600 font-semibold text-gray-800"};function Z(a,t,m,q,G,K){const c=s("Head"),p=s("MainPageNavBar"),x=s("Link"),u=s("ClientFooterDown");return n(),i(d,null,[o(c,null,{default:l(()=>t[0]||(t[0]=[e("title",null,"Научные периодические издания НТГСПИ",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),o(p,{class:"border-b",sections:a.$page.props.navigation},null,8,["sections"]),e("div",D,[e("main",M,[e("div",S,[e("div",$,[e("div",null,[e("div",j,[e("div",T,[e("div",V,[t[2]||(t[2]=e("div",{class:"max-w-2xl text-center mx-auto mb-10 lg:mb-14"},[e("h2",{class:"text-2xl font-bold md:text-4xl md:leading-tight dark:text-white"},"Научные периодические издания НТГСПИ"),e("p",{class:"mt-1 text-gray-600 dark:text-neutral-400"},"We've helped some great companies brand, design and get to market.")],-1)),e("div",z,[(n(!0),i(d,null,h(m.journals.data,r=>(n(),f(x,{href:a.route("client.academicJournals.show",r.slug),class:"group flex items-center bg-white border shadow-sm rounded-xl hover:shadow-md focus:outline-none focus:shadow-md transition"},{default:l(()=>[e("div",E,[e("div",J,[e("div",W,[e("h3",Y,w(r.title),1)]),t[1]||(t[1]=e("div",null,[e("svg",{class:"shrink-0 size-5 text-gray-800",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"},[e("path",{d:"m9 18 6-6-6-6"})])],-1))])])]),_:2},1032,["href"]))),256))])])])])])])])]),o(u)])],64)}const re=L(N,[["render",Z]]);export{re as default};
import{i as g,Z as _,r as s,c as i,a as o,w as l,b as e,F as d,d as h,o as n,e as f,t as w}from"./app-lT3z3TR3.js";import{F as v}from"./v3-B5UP5GZw.js";import{C as b}from"./ClientScrollTimeline-BxA_EWwM.js";import{C as y}from"./SearchModal-YI3bdWA9.js";import{A as k,a as C,b as F}from"./AdminIndexHeaderTitle-DyC17FG6.js";import{A as B}from"./AdminIndexHeader-Ci_3kRvq.js";import{C as A,a as I}from"./ClientPostSearch-85XLLeIC.js";import{C as P}from"./ClientPost-KvELvIac.js";import{M as H}from"./MainPageNavbar-BfM50q-7.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./SortingByFilter-CjZ8gKSr.js";const N={name:"Index",components:{MainPageNavBar:H,AdminIndexHeaderTitle:k,AdminIndexHeader:B,AdminIndexFilter:C,AdminIndexSearch:F,ClientFooterDown:y,ClientScrollTimeline:b,ClientPostFilter:A,Link:g,FsLightbox:v,Head:_,ClientPost:P,ClientPostSearch:I},data(){return{}},props:{journals:{type:Array}},methods:{},mounted(){}},D={class:"flex flex-col h-screen"},M={class:"flex-grow"},S={class:"relative mb-auto mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},$={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},j={class:"space-y-5 md:space-y-4"},T={class:"space-y-5 md:space-y-4"},V={class:"max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto"},z={class:"grid sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-3 gap-3 sm:gap-6"},E={class:"p-4 md:p-5 w-full"},J={class:"flex justify-between items-center gap-x-3"},W={class:"grow"},Y={class:"group-hover:text-blue-600 font-semibold text-gray-800"};function Z(a,t,m,q,G,K){const c=s("Head"),p=s("MainPageNavBar"),x=s("Link"),u=s("ClientFooterDown");return n(),i(d,null,[o(c,null,{default:l(()=>t[0]||(t[0]=[e("title",null,"Научные периодические издания НТГСПИ",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),o(p,{class:"border-b",sections:a.$page.props.navigation},null,8,["sections"]),e("div",D,[e("main",M,[e("div",S,[e("div",$,[e("div",null,[e("div",j,[e("div",T,[e("div",V,[t[2]||(t[2]=e("div",{class:"max-w-2xl text-center mx-auto mb-10 lg:mb-14"},[e("h2",{class:"text-2xl font-bold md:text-4xl md:leading-tight dark:text-white"},"Научные периодические издания НТГСПИ"),e("p",{class:"mt-1 text-gray-600 dark:text-neutral-400"},"We've helped some great companies brand, design and get to market.")],-1)),e("div",z,[(n(!0),i(d,null,h(m.journals.data,r=>(n(),f(x,{href:a.route("client.academicJournals.show",r.slug),class:"group flex items-center bg-white border shadow-sm rounded-xl hover:shadow-md focus:outline-none focus:shadow-md transition"},{default:l(()=>[e("div",E,[e("div",J,[e("div",W,[e("h3",Y,w(r.title),1)]),t[1]||(t[1]=e("div",null,[e("svg",{class:"shrink-0 size-5 text-gray-800",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"},[e("path",{d:"m9 18 6-6-6-6"})])],-1))])])]),_:2},1032,["href"]))),256))])])])])])])])]),o(u)])],64)}const re=L(N,[["render",Z]]);export{re as default};
@@ -1 +1 @@
import{M as f}from"./MainNavbar-Ox7xJRDB.js";import{i as h,Z as _,r as n,c,a,w as r,b as e,F as p,d as b,o as d,e as v,t as i}from"./app-lWrE2aWG.js";import{F as y}from"./v3-CDJmn87G.js";import{C as w}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as k}from"./SearchModal-CGHtjMJb.js";import{A as C,a as F,b as B}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A}from"./AdminIndexHeader-BLYLBYAX.js";import{C as M,a as P}from"./ClientPostSearch-DByct-eL.js";import{C as I}from"./ClientPost-HujX0ISt.js";import{C as N}from"./ClientEventSelectDate-UncMoO_R.js";import{M as D}from"./MainPageNavbar-BsdceJwT.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-DAe1p4QU.js";const L={name:"Index",components:{MainPageNavBar:D,ClientEventSelectDate:N,AdminIndexHeaderTitle:C,AdminIndexHeader:A,AdminIndexFilter:F,AdminIndexSearch:B,ClientFooterDown:k,ClientScrollTimeline:w,ClientPostFilter:M,Link:h,MainNavbar:f,FsLightbox:y,Head:_,ClientPost:I,ClientPostSearch:P},props:{posts:{type:Array}},methods:{},mounted(){}},S={class:"flex flex-col h-screen"},E={class:"flex-grow"},j={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},z={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},T={class:"container px-8 mx-auto xl:px-5 max-w-screen-md"},V={class:"my-10 sm:my-14"},W={class:"grow"},Y={class:"flex flex-col h-full"},Z={class:"mb-3"},q={class:"inline-flex items-center gap-1.5 py-1.5 px-3 rounded-md text-[12px] text-gray-600"},G={class:"inline-flex items-center gap-1.5 py-1.5 px-3 rounded-md text-xs font-medium bg-[#E9F2FE] text-blue-600"},J={class:"text-lg sm:text-2xl font-semibold text-gray-800 group-hover:text-blue-600"},K={class:"mt-2 text-gray-600"},O={class:"mt-10 flex items-center justify-center"},Q={class:"isolate inline-flex -space-x-px rounded-md shadow-sm","aria-label":"Pagination"};function R(m,t,s,U,X,$){const x=n("Head"),g=n("MainPageNavBar"),l=n("Link"),u=n("ClientFooterDown");return d(),c(p,null,[a(x,null,{default:r(()=>t[0]||(t[0]=[e("title",null,"Мероприятия",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),a(g,{class:"border-b",sections:m.$page.props.navigation},null,8,["sections"]),e("div",S,[e("main",E,[e("div",j,[e("div",z,[e("div",null,[t[3]||(t[3]=e("div",{class:"space-y-5 md:space-y-4"},[e("div",{class:"max-w-2xl text-center mx-auto mb-10 lg:mb-14"},[e("h2",{class:"text-2xl font-bold md:text-4xl md:leading-tight dark:text-white"},"Заметки библиотеки"),e("p",{class:"mt-1 text-gray-600 dark:text-neutral-400"},"We've helped some great companies brand, design and get to market.")])],-1)),e("div",T,[e("div",V,[(d(!0),c(p,null,b(s.posts.data,o=>(d(),v(l,{href:m.route("client.library.news.show",o.id),class:"group sm:flex rounded-xl mb-4"},{default:r(()=>[e("div",W,[e("div",Y,[e("div",Z,[e("p",q,i(o.created_at),1),e("p",G,i(o.category),1)]),e("h3",J,i(o.title),1),e("p",K,i(o.preview_text),1)])])]),_:2},1032,["href"]))),256)),e("div",O,[e("nav",Q,[a(l,{as:"button",href:s.posts.links.prev,disabled:s.posts.links.prev===null,class:"relative inline-flex items-center gap-1 rounded-l-md border border-gray-300 bg-white px-3 py-2 pr-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>t[1]||(t[1]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 19.5 8.25 12l7.5-7.5"})],-1),e("span",null,"Предыдущая",-1)])),_:1},8,["href","disabled"]),a(l,{as:"button",href:s.posts.links.next,disabled:s.posts.links.next===null,class:"relative inline-flex items-center gap-1 rounded-r-md border border-gray-300 bg-white px-3 py-2 pl-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>t[2]||(t[2]=[e("span",null,"Следующая",-1),e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m8.25 4.5 7.5 7.5-7.5 7.5"})],-1)])),_:1},8,["href","disabled"])])])])])])])])]),a(u)])],64)}const ge=H(L,[["render",R]]);export{ge as default};
import{M as f}from"./MainNavbar-5-nqk6c_.js";import{i as h,Z as _,r as n,c,a,w as r,b as e,F as p,d as b,o as d,e as v,t as i}from"./app-lT3z3TR3.js";import{F as y}from"./v3-B5UP5GZw.js";import{C as w}from"./ClientScrollTimeline-BxA_EWwM.js";import{C as k}from"./SearchModal-YI3bdWA9.js";import{A as C,a as F,b as B}from"./AdminIndexHeaderTitle-DyC17FG6.js";import{A}from"./AdminIndexHeader-Ci_3kRvq.js";import{C as M,a as P}from"./ClientPostSearch-85XLLeIC.js";import{C as I}from"./ClientPost-KvELvIac.js";import{C as N}from"./ClientEventSelectDate-Dy72p0i3.js";import{M as D}from"./MainPageNavbar-BfM50q-7.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";/* empty css */import"./SortingByFilter-CjZ8gKSr.js";const L={name:"Index",components:{MainPageNavBar:D,ClientEventSelectDate:N,AdminIndexHeaderTitle:C,AdminIndexHeader:A,AdminIndexFilter:F,AdminIndexSearch:B,ClientFooterDown:k,ClientScrollTimeline:w,ClientPostFilter:M,Link:h,MainNavbar:f,FsLightbox:y,Head:_,ClientPost:I,ClientPostSearch:P},props:{posts:{type:Array}},methods:{},mounted(){}},S={class:"flex flex-col h-screen"},E={class:"flex-grow"},j={class:"relative mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:flex md:flex-row md:py-10"},z={class:"px-4 pt-6 lg:pt-10 pb-12 sm:px-6 lg:px-8 mx-auto"},T={class:"container px-8 mx-auto xl:px-5 max-w-screen-md"},V={class:"my-10 sm:my-14"},W={class:"grow"},Y={class:"flex flex-col h-full"},Z={class:"mb-3"},q={class:"inline-flex items-center gap-1.5 py-1.5 px-3 rounded-md text-[12px] text-gray-600"},G={class:"inline-flex items-center gap-1.5 py-1.5 px-3 rounded-md text-xs font-medium bg-[#E9F2FE] text-blue-600"},J={class:"text-lg sm:text-2xl font-semibold text-gray-800 group-hover:text-blue-600"},K={class:"mt-2 text-gray-600"},O={class:"mt-10 flex items-center justify-center"},Q={class:"isolate inline-flex -space-x-px rounded-md shadow-sm","aria-label":"Pagination"};function R(m,t,s,U,X,$){const x=n("Head"),g=n("MainPageNavBar"),l=n("Link"),u=n("ClientFooterDown");return d(),c(p,null,[a(x,null,{default:r(()=>t[0]||(t[0]=[e("title",null,"Мероприятия",-1),e("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),a(g,{class:"border-b",sections:m.$page.props.navigation},null,8,["sections"]),e("div",S,[e("main",E,[e("div",j,[e("div",z,[e("div",null,[t[3]||(t[3]=e("div",{class:"space-y-5 md:space-y-4"},[e("div",{class:"max-w-2xl text-center mx-auto mb-10 lg:mb-14"},[e("h2",{class:"text-2xl font-bold md:text-4xl md:leading-tight dark:text-white"},"Заметки библиотеки"),e("p",{class:"mt-1 text-gray-600 dark:text-neutral-400"},"We've helped some great companies brand, design and get to market.")])],-1)),e("div",T,[e("div",V,[(d(!0),c(p,null,b(s.posts.data,o=>(d(),v(l,{href:m.route("client.library.news.show",o.id),class:"group sm:flex rounded-xl mb-4"},{default:r(()=>[e("div",W,[e("div",Y,[e("div",Z,[e("p",q,i(o.created_at),1),e("p",G,i(o.category),1)]),e("h3",J,i(o.title),1),e("p",K,i(o.preview_text),1)])])]),_:2},1032,["href"]))),256)),e("div",O,[e("nav",Q,[a(l,{as:"button",href:s.posts.links.prev,disabled:s.posts.links.prev===null,class:"relative inline-flex items-center gap-1 rounded-l-md border border-gray-300 bg-white px-3 py-2 pr-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>t[1]||(t[1]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 19.5 8.25 12l7.5-7.5"})],-1),e("span",null,"Предыдущая",-1)])),_:1},8,["href","disabled"]),a(l,{as:"button",href:s.posts.links.next,disabled:s.posts.links.next===null,class:"relative inline-flex items-center gap-1 rounded-r-md border border-gray-300 bg-white px-3 py-2 pl-4 text-sm font-medium text-gray-500 hover:bg-gray-50 focus:z-20 disabled:pointer-events-none disabled:opacity-40 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300"},{default:r(()=>t[2]||(t[2]=[e("span",null,"Следующая",-1),e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon",class:"h-3 w-3"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m8.25 4.5 7.5 7.5-7.5 7.5"})],-1)])),_:1},8,["href","disabled"])])])])])])])])]),a(u)])],64)}const ge=H(L,[["render",R]]);export{ge as default};
-1
View File
@@ -1 +0,0 @@
import{i as A,Z as E,r as c,c as s,a as u,w as m,b as t,n as w,F as l,d as p,o as n,g as b,e as C,t as g}from"./app-lWrE2aWG.js";import{F}from"./v3-CDJmn87G.js";import{C as B}from"./ClientScrollTimeline-9x6SH9Qu.js";import{C as I}from"./SearchModal-CGHtjMJb.js";import{A as L,a as N,b as P}from"./AdminIndexHeaderTitle-BXYEMOTq.js";import{A as T}from"./AdminIndexHeader-BLYLBYAX.js";import{C as j,a as H}from"./ClientPostSearch-DByct-eL.js";import{C as M}from"./ClientPost-HujX0ISt.js";import S from"./ClientImageSlider-ZnyNtD9R.js";import{M as D}from"./MainPageNavbar-BsdceJwT.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./SortingByFilter-DAe1p4QU.js";const V={name:"Index",components:{MainPageNavBar:D,ClientImageSlider:S,AdminIndexHeaderTitle:L,AdminIndexHeader:T,AdminIndexFilter:N,AdminIndexSearch:P,ClientFooterDown:I,ClientScrollTimeline:B,ClientPostFilter:j,Link:A,FsLightbox:F,Head:E,ClientPost:M,ClientPostSearch:H},data(){return{direction_id:this.filters.dir_id}},props:{directionAdditionalEducations:{type:Object},additionalEducations:{type:Object},filters:{type:Object}},methods:{transformToColumns(e){return((x,f)=>x.reduce((d,v,a)=>a%f?d:[...d,x.slice(a,a+f)],[]))(e,Math.ceil(e.length/2)).reverse()},textLimit(e,i){if(e.length>i){let r;return r=e.substring(0,i),r+"..."}return e}},mounted(){}},$={class:"flex flex-col h-screen"},Y={class:"flex-grow"},Z={class:"relative mb-auto mx-auto mt-[67px] max-w-screen-xl px-4 py-10 md:py-10"},q={class:"w-100"},z={class:"space-y-5 md:space-y-4"},G={class:"space-y-5 md:space-y-4"},J={class:""},K={class:"-mb-0.5 flex justify-center space-x-6 flex-wrap"},Q={class:"container mx-auto xl:px-5 py-5 lg:py-4"},R={class:"w-full mx-auto gap-x3 flex flex-wrap lg:justify-center"},U={class:"flex flex-col"},W={style:{height:"max-content"},class:"px-2"},X={class:"text-brand-primary mb-2 mt-2 text-lg font-semibold upper tracking-tight dark:text-white lg:text-md lg:leading-tight"};function tt(e,i,r,x,f,d){const v=c("Head"),a=c("MainPageNavBar"),h=c("Link"),k=c("ClientFooterDown");return n(),s(l,null,[u(v,null,{default:m(()=>i[0]||(i[0]=[t("title",null,"Дополнительное образование",-1),t("meta",{name:"description",content:"Your page description"},null,-1)])),_:1}),u(a,{class:"border-b",sections:e.$page.props.navigation},null,8,["sections"]),t("div",$,[t("main",Y,[t("div",Z,[t("div",q,[t("div",null,[t("div",z,[i[2]||(i[2]=t("h1",{class:"text-brand-primary text-center mb-3 mt-2 text-3xl font-semibold tracking-tight dark:text-white lg:text-[40px] lg:leading-tight"}," Дополнительное образование ",-1)),t("div",G,[t("div",null,[t("div",J,[t("nav",K,[u(h,{class:w([{"border-blue-500 text-blue-600":this.direction_id===null,"text-gray-500 border-transparent":this.direction_id!==null},"py-2 px-1 inline-flex items-center gap-2 border-b text-sm whitespace-nowrap hover:text-blue-600 focus:outline-none focus:text-blue-600"]),href:e.route("client.additionalEducation.index")},{default:m(()=>i[1]||(i[1]=[b(" Все программы ")])),_:1},8,["class","href"]),(n(!0),s(l,null,p(r.directionAdditionalEducations.data,o=>(n(),C(h,{class:w([{"border-blue-500 text-blue-600":o.id==this.filters.dir_id,"text-gray-500 border-transparent":o.id!=this.direction_id},"py-2 px-1 inline-flex items-center gap-2 border-b text-sm whitespace-nowrap hover:text-blue-600 focus:outline-none focus:text-blue-600"]),href:e.route("client.additionalEducation.index",{dir_id:o.id})},{default:m(()=>[b(g(o.title),1)]),_:2},1032,["class","href"]))),256))])]),t("div",Q,[t("div",R,[(n(!0),s(l,null,p(d.transformToColumns(this.additionalEducations.data),o=>(n(),s("div",U,[(n(!0),s(l,null,p(o,y=>(n(),s("div",W,[t("h1",X,g(y.title),1),(n(!0),s(l,null,p(y.additionalEducations,_=>(n(),C(h,{key:_.id,class:"block text-[#1E57A3] hover:text-blue-600 duration-200 text-sm underline underline-offset-2 py-1",href:e.route("client.additionalEducation.show",_)},{default:m(()=>[b(g(_.title),1)]),_:2},1032,["href"]))),128))]))),256))]))),256))])])])])])])])])]),u(k)])],64)}const pt=O(V,[["render",tt]]);export{pt as default};
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More