mirror of
https://github.com/Deathgarden-Rebirth/Deathgarden_Rebirth-Rewrite.git
synced 2026-04-26 02:00:32 -05:00
Almost Finished the inbox messages adminpage. Now the only thing missing is the creation of new messages and the mailer.
This commit is contained in:
parent
16e1ab191d
commit
b975170b55
|
|
@ -3,11 +3,47 @@
|
|||
namespace App\Http\Controllers\Api\Catalog;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Game\CatalogItem;
|
||||
use Auth;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class CatalogController extends Controller
|
||||
{
|
||||
public function getCatalog(string $catalogVersion): string {
|
||||
return Storage::disk('local')->get('/catalog/'.$catalogVersion.'.json');
|
||||
const CATALOG_DROPDOWN_PAGINATION_LIMIT = 20;
|
||||
|
||||
public function getCatalog(string $catalogVersion): string
|
||||
{
|
||||
return Storage::disk('local')->get('/catalog/' . $catalogVersion . '.json');
|
||||
}
|
||||
|
||||
public function catalogItemDropdown(Request $request)
|
||||
{
|
||||
if(!Auth::check())
|
||||
abort(403, 'You are not logged in.');
|
||||
|
||||
$searchTerm = $request->get('term');
|
||||
|
||||
if($searchTerm === null)
|
||||
abort(400, 'Search term must be provided.');
|
||||
|
||||
$items = CatalogItem::where('display_name', 'LIKE', "%{$searchTerm}%")
|
||||
->select(['id', 'display_name'])
|
||||
->paginate(static::CATALOG_DROPDOWN_PAGINATION_LIMIT);
|
||||
|
||||
$options = [];
|
||||
$items->each(function ($item) use (&$options) {
|
||||
$options[] = [
|
||||
'id' => $item->id,
|
||||
'text' => $item->display_name,
|
||||
];
|
||||
});
|
||||
|
||||
return [
|
||||
'results' => $options,
|
||||
'pagination' => [
|
||||
'more' => $items->currentPage() < $items->lastPage(),
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ abstract class AdminToolController extends Controller
|
|||
|
||||
public function __construct()
|
||||
{
|
||||
View::share('title', static::$name);
|
||||
$this->overrideTitle(static::$name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -54,4 +54,8 @@ final public static function getNeededPermission(): string
|
|||
{
|
||||
return static::$neededPermission->value;
|
||||
}
|
||||
|
||||
final protected function overrideTitle(string $title): void {
|
||||
View::share('title', $title);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,14 @@
|
|||
use App\Enums\Game\Characters;
|
||||
use App\Enums\Game\Runner;
|
||||
use App\Http\Requests\Api\Admin\Tools\BanPostRequest;
|
||||
use App\Http\Requests\Api\Admin\Tools\InboxMessagePostRequest;
|
||||
use App\Http\Requests\Api\Admin\UserDetails\EditUserRequest;
|
||||
use App\Models\Game\Inbox\InboxMessage;
|
||||
use App\Models\User\Ban;
|
||||
use App\Models\User\User;
|
||||
use Auth;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Facades\View;
|
||||
|
|
@ -52,7 +55,7 @@ public function details(User $user)
|
|||
if(!Auth::user()->can(Permissions::VIEW_USERS->value))
|
||||
abort(403, 'No Permission to view this Page');
|
||||
|
||||
View::share('title', 'User Details: '.$user->last_known_username);
|
||||
$this->overrideTitle('User Details: '.$user->last_known_username);
|
||||
|
||||
return view('admin.tools.user-details', [
|
||||
'user' => $user,
|
||||
|
|
@ -105,7 +108,7 @@ public function bans(User $user)
|
|||
abort(403, 'You are not allowed to edit Bans of a User.');
|
||||
|
||||
$bans = $user->bans;
|
||||
View::share('title', 'Bans for User: '.$user->id.'('.$user->last_known_username.')');
|
||||
$this->overrideTitle('Bans for User: '.$user->id.'('.$user->last_known_username.')');
|
||||
|
||||
return view('admin.tools.user-bans', [
|
||||
'user' => $user,
|
||||
|
|
@ -146,4 +149,44 @@ public function createBan(User $user) {
|
|||
|
||||
return back();
|
||||
}
|
||||
|
||||
public function inbox(User $user)
|
||||
{
|
||||
if(!Auth::user()->can(Permissions::VIEW_USERS->value))
|
||||
abort(403, 'You are not allowed to view the inbox of users.');
|
||||
|
||||
$allowEdit = Auth::user()->can(Permissions::EDIT_USERS->value);
|
||||
$allowEdit = true;
|
||||
|
||||
/** @var InboxMessage[]|Collection $messages */
|
||||
$messages = $user->inboxMessages()->withTrashed()->get();
|
||||
|
||||
$this->overrideTitle('Inbox for User: '.$user->last_known_username);
|
||||
return view('admin.tools.user-inbox', [
|
||||
'messages' => $messages,
|
||||
'allowEdit' => $allowEdit,
|
||||
]);
|
||||
}
|
||||
|
||||
public function inboxMessagePost(InboxMessagePostRequest $request, User $user, InboxMessage $message)
|
||||
{
|
||||
switch ($request->submitAction) {
|
||||
case HttpMethod::DELETE:
|
||||
$message->delete();
|
||||
Session::flash('alert-success', 'Message Deleted Successfully!');
|
||||
break;
|
||||
case HttpMethod::PUT:
|
||||
$message->title = $request->title;
|
||||
$message->body = $request->body;
|
||||
$message->flag = $request->flag;
|
||||
$message->tag = $request->tag;
|
||||
$message->expire_at = $request->expireAt;
|
||||
$message->setClaimables($request->rewards);
|
||||
$message->save();
|
||||
Session::flash('alert-success', 'Message successfully saved!');
|
||||
break;
|
||||
}
|
||||
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
85
dist/app/Http/Requests/Api/Admin/Tools/InboxMessagePostRequest.php
vendored
Normal file
85
dist/app/Http/Requests/Api/Admin/Tools/InboxMessagePostRequest.php
vendored
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Api\Admin\Tools;
|
||||
|
||||
use App\APIClients\HttpMethod;
|
||||
use App\Enums\Auth\Permissions;
|
||||
use App\Http\Responses\Api\Player\Inbox\InboxMessageReward;
|
||||
use Auth;
|
||||
use Illuminate\Contracts\Validation\Validator;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class InboxMessagePostRequest extends FormRequest
|
||||
{
|
||||
public string $title;
|
||||
|
||||
public string $body;
|
||||
|
||||
public string $flag;
|
||||
|
||||
public string $tag;
|
||||
|
||||
public ?Carbon $expireAt;
|
||||
|
||||
/** @var InboxMessageReward[] */
|
||||
public array $rewards;
|
||||
|
||||
public HttpMethod $submitAction;
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return Auth::check() && Auth::user()->can(Permissions::EDIT_USERS->value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'title' => 'required|string',
|
||||
'body' => 'required|string',
|
||||
'flag' => ['required', Rule::in(['NEW', 'READ'])],
|
||||
'tag' => 'required|string',
|
||||
'expireAt' => 'sometimes|nullable|date',
|
||||
'rewards' => 'sometimes|array',
|
||||
'submitAction' => ['required', Rule::enum(HttpMethod::class)],
|
||||
];
|
||||
}
|
||||
|
||||
protected function passedValidation()
|
||||
{
|
||||
$this->title = $this->input('title');
|
||||
$this->body = $this->input('body');
|
||||
$this->flag = $this->input('flag');
|
||||
$this->tag = $this->input('tag');
|
||||
$this->expireAt = $this->has('expireAt') ? new Carbon($this->input('expireAt')) : null;
|
||||
$this->submitAction = HttpMethod::tryFrom($this->input('submitAction'));
|
||||
|
||||
$rewardTypes = $this->input('rewards.type');
|
||||
$rewardIds = $this->input('rewards.id');
|
||||
$rewardAmounts = $this->input('rewards.amount');
|
||||
|
||||
foreach ($rewardIds as $index => $id) {
|
||||
$this->rewards[] = new InboxMessageReward(
|
||||
$rewardTypes[$index],
|
||||
$rewardAmounts[$index],
|
||||
$id,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected function failedValidation(Validator $validator)
|
||||
{
|
||||
\Session::flash('alert-error', $validator->errors()->first());
|
||||
|
||||
parent::failedValidation($validator); // TODO: Change the autogenerated stub
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
namespace App\Http\Responses\Api\Player\Inbox;
|
||||
|
||||
use App\Models\Game\CatalogItem;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
class InboxMessageReward
|
||||
{
|
||||
public function __construct(
|
||||
|
|
@ -10,4 +13,19 @@ public function __construct(
|
|||
public string $id,
|
||||
)
|
||||
{}
|
||||
|
||||
public function getRewardName(): string {
|
||||
if ($this->rewardType === 'Currency') {
|
||||
return match ($this->id) {
|
||||
'CurrencyA' => 'Currency A',
|
||||
'CurrencyB' => 'Currency B',
|
||||
'CurrencyC' => 'Currency C',
|
||||
default => 'Invalid Currency'
|
||||
};
|
||||
}
|
||||
|
||||
$item = CatalogItem::find(Uuid::fromString($this->id)->toString());
|
||||
|
||||
return $item === null ? 'Invalid Item' : $item->display_name;
|
||||
}
|
||||
}
|
||||
9
dist/app/Models/Game/Inbox/InboxMessage.php
vendored
9
dist/app/Models/Game/Inbox/InboxMessage.php
vendored
|
|
@ -66,7 +66,7 @@ public function getClaimables(): array {
|
|||
$result = [];
|
||||
foreach ($this->claimable as $claimable) {
|
||||
$result[] = new InboxMessageReward(
|
||||
$claimable['type'],
|
||||
$claimable['rewardType'],
|
||||
$claimable['amount'],
|
||||
$claimable['id'],
|
||||
);
|
||||
|
|
@ -75,12 +75,15 @@ public function getClaimables(): array {
|
|||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function setClaimables(array $claimables): void {
|
||||
$this->claimable = [];
|
||||
$newClaimables = [];
|
||||
|
||||
foreach ($claimables as $claimable) {
|
||||
$this->claimable[] = (array)$claimable;
|
||||
$newClaimables[] = (array)$claimable;
|
||||
}
|
||||
|
||||
$this->claimable = $newClaimables;
|
||||
}
|
||||
|
||||
public function prunable(): Builder|InboxMessage
|
||||
|
|
|
|||
22
dist/app/View/Components/Admin/Tools/InboxMessage.php
vendored
Normal file
22
dist/app/View/Components/Admin/Tools/InboxMessage.php
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components\Admin\Tools;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class InboxMessage extends Component
|
||||
{
|
||||
public function __construct(
|
||||
public \App\Models\Game\Inbox\InboxMessage $message,
|
||||
public bool $allowEdit = false,
|
||||
public ?string $idPrefix = null,
|
||||
)
|
||||
{}
|
||||
|
||||
public function render(): View|Closure|string
|
||||
{
|
||||
return view('components.admin.tools.inbox-message');
|
||||
}
|
||||
}
|
||||
30
dist/app/View/Components/Admin/Tools/ItemSelector.php
vendored
Normal file
30
dist/app/View/Components/Admin/Tools/ItemSelector.php
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components\Admin\Tools;
|
||||
|
||||
use App\Http\Responses\Api\Player\Inbox\InboxMessageReward;
|
||||
use Closure;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class ItemSelector extends Component
|
||||
{
|
||||
/** @var InboxMessageReward[] */
|
||||
public array $rewards;
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*/
|
||||
public function __construct(array $rewards)
|
||||
{
|
||||
$this->rewards = $rewards;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*/
|
||||
public function render(): View|Closure|string
|
||||
{
|
||||
return view('components.admin.tools.item-selector');
|
||||
}
|
||||
}
|
||||
2
dist/app/View/Components/Inputs/Dropdown.php
vendored
2
dist/app/View/Components/Inputs/Dropdown.php
vendored
|
|
@ -13,7 +13,7 @@ class Dropdown extends Component
|
|||
*/
|
||||
public function __construct(
|
||||
public array $cases,
|
||||
public \BackedEnum $selected)
|
||||
public \BackedEnum|string $selected)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
421
dist/package-lock.json
generated
vendored
421
dist/package-lock.json
generated
vendored
|
|
@ -1,16 +1,18 @@
|
|||
{
|
||||
"name": "dist",
|
||||
"name": "html",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "html",
|
||||
"dependencies": {
|
||||
"@inertiajs/vue3": "^1.0.14",
|
||||
"@vitejs/plugin-vue": "^5.0.3",
|
||||
"alpinejs": "^3.13.7",
|
||||
"dotenv": "^16.4.2",
|
||||
"jquery": "^3.7.1",
|
||||
"jquery-modal": "^0.9.2"
|
||||
"jquery-modal": "^0.9.2",
|
||||
"select2": "^4.1.0-rc.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.17",
|
||||
|
|
@ -87,9 +89,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/@esbuild/aix-ppc64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
|
||||
"integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
|
||||
"integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
|
|
@ -102,9 +104,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
|
||||
"integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
|
||||
"integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -117,9 +119,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
|
||||
"integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
|
||||
"integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -132,9 +134,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -147,9 +149,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-arm64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
|
||||
"integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
|
||||
"integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -162,9 +164,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -177,9 +179,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-arm64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
|
||||
"integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
|
||||
"integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -192,9 +194,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -207,9 +209,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
|
||||
"integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
|
||||
"integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -222,9 +224,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
|
||||
"integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
|
||||
"integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -237,9 +239,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ia32": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
|
||||
"integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
|
||||
"integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
|
|
@ -252,9 +254,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-loong64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
|
||||
"integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
|
||||
"integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
|
|
@ -267,9 +269,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-mips64el": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
|
||||
"integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
|
||||
"integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
|
||||
"cpu": [
|
||||
"mips64el"
|
||||
],
|
||||
|
|
@ -282,9 +284,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ppc64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
|
||||
"integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
|
||||
"integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
|
|
@ -297,9 +299,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-riscv64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
|
||||
"integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
|
||||
"integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
|
|
@ -312,9 +314,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-s390x": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
|
||||
"integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
|
||||
"integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
|
|
@ -327,9 +329,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -342,9 +344,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/netbsd-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -357,9 +359,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/openbsd-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -372,9 +374,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/sunos-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -387,9 +389,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-arm64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
|
||||
"integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
|
||||
"integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -402,9 +404,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-ia32": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
|
||||
"integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
|
||||
"integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
|
|
@ -417,9 +419,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-x64": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
|
||||
"integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
|
||||
"integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -629,9 +631,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
|
||||
"integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
|
||||
"integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -641,9 +643,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
|
||||
"integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
|
||||
"integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -653,9 +655,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
|
||||
"integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
|
||||
"integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -665,9 +667,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
|
||||
"integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
|
||||
"integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -677,9 +679,21 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
|
||||
"integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
|
||||
"integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
|
||||
"integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -689,9 +703,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
|
||||
"integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
|
||||
"integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -701,9 +715,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
|
||||
"integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
|
||||
"integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -712,10 +726,22 @@
|
|||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
|
||||
"integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
|
||||
"integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
|
||||
"integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
|
|
@ -724,10 +750,22 @@
|
|||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
|
||||
"integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
|
||||
"integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
|
||||
"integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -737,9 +775,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
|
||||
"integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
|
||||
"integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -749,9 +787,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
|
||||
"integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
|
||||
"integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -761,9 +799,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
|
||||
"integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
|
||||
"integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
|
|
@ -773,9 +811,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
|
||||
"integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
|
||||
"integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -1426,9 +1464,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.19.12",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
|
||||
"integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
|
||||
"integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
|
||||
"hasInstallScript": true,
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
|
|
@ -1437,29 +1475,29 @@
|
|||
"node": ">=12"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/aix-ppc64": "0.19.12",
|
||||
"@esbuild/android-arm": "0.19.12",
|
||||
"@esbuild/android-arm64": "0.19.12",
|
||||
"@esbuild/android-x64": "0.19.12",
|
||||
"@esbuild/darwin-arm64": "0.19.12",
|
||||
"@esbuild/darwin-x64": "0.19.12",
|
||||
"@esbuild/freebsd-arm64": "0.19.12",
|
||||
"@esbuild/freebsd-x64": "0.19.12",
|
||||
"@esbuild/linux-arm": "0.19.12",
|
||||
"@esbuild/linux-arm64": "0.19.12",
|
||||
"@esbuild/linux-ia32": "0.19.12",
|
||||
"@esbuild/linux-loong64": "0.19.12",
|
||||
"@esbuild/linux-mips64el": "0.19.12",
|
||||
"@esbuild/linux-ppc64": "0.19.12",
|
||||
"@esbuild/linux-riscv64": "0.19.12",
|
||||
"@esbuild/linux-s390x": "0.19.12",
|
||||
"@esbuild/linux-x64": "0.19.12",
|
||||
"@esbuild/netbsd-x64": "0.19.12",
|
||||
"@esbuild/openbsd-x64": "0.19.12",
|
||||
"@esbuild/sunos-x64": "0.19.12",
|
||||
"@esbuild/win32-arm64": "0.19.12",
|
||||
"@esbuild/win32-ia32": "0.19.12",
|
||||
"@esbuild/win32-x64": "0.19.12"
|
||||
"@esbuild/aix-ppc64": "0.20.2",
|
||||
"@esbuild/android-arm": "0.20.2",
|
||||
"@esbuild/android-arm64": "0.20.2",
|
||||
"@esbuild/android-x64": "0.20.2",
|
||||
"@esbuild/darwin-arm64": "0.20.2",
|
||||
"@esbuild/darwin-x64": "0.20.2",
|
||||
"@esbuild/freebsd-arm64": "0.20.2",
|
||||
"@esbuild/freebsd-x64": "0.20.2",
|
||||
"@esbuild/linux-arm": "0.20.2",
|
||||
"@esbuild/linux-arm64": "0.20.2",
|
||||
"@esbuild/linux-ia32": "0.20.2",
|
||||
"@esbuild/linux-loong64": "0.20.2",
|
||||
"@esbuild/linux-mips64el": "0.20.2",
|
||||
"@esbuild/linux-ppc64": "0.20.2",
|
||||
"@esbuild/linux-riscv64": "0.20.2",
|
||||
"@esbuild/linux-s390x": "0.20.2",
|
||||
"@esbuild/linux-x64": "0.20.2",
|
||||
"@esbuild/netbsd-x64": "0.20.2",
|
||||
"@esbuild/openbsd-x64": "0.20.2",
|
||||
"@esbuild/sunos-x64": "0.20.2",
|
||||
"@esbuild/win32-arm64": "0.20.2",
|
||||
"@esbuild/win32-ia32": "0.20.2",
|
||||
"@esbuild/win32-x64": "0.20.2"
|
||||
}
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
|
|
@ -1548,9 +1586,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.5",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
|
||||
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
|
|
@ -1742,11 +1780,18 @@
|
|||
"integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
|
||||
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
|
||||
"dev": true
|
||||
"node_modules/ip-address": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
|
||||
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"jsbn": "1.1.0",
|
||||
"sprintf-js": "^1.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
|
|
@ -1854,6 +1899,12 @@
|
|||
"resolved": "https://registry.npmjs.org/jquery-modal/-/jquery-modal-0.9.2.tgz",
|
||||
"integrity": "sha512-Bx6jTBuiUbdywriWd0UAZK9v7FKEDCOD5uRh47qd4coGvx+dG4w8cOGe4TG2OoR1dNrXn6Aqaeu8MAA+Oz7vOw=="
|
||||
},
|
||||
"node_modules/jsbn": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
|
||||
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/kvparser": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/kvparser/-/kvparser-1.0.2.tgz",
|
||||
|
|
@ -2188,9 +2239,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.35",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
|
||||
"integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
|
||||
"version": "8.4.38",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
|
||||
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
|
@ -2208,7 +2259,7 @@
|
|||
"dependencies": {
|
||||
"nanoid": "^3.3.7",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.2"
|
||||
"source-map-js": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
|
|
@ -2459,9 +2510,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.9.6",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
|
||||
"integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
|
||||
"version": "4.18.0",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
|
||||
"integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.5"
|
||||
},
|
||||
|
|
@ -2473,19 +2524,22 @@
|
|||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.9.6",
|
||||
"@rollup/rollup-android-arm64": "4.9.6",
|
||||
"@rollup/rollup-darwin-arm64": "4.9.6",
|
||||
"@rollup/rollup-darwin-x64": "4.9.6",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.9.6",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.9.6",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.9.6",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.9.6",
|
||||
"@rollup/rollup-linux-x64-musl": "4.9.6",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.9.6",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.9.6",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.9.6",
|
||||
"@rollup/rollup-android-arm-eabi": "4.18.0",
|
||||
"@rollup/rollup-android-arm64": "4.18.0",
|
||||
"@rollup/rollup-darwin-arm64": "4.18.0",
|
||||
"@rollup/rollup-darwin-x64": "4.18.0",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.18.0",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.18.0",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.18.0",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.18.0",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.18.0",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.18.0",
|
||||
"@rollup/rollup-linux-x64-musl": "4.18.0",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.18.0",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.18.0",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.18.0",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
|
|
@ -2549,6 +2603,11 @@
|
|||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/select2": {
|
||||
"version": "4.1.0-rc.0",
|
||||
"resolved": "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz",
|
||||
"integrity": "sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A=="
|
||||
},
|
||||
"node_modules/set-function-length": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
|
||||
|
|
@ -2626,16 +2685,16 @@
|
|||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
|
||||
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
|
||||
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ip": "^2.0.0",
|
||||
"ip-address": "^9.0.5",
|
||||
"smart-buffer": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0",
|
||||
"node": ">= 10.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
|
|
@ -2654,13 +2713,19 @@
|
|||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sprintf-js": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
|
||||
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/steam-appticket": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/steam-appticket/-/steam-appticket-1.0.1.tgz",
|
||||
|
|
@ -3048,13 +3113,13 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.0.tgz",
|
||||
"integrity": "sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==",
|
||||
"version": "5.2.12",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz",
|
||||
"integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.19.3",
|
||||
"postcss": "^8.4.35",
|
||||
"rollup": "^4.2.0"
|
||||
"esbuild": "^0.20.1",
|
||||
"postcss": "^8.4.38",
|
||||
"rollup": "^4.13.0"
|
||||
},
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
|
|
|
|||
3
dist/package.json
vendored
3
dist/package.json
vendored
|
|
@ -22,6 +22,7 @@
|
|||
"alpinejs": "^3.13.7",
|
||||
"dotenv": "^16.4.2",
|
||||
"jquery": "^3.7.1",
|
||||
"jquery-modal": "^0.9.2"
|
||||
"jquery-modal": "^0.9.2",
|
||||
"select2": "^4.1.0-rc.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
3
dist/resources/css/app.scss
vendored
3
dist/resources/css/app.scss
vendored
|
|
@ -2,6 +2,7 @@
|
|||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@import "select2";
|
||||
@import "inputs-global";
|
||||
@import "modal";
|
||||
@import "table";
|
||||
@import "table";
|
||||
|
|
|
|||
51
dist/resources/css/components/admin/tools/inbox-message.scss
vendored
Normal file
51
dist/resources/css/components/admin/tools/inbox-message.scss
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
.inbox-entry-attributes {
|
||||
.section {
|
||||
@apply mt-4;
|
||||
|
||||
h1 {
|
||||
@apply text-2xl font-semibold;
|
||||
column-span: all;
|
||||
|
||||
&::after {
|
||||
@apply block w-full mb-4;
|
||||
content: "";
|
||||
border-top: 0.15rem solid;
|
||||
border-image: linear-gradient(to right, theme('colors.indigo.600') 10%, transparent) 1;
|
||||
}
|
||||
}
|
||||
|
||||
> div {
|
||||
@apply w-full;
|
||||
}
|
||||
}
|
||||
|
||||
div:has( > label) {
|
||||
@apply flex flex-nowrap w-full pt-3 flex-col sm:flex-row;
|
||||
|
||||
label {
|
||||
@apply inline-block w-48 sm:self-center py-2 sm:py-0;
|
||||
}
|
||||
|
||||
.input-global-checkbox {
|
||||
@apply size-6;
|
||||
}
|
||||
}
|
||||
|
||||
div:has( > input[type="checkbox"]) {
|
||||
@apply flex-row items-center;
|
||||
|
||||
}
|
||||
|
||||
.reward-item {
|
||||
@apply bg-slate-700 border border-gray-500 rounded-md p-4;
|
||||
|
||||
> div {
|
||||
@apply flex gap-4 justify-start p-0;
|
||||
|
||||
}
|
||||
|
||||
> div > span {
|
||||
@apply bg-slate-800 p-2 border border-gray-500 rounded-md;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
dist/resources/css/inputs-global.scss
vendored
2
dist/resources/css/inputs-global.scss
vendored
|
|
@ -1,3 +1,5 @@
|
|||
@import 'select2-tailwind';
|
||||
|
||||
[class^='input-global-'] {
|
||||
@apply transition-colors rounded-md border bg-slate-200 dark:bg-gray-800 border-gray-500 placeholder:text-black dark:placeholder:text-white;
|
||||
|
||||
|
|
|
|||
298
dist/resources/css/select2-tailwind.scss
vendored
Normal file
298
dist/resources/css/select2-tailwind.scss
vendored
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
// Source: https://github.com/Xibel/select2-tailwindcss
|
||||
|
||||
@tailwind base;
|
||||
|
||||
@tailwind components;
|
||||
|
||||
|
||||
.select2-container {
|
||||
/* The container where the selectbox is housing*/
|
||||
@apply relative box-border align-middle inline-block m-0;
|
||||
}
|
||||
.select2-container .select2-selection--single {
|
||||
/* Selection box itself */
|
||||
@apply box-border cursor-pointer block select-none shadow border rounded-md ;
|
||||
}
|
||||
|
||||
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||
/* DIV inside Selection box with text, clear button and arrow down*/
|
||||
@apply block h-6 pl-1 pr-6 truncate;
|
||||
}
|
||||
.select2-container .select2-selection--single .select2-selection__clear {
|
||||
/* The DIV where the X is housing to clear the chosen option */
|
||||
@apply relative -m-1;
|
||||
}
|
||||
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||
/*@apply;*/
|
||||
}
|
||||
|
||||
.select2-container .select2-selection--multiple {
|
||||
@apply box-border overflow-hidden h-4 cursor-pointer block select-none;
|
||||
}
|
||||
|
||||
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||
@apply inline-block pl-2 truncate whitespace-nowrap;
|
||||
}
|
||||
.select2-container .select2-search--inline {
|
||||
/* Search box*/
|
||||
@apply float-left;
|
||||
}
|
||||
.select2-container .select2-search--inline .select2-search__field {
|
||||
@apply box-border border dark:border-gray-600 pl-1 my-1 w-full text-base;
|
||||
}
|
||||
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
||||
@apply appearance-none;
|
||||
}
|
||||
|
||||
.select2-dropdown {
|
||||
/* Dropdown area after the arrow down is clicked */
|
||||
@apply absolute block w-auto box-border bg-slate-200 dark:bg-gray-800 border-solid border border-gray-500 z-50 float-left;
|
||||
}
|
||||
|
||||
.select2-results {
|
||||
@apply block text-black dark:text-gray-300;
|
||||
}
|
||||
|
||||
.select2-results__options {
|
||||
@apply list-none m-0 p-0;
|
||||
}
|
||||
|
||||
.select2-results__option {
|
||||
/* The rows with results that you see after dropdown.
|
||||
Increase p-1 to p-2 to have more space between results */
|
||||
@apply p-2 select-none;
|
||||
}
|
||||
.select2-results__option[aria-selected] {
|
||||
@apply cursor-pointer;
|
||||
}
|
||||
|
||||
.select2-container--open .select2-dropdown {
|
||||
/* Dropdown container opened and results are shown*/
|
||||
@apply mt-3 left-0;
|
||||
}
|
||||
|
||||
.select2-container--open .select2-dropdown--above {
|
||||
/* The left and right borders of the option rows */
|
||||
@apply rounded border-gray-400 dark:border-gray-700 shadow;
|
||||
}
|
||||
|
||||
.select2-container--open .select2-dropdown--below {
|
||||
/* The left and right borders of the option rows */
|
||||
@apply rounded border-gray-400 dark:border-gray-700 shadow;
|
||||
}
|
||||
|
||||
.select2-search--dropdown {
|
||||
/* Search dropdown element*/
|
||||
@apply block p-2;
|
||||
}
|
||||
.select2-search--dropdown .select2-search__field {
|
||||
/* Search box itself where you can enter text*/
|
||||
@apply h-10 p-1 bg-slate-100 dark:bg-gray-800 box-border rounded border-2 border-blue-300 dark:border-gray-700 dark:text-gray-200 outline-none;
|
||||
width: 100%;
|
||||
|
||||
&:focus-within {
|
||||
@apply dark:bg-gray-600 border-indigo-700;
|
||||
}
|
||||
}
|
||||
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
||||
@apply appearance-none;
|
||||
}
|
||||
.select2-search--dropdown.select2-search--hide {
|
||||
@apply hidden;
|
||||
}
|
||||
|
||||
.select2-close-mask {
|
||||
@apply block w-12 min-w-full m-0 p-0;
|
||||
border: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-height: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
opacity: 0;
|
||||
z-index: 99;
|
||||
background-color: #fff;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
|
||||
.select2-hidden-accessible {
|
||||
border: 0 !important;
|
||||
clip: rect(0 0 0 0) !important;
|
||||
-webkit-clip-path: inset(50%) !important;
|
||||
clip-path: inset(50%) !important;
|
||||
height: 1px !important;
|
||||
overflow: hidden !important;
|
||||
padding: 0 !important;
|
||||
position: absolute !important;
|
||||
width: 1px !important;
|
||||
white-space: nowrap !important; }
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Default template settings:
|
||||
|
||||
*/
|
||||
|
||||
.select2-container--default .select2-selection--single {
|
||||
/* Selection bar - Self */
|
||||
@apply p-2 h-10 bg-slate-200 dark:bg-gray-800 border border-solid dark:border-gray-500;
|
||||
|
||||
&[aria-expanded="true"] {
|
||||
@apply border-indigo-700;
|
||||
}
|
||||
}
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
/* Selection bar - Text color of the item you selected from the results */
|
||||
@apply text-gray-700 dark:text-gray-200;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--single .select2-selection__clear {
|
||||
/* Selection bar - Clear button - If this property is enabled*/
|
||||
@apply cursor-pointer float-right text-red-700;
|
||||
}
|
||||
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
||||
/* Selection bar - Color of the placeholder text before selection - If this property is enabled */
|
||||
@apply text-gray-600 dark:text-gray-300;
|
||||
}
|
||||
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||
/* Selection bar - DIV where the arrow pointing down is living*/
|
||||
@apply absolute right-0 top-0 h-10 w-8;
|
||||
}
|
||||
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
||||
/* Arrow is a CSS triangle that does not exists in Tailwind without a package */
|
||||
@apply absolute border-solid h-0 w-0 border-t-4 border-r-4 border-b-0 border-l-4;
|
||||
border-color: #000 transparent transparent transparent;
|
||||
left: 50%;
|
||||
margin-left: -4px;
|
||||
margin-top: -2px;
|
||||
top: 50%;
|
||||
}
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||
/* Selection bar - Clear button - If this property is enabled from right to left*/
|
||||
@apply float-left ml-4;
|
||||
}
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||
/* Placement of the dropdown arrow when in rtl mode */
|
||||
@apply left-0 right-auto;
|
||||
}
|
||||
|
||||
.select2-container--default.select2-container--disabled .select2-selection--single {
|
||||
/* Selection by property disabled*/
|
||||
@apply cursor-default bg-gray-300;
|
||||
}
|
||||
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
||||
/* Selection bar - Hide the clear cross when selection bar is disabled*/
|
||||
@apply hidden;
|
||||
}
|
||||
|
||||
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||
border-color: transparent transparent #888 transparent;
|
||||
border-width: 0 4px 5px 4px;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--multiple {
|
||||
@apply p-1 min-h-full h-full border border-solid dark:border-gray-700 rounded shadow bg-white dark:bg-slate-700;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
||||
@apply box-border list-none m-0 px-1 min-w-full;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
||||
@apply list-none;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
||||
@apply float-right cursor-pointer mt-1 mr-2 p-1;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
@apply bg-white dark:bg-slate-700 text-gray-700 dark:text-gray-200 border cursor-default rounded my-1 mr-1 px-2 float-left;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
||||
@apply text-gray-700 dark:text-gray-200 cursor-pointer inline-block mr-1;
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||
@apply text-gray-700 dark:text-gray-200;
|
||||
}
|
||||
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
||||
@apply border-2 outline-none;
|
||||
}
|
||||
|
||||
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
||||
@apply hidden;
|
||||
}
|
||||
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
||||
@apply bg-slate-200 border-2 dark:border-gray-800 shadow rounded float-left cursor-default mt-1 mr-1 px-1;
|
||||
}
|
||||
.select2-container--default .select2-search--dropdown .select2-search__field {
|
||||
/* The border of the search textbox */
|
||||
@apply border-solid;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-search--inline .select2-search__field {
|
||||
/* Search textbox */
|
||||
@apply border-none bg-transparent outline-none shadow-none select-text;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results > .select2-results__options {
|
||||
/* Hight of the dropdown zone where the options or results are visible */
|
||||
@apply h-full max-h-32 overflow-y-auto;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__option[role=group] {
|
||||
/* No clue what this does */
|
||||
@apply p-0;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__option[aria-disabled=true] {
|
||||
@apply text-gray-700;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__option[aria-selected=true] {
|
||||
/* The already selected option row color */
|
||||
@apply bg-gray-300 dark:text-gray-700;
|
||||
}
|
||||
.select2-results__option--selected {
|
||||
@apply hidden;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option {
|
||||
padding-left: 1em;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
||||
padding-left: 0;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -1em;
|
||||
padding-left: 2em;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -2em;
|
||||
padding-left: 3em;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -3em;
|
||||
padding-left: 4em;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -4em;
|
||||
padding-left: 5em;
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -5em;
|
||||
padding-left: 6em;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||
/* Background color and text color of the options rows when select is open */
|
||||
@apply bg-gray-100 dark:bg-gray-500 text-gray-700 dark:text-gray-200;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__group {
|
||||
/* Have no idea what this is for */
|
||||
@apply cursor-default block;
|
||||
padding: 6px; }
|
||||
|
||||
|
||||
@tailwind utilities;
|
||||
107
dist/resources/js/admin/tools/item-selector.js
vendored
Normal file
107
dist/resources/js/admin/tools/item-selector.js
vendored
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
import $ from "jquery";
|
||||
|
||||
class ItemSelector {
|
||||
static rewardItemContainer = $('.current-items-selection');
|
||||
|
||||
static getSelect2Options(element) {
|
||||
return {
|
||||
width: '80%',
|
||||
minimumInputLength: 3,
|
||||
ajax: {
|
||||
url: $(element).attr('data-fetch-url'),
|
||||
dataType: 'json',
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static createRewardItemElement(type, id, name, amount) {
|
||||
return $(`<div class="reward-item">
|
||||
<input type="hidden" name="rewards[type][]" value="${type}">
|
||||
<input type="hidden" name="rewards[id][]" value="${id}">
|
||||
<input type="hidden" name="rewards[amount][]" value="${amount}">
|
||||
<div>
|
||||
<label class="!w-16">Item</label>
|
||||
<span class="!overflow-auto text-nowrap">${name}</span>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<label class="!w-16">Amount</label>
|
||||
<span class="mr-auto">${amount}</span>
|
||||
<button type="button" class="border rounded-md bg-red-800 border-red-600 px-2 hover:bg-red-600">Delete</button>
|
||||
</div>
|
||||
</div>`);
|
||||
}
|
||||
|
||||
static initCatalogDropdowns(){
|
||||
let catalogDropdowns = $('.catalog-item-selector');
|
||||
|
||||
catalogDropdowns.each((index, element) => {
|
||||
let elem = $(element);
|
||||
elem.select2(ItemSelector.getSelect2Options(element));
|
||||
})
|
||||
}
|
||||
|
||||
static initItemDeleteButtons() {
|
||||
let rewardItemElements = $('.reward-item');
|
||||
|
||||
rewardItemElements.each((index, element) => {
|
||||
//let button = $(element).find('button');
|
||||
$(element).on('click', 'button', () => {
|
||||
$(element).remove();
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
static addItem() {
|
||||
|
||||
}
|
||||
|
||||
static {
|
||||
ItemSelector.initCatalogDropdowns();
|
||||
ItemSelector.initItemDeleteButtons()
|
||||
|
||||
let addItemButton = $('button[id="add-item-button"]');
|
||||
addItemButton.on('click', () => {
|
||||
let data = $('.item-selector #add-item-id').select2('data')[0];
|
||||
|
||||
// Check if we have selected something and if it exists already
|
||||
if(typeof data === 'undefined' || data.disabled || ItemSelector.rewardItemContainer.find('input[value="' + data.id + '"]').length > 0)
|
||||
return;
|
||||
|
||||
let newRewardItem = ItemSelector.createRewardItemElement(
|
||||
'Inventory',
|
||||
data.id,
|
||||
data.text,
|
||||
1
|
||||
);
|
||||
ItemSelector.rewardItemContainer.append(newRewardItem);
|
||||
newRewardItem.on('click', 'button', () => {
|
||||
$(newRewardItem).remove();
|
||||
})
|
||||
})
|
||||
|
||||
let addCurrencyButton = $('button[id="add-currency-button"]');
|
||||
addCurrencyButton.on('click', () => {
|
||||
let type = $('.item-selector #add-currency-type').val();
|
||||
let amount = $('.item-selector #add-currency-amount').val();
|
||||
console.log(amount);
|
||||
|
||||
// Check if we have selected something and if it exists already
|
||||
if(amount === '' || ItemSelector.rewardItemContainer.find('input[value="' + type + '"]').length > 0)
|
||||
return;
|
||||
|
||||
let newRewardItem = ItemSelector.createRewardItemElement(
|
||||
'Currency',
|
||||
type,
|
||||
type,
|
||||
amount
|
||||
);
|
||||
ItemSelector.rewardItemContainer.prepend(newRewardItem);
|
||||
newRewardItem.on('click', 'button', () => {
|
||||
$(newRewardItem).remove();
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
3
dist/resources/js/bootstrap.js
vendored
3
dist/resources/js/bootstrap.js
vendored
|
|
@ -7,6 +7,7 @@ import modal from 'jquery-modal';
|
|||
import axios from 'axios';
|
||||
import Alpine from 'alpinejs';
|
||||
import jQuery from 'jquery';
|
||||
import select2 from 'select2';
|
||||
|
||||
window.axios = axios;
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
|
|
@ -17,6 +18,8 @@ Alpine.start();
|
|||
window.$ = window.jQuery = jQuery();
|
||||
window.$.modal = modal;
|
||||
|
||||
select2();
|
||||
|
||||
/**
|
||||
* Echo exposes an expressive API for subscribing to channels and listening
|
||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
</div>
|
||||
|
||||
<div class="section flex gap-2 justify-center !p-4">
|
||||
<a href="">
|
||||
<a href="{{ route('user.inbox', ['user' => $user->id]) }}">
|
||||
<x-inputs.button type="button" title="Not yet Implemented">
|
||||
<span class="flex items-center gap-2 text-xl align-middle">
|
||||
<x-icons.mail class="size-5"/>
|
||||
|
|
|
|||
39
dist/resources/views/admin/tools/user-inbox.blade.php
vendored
Normal file
39
dist/resources/views/admin/tools/user-inbox.blade.php
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
@php
|
||||
use App\Models\Game\Inbox\InboxMessage;
|
||||
@endphp
|
||||
@props([
|
||||
'messages' => collect(),
|
||||
'allowEdit' => false,
|
||||
])
|
||||
|
||||
@pushonce('head')
|
||||
@vite('resources/css/components/admin/tools/inbox-message.scss')
|
||||
@endpushonce
|
||||
|
||||
@php
|
||||
/** @var \App\Models\Game\Inbox\InboxMessage[]|\Illuminate\Support\Collection $messages */
|
||||
/** @var \App\Models\Game\Inbox\InboxMessage[]|\Illuminate\Support\Collection $deletedMessages */
|
||||
$messageCount = $messages->count();
|
||||
|
||||
[$deletedMessages, $messages] = $messages->partition(function (InboxMessage $message) {
|
||||
return $message->trashed();
|
||||
});
|
||||
|
||||
@endphp
|
||||
|
||||
<x-layouts.admin>
|
||||
@if($messageCount <= 0)
|
||||
<div class="flex justify-center items-center gap-6 m-12 text-xl font-bold flex-col">
|
||||
<span>The User currently has no inbox messages.</span>
|
||||
</div>
|
||||
@else
|
||||
<div class="w-full p-2 md:px-16 bg-inherit container mx-auto">
|
||||
<span class="text-3xl font-bold headline">
|
||||
Inbox
|
||||
</span>
|
||||
@foreach($messages as $message)
|
||||
<x-admin.tools.inbox-message :$message :$allowEdit />
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</x-layouts.admin>
|
||||
|
|
@ -50,7 +50,7 @@
|
|||
<x-icons.user-details class="size-4"/>
|
||||
</x-inputs.button>
|
||||
</a>
|
||||
<a href="#">
|
||||
<a href="{{ route('user.inbox', ['user' => $user->id]) }}">
|
||||
<x-inputs.button type="button" class="px-2 py-1 !text-sm" title="Inbox">
|
||||
<x-icons.mail class="size-4"/>
|
||||
</x-inputs.button>
|
||||
|
|
|
|||
|
|
@ -241,7 +241,6 @@ class="delete"
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
150
dist/resources/views/components/admin/tools/inbox-message.blade.php
vendored
Normal file
150
dist/resources/views/components/admin/tools/inbox-message.blade.php
vendored
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
@php
|
||||
/** @var \App\Models\Game\Inbox\InboxMessage $message */
|
||||
/** @var bool $allowEdit */
|
||||
@endphp
|
||||
|
||||
<div class="container p-4 bg-slate-800 border-slate-500 border rounded-xl">
|
||||
<h1 class="float-right right-0 flex justify-end text-slate-500">
|
||||
Database-ID: {{ $message->id }}
|
||||
</h1>
|
||||
<form action="{{ route('user.inboxMessage.edit', ['user' => $message->user_id, 'message' => $message->id]) }}" method="post" id="{{ $idPrefix }}inbpx-message-form">
|
||||
@csrf
|
||||
<div class="inbox-entry-attributes">
|
||||
<div class="section flex-col">
|
||||
<h1>Content</h1>
|
||||
<div>
|
||||
<label for="{{ $message->id }}_title">
|
||||
Title
|
||||
</label>
|
||||
@if($allowEdit)
|
||||
<x-inputs.text
|
||||
id="{{ $message->id }}_title"
|
||||
name="title"
|
||||
required
|
||||
value="{{ $message->title }}"
|
||||
/>
|
||||
@else
|
||||
<div class="w-full bg-slate-700 p-2 border border-slate-600 rounded-md">
|
||||
{{ $message->title }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="{{ $message->id }}_body">
|
||||
Body
|
||||
</label>
|
||||
@if($allowEdit)
|
||||
<x-inputs.text-area
|
||||
id="{{ $message->id }}_body"
|
||||
class="h-44"
|
||||
name="body"
|
||||
required>{{ $message->body }}</x-inputs.text-area>
|
||||
@else
|
||||
<div class="w-full bg-slate-700 p-2 border border-slate-600 rounded-md whitespace-pre">{{ $message->body }}</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="section columns-1 lg:columns-2 xl:columns-3">
|
||||
<h1>Metadata</h1>
|
||||
<div>
|
||||
<label for="{{ $message->id }}_flag">
|
||||
Flag
|
||||
</label>
|
||||
@if($allowEdit)
|
||||
<x-inputs.dropdown
|
||||
id="{{ $message->id }}_flag"
|
||||
name="flag"
|
||||
required
|
||||
:cases="['NEW', 'READ']"
|
||||
:selected="$message->flag"/>
|
||||
@else
|
||||
<div class="w-full bg-slate-700 p-2 border border-slate-600 rounded-md whitespace-pre">{{ $message->flag }}</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="{{ $message->id }}_tag">
|
||||
Tag
|
||||
</label>
|
||||
@if($allowEdit)
|
||||
<x-inputs.text
|
||||
id="{{ $message->id }}_tag"
|
||||
name="tag"
|
||||
required
|
||||
value="{{ $message->tag }}"
|
||||
/>
|
||||
@else
|
||||
<div class="w-full bg-slate-700 p-2 border border-slate-600 rounded-md">
|
||||
{{ $message->tag }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="{{ $message->id }}_tag">
|
||||
Expire At
|
||||
</label>
|
||||
@if($allowEdit)
|
||||
<x-inputs.date
|
||||
type="datetime-local"
|
||||
id="{{ $message->id }}_expireAt"
|
||||
name="expireAt"
|
||||
value="{{ $message->expire_at->toDateTimeString('minute') }}"
|
||||
/>
|
||||
@else
|
||||
<div class="w-full bg-slate-700 p-2 border border-slate-600 rounded-md">
|
||||
{{ $message->expire_at }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="section">
|
||||
<h1>Rewards</h1>
|
||||
<x-admin.tools.item-selector :rewards="$message->getClaimables()" />
|
||||
</div>
|
||||
<div class="mt-8 flex gap-8">
|
||||
<x-inputs.button
|
||||
class="save"
|
||||
name="submitAction"
|
||||
value="{{ \App\APIClients\HttpMethod::PUT }}"
|
||||
>Save</x-inputs.button>
|
||||
<x-inputs.button
|
||||
href="#{{ $idPrefix }}message-delete-modal"
|
||||
rel="modal:open"
|
||||
type="button"
|
||||
class="delete"
|
||||
name="submitAction"
|
||||
value="{{ \App\APIClients\HttpMethod::DELETE }}"
|
||||
>
|
||||
Delete
|
||||
</x-inputs.button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div id="{{ $idPrefix }}message-delete-modal" class="modal">
|
||||
<div class="flex flex-col items-center gap-5">
|
||||
<span>
|
||||
Are you sure you want to delete the inbox message
|
||||
<span class="italic m-1 inline dark:bg-slate-700 bg-slate-400 w-fit px-2 rounded">
|
||||
{{ $message->title }}
|
||||
</span>
|
||||
?
|
||||
</span>
|
||||
<div class="flex gap-5">
|
||||
<x-inputs.button type="button" href="#close" rel="modal:close">
|
||||
Cancel
|
||||
</x-inputs.button>
|
||||
<x-inputs.button
|
||||
form="{{ $idPrefix }}inbpx-message-form"
|
||||
class="delete"
|
||||
name="submitAction"
|
||||
value="{{ \App\APIClients\HttpMethod::DELETE }}"
|
||||
formnovalidate
|
||||
>
|
||||
Delete
|
||||
</x-inputs.button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
61
dist/resources/views/components/admin/tools/item-selector.blade.php
vendored
Normal file
61
dist/resources/views/components/admin/tools/item-selector.blade.php
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
@pushonce('head')
|
||||
@vite('resources/js/admin/tools/item-selector.js')
|
||||
@endpushonce
|
||||
|
||||
@php
|
||||
/** @var \App\Http\Responses\Api\Player\Inbox\InboxMessageReward[] $rewards */
|
||||
@endphp
|
||||
|
||||
<div class="item-selector">
|
||||
<div class="flex flex-col w-[90%] mx-auto">
|
||||
<div>
|
||||
<div class="current-items-selection p-4 grid gap-2 grid-cols-1 md:grid-cols-2 xl:grid-cols-3">
|
||||
@foreach($rewards as $key => $reward)
|
||||
<div class="reward-item">
|
||||
<input type="hidden" name="rewards[type][]" value="{{ $reward->rewardType }}">
|
||||
<input type="hidden" name="rewards[id][]" value="{{ $reward->id }}">
|
||||
<input type="hidden" name="rewards[amount][]" value="{{ $reward->amount }}">
|
||||
<div>
|
||||
<label class="!w-16">Item</label>
|
||||
<span class="!overflow-auto text-nowrap">{{ $reward->getRewardName() }}</span>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<label class="!w-16">Amount</label>
|
||||
<span class="mr-auto">{{ $reward->amount }}</span>
|
||||
<button type="button" class="border rounded-md bg-red-800 border-red-600 px-2 hover:bg-red-600">Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 mx-auto w-full">
|
||||
<div class="col-start-1 col-end-1 w-full">
|
||||
<h1>Add item</h1>
|
||||
<select id="add-item-id"
|
||||
class="catalog-item-selector input-global-dropdown w-full"
|
||||
data-fetch-url="{{ route('catalog.dropdown') }}"
|
||||
>
|
||||
<option value="" disabled selected>Select an Item</option>
|
||||
</select><br>
|
||||
<x-inputs.button id="add-item-button" type="button" class="create mt-2">
|
||||
Add
|
||||
</x-inputs.button>
|
||||
</div>
|
||||
<div class="flex flex-col col-start-2">
|
||||
<h1>Add Currency</h1>
|
||||
<div class="flex gap-4 items-center">
|
||||
<x-inputs.dropdown
|
||||
id="add-currency-type"
|
||||
:cases="['CurrencyA', 'CurrencyB', 'CurrencyC']"
|
||||
:selected="'CurrencyA'"
|
||||
/>
|
||||
<span class="ml-auto">Amount</span>
|
||||
<x-inputs.number id="add-currency-amount" class="mr-auto" />
|
||||
</div>
|
||||
<x-inputs.button id="add-currency-button" type="button" class="create mt-2 w-min">
|
||||
Add
|
||||
</x-inputs.button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
|
||||
<select {{ $attributes->merge(['class' => 'input-global-dropdown']) }} @disabled($disabled)>
|
||||
@foreach($cases as $case)
|
||||
<option value="{{ $case->value }}"
|
||||
<option value="{{ $case instanceof BackedEnum ? $case->value : $case }}"
|
||||
@selected($case === $selected)
|
||||
>
|
||||
{{ $case->value }}
|
||||
{{ $case instanceof BackedEnum ? $case->value : $case }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
5
dist/routes/admin.php
vendored
5
dist/routes/admin.php
vendored
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\Catalog\CatalogController;
|
||||
use App\Http\Controllers\Web\Admin\DashboardController;
|
||||
use App\Http\Controllers\Web\Admin\Tools\FileManagerController;
|
||||
use App\Http\Controllers\Web\Admin\Tools\GameNewsController;
|
||||
|
|
@ -27,6 +28,10 @@
|
|||
Route::get('user/{user}/ban/create', [UsersController::class, 'createBan'])->name('user.ban.create');
|
||||
Route::get('user/{user}', [UsersController::class, 'details'])->name('user.details');
|
||||
|
||||
Route::get('user/{user}/inbox', [UsersController::class, 'inbox'])->name('user.inbox');
|
||||
Route::post('user/{user}/inboxMessage/{message}', [UsersController::class, 'inboxMessagePost'])->name('user.inboxMessage.edit');
|
||||
Route::get('catalog-items', [CatalogController::class, 'catalogItemDropdown'])->name('catalog.dropdown');
|
||||
|
||||
Route::fallback(function () {
|
||||
return redirect(route('admin.dashboard'));
|
||||
});
|
||||
|
|
|
|||
3
dist/vite.config.js
vendored
3
dist/vite.config.js
vendored
|
|
@ -10,7 +10,8 @@ export default defineConfig({
|
|||
input: [
|
||||
'resources/css/app.scss',
|
||||
'resources/js/app.js',
|
||||
...glob.sync('resources/css/**/*.scss')
|
||||
...glob.sync('resources/css/**/*.scss'),
|
||||
...glob.sync('resources/js/**/*.js')
|
||||
],
|
||||
refresh: true,
|
||||
}),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user