From 45161c522c8afa6b6acaf0776bc3a7bd04ac0748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Thu, 22 Dec 2022 22:46:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=B9=E6=80=A7=EF=BC=88=E5=85=A8=E5=B1=80?= =?UTF-8?q?=EF=BC=89=EF=BC=9A=E4=B8=80=E6=B3=A2=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 14 +- app/Console/Kernel.php | 6 +- app/Http/Controllers/Api/FilesController.php | 483 ++++++++++++- .../Controllers/Api/WebsitesController.php | 10 +- app/Http/Middleware/AddAccessToken.php | 2 +- composer.lock | 647 +++++++++--------- config/panel.php | 2 +- public/panel/modules/file.js | 259 +++---- public/panel/style/ico/ai.png | Bin 0 -> 15338 bytes public/panel/style/ico/apk.png | Bin 0 -> 15383 bytes public/panel/style/ico/bt.png | Bin 0 -> 15315 bytes public/panel/style/ico/cad.png | Bin 0 -> 15315 bytes public/panel/style/ico/code.png | Bin 0 -> 15557 bytes public/panel/style/ico/dir.png | Bin 0 -> 358 bytes public/panel/style/ico/doc.png | Bin 0 -> 15378 bytes public/panel/style/ico/eps.png | Bin 0 -> 15408 bytes public/panel/style/ico/exe.png | Bin 0 -> 15139 bytes public/panel/style/ico/fla.png | Bin 0 -> 15110 bytes public/panel/style/ico/fonts.png | Bin 0 -> 15531 bytes public/panel/style/ico/ipa.png | Bin 0 -> 15260 bytes public/panel/style/ico/keynote.png | Bin 0 -> 14948 bytes public/panel/style/ico/links.png | Bin 0 -> 15641 bytes public/panel/style/ico/misc.png | Bin 0 -> 15204 bytes public/panel/style/ico/mm.png | Bin 0 -> 15444 bytes public/panel/style/ico/mmap.png | Bin 0 -> 15244 bytes public/panel/style/ico/mp3.png | Bin 0 -> 15116 bytes public/panel/style/ico/mp4.png | Bin 0 -> 15011 bytes public/panel/style/ico/null.jpg | Bin 0 -> 1220 bytes public/panel/style/ico/number.png | Bin 0 -> 14999 bytes public/panel/style/ico/pages.png | Bin 0 -> 15099 bytes public/panel/style/ico/pdf.png | Bin 0 -> 15641 bytes public/panel/style/ico/ppt.png | Bin 0 -> 15082 bytes public/panel/style/ico/ps.png | Bin 0 -> 15578 bytes public/panel/style/ico/rar.png | Bin 0 -> 15368 bytes public/panel/style/ico/txt.png | Bin 0 -> 14860 bytes public/panel/style/ico/visio.png | Bin 0 -> 15268 bytes public/panel/style/ico/web.png | Bin 0 -> 2047 bytes public/panel/style/ico/xls.png | Bin 0 -> 15525 bytes public/panel/style/ico/xmind.png | Bin 0 -> 15302 bytes public/panel/style/ico/zip.png | Bin 0 -> 15368 bytes resources/views/cron.blade.php | 2 +- resources/views/file.blade.php | 48 +- resources/views/website/list.blade.php | 7 +- routes/api.php | 58 +- 44 files changed, 1032 insertions(+), 506 deletions(-) create mode 100644 public/panel/style/ico/ai.png create mode 100644 public/panel/style/ico/apk.png create mode 100644 public/panel/style/ico/bt.png create mode 100644 public/panel/style/ico/cad.png create mode 100644 public/panel/style/ico/code.png create mode 100644 public/panel/style/ico/dir.png create mode 100644 public/panel/style/ico/doc.png create mode 100644 public/panel/style/ico/eps.png create mode 100644 public/panel/style/ico/exe.png create mode 100644 public/panel/style/ico/fla.png create mode 100644 public/panel/style/ico/fonts.png create mode 100644 public/panel/style/ico/ipa.png create mode 100644 public/panel/style/ico/keynote.png create mode 100644 public/panel/style/ico/links.png create mode 100644 public/panel/style/ico/misc.png create mode 100644 public/panel/style/ico/mm.png create mode 100644 public/panel/style/ico/mmap.png create mode 100644 public/panel/style/ico/mp3.png create mode 100644 public/panel/style/ico/mp4.png create mode 100644 public/panel/style/ico/null.jpg create mode 100644 public/panel/style/ico/number.png create mode 100644 public/panel/style/ico/pages.png create mode 100644 public/panel/style/ico/pdf.png create mode 100644 public/panel/style/ico/ppt.png create mode 100644 public/panel/style/ico/ps.png create mode 100644 public/panel/style/ico/rar.png create mode 100644 public/panel/style/ico/txt.png create mode 100644 public/panel/style/ico/visio.png create mode 100644 public/panel/style/ico/web.png create mode 100644 public/panel/style/ico/xls.png create mode 100644 public/panel/style/ico/xmind.png create mode 100644 public/panel/style/ico/zip.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 5717c3f3..fd732a2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,18 @@ 所有重要的更改都将在此文件中记录。 -## [20221210] - 常规更新 +## [20221222] - 常规更新 -- 增强面板安全性 -- 修复网站管理个别小Bug +- 优化计划任务日志格式 +- 网站管理支持分页 +- 文件管理的初步实现 +- 样式微调 +- 部分代码优化 +- 框架版本更新 + +## [20221212] - 常规更新 + +- 修复创建网站可能重复添加listen端口的Bug ## [20221210] - 安全更新 diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index f01f7bc5..13eab30f 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -25,7 +25,7 @@ class Kernel extends ConsoleKernel // 检查文件是否存在,及所有者是否为root if (!file_exists($file) || fileowner($file) != 0) { file_put_contents('/www/server/cron/logs/'.$cron->id.'.log', - '耗子Linux面板:检测到脚本文件异常,为确保安全已终止运行,如果你不知道发生了什么,这通常意味着服务器已被入侵。', + PHP_EOL.'耗子Linux面板:检测到脚本文件异常,为确保安全已终止运行,如果你不知道发生了什么,这通常意味着服务器已被入侵。'.PHP_EOL, FILE_APPEND); continue; } @@ -37,10 +37,10 @@ class Kernel extends ConsoleKernel $cron->save(); })->onSuccess(function () use ($cron) { file_put_contents('/www/server/cron/logs/'.$cron->id.'.log', - Carbon::now()->toDateTimeString().' 任务执行成功', FILE_APPEND); + PHP_EOL.Carbon::now()->toDateTimeString().' 任务执行成功'.PHP_EOL, FILE_APPEND); })->onFailure(function () use ($cron) { file_put_contents('/www/server/cron/logs/'.$cron->id.'.log', - Carbon::now()->toDateTimeString().' 任务执行失败', FILE_APPEND); + PHP_EOL.Carbon::now()->toDateTimeString().' 任务执行失败'.PHP_EOL, FILE_APPEND); }); } } diff --git a/app/Http/Controllers/Api/FilesController.php b/app/Http/Controllers/Api/FilesController.php index 2e583768..22b699da 100644 --- a/app/Http/Controllers/Api/FilesController.php +++ b/app/Http/Controllers/Api/FilesController.php @@ -11,21 +11,494 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Validation\ValidationException; +use Symfony\Component\HttpFoundation\BinaryFileResponse; class FilesController extends Controller { /** - * 获取某个目录的文件列表 + * 获取某个目录下的文件(夹)列表 + * @param Request $request + * @return JsonResponse */ - public function getDirList(Request $request): JsonResponse + public function getList(Request $request): JsonResponse { - $limit = $request->input('limit', 10); + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'limit' => 'required|integer', + 'page' => 'required|integer', + ]); + $path = $credentials['path']; + $limit = $credentials['limit']; + $page = $credentials['page']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + if (!is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '目录不存在']); + } + $files = scandir($path); + $fileData = []; + foreach ($files as $k => $v) { + if ($v == '.' || $v == '..') { + continue; + } + $fileData[$k]['name'] = $v; + $fileData[$k]['path'] = $path.'/'.$v; + $fileData[$k]['type'] = filetype($path.'/'.$v); + $fileData[$k]['size'] = filesize($path.'/'.$v); + $fileData[$k]['mtime'] = Carbon::createFromTimestamp(filemtime($path.'/'.$v))->toDateTimeString(); + } + + // 分页 + + $total = count($fileData); + $filesArr = array_slice($fileData, ($page - 1) * $limit, $limit); $data['code'] = 0; $data['msg'] = 'success'; - $data['count'] = ''; - $data['data'] = ''; + $data['count'] = $total; + $data['data'] = $filesArr; return response()->json($data); } + + /** + * 获取文件内容 + * @param Request $request + * @return JsonResponse + */ + public function getFileContent(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'file' => ['required', 'regex:/^\/.*$/'], + ]); + $file = $credentials['file']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($file)) { + return response()->json(['code' => 1, 'msg' => '文件不存在']); + } + + $content = @file_get_contents($file); + $data['code'] = 0; + $data['msg'] = 'success'; + $data['data'] = $content; + return response()->json($data); + } + + /** + * 保存文件内容 + * @param Request $request + * @return JsonResponse + */ + public function saveFileContent(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'file' => ['required', 'regex:/^\/.*$/'], + 'content' => 'required', + ]); + $file = $credentials['file']; + $content = $credentials['content']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($file)) { + return response()->json(['code' => 1, 'msg' => '文件不存在']); + } + + $res = @file_put_contents($file, $content); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '保存失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 创建目录 + * @param Request $request + * @return JsonResponse + */ + public function createDir(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'name' => 'required', + ]); + $path = $credentials['path']; + $name = $credentials['name']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '目录不存在']); + } + + $res = @mkdir($path.'/'.$name); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '创建失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 重命名文件或目录 + * @param Request $request + * @return JsonResponse + */ + public function rename(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'name' => 'required', + ]); + $path = $credentials['path']; + $name = $credentials['name']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $res = @rename($path, dirname($path).'/'.$name); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '重命名失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 上传文件 + * @param Request $request + * @return JsonResponse + */ + public function uploadFile(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'file' => 'required|file', + ]); + $path = $credentials['path']; + $file = $credentials['file']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '目录不存在']); + } + + $res = @move_uploaded_file($file->getRealPath(), $path.'/'.$file->getClientOriginalName()); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '上传失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 下载文件 + * @param Request $request + * @return JsonResponse|BinaryFileResponse + */ + public function downloadFile(Request $request): BinaryFileResponse|JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path)) { + return response()->json(['code' => 1, 'msg' => '文件不存在']); + } + + return response()->download($path); + } + + /** + * 创建文件 + */ + public function createFile(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'name' => 'required', + ]); + $path = $credentials['path']; + $name = $credentials['name']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '目录不存在']); + } + + $res = @file_put_contents($path.'/'.$name, ''); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '创建失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 设置权限 + * @param Request $request + * @return JsonResponse + */ + public function chmod(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'mode' => 'required', + ]); + $path = $credentials['path']; + $mode = $credentials['mode']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $res = @chmod($path, $mode); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '设置失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 设置所有者 + */ + public function chown(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'user' => 'required', + ]); + $path = $credentials['path']; + $user = $credentials['user']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $res = @chown($path, $user); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '设置失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 设置所有者组 + * @param Request $request + * @return JsonResponse + */ + public function chgrp(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'group' => 'required', + ]); + $path = $credentials['path']; + $group = $credentials['group']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $res = @chgrp($path, $group); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '设置失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 复制文件/目录 + * @param Request $request + * @return JsonResponse + */ + public function copy(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'dest' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + $dest = $credentials['dest']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + if (!is_dir($dest)) { + return response()->json(['code' => 1, 'msg' => '目标目录不存在']); + } + + $res = @copy($path, $dest.'/'.basename($path)); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '复制失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 移动文件/目录 + * @param Request $request + * @return JsonResponse + */ + public function move(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + 'dest' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + $dest = $credentials['dest']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + if (!is_dir($dest)) { + return response()->json(['code' => 1, 'msg' => '目标目录不存在']); + } + + $res = @rename($path, $dest.'/'.basename($path)); + if ($res === false) { + return response()->json(['code' => 1, 'msg' => '移动失败']); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 删除文件/目录 + * @param Request $request + * @return JsonResponse + */ + public function delete(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $res = @shell_exec('rm -rf '.escapeshellarg($path).' 2>&1'); + if (!empty($res)) { + return response()->json(['code' => 1, 'msg' => '删除失败:'.$res]); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 压缩文件/目录 + * @param Request $request + * @return JsonResponse + */ + public function zip(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path) && !is_dir($path)) { + return response()->json(['code' => 1, 'msg' => '文件或目录不存在']); + } + + $zipPath = dirname($path).'/'.basename($path).'.zip'; + $res = @shell_exec('zip -r '.escapeshellarg($zipPath).' '.escapeshellarg($path).' 2>&1'); + if (!empty($res)) { + return response()->json(['code' => 1, 'msg' => '压缩失败:'.$res]); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } + + /** + * 解压文件/目录 + * @param Request $request + * @return JsonResponse + */ + public function unzip(Request $request): JsonResponse + { + try { + $credentials = $this->validate($request, [ + 'path' => ['required', 'regex:/^\/.*$/'], + ]); + $path = $credentials['path']; + } catch (ValidationException $e) { + return response()->json(['code' => 1, 'msg' => $e->getMessage()]); + } + + if (!is_file($path)) { + return response()->json(['code' => 1, 'msg' => '文件不存在']); + } + + $res = @shell_exec('unzip -o '.escapeshellarg($path).' -d '.escapeshellarg(dirname($path)).' 2>&1'); + if (!empty($res)) { + return response()->json(['code' => 1, 'msg' => '解压失败:'.$res]); + } + + return response()->json(['code' => 0, 'msg' => 'success']); + } } diff --git a/app/Http/Controllers/Api/WebsitesController.php b/app/Http/Controllers/Api/WebsitesController.php index 0131387c..dfa621af 100644 --- a/app/Http/Controllers/Api/WebsitesController.php +++ b/app/Http/Controllers/Api/WebsitesController.php @@ -20,11 +20,14 @@ class WebsitesController extends Controller { /** * 获取面板网站 + * @param Request $request * @return JsonResponse */ - public function getList(): JsonResponse + public function getList(Request $request): JsonResponse { - $websiteList = Website::query()->get(); + $limit = $request->input('limit', 10); + + $websiteList = Website::query()->orderBy('id')->paginate($limit); // 判空 if ($websiteList->isEmpty()) { return response()->json([ @@ -42,7 +45,8 @@ class WebsitesController extends Controller return response()->json([ 'code' => 0, 'msg' => '获取成功', - 'data' => $websiteList + 'count' => $websiteList->total(), + 'data' => $websiteList->items() ]); } diff --git a/app/Http/Middleware/AddAccessToken.php b/app/Http/Middleware/AddAccessToken.php index 18f86f99..8ddc3da8 100644 --- a/app/Http/Middleware/AddAccessToken.php +++ b/app/Http/Middleware/AddAccessToken.php @@ -14,7 +14,7 @@ class AddAccessToken // 获取请求头中的token $token = $request->header('access_token') ?? $request->input('access_token'); // 将token放入请求中 - $request->headers->set('Authorization', 'Bearer ' . $token); + $request->headers->set('Authorization', 'Bearer '.$token); return $next($request); } diff --git a/composer.lock b/composer.lock index 4b52f804..72fa13bb 100644 --- a/composer.lock +++ b/composer.lock @@ -977,16 +977,16 @@ }, { "name": "laravel/framework", - "version": "v9.38.0", + "version": "v9.45.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "abf198e443e06696af3f356b44de67c0fa516107" + "reference": "faeb20d3fc61b69790068161ab42bcf2d5faccbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/abf198e443e06696af3f356b44de67c0fa516107", - "reference": "abf198e443e06696af3f356b44de67c0fa516107", + "url": "https://api.github.com/repos/laravel/framework/zipball/faeb20d3fc61b69790068161ab42bcf2d5faccbc", + "reference": "faeb20d3fc61b69790068161ab42bcf2d5faccbc", "shasum": "" }, "require": { @@ -997,7 +997,7 @@ "ext-openssl": "*", "fruitcake/php-cors": "^1.2", "laravel/serializable-closure": "^1.2.2", - "league/commonmark": "^2.2", + "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.62.1", @@ -1006,7 +1006,7 @@ "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.2.2", + "ramsey/uuid": "^4.7", "symfony/console": "^6.0.9", "symfony/error-handler": "^6.0", "symfony/finder": "^6.0", @@ -1067,7 +1067,7 @@ "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", - "fakerphp/faker": "^1.9.2", + "fakerphp/faker": "^1.21", "guzzlehttp/guzzle": "^7.5", "league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-ftp": "^3.0", @@ -1075,7 +1075,7 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.11", + "orchestra/testbench-core": "^7.16", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", @@ -1159,7 +1159,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-11-01T14:05:55+00:00" + "time": "2022-12-21T19:37:46+00:00" }, { "name": "laravel/sanctum", @@ -1288,16 +1288,16 @@ }, { "name": "laravel/tinker", - "version": "v2.7.2", + "version": "v2.7.3", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "dff39b661e827dae6e092412f976658df82dbac5" + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", - "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef", + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef", "shasum": "" }, "require": { @@ -1350,22 +1350,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.2" + "source": "https://github.com/laravel/tinker/tree/v2.7.3" }, - "time": "2022-03-23T12:38:24+00:00" + "time": "2022-11-09T15:11:38+00:00" }, { "name": "league/commonmark", - "version": "2.3.6", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "857afc47ce113454bd629037213378ba3219dd40" + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/857afc47ce113454bd629037213378ba3219dd40", - "reference": "857afc47ce113454bd629037213378ba3219dd40", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", "shasum": "" }, "require": { @@ -1393,7 +1393,7 @@ "symfony/finder": "^5.3 | ^6.0", "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0" + "vimeo/psalm": "^4.24.0 || ^5.0.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -1458,20 +1458,20 @@ "type": "tidelift" } ], - "time": "2022-10-30T16:45:38+00:00" + "time": "2022-12-10T16:02:17+00:00" }, { "name": "league/config", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/config.git", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { @@ -1480,7 +1480,7 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", "unleashedtech/php-coding-standard": "^3.1", @@ -1540,20 +1540,20 @@ "type": "github" } ], - "time": "2021-08-14T12:15:32+00:00" + "time": "2022-12-11T20:36:23+00:00" }, { "name": "league/flysystem", - "version": "3.10.2", + "version": "3.12.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6" + "reference": "2aef65a47e44f2d6f9938f720f6dd697e7ba7b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b9bd194b016114d6ff6765c09d40c7d427e4e3f6", - "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2aef65a47e44f2d6f9938f720f6dd697e7ba7b76", + "reference": "2aef65a47e44f2d6f9938f720f6dd697e7ba7b76", "shasum": "" }, "require": { @@ -1615,7 +1615,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.10.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.12.0" }, "funding": [ { @@ -1631,7 +1631,7 @@ "type": "tidelift" } ], - "time": "2022-10-25T07:01:47+00:00" + "time": "2022-12-20T20:21:10+00:00" }, { "name": "league/mime-type-detection", @@ -1793,16 +1793,16 @@ }, { "name": "nesbot/carbon", - "version": "2.62.1", + "version": "2.64.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" + "reference": "889546413c97de2d05063b8cb7b193c2531ea211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", - "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/889546413c97de2d05063b8cb7b193c2531ea211", + "reference": "889546413c97de2d05063b8cb7b193c2531ea211", "shasum": "" }, "require": { @@ -1813,7 +1813,7 @@ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", @@ -1891,29 +1891,29 @@ "type": "tidelift" } ], - "time": "2022-09-02T07:48:13+00:00" + "time": "2022-11-26T17:36:00+00:00" }, { "name": "nette/schema", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.2" + "php": ">=7.1 <8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", + "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.7" }, "type": "library", @@ -1951,9 +1951,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.2" + "source": "https://github.com/nette/schema/tree/v1.2.3" }, - "time": "2021-10-15T11:40:02+00:00" + "time": "2022-10-13T01:24:26+00:00" }, { "name": "nette/utils", @@ -2042,16 +2042,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -2092,22 +2092,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.14.2", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "9a8218511eb1a0965629ff820dda25985440aefc" + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc", - "reference": "9a8218511eb1a0965629ff820dda25985440aefc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/594ab862396c16ead000de0c3c38f4a5cbe1938d", + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d", "shasum": "" }, "require": { @@ -2164,7 +2164,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2" + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.0" }, "funding": [ { @@ -2180,7 +2180,7 @@ "type": "github" } ], - "time": "2022-10-28T22:51:32+00:00" + "time": "2022-12-20T19:00:15+00:00" }, { "name": "overtrue/laravel-lang", @@ -2689,16 +2689,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.8", + "version": "v0.11.9", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778", + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778", "shasum": "" }, "require": { @@ -2759,9 +2759,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.9" }, - "time": "2022-07-28T14:25:11+00:00" + "time": "2022-11-06T15:29:46+00:00" }, { "name": "ralouphie/getallheaders", @@ -2888,24 +2888,23 @@ }, { "name": "ramsey/uuid", - "version": "4.5.1", + "version": "4.7.0", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d" + "reference": "5ed9ad582647bbc3864ef78db34bdc1afdcf9b49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d", - "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5ed9ad582647bbc3864ef78db34bdc1afdcf9b49", + "reference": "5ed9ad582647bbc3864ef78db34bdc1afdcf9b49", "shasum": "" }, "require": { "brick/math": "^0.8.8 || ^0.9 || ^0.10", - "ext-ctype": "*", "ext-json": "*", "php": "^8.0", - "ramsey/collection": "^1.0" + "ramsey/collection": "^1.2" }, "replace": { "rhumsaa/uuid": "self.version" @@ -2934,7 +2933,6 @@ }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -2966,7 +2964,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.5.1" + "source": "https://github.com/ramsey/uuid/tree/4.7.0" }, "funding": [ { @@ -2978,7 +2976,7 @@ "type": "tidelift" } ], - "time": "2022-09-16T03:22:46+00:00" + "time": "2022-12-19T22:30:49+00:00" }, { "name": "skoerfgen/acmecert", @@ -3026,16 +3024,16 @@ }, { "name": "symfony/console", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815" + "reference": "5a9bd5c543f00157c55face973c149957467db31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815", - "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815", + "url": "https://api.github.com/repos/symfony/console/zipball/5a9bd5c543f00157c55face973c149957467db31", + "reference": "5a9bd5c543f00157c55face973c149957467db31", "shasum": "" }, "require": { @@ -3102,7 +3100,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.7" + "source": "https://github.com/symfony/console/tree/v6.2.2" }, "funding": [ { @@ -3118,20 +3116,20 @@ "type": "tidelift" } ], - "time": "2022-10-26T21:42:49+00:00" + "time": "2022-12-16T15:08:36+00:00" }, { "name": "symfony/css-selector", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443" + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/0dd5e36b80e1de97f8f74ed7023ac2b837a36443", - "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/91c342ffc99283c43653ed8eb47bc2a94db7f398", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398", "shasum": "" }, "require": { @@ -3167,7 +3165,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.1.3" + "source": "https://github.com/symfony/css-selector/tree/v6.2.0" }, "funding": [ { @@ -3183,20 +3181,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-08-26T05:51:22+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", "shasum": "" }, "require": { @@ -3205,7 +3203,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -3234,7 +3232,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" }, "funding": [ { @@ -3250,20 +3248,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/error-handler", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504" + "reference": "12a25d01cc5273b2445e125d62b61d34db42297e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/699a26ce5ec656c198bf6e26398b0f0818c7e504", - "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/12a25d01cc5273b2445e125d62b61d34db42297e", + "reference": "12a25d01cc5273b2445e125d62b61d34db42297e", "shasum": "" }, "require": { @@ -3305,7 +3303,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.1.7" + "source": "https://github.com/symfony/error-handler/tree/v6.2.2" }, "funding": [ { @@ -3321,20 +3319,20 @@ "type": "tidelift" } ], - "time": "2022-10-28T16:23:08+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.1.0", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + "reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ffeb31139b49bf6ef0bc09d1db95eac053388d1", + "reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1", "shasum": "" }, "require": { @@ -3388,7 +3386,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.2" }, "funding": [ { @@ -3404,20 +3402,20 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:51:07+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", "shasum": "" }, "require": { @@ -3430,7 +3428,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -3467,7 +3465,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" }, "funding": [ { @@ -3483,20 +3481,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/finder", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", "shasum": "" }, "require": { @@ -3531,7 +3529,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.3" + "source": "https://github.com/symfony/finder/tree/v6.2.0" }, "funding": [ { @@ -3547,20 +3545,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-10-09T08:55:40+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6" + "reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/792a1856d2b95273f0e1c3435785f1d01a60ecc6", - "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ddf4dd35de1623e7c02013523e6c2137b67b636f", + "reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f", "shasum": "" }, "require": { @@ -3568,6 +3566,9 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1" }, + "conflict": { + "symfony/cache": "<6.2" + }, "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^5.4|^6.0", @@ -3606,7 +3607,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.1.7" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.2" }, "funding": [ { @@ -3622,25 +3623,26 @@ "type": "tidelift" } ], - "time": "2022-10-12T09:44:59+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254" + "reference": "860a0189969b755cd571709bd32313aa8599867a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8fc1ffe753948c47a103a809cdd6a4a8458b3254", - "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/860a0189969b755cd571709bd32313aa8599867a", + "reference": "860a0189969b755cd571709bd32313aa8599867a", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -3651,7 +3653,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.1", + "symfony/dependency-injection": "<6.2", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -3671,7 +3673,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.1", + "symfony/dependency-injection": "^6.2", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -3716,7 +3718,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.1.7" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.2" }, "funding": [ { @@ -3732,20 +3734,20 @@ "type": "tidelift" } ], - "time": "2022-10-28T18:06:36+00:00" + "time": "2022-12-16T19:38:34+00:00" }, { "name": "symfony/mailer", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "7e19813c0b43387c55665780c4caea505cc48391" + "reference": "b355ad81f1d2987c47dcd3b04d5dce669e1e62e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/7e19813c0b43387c55665780c4caea505cc48391", - "reference": "7e19813c0b43387c55665780c4caea505cc48391", + "url": "https://api.github.com/repos/symfony/mailer/zipball/b355ad81f1d2987c47dcd3b04d5dce669e1e62e6", + "reference": "b355ad81f1d2987c47dcd3b04d5dce669e1e62e6", "shasum": "" }, "require": { @@ -3754,15 +3756,20 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/http-kernel": "<5.4" + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, "require-dev": { + "symfony/console": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^5.4|^6.0" + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" }, "type": "library", "autoload": { @@ -3790,7 +3797,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.1.7" + "source": "https://github.com/symfony/mailer/tree/v6.2.2" }, "funding": [ { @@ -3806,20 +3813,20 @@ "type": "tidelift" } ], - "time": "2022-10-28T16:23:08+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "symfony/mime", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "f440f066d57691088d998d6e437ce98771144618" + "reference": "8c98bf40406e791043890a163f6f6599b9cfa1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/f440f066d57691088d998d6e437ce98771144618", - "reference": "f440f066d57691088d998d6e437ce98771144618", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c98bf40406e791043890a163f6f6599b9cfa1ed", + "reference": "8c98bf40406e791043890a163f6f6599b9cfa1ed", "shasum": "" }, "require": { @@ -3831,15 +3838,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4" + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1", + "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^5.2|^6.0" + "symfony/serializer": "^6.2" }, "type": "library", "autoload": { @@ -3871,7 +3880,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.1.7" + "source": "https://github.com/symfony/mime/tree/v6.2.2" }, "funding": [ { @@ -3887,20 +3896,20 @@ "type": "tidelift" } ], - "time": "2022-10-19T08:10:53+00:00" + "time": "2022-12-14T16:38:10+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -3915,7 +3924,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3953,7 +3962,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -3969,20 +3978,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -3994,7 +4003,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4034,7 +4043,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -4050,20 +4059,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -4077,7 +4086,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4121,7 +4130,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -4137,20 +4146,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -4162,7 +4171,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4205,7 +4214,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -4221,20 +4230,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -4249,7 +4258,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4288,7 +4297,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -4304,20 +4313,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -4326,7 +4335,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4364,7 +4373,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -4380,20 +4389,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -4402,7 +4411,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4447,7 +4456,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -4463,20 +4472,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -4485,7 +4494,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4526,7 +4535,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -4542,20 +4551,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23" + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/a41886c1c81dc075a09c71fe6db5b9d68c79de23", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", "shasum": "" }, "require": { @@ -4570,7 +4579,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4608,7 +4617,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" }, "funding": [ { @@ -4624,20 +4633,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877", + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877", "shasum": "" }, "require": { @@ -4669,7 +4678,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.3" + "source": "https://github.com/symfony/process/tree/v6.2.0" }, "funding": [ { @@ -4685,20 +4694,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/routing", - "version": "v6.1.7", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5" + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", - "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "url": "https://api.github.com/repos/symfony/routing/zipball/857ac6f4df371470fbdefa2f5967a2618dbf1852", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852", "shasum": "" }, "require": { @@ -4706,14 +4715,14 @@ }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", + "symfony/config": "<6.2", "symfony/dependency-injection": "<5.4", "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.2", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -4757,7 +4766,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.1.7" + "source": "https://github.com/symfony/routing/tree/v6.2.0" }, "funding": [ { @@ -4773,20 +4782,20 @@ "type": "tidelift" } ], - "time": "2022-10-18T13:12:43+00:00" + "time": "2022-11-09T13:28:29+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", "shasum": "" }, "require": { @@ -4802,7 +4811,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -4842,7 +4851,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" }, "funding": [ { @@ -4858,20 +4867,20 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:18:58+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/string", - "version": "v6.1.7", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "823f143370880efcbdfa2dbca946b3358c4707e5" + "reference": "863219fd713fa41cbcd285a79723f94672faff4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5", - "reference": "823f143370880efcbdfa2dbca946b3358c4707e5", + "url": "https://api.github.com/repos/symfony/string/zipball/863219fd713fa41cbcd285a79723f94672faff4d", + "reference": "863219fd713fa41cbcd285a79723f94672faff4d", "shasum": "" }, "require": { @@ -4887,6 +4896,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -4927,7 +4937,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.7" + "source": "https://github.com/symfony/string/tree/v6.2.2" }, "funding": [ { @@ -4943,20 +4953,20 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:31+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "symfony/translation", - "version": "v6.1.6", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e6cd330e5a072518f88d65148f3f165541807494" + "reference": "3294288c335b6267eab14964bf2c46015663d93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e6cd330e5a072518f88d65148f3f165541807494", - "reference": "e6cd330e5a072518f88d65148f3f165541807494", + "url": "https://api.github.com/repos/symfony/translation/zipball/3294288c335b6267eab14964bf2c46015663d93f", + "reference": "3294288c335b6267eab14964bf2c46015663d93f", "shasum": "" }, "require": { @@ -4976,6 +4986,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -4990,6 +5001,7 @@ "symfony/yaml": "^5.4|^6.0" }, "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", "psr/log-implementation": "To use logging capability in translator", "symfony/config": "", "symfony/yaml": "" @@ -5023,7 +5035,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.1.6" + "source": "https://github.com/symfony/translation/tree/v6.2.2" }, "funding": [ { @@ -5039,20 +5051,20 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:04:03+00:00" + "time": "2022-12-13T18:04:17+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", - "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", "shasum": "" }, "require": { @@ -5064,7 +5076,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5104,7 +5116,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" }, "funding": [ { @@ -5120,20 +5132,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/uid", - "version": "v6.1.5", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98" + "reference": "4f9f537e57261519808a7ce1d941490736522bbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/e03519f7b1ce1d3c0b74f751892bb41d549a2d98", - "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98", + "url": "https://api.github.com/repos/symfony/uid/zipball/4f9f537e57261519808a7ce1d941490736522bbc", + "reference": "4f9f537e57261519808a7ce1d941490736522bbc", "shasum": "" }, "require": { @@ -5178,7 +5190,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.1.5" + "source": "https://github.com/symfony/uid/tree/v6.2.0" }, "funding": [ { @@ -5194,20 +5206,20 @@ "type": "tidelift" } ], - "time": "2022-09-09T09:34:27+00:00" + "time": "2022-10-09T08:55:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.1.6", + "version": "v6.2.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f" + "reference": "6168f544827e897f708a684f75072a8c33a5e309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f0adde127f24548e23cbde83bcaeadc491c551f", - "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6168f544827e897f708a684f75072a8c33a5e309", + "reference": "6168f544827e897f708a684f75072a8c33a5e309", "shasum": "" }, "require": { @@ -5266,7 +5278,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.1.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.2" }, "funding": [ { @@ -5282,7 +5294,7 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:04:03+00:00" + "time": "2022-12-14T16:11:27+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5627,20 +5639,20 @@ }, { "name": "fakerphp/faker", - "version": "v1.20.0", + "version": "v1.21.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -5651,7 +5663,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -5663,7 +5676,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.20-dev" + "dev-main": "v1.21-dev" } }, "autoload": { @@ -5688,22 +5701,22 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" }, - "time": "2022-07-20T13:12:54+00:00" + "time": "2022-12-13T13:54:32+00:00" }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.14.6", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "f7948baaa0330277c729714910336383286305da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", "shasum": "" }, "require": { @@ -5753,7 +5766,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.14.6" }, "funding": [ { @@ -5761,7 +5774,7 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2022-11-02T16:23:29+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -5816,16 +5829,16 @@ }, { "name": "laravel/pint", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86" + "reference": "6a2c0927b4f6ad4eadb5a67fe3835fdad108949d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86", - "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86", + "url": "https://api.github.com/repos/laravel/pint/zipball/6a2c0927b4f6ad4eadb5a67fe3835fdad108949d", + "reference": "6a2c0927b4f6ad4eadb5a67fe3835fdad108949d", "shasum": "" }, "require": { @@ -5836,11 +5849,11 @@ "php": "^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11.0", - "illuminate/view": "^9.27", - "laravel-zero/framework": "^9.1.3", - "mockery/mockery": "^1.5.0", - "nunomaduro/larastan": "^2.2", + "friendsofphp/php-cs-fixer": "~3.13.1", + "illuminate/view": "^9.32.0", + "laravel-zero/framework": "^9.2.0", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.2.0", "nunomaduro/termwind": "^1.14.0", "pestphp/pest": "^1.22.1" }, @@ -5878,20 +5891,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2022-09-13T15:07:15+00:00" + "time": "2022-12-20T17:16:15+00:00" }, { "name": "laravel/sail", - "version": "v1.16.2", + "version": "v1.16.6", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659" + "reference": "2e8be54590bde421eb04e461a1421302a5b22cca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/7d1ed5f856ec8b9708712e3fc0708fcabe114659", - "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659", + "url": "https://api.github.com/repos/laravel/sail/zipball/2e8be54590bde421eb04e461a1421302a5b22cca", + "reference": "2e8be54590bde421eb04e461a1421302a5b22cca", "shasum": "" }, "require": { @@ -5938,7 +5951,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-09-28T13:13:22+00:00" + "time": "2022-12-19T15:41:32+00:00" }, { "name": "mockery/mockery", @@ -6272,16 +6285,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.18", + "version": "9.2.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" + "reference": "e4bf60d2220b4baaa0572986b5d69870226b06df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e4bf60d2220b4baaa0572986b5d69870226b06df", + "reference": "e4bf60d2220b4baaa0572986b5d69870226b06df", "shasum": "" }, "require": { @@ -6337,7 +6350,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.22" }, "funding": [ { @@ -6345,7 +6358,7 @@ "type": "github" } ], - "time": "2022-10-27T13:35:33+00:00" + "time": "2022-12-18T16:40:55+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6590,16 +6603,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.26", + "version": "9.5.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", "shasum": "" }, "require": { @@ -6672,7 +6685,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" }, "funding": [ { @@ -6688,7 +6701,7 @@ "type": "tidelift" } ], - "time": "2022-10-28T06:00:21+00:00" + "time": "2022-12-09T07:31:23+00:00" }, { "name": "sebastian/cli-parser", @@ -7718,16 +7731,16 @@ }, { "name": "spatie/flare-client-php", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca" + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/b1b974348750925b717fa8c8b97a0db0d1aa40ca", - "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", "shasum": "" }, "require": { @@ -7775,7 +7788,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.3.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.3.1" }, "funding": [ { @@ -7783,7 +7796,7 @@ "type": "github" } ], - "time": "2022-08-08T10:10:20+00:00" + "time": "2022-11-16T08:30:20+00:00" }, { "name": "spatie/ignition", @@ -7862,16 +7875,16 @@ }, { "name": "spatie/laravel-ignition", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b" + "reference": "d6e1e1ad93abe280abf41c33f8ea7647dfc0c233" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", - "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/d6e1e1ad93abe280abf41c33f8ea7647dfc0c233", + "reference": "d6e1e1ad93abe280abf41c33f8ea7647dfc0c233", "shasum": "" }, "require": { @@ -7948,7 +7961,7 @@ "type": "github" } ], - "time": "2022-10-26T17:39:54+00:00" + "time": "2022-12-08T15:31:38+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/panel.php b/config/panel.php index 88d19832..ca7a1017 100644 --- a/config/panel.php +++ b/config/panel.php @@ -1,6 +1,6 @@ '耗子Linux面板', - 'version' => '20221212', + 'version' => '20221222', 'plugin_dir' => '/www/panel/plugins', ]; \ No newline at end of file diff --git a/public/panel/modules/file.js b/public/panel/modules/file.js index 7fbb0de9..5dd1dd3e 100644 --- a/public/panel/modules/file.js +++ b/public/panel/modules/file.js @@ -1,30 +1,35 @@ -layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模块也可以依赖其它模块,如:layui.define('layer', callback); - var $ = layui.jquery, - layer = layui.layer, - laypage = layui.laypage; +/** + * Name: Layui文件管理插件(LayuiAdmin定制版) + * Author: 李春林 + * Author: 耗子 + * Date: 2022-12-22 + */ +layui.define(['jquery', 'layer', 'laypage', 'admin'], function (exports) { //提示:模块也可以依赖其它模块,如:layui.define('layer', callback); + var $ = layui.jquery, layer = layui.layer, laypage = layui.laypage, admin = layui.admin; //外部接口 var fm = { - config:{'test':'test','thumb':{'nopic':'',width:100,height:100},icon_url:'ico/',btn_upload:true,btn_create:true} - ,cache: {} //数据缓存 - ,index: layui.fm ? (layui.fm.index + 10000) : 0 + config: { + 'test': 'test', + 'thumb': {'nopic': '', width: 100, height: 100}, + icon_url: 'ico/', + btn_upload: true, + btn_create: true + }, cache: {} //数据缓存 + , index: layui.fm ? (layui.fm.index + 10000) : 0 //设置全局项 - ,set: function(options){ + , set: function (options) { var that = this; that.config = $.extend({}, that.config, options); return that; } //事件监听 - ,on: function(events, callback){ + , on: function (events, callback) { return layui.onevent.call(this, 'file', events, callback); - } - ,dirRoot:[{'path':'','name': '根目录'}] - ,v:'1.0.1.2019.12.26' + }, dirRoot: [{'path': '/www/wwwroot', 'name': '网站目录'}], v: '20221222' } //操作当前实例 - , thisFm = function() { - var that = this, - options = that.config, - id = options.id || options.index; + , thisFm = function () { + var that = this, options = that.config, id = options.id || options.index; // console.log(id) if (id) { @@ -32,20 +37,19 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 thisFm.config[id] = options; //记录当前实例配置项 } return { - config: options, - reload: function(options) { + config: options, reload: function (options) { that.reload.call(that, options); } } } //获取当前实例配置项 - ,getThisFmConfig = function(id){ + , getThisFmConfig = function (id) { var config = thisFm.config[id]; - if(!config) hint.error('The ID option was not found in the fm instance'); + if (!config) hint.error('The ID option was not found in the fm instance'); return config || null; } //构造器 - ,Class = function(options){ + , Class = function (options) { var that = this; that.config = $.extend({}, that.config, fm.config, options); //记录所有实例 @@ -55,9 +59,8 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 that.render(); }; //渲染 - Class.prototype.render = function(){ - var that = this - ,options = that.config; + Class.prototype.render = function () { + var that = this, options = that.config; options.elem = $(options.elem); options.where = options.where || {}; @@ -65,21 +68,16 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 //请求参数的自定义格式 options.request = $.extend({ - pageName: 'page' - ,limitName: 'limit' + pageName: 'page', limitName: 'limit' }, options.request) //响应数据的自定义格式 options.response = $.extend({ - statusName: 'code' - ,statusCode: 0 - ,msgName: 'msg' - ,dataName: 'data' - ,countName: 'count' + statusName: 'code', statusCode: 0, msgName: 'msg', dataName: 'data', countName: 'count' }, options.response); //如果 page 传入 laypage 对象 - if(typeof options.page === 'object'){ + if (typeof options.page === 'object') { options.limit = options.page.limit || options.limit; options.limits = options.page.limits || options.limits; that.page = options.page.curr = options.page.curr || 1; @@ -87,37 +85,23 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 delete options.page.jump; } - if(!options.elem[0]) return that; + if (!options.elem[0]) return that; //渲染主体 var _btn = '' - if(options.btn_create){ - _btn +=''; + if (options.btn_create) { + _btn += ''; } - if(options.btn_upload){ - _btn +=''; + if (options.btn_upload) { + _btn += ''; } - var _html = '
' + - '
' + - '
' + - _btn+ - '' + - '
' + - '
' + - '根目录' + - '
' + - '

' + - '
' + - '
    ' + - '
' + - '
' + - '
'; + var _html = '
' + '
' + '
' + _btn + '' + '
' + '
' + '根目录' + '
' + '

' + '
' + '
    ' + '
' + '
' + '
'; options.elem.html(_html); options.index = that.index; that.key = options.id || options.index; //各级容器 - that.layPage = options.elem.find('.layui_page_'+options.id); + that.layPage = options.elem.find('.layui_page_' + options.id); that.layBody = options.elem.find('.fm_body'); that.layPathBar = options.elem.find('.path_bar'); that.layToolBar = options.elem.find('.tool_bar'); @@ -129,12 +113,8 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 Class.prototype.page = 1; //获得数据 - Class.prototype.pullData = function(curr) { - var that = this, - options = that.config, - request = options.request, - response = options.response, - _status = false; + Class.prototype.pullData = function (curr) { + var that = this, options = that.config, request = options.request, response = options.response, _status = false; that.startTime = new Date().getTime(); //渲染开始时间 if (options.url) { //Ajax请求 @@ -150,7 +130,7 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 that.loading(); - $.ajax({ + admin.req({ type: options.method || 'get', url: options.url, contentType: options.contentType, @@ -158,7 +138,7 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 async: false, dataType: 'json', headers: options.headers || {}, - success: function(res) { + success: function (res) { //如果有数据解析的回调,则获得其返回的数据 if (typeof options.parseData === 'function') { res = options.parseData(res) || res; @@ -166,12 +146,9 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 //检查数据格式是否符合规范 if (res[response.statusName] != response.statusCode) { - that.errorView( - res[response.msgName] || - ('返回的数据不符合规范,正确的成功状态码应为:"' + response.statusName + '": ' + response.statusCode) - ); + that.errorView(res[response.msgName] || ('返回的数据不符合规范,正确的成功状态码应为:"' + response.statusName + '": ' + response.statusCode)); } else { - // console.log(res, curr, res[response.countName]); + console.log(res); that.renderData(res, curr, res[response.countName]); options.time = (new Date().getTime() - that.startTime) + ' ms'; //耗时(接口请求+视图渲染) @@ -179,7 +156,7 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 typeof options.done === 'function' && options.done(res, curr, res[response.countName]); _status = true; }, - error: function(e, m) { + error: function (e, m) { that.errorView('数据接口请求异常:' + m); } @@ -188,61 +165,54 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 return _status; }; //数据渲染 - Class.prototype.renderData = function(res, curr, count){ - var that = this - ,options = that.config - ,data = res[options.response.dataName] || [] + Class.prototype.renderData = function (res, curr, count) { + var that = this, options = that.config, data = res[options.response.dataName] || [] //渲染数据 var _content = '' - layui.each(data,function(i,v){ - let _img,_type; + layui.each(data, function (i, v) { + let _img, _type; _type = v.type; switch (v.type) { - case 'directory': - _img = '
'; + case 'dir': + _img = '
'; _type = 'DIR'; break; default: if (v.type == 'png' || v.type == 'gif' || v.type == 'jpg' || v.type == 'image') { - _img = ''; + _img = ''; } else { - _img = '
'; + _img = '
'; } break; } - _content+='
  • ' + - '
    '+ - _img + - '

    ' + v.name + '

    ' + - '
    ' + - '
  • '; + _content += '
  • ' + '
    ' + _img + '

    ' + v.name + '

    ' + '
    ' + '
  • '; }); options.elem.find('.file').html(_content); fm.cache[options.id] = data; //记录数据 //显示隐藏分页栏 // console.log(that.layPage) that.layPage[(count == 0 || (data.length === 0 && curr == 1)) ? 'addClass' : 'removeClass']('layui-hide'); - if(data.length === 0){ + if (data.length === 0) { return that.errorView('空目录'); } else { //that.layFixed.removeClass('layui-hide'); } //同步分页状态 - if(options.page){ + if (options.page) { // console.log(options,'layui_page_' + options.id) options.page = $.extend({ - elem: 'layui_page_' + options.id - ,count: count - ,limit: options.limit - ,limits: options.limits || [10,20,30,40,50,60,70,80,90] - ,groups: 3 - ,layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'] - ,prev: '' - ,next: '' - ,jump: function(obj, first){ - if(!first){ + elem: 'layui_page_' + options.id, + count: count, + limit: options.limit, + limits: options.limits || [10, 20, 30, 40, 50, 60, 70, 80, 90], + groups: 3, + layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'], + prev: '', + next: '', + jump: function (obj, first) { + if (!first) { //分页本身并非需要做以下更新,下面参数的同步,主要是因为其它处理统一用到了它们 //而并非用的是 options.page 中的参数(以确保分页未开启的情况仍能正常使用) that.page = obj.curr; //更新页码 @@ -257,135 +227,124 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 } }; //更新路径工具条 - Class.prototype.updatePathBar = function(){ + Class.prototype.updatePathBar = function () { // console.log('updatePathBar',fm.dirRoot); - var that = this - ,options = that.config; + var that = this, options = that.config; //请求数据 - let dir_cur = fm.dirRoot[fm.dirRoot.length -1]; - options.where = {'path':dir_cur['path']} + let dir_cur = fm.dirRoot[fm.dirRoot.length - 1]; + options.where = {'path': dir_cur['path']} let _rs = that.pullData(1); // console.log(_rs) - if(false == _rs) return; + if (false == _rs) return; that.layPathBar.html(''); - fm.dirRoot.map(function(item,index,arr){ - let icon = index==0 ?'layui-icon-more-vertical':'layui-icon-right'; - let html = ''+ - '' + item.name + '' + fm.dirRoot.map(function (item, index, arr) { + let icon = index == 0 ? 'layui-icon-more-vertical' : 'layui-icon-right'; + let html = '' + '' + item.name + '' that.layPathBar.append(html); }) } //事件处理 - Class.prototype.events = function(){ - var that = this - ,options = that.config - ,_BODY = $('body') - ,dict = {} - ,filter = options.elem.attr('lay-filter'); + Class.prototype.events = function () { + var that = this, options = that.config, _BODY = $('body'), dict = {}, filter = options.elem.attr('lay-filter'); //文件事件 - that.layBody.on('click', 'li', function(){ //单击行 + that.layBody.on('click', 'li', function () { //单击行 setPicEvent.call(this, 'pic'); }); //文件夹事件 - that.layBody.on('click', 'li[data-type=DIR]', function(){ //单击行 + that.layBody.on('click', 'li[data-type=DIR]', function () { //单击行 var othis = $(this); - var data = fm.cache[options.id]; + var data = fm.cache[options.id]; var index = othis.data('index'); data = data[index] || {}; //导航图标 - fm.dirRoot.push({'path':data.path,'name': data.name}); + fm.dirRoot.push({'path': data.path, 'name': data.name}); that.updatePathBar(); }); //返回上一级目录 - that.layToolBar.on('click', '#back', function(){ + that.layToolBar.on('click', '#back', function () { var othis = $(this); - if(fm.dirRoot.length == 1) return layer.msg('已经是根目录'); + if (fm.dirRoot.length == 1) return layer.msg('已经是根目录'); - fm.dirRoot.length >1 && fm.dirRoot.pop() + fm.dirRoot.length > 1 && fm.dirRoot.pop() that.updatePathBar(); // console.log('back'); }); //上传文件 - that.layToolBar.on('click', '#uploadfile', function(){ + that.layToolBar.on('click', '#uploadfile', function () { var othis = $(this); let eventType = 'uploadfile'; - layui.event.call(this, - 'file', eventType + '('+ filter +')' - ,{obj:othis,path:fm.dirRoot[fm.dirRoot.length -1]['path']} - ); + layui.event.call(this, 'file', eventType + '(' + filter + ')', { + obj: othis, + path: fm.dirRoot[fm.dirRoot.length - 1]['path'] + }); // console.log('uploadfile'); }); //新建文件夹 - that.layToolBar.on('click', '#new_dir', function(){ + that.layToolBar.on('click', '#new_dir', function () { var othis = $(this); let eventType = 'new_dir'; - layer.prompt({ title: '请输入新文件夹名字', formType: 0 }, function(name, index) { + layer.prompt({title: '请输入新文件夹名字', formType: 0}, function (name, index) { layer.close(index); //新建文件夹 - layui.event.call(this, - 'file', eventType + '('+ filter +')' - ,{obj:othis,folder:name,path:fm.dirRoot[fm.dirRoot.length -1]['path']} - ); + layui.event.call(this, 'file', eventType + '(' + filter + ')', { + obj: othis, + folder: name, + path: fm.dirRoot[fm.dirRoot.length - 1]['path'] + }); }); }); //创建点击文件事件监听 - var setPicEvent = function(eventType) { + var setPicEvent = function (eventType) { var othis = $(this); - var data = fm.cache[options.id]; + var data = fm.cache[options.id]; var index = othis.data('index'); - if (othis.data('type')=='DIR') return; //不触发事件 + if (othis.data('type') == 'DIR') return; //不触发事件 data = data[index] || {}; - layui.event.call(this, - 'file', eventType + '('+ filter +')' - ,{obj:othis,data:data} - ); + layui.event.call(this, 'file', eventType + '(' + filter + ')', {obj: othis, data: data}); }; }; //请求loading - Class.prototype.loading = function(hide){ - var that = this - ,options = that.config; - if(options.loading){ - if(hide){ + Class.prototype.loading = function (hide) { + var that = this, options = that.config; + if (options.loading) { + if (hide) { that.layInit && that.layInit.remove(); delete that.layInit; that.layBox.find(ELEM_INIT).remove(); } else { - that.layInit = $(['
    ' - ,'' - ,'
    '].join('')); + that.layInit = $(['
    ', '', '
    '].join('')); that.layBox.append(that.layInit); } } }; //异常提示 - Class.prototype.errorView = function(html){ + Class.prototype.errorView = function (html) { var that = this layer.msg(html); }; //重载 - Class.prototype.reload = function(options){ + Class.prototype.reload = function (options) { var that = this; options = options || {}; delete that.haveInit; - if(options.data && options.data.constructor === Array) delete that.config.data; + if (options.data && options.data.constructor === Array) delete that.config.data; that.config = $.extend(true, {}, that.config, options); that.render(); }; //重载 - fm.reload = function(id, options){ + fm.reload = function (id, options) { var config = getThisFmConfig(id); //获取当前实例配置项 - if(!config) return; + if (!config) return; var that = thisFm.that[id]; that.reload(options); @@ -393,7 +352,7 @@ layui.define(['jquery', 'layer', 'laypage'], function(exports) { //提示:模 return thisFm.call(that); }; //核心入口 - fm.render = function(options){ + fm.render = function (options) { var inst = new Class(options); return thisFm.call(inst); }; diff --git a/public/panel/style/ico/ai.png b/public/panel/style/ico/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..b83eb8ad0f6832d27dd1e78ad3b0b51f27124288 GIT binary patch literal 15338 zcmeI3eNYo;9>*VEM1jK5;(M!IgPwYj>~0`H)+B&L43;Pcte{w3b~j`-*^Qfx3F5U8 zlv>9ZM(SwMdN{4tI#qAfwpTn)Jx{MwRJe}T4(e6C^BwDro>sK#%_h7A1gFo<^uPVg zB$@gBp6~DX?Du&|{>gj!Qzyqn4UYl<#N?Wc763rH^coNW0N7DIVI%+`(rGGo0T3N8 zy+T0U=Ai(jk7Emq#3FMZLGcb1N%N(Q%Ik0f30;QQNm2_K5h-QLSWd6FbKsByVQIZ$ zrpAn!o!N|yH7ypHg2ht{sl^K@Ev?8fMCrVQ*Wq+9B8hk%cFsk3^$LGof^!j47*!zt zA>snPB1>wB6q)mpY+hgxjVe`1;W&<@X;ru;Jz1?uLevcn9hwohYut(B4Ee)v0m1 z1-pN0G=(yD#=&r+3&mA5LwJYI;9X#BT{f8 zS)GWb6Brg$Brvi^4Kq)(*79CzXmCQE5?mu_WX~FmNYbQ8{-P?uV}t6@6k+8B2Pqm@ z2U*6TPOeOcb_Ih*cJ3=8o450VnWq^;vaV~p1%-oD{=G)zaxRhNC??lv@H(6-mZb?z zY8pjTT2hH?Q&N;ExK^Xo(ln;j;!J5OLy`AbX;rXfoQ$)77d zO<>Ddj{kM{n6kLpS=Jbk=Ll=Ai zI??&hE1#^^xiHFPWO}+zgQZa?kVk3&fr+lpl@Qs`Q88W(FQDj;|u850jNN&KcN5r>9=b4a(xL3Zv{_XOAtX`Oq z_))~5{DkO1A=6V0P#p%My>6~)oF zr)?Ory*8u%@vf$eOQLO`kAL8-YQ7Nbh!KAHB4x#zxsQg8J(YFk_vr<-7+kPH?y!!k*k@I)Gx9-PHc{TL%n88ayt$LJVR!9+g=Ss`S@!;MN^zzap zJ6q#M$JGmO-*^9Y-rDnTRX7)e;od=+;8l|2S<*t==WjO%XrP^F<;Kjh&XUz-<-+ud8-?5 z>)R?rj~8#=P_oP2(t6c;>16z*y}9f5yz@jHIbp)SN}vAD$4}1bO6GpD=-lz)Lr2u; zb|(#r|ET$H=B%V8^Q)h7e*krb8R0^`XU3ULPj7Fnou>vdf$ib{DAD^U;@YqW;odpd wd};a-#qWn$jgMw8O*Mz4`7HNW{}2YwCN(~|T&s(b{*9YEX{vGe#Cetf11z*72mk;8 literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/apk.png b/public/panel/style/ico/apk.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6598b918c2e3cb518546c55beaa972e6f58495 GIT binary patch literal 15383 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 WX?9L-`&IngZCY}Mp*}Hx{r><}rX<|} literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/cad.png b/public/panel/style/ico/cad.png new file mode 100644 index 0000000000000000000000000000000000000000..f85483c937cd451c3bd6206fc0035e4b0b5acb08 GIT binary patch literal 15315 zcmeI3eNYo;9>*UGT8)Zlg+tV~J5jF+Cc7IFBx@2x!kg1@DMkg`Ygsp&u#)VC>|z3T z#vm%??wE3%TE|ypwBj2|9jt>|?5T6qH+;Kt_;TuWdRppBJA+hCt2dkQ5)hm|o#}u3 znF)V9zvuh??S7w^@K4Ij8L6XX6J!8@(dlW%OaMT<_!&M708q1f)*AqT5w5gs9)OYK z#Lp10Vbgd3;-@i|EFsJEHbHStC28dr(@L+?1w?cSUKdH_(E_rVwll0={_sen9AT__ z`9h5eGr5xJTqdo^P0uUJuuw&Ll-4RwFvxUX!s~Q7X@Nw%P6x{qUcKD!ORzj44x@6! zKSjvX%M-MGY}PqYfwy!;+O)%2^=F-7}AB@ zAVUyD=eF92Ok+w{JGa%Qm*)zCi$GD2$D{PbDmk|u#kE>3im6bQO5wKJ6nr5okX{AL zPY#%L`xt4Sax*T0;aEiUB^PrAf?h5c8}-ojUQSm}BbM*Vj^doCmvo`H5<>?PS*ae4 ztHAB>Kbn<7X$S43S%F7!B|f0emCFenpUVx>vZp*~W3SU?GWGNx@Ohoi0bBDz@>1dD zO5RfFqR~v6=L*~uoxGH0g~6NOIGp zz_~3P=P(3znYlYcBq_V`d;Mr5DbNNLhQ}!|jY6fi;4=xe ziojGcSUiDYK_-Ej{X9&Zm9Z5L;GxkFs<>c}pqc$WXo0kn0{M$vg69VLSSiBBxt*k7 zV4S3#MqR93hxQHz&FtA%L=xxV+$PRS8)9|6+bw7~Naf#aL^{h0BumlhMuXSsQZkH{ zn2FnF+VD71L1J1=p~h*ALaU-}3QA>*#kDl1)~FZzLp1e~zhG_Tr~>i4bXi*=t%Kw* zSpU(@*cp~|1kDkj9=62*HZQbFV|amc7X}r&Z=rc~e&5mVf`jqjN-omP)8d)a%exO< z@B!#S=RdmyNs0HFffA1dZPlTDMtdKthb|fOYZox!A0!{VhbNb2Uv{7ZR{mLooA8`X z@Q`jg(N43%FFWl4-@d~B4RomZ4d7t<76PMvSEzf>zPO?~@nREq1I-Gge-&_@|FY{d z*4sHSKTBLyM}dF-OcjP<7>bL3yQIP8{?hE1OM}b(rM=4eEF&0HUETT(2dTu{H*f>Y zbCDEnh|_3dH9G&L96a1#VP?FvBg@D*X_goFr6#UR)4wpFFncgzP@zj0SgN3}bblc* znrTci$aHAWKP%mu-A;krS6c-dyTu?}HK_SHjg%lSQQe03-aX}%)1%(tB6jEGJNO3_S#RY{F z7Zg%lP)Kn>A;krS6c-dyTu?}HK_SHjg%lSQQe03-aX}%)1%(tB6fccS*8B56nzicX z9(jV{&5tXU004wa%QOK{G!+0}2>_kX0q}hXKmi6oTMhukdH^E1$`4MZ01z@Y-I!?c zUcI;R-L!Br+}GIJI^TZd=<&+Af8G(gz^Gq8G}EYGbMf0RWmC>XUM{WqdG-=H(V+i6ZP19_}I$T<3nv5Bab3G{`;We{DbzKeIC!+>oy^5)QN;Un~J&f zoz2Uiy_sSTU)5Oo#LzlQ2hNAQ7G3dko&7JqOSA9um1k__<$U{3#kwm~r!If6BPKuY zY?OUl#`Gbw=RC7#-Sg1x?dyhwtgz^-?rk0w`dQjR zUq~%iygmXQ##mb={ zKOz@T=7}FC?E0EoS$6xNKvu6xU6%05t%}qGqcvtb`p<8pT834f3O`rA87=$Up~v-_ ziIcVAp5lFDmrZ*j4Ewxg*E6kGb^G*;_)qMUN_DD-8-9rYFmA-{YfT?Dx1@w#-uu?4 zPyT@}tQ-9=bjh-KW$E7S?}F`%VsjrqGv63H3Qx;=`{Ebt?wv57sO&ft^}m{m@sH4P z)!63Wy^)+k7V+}3-!C=3j#$)BwiHHuOzgS)<-d9BTQ^5MjgiS$9clY$ZDrl_B|8t_ zzoMI%etq`*qB|>|)psmYcUX3Nwv8F5IGL6XPL}R`eC_a({eRDIntb$b^tNS3OE#Rp z)^yr>0W4foeeP$C`lpr|>unKF7Dcu*ZF@f5wZG`1htN~+9lF236RMAuQ{i*4;niEK zr!0v{zVUu!!u1fae$=)}t!s|l{cz)@58BI1|8(qX)?H`Gqc3Ww#Mb%Fo?PL3x@cYQ zaLat_`<{hA6zna?HoTs2^T(xSox64qZ#b55`r1M5gsrI?9>srsVCB%umX3xfp_Pd$ zI<@gXJNGQeE^#Y~gAKI{>f0YRet-Wx%d1z06dZpZlc;UjYWYJ={mn;;F?nI;jt1sl zVYPo@+k8Y-SWQTqZ_mj1-T7O{<-TThSk^cDBaeM`nF$2Qki-I!0urRaRls$a3^1C^#AJ}*f-K^_ z)Z^9a)uKh^f*f3K)fSg4i{e#V5lh9oAkeytD6LyvXkG4^ge4$&I`^D@o8LLfIeDJ< z|2*&f-zE8y+{lQJhuJ#Y0sw}EhNz+d0DkOihz$T>=PG|!0KiavNSqM>I|ugF4{XVI z0>ICMjEQAp)!`^k>%^FbP9Vf4ogT2rrtDgonA*Un82jdQbyFI5Sr_vlo4gakWgSA!Yot> z1K5UwSaqZzh&B)csn|z^BM2h!m5C9lpO-}Xp+Ev7QV5no2rPmT6oF9*ENDllv=s;h za)TxjjZy`-w=-xG6~bhO(W4NQnwlz3^%B#DBnXkoWDqQYBodK9lPEH#Q4D4hQO5C> zA{}*9gb_E8dWNJa0b3VKpi>xyP{=mwr2V;c`p!m_vE4hI)P@7G_ z4KXyWRa$mgWQT=J!+_F4VjqMOAV7dNE>t* zqa<}$5&`L{BstU-v>MsDuh1Y`OB>X*hERIRySAHE*h*#IYiKBCWH1URLRCtWPA?`& z4eI4bND-;Gmxv$`Uy(N~^A=$V1R`P`g%LjjMl{}L6V=`1Z7LTKcT26)J*8dBzfvTll(cv25w=pXx3A>} zh}L5`q4beTy`*yUrEDGUsfZ*^gf>=1>Illn?n|jpyQXKNS7BUVLaRi((6UrkU+LzA zB^sp)R@%y;&L1lsnm?DWC;AiNn{a}+ixa$EoZ#)^1aB87c)K{k+r7@vae}vt z6TDrV;O*iBZx<(cyEwty#R=XnPVjbdg13tkyj`5&?cxM)7bkeTIKkV+3EnPF@OE*6 zw~G_JU7XmU48Xnl0HApQjH1`iI~5GT zz)_*9fEZIlYvcXtvxqTOj~=vC&JLSYl$0^s=FnV6{7$&{1hL&W(O{j#r)oV5Glz3j}8_=3{Yw-4lOlEmNr`9)TyKNB`- z#L`VqD#-8Ko*IMf+gzH@WTa+Z2A*!`${NCxGJaY%Z$-mTyXt+k zxyJ_N7anN1(zv!Vry}k!@jDS#x^>W!XZ@3lm{|cKWA82S58gfOKll#kO#i^$BlCQt zzN@NO=Qcc?coMkn6A`>Wzq*;AU%Q--yjNA1lQKWL*tLk7b!+R!;o!fU;$vpCNvn&C zprOyB)*mS;89HodKWTx@g$(D&0k5}LP0rr@@nrjgQ6nxos2yEImv%4j=U7}%9cp;! zH;1|4jgMgRhpQh4T=NA@#Knr|k%Rm9zv;R9*U-7?pVqGX?DqM=u3yPo9DkHk{yXch zChuxmmcG6CgUqL{%l9`0OuxS&q#gi(Rf9~NK!<@Ko{2O94``a5Mm^MXgh=(s!ank~xe8jZYc z&+YU7$V|CoD9aabQ=H41S~3Pi=eqso2F)B*5?XVmV)&UkGt{5oy%C#&M+7>@+1E`> zYfB;RkJMM8M%lQr>Gs(Vr$649d4HPm*J*QuHwBeDM@WM`x7PYZTsRclVvht+32_PtEcq_Z48jV-S{`XbalKkU}o zq{_V|PDA!4RhirmmahczM2D6S=Eyd`_+F)5u|E87MY$UWk2}42r^6NR&rhV=WI3GO z_hsu{K{%?I?!U!U*HU<8_sdrkw}mc3TATN@E!y-$^^J*}*LW>I>3&{RCR^Yz5*htM zhMu^*er?^X>u+A>FDS~XZFst{HWBtrIIhXhELeMd|8|x89KE9`+4Y~9*Yi&5!wXL> zI5EDgMemKh&kXsfyfSm~(g8RdM35H=NGJ6+Sgfxfs{J8Lg4o2d0bYh=|m^*)tHA%*F%W9XNU zTUwpw)vkRKuC|*~xZ1`z2wd{NGp)2>W(;~&)U;#XW2AKPw6Uk2#rvE%e0WdZ#MYE1 z`k;bZdsg{Sy(19%xM@0qOrXTx)I=nU-cq!tT<8(hm7O9R2XOOI23~fJ^h2fPtC01OWP9jkkGhA$1-!QL9zfi%%+S``o>GFutWziKavoP(|65EuT=I-A4 zxaMTZ$>es`V8|MEeSU-t;wIon9~T(fIMH9nwC$ ziF*yt?2Wg!I3`!+9PvAxOGd))PWrYfyKk<^_?s_!Dmikgt4x^9WAEPO=iKZsu9-UX z=F8VEo7uWrHkS#Xlgjw=ep~R{1g-Ns4%o>By-U#Y&3PpDxs>ORL2uby=ES}48ih;w zeSXc7=;SyP%koT*saU*mXZL|St_kmy49W#(?8XrO=lbA8-6hWlO9SdQtY7_^Nw>uP yuZrl4MWGMmye$IzAKyBxIc;jLVoShW^T`X;efP4Zo?u{LVDNPHb6Mw<&;$U#gqoZH literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/doc.png b/public/panel/style/ico/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6a6303ecfd3f4cac3b49ddd26df1dca9dff868 GIT binary patch literal 15378 zcmeI3Yg7|w9>!m;wJ23VRIut8FU4b%nF%B$F$uSbhy*BL7nj;H%nUGV=3-`$2b7dVub1MwNX4a#x@%qQrQ3>lX|=0(wuQP%wd~P7lW++Lp1yldzs>KQ z@ZtTx&-0&o-b?tBl^JQ%gM%W1006-=l5Lp)0E7G)5C{O+xnk-V0KoG?@@x@+fuZup z2W+ew34kGz$4KX${K_q zh}lUMm@;ii9qpV{fkjm$NrDMQOG-*KB~cpQS%~6BqY=fls8*|XQUz*p0VfeIH7Abu zm~{HsXpwX>g2eC~BKs2ge6eIvspLjobi5ZUbT#6{j_gRDMO}n|;u;L?OGJ@f8ll+f za6cMFqO^l%X-*PRT!Z(i6N-3=7mN6QT6UHDZR}zNyS=M-pU=y(eYO^*Y4fFLE5+;u z0*z+UB46wz>1p$6P8#3W+e=JA_u}+;2D#Gjv(ql7ADLY7$lP1OgW1IjrbH)ANW3$f z=N(qhF3aeQ5J^mQ?I=Q`Pp_7-)oc()&IBP80Y#c;hE)2X%5*?5d8+GxU! zQ!s-G!@Nv9Gkba1d5S4m(1(XkXVU7uJ-lZ2_Mjz#A|&Exxp>d@@}Wpm0qBD0Mzf8r6COrjOBLgw`1C3DMp|{*<+iCyV9t(qT?-N1~>-vAD#XTdYtbA{Xo-)`??Ma}ZXChrEClL+@J;AZz_*JG@^ zvuA#eysD03_xunq(|@Qh~K zlB_{ywCkUhPR%b%_Z$6!C{3VH;(|hn3koGJD3rLMP~w6@i30EN9z6k|ycvLE41l|N0GQSTFoJ*gjfNxu{HPhW_-t3> zzcT2O4GF?GjtmQp898Fo$>jreIR5gbu{Y}d=hxS-=H~nv z*SvOgNGRF#@HzjKp~EshZ4bV;WBG-e^?GsYcX8v`(u&V6-@hiFOKpkyv8pVsW!w94 zNL(`a$;lULeaC?m>bf^ZTuVQ{s?LARxZiyo7<;8nJUHuOT}9P}py*S6 zt=PT4A4m3$oY^*ri9TUTj2J4UuSp766@KA#IUb)f_-ON6&mU?yP@WitZ?Js1EcKny zpX>Z{w$={FWRE3Ot{V)7+tm@6EA_%-|1ZPn=k%p(ZVpz@85hU!1Y6z`S^r=H>y(%S^f=|TU$f6 zUA{l|uiuqMewOLjq*-RaoqOiq*E_Nfev%RR#oH5V?%c0zOskHkUy+W9r|R3ocV%oR zb8|zkZOOH(@@@|xmhU+nT{GwE`LCqLvj65*9Bi22t0}v2Zg1ls&(Hg)=ECOq`up`k z^H(Jwc&qX~LvBcTF8yfDDD&7SmVtY&ZQVCsTQJj!oYREoeYtZ;?qp$i+;1P$oZ4EL zz+YP`$G$$o>Y3o-+=zeH{zuWR@h)-qu)G4FWZcVSrJFWAJOFzIK-o3ImNjSGX_~F!-hTf=;7=+qR5{rh# zu~To=r>!nK`JcQ+49jV nAHO=}!@Yj|lETI%Py9eg!o&8PYigV1U+vDAmS)?Zkhk=IY7aO* literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/eps.png b/public/panel/style/ico/eps.png new file mode 100644 index 0000000000000000000000000000000000000000..3c726744f36f2c5b5d8be2ebbbb37aea89610d4f GIT binary patch literal 15408 zcmeI3Yg7|w8pmJ28(6Rw6-rgc*cK3ynMp{1F^RH7E@BiBSHyZ5W(Js&%uJI(0>w53 zk*(H6-R)Uxb){9e)OD#xMO{HFf~%`-1%-puWvTAAZoPKJ;AOS$nS@I~@N{}kzs>KQ zBN;wtc8Nq3XPmVQ51@bQK0H*l~Nr6DG^i+BQY?F$PpAn5lo3d-N^Jl z5Cmy0WEPfci0^J^A+vO{9G>Se7|zenSLCY{tR)*pV`5@pLCj)JOuROq7{ocq@!5&_Q)v4$HIF9CnD7z3Cwv+svHN*xP&1`I^mxwzl%KR`SnQ zTGI+R3Qnc0Y@UUnX04ooLT1RhQ#N`CnUHbGoLj+#)@J6gI17dI ztR;mZDk#*56Eq|E8m5H@iuzW(uO4Nmc>%axI7XcQKy z!cZg}iN+Abt%z&nfEq@Yq_YYJsi9V5N{xFBw~+&DP&`iJJpPlaxQ}(KLlRgPYcb=z zo;Ksz6wEQ%TDULhHnMkLVR5X9wHR5F(yO$6+s!TPrgH8zEQzu5I73iL2EEP9DQKF+ zGD$R3iAJIF7$u^SM@Fjg>L{8-9O=q_Fti%J^S>EYK4nU*bNlJmEGM2gxyra?d!S$ z7H~L0={0J#O09KX%I@KTiWJ&LnbHlknPRNMzEo?vH3Jia3KtJ0bW3y#T}$QmmF`Tq zqN#>>y^j{|{jt)c`DN*QqF)fHi6|tyL?PKF3dt@}NOp-rvP%?_U80ce5`|=!C?vZ? zA=xDg$u3byc8Nl=OB9k_qLAzog=Ci~B)dc**(D0eE>TE!i9)hV6p~${kn9qLWS1x; zyF?+`B?`$dQAl=)Lb6K~l3k*Z>=K1!mnbB=L?PKF3dt@}NOp-rvP%?_U7~oVT|Rw( z|DzaEC(D=3(EpE^`F8*SL?osf0VsS00DB1l51s&E{~mxm1b}NR0Khf_5WsF)eli{a zui_*_Y?|%s8y_x795+Ak)Y~<$A6YhARo%Sr&CT)Y`ZRKQd(o)kYah)lQ5YPJB@QTb z>70*>70~=~cT?`BG(Da>dmOdstmpcD5#Hfy)$N=km+G6os>+zIVl@7pWz@N-&TXpB zOYB!M9Z`EHl-1Y4yUulv?DG25?yC#chxwnLe`EW;FHhdRwX!gHuivV$n$GD7$=SJ4 zZw`N$rrB`W`}jNmS+oWEOJMTuDeFg62A%(neK)k;r!w&TY5Q8pG3H`Z)iC9S!}gBw z_iZ;HP1)2ddspA`derdhZKkN)EB?LJ z%{P&kGhTa?sn8y6s$p+LCboP08ZIzB%nba)s4|Vik9HLAqBkJH-0}Le+=B{x%M0t6 z&wSg<_n`st4ZCa3JhpQ8o*Ooz{=EG8nE0hnF4SCZlT*iP?nJEmuw*0A@}RY-IJ~T) zDrnm5%O^Y>c;Mtq{+T9I&!EI&t&pbDedk0w(O)bj+B?6@~vkV0!z;F?&wi4}Wl_EbL5KNNc3m?(HQ@ zeS)6*(xD5#_3vsVy8tfD9e>fYuC>Eq%T-Nmirlf(Smw!?Ew~Tv_m;GZ+Yx%YbpHySRw;oH+3jg+GO3}Q6j@*QXOix5V zcFk|kzgW>S`i1Y3raxJI%WgrjX%1-D!BB6vlT!5sq$j=wQnbFj`k|@GHkp)g`RiNF|GWS zOW!R~`!^1Y^f1os{n&4JjJW#g8zXIBd}9x3Zz*}vKBMsAl6RD9uMqp)TOn`xftq|D Wd*z)C?ZSV0lV;5|RQ+m2@&5tw!&poJ literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/exe.png b/public/panel/style/ico/exe.png new file mode 100644 index 0000000000000000000000000000000000000000..3cfefa5fc389fc9261cd5fab2074b782ef5b5b4c GIT binary patch literal 15139 zcmeI3e^3h?4>RPT20jyt$@?+D=_(0WMVtcSIRW%oVUa<{wg zE!;t>MNk_WYSDB`MV&FkP*Y>#Xq`ccVuEJc)YOb^(nLnb>2xx|K%3MWwfLj6cL%p1 zIC(ph|K88s-5<~MexK*v@B8EKpKB{CeR59vH`4(Cb4rTcgzWU0`D}ews|OzTmWl@;wA-FG?jX}raI2S8}eM~OoWaEzsysts&v_lo17z0tuVRZsg2nGm+yknQggNi)|TUq0Bata*$@qNSSFf zMO!E$j=_~q5Co&}e!ARU6mO^Sey5>URb`qa!{M+gY&A(r4QX~b93*8SEf%A~`;DPS zQDq}WF|;UFWUP)GhB!r#RY4L7tu9+F)vHc}L2EQl{JDbicq1_s_l}c-WQ3JTvxy?7 z67k%)My^)^(W&tq2?H<)MKwg4P39?ea;>CFp;~F0mgDJZ8%Kh&$1~o0%J~L^Q??GN zg$?Tcl_77V49RjBlIj%>7B)apT{P9xtAanVI1}ceWu~1wj0n@nv`kDE-3l?7NKmE= z6v(QQ;+3R;E4ItZ#w;WX3ZlD;c+A6cf~fhL#gLOli4{-OgKk!ZE(>M08!4O7lI=C; z(AienYFSF<(iEjD5*sYI@W41p#+vwmNb|aN*&7mlNj>VrHGto0aeotw)#MNu(C0?3GEUlB@ zQ+lN$)CeLQ(2db%kJ@62GWWD97DB3|H0ly#w@?LKKQTI%2nf+zNoJK0)XtpKFm~wl z2Vfi~dUk1+)9y1DryU8%GvtJ5Vp`+GWy1fvfU){I`Sd-)wNSj@fr^!ij+(wmNb;*; zR)P67P*lIzX^+*ND4g7YA+>LSfG{x;i%wjj=)w1RrdUx%yV$hd07aFJu7a6~UUm~= ziO#X{K5bP4_0jP;7K)-M(yV>PrTX+_Y32Q;`t)RJLb*y5RF@^*ZBkgL(r(|_4NxJo z9CX=jHmi+^UdsCLWJQ?}fdQXe2tqNW?Ms_Iu9=*eQdl{iP?v}cV@sv`N{=RD(Ql?Lq?Eg#@+>32YY<*e)cnT}WWNkid2!f$c&9+l2(S3khr& z64)*zuw6)CyO6+kA%X2e0^5ZIwhIYt7ZTVmB(Pmb+}E!3#NYp*$U6;TL!PVo-1$}j z0KpZPdjM#96oBSd0B+s|pm_*@dJ2FmRRGYx0bs7QL7pE#2LOb7)CNxl;b0jM^7Y96fR6z2|+WTW9|LrAQ_- zEA_Q?UiZu2$ofIncYHs#TNiYnPqXjZH)~Juqhp(4P0r1cBcsgn9y0$-+_WtJV1s@;i>Nv7Jb>qddqqBEqJaN1yIqx42%_#ou z;#X%DiW{ybJ??$|xhv1+J-=+5)Ia+v((=r4k8f}4KeyBhyK>)6TEe_hRet$cnfK7T z%_~#i8Exs=Z%AkUvb2|3JpWos{=vEzQ(iln^=swl3;P$%7;YOl+CDHOX43YdQ|>j& z$*2F#7k*Z~YUi9sO4G$X>c?&Gh1b5h>E#!942)iWozx8>>k>L6IZPT2j^viFT<(3M*!OblT zH~#rj?(R=I{SWSJUovk+O0w-!X0@1_+W(XMZO^m}oBt?VZuB16(9(GzjsMiU`r5Gb z_A8OsyYJMLCQDblj^#Z1zPVbDo+g|#vbL2-Sn+C2{r}2j_^!;ph$>Sevytr?x)Vb_J!|~teUixq9vEjr0ednqM zS4IX7E7B{suH~#7HTGGDyV_3_?kd~8rt(lA?T3|bj#z6qJ*<0;q}-an{@iuy^6h7n w7jE%%`kNn2yM1u)TQ^dfl%A#GTl2xC<6YO+1|G`P{>EBTSn7WDiK>?W0np{lTL1t6 literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/fla.png b/public/panel/style/ico/fla.png new file mode 100644 index 0000000000000000000000000000000000000000..c59132b11e33c773082394472af990bfd93ec27e GIT binary patch literal 15110 zcmeI3eNYtV9mgNQB0Zy%h6rknSx-Z;a<{wp0(YCclb1swdd48O2ac6>_c_?%Zg+FL z$Vs&UjHuNZ8>e|`;%i%L#xyck8=^tZI#Ee&Y)YqNV`6nGaT;x#M5|b%cJ}Vz76d0x zXY$|knK}M=e$V&&+x3^ZJ`A~MU>LzP$tYX#A5{P*E5 zBO&l^P-dujHEQIVW$NuN;b831c#ecY7=ogzkhGZ|RwvgW~WmV|0P;|bDvYRZnO1glt zSs9ycCgor#N@o(EImE*!@j_t5FdlY0W69Th=w=S}fGW$gD*KgO^mBDSJjVp2aEMhs zLWr$}q%79D$mF1I=D@yUN~E9^_DMYSSY65OrW@9&Vtb7#7ZsHiIau!XL_)Gz5O~JU z+ic667HD!%R%o&nSo2Lz76wclXAKn4w2kK-)>w$XLGpX7y%N`;otK0)k7%uv-(&q` zSf~|5HmIAUJw0lRVQlVcRVFB^6kee#^xr}Y;nRah`wKxKb}PwjSb^G^a~t~)o&Ep} z;EJ7HhUK*T%)@C%0`e|$&}j0p21v++|91i7{yO={JsRtvc)tS`w~Eag*+h{7Y9kwl zMYT{=zuIY!`wkWkZQvrcZ-AgMxDX#5yh8nZ_TCkBX&0Ne8=$DNu~nd5vCD4ISh90` zzF%9_U_)$vfrX+dilnu_38}t3R9ba^slGf^np7?l1=V9obQ?0PQ)#zv{03MkvmEr~ z+wE4nD|RXChleT_2oV_cdxa1b6>VSI^Ann(g<*wNBMEhdgfPBTy07$DAwF8+o$WEW z$bo-W`ZZrK$v65M!A+3BaUp@@LITHy1da;{92XKeE+lYVNZ`1Tz;Pjg<3a+*g#?ZZ z2^<#^I4&e`Tu9)!kic;vf#X5~$Atur3ke(-5;!g-a9l{>xRAhcA%WvU0>^~}jtdDK z7ZNxwBye0v;JA>$aUp@@LITHy1da;{92XKeE+p<7mm&G{KPd8UW214F=cTRZ4gvrO zuB^fbK+|IYG_MBW=3M}q{{cV)1;D2@05C5DkS)Ei^xfG2r25OfMU{~cubg$yomMm< z`uW|Q8Sj*4P2JV{)7LA#w^Or>Pt82~#QPJ1-UIWM9Us4vpE7qtnmg6FZfRkjcg&cc zjNcwn4Wo;u_hsGqv2)W$;`>3@=~rvT?KxLY?e3$kr>$G2zIgf2mm4eJOaG#9QeX2p z+IHXpKCP>({j=Y5r+T)gee%J~@BL_HVCmJ~b(d~VYdUUdzm`=vdez?-oy^$3i~WVI z=2+SKXxrwBmX@Eq(9*K`ziHdIwGuD&rtW*Q^_~CRY&`k$_2_S`?RjcHC*4;|ilaC~)j<=Ibmr$oJ}yLaz+E8Dnj z{q!jg&$ynR2cMhdC_QnU*qU$azIH8oYU9rGoJnimcHV7D>*!kB>CVl%aG@xddga+o z+@+wngROs6|->KjJ@cycf&hbam*REaExp&j0TK|&UdpmBVRKNJ%Yv&y9 zHQ|Yq=RDVbX1bLEpLcY1?tAjrou8Kda@3~tC)XW)^`DW+>7&P{=WIE6dE2)NPdrt~ zJwG=y^N)YND4p&--{nkZ}{D>_JsB>{!8_oom(G~mmDoT+cqzqdHnXO z>})xbtB$SCx_0B(mAnIQ-MTe%ynpe+v(~4h@0PAne$X-b+?nR9%1*dz?`8PW_53UU zGMFnjE9lLXcZD_A(S)F#~!`6!K&BaT<`}*P?TQVKYpHiyFx@j%N|YE)bF!9CyjY<9<`#qRUj7ox?Tf4Kfo&Ch%OW@s&)*k@Sz e#qyPpg5xLJ?p*A)KCJyxwY+q`_s!y(*8c&3l*RP` literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/fonts.png b/public/panel/style/ico/fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..9637fd063286c84454fccf14d34d9bcfb923ce01 GIT binary patch literal 15531 zcmeI3X;c&E9>xcwLFr{ttJbw4f}oPjOhOL)S4Ff8&{NnwRjE>rl3WDu+XAr%Ni5(rkqkXiNX87pQn*_kok1~_IfLq)U&G`@96vZEG_V`XTdnr8zc- z#=vOIOl6r2Sm=is$&Bvq?HN3+V{tk?16%3w*)a>=gN&`%WY(=n~o9kE&*j3cA;vIfi2*O}G83g-DAcaKc8w>lZedTI} z-*`x=h9El=+srN=dJ4tUa=P(QDAck}9(FUkdSDEKA`J3}T)%pjxz3lGs*2wIBcs2Y{| zD^n4Luf!jd`$~LMVOXLcGZZ1z0Y(8_DEo;2JAH2@mTG&%JBbp0d4+v@}7HSXJF*p4wTKxI;&?BGnK|< zBPMKOIz}>o?6li_I}5uu(17eWfD!Lpu#I+Jp|(By=89_Ai;dk47|9^kRe&|t%dXQ{ zM`zpo1a?)8S=RafG6;eo5N7|jO6|*CrHOBs+LyaZJCt!G&gf*V-MS3hso2}sb_2xF zhym02DHL*r#(F8+4|i2W;TFu85P}mJX=eAO!mm}+wa~3Fu_vKjp;c&GD!Z?AYr!@e z9WqJhqygLiS!vV!xpchIp9tTC6MS5p;N#*19~US1xH!Sb#R)zxPVjMYf{%+6d|aI1 z7@qae|MF6MS5p;N#*19~US1xH!Sb#R)zxPP{cPr;eZh zVI-;*XNxE3EIX@a0{|d0ghlHCAlDNB<}U<*rq=*4|2F{0f&k#*EC5ii1Armarzt;9 z0sz6w@Q{hImaC7hg&T**y?4C+b>o>)UM{5rK+pKF?QSc7c5>@=wU={Hkk1dtS56rb z<>{h5(Z?e&YMG#Jzt4c6jc%z2-75t_5BvYZOiYRjtXPnL(UZ8-d%)e(9`zcR3v&hs zoS3y*u?h9ux_-~I4UgwMo-1DynyGhRm6GJz>#+ma>x+GXnl(?p=p9itr=>n%eA(Q% z<_myVMzONsbxy9o*RGv)LozCqeU8-howe@r%4GLJ|6V?FbdB&jd}-zJk?u84-wyvR zZC3KxwT`<3vfLvN4OZ^G^NYFq@J#o)#V#$9I#D1Mb^Eizvrqr&2<&(my8owgk4@U7 zoT1ls|Je6jcH2R_*|A|hAtRdBM(yLz~z&x<9_l*iXisH{pi^hnXn<;wY!4M8bI z`&?;dX+5#(^tImA_=$!67dC0PCMHw}3{IW|ByLkxwcq=rp`60< zwZ8A`e@#frOkH+H5F|ri9k1Uv_QH-8wegpeUOI|{iuN}h1YP6r434kZ_4hI~!Gc}< zD=A#^)0j^`*%2L{Tv(;4@~U=nnKbC;1@g%FNM@ax!W55JtF9-&_ix^CKXNps|2ut~ zgMwB&=Y8wvzA!reOO^BI_opshBYQ*}pABfS$jX~k6-(}VCONd!Ov4YCudPLC$m6u2 z_SEDdioD{_CrqwPO1|9S_%T{N!oM;5-Zps6ocyTq2v=`g7U?N%!0tFx9YXaZy)%sZ0dKfwt8aI181(k_mx|@@ZEA@>HE9V zOA5xg%{-AAJUICFlsLcib2XK2PyPEJsCjhYU&h0r$BH87`YXD)(|XJ|MISIN-S(r+#TWm)pn1;u_5RO>mi3OfPV6b0`oPsGvT@vvgH?C@QU-dh58K?({BdmE zy!xPXw~vzYFSnEeg?p<;elYTTw_9|qazyb6>V8b&=%(i}zrP-8Atw#oqu85RQSkNE zP4jX-`0OtMz4M=(+K3D1y^1l{PFZ!od5|Dkcqb#~(tT3hvTyVHigEv4c(UQ?v4MUs zD}MmQ!s?~l=P@@M@{T?b=6}@~TOr5|bbVmk(W5R34mlk7)pX$_$*m%(Z(N!s&Oc|su6Ta%Y<-V@9IoH#r*B4l^atOfrAv5b_+ literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/ipa.png b/public/panel/style/ico/ipa.png new file mode 100644 index 0000000000000000000000000000000000000000..97906a8742fa5268c84ab38e5e4a059725a6a6ca GIT binary patch literal 15260 zcmeI3eNYo;9>BC)MG4wrXoV`*v23zNmPPYa8f^h(cKT8h?|v&vo1n@s`<2u`1y z>3{o~34c7l=llKbexH}{Pu7-|J`%4?Qvv|uON#B~005Kpx#unb!0t6OehL7H$_pn+; zyRGU)1_$ck3MnsL+{9B0no6ByQw?c$tMhG2O8^h}IX@*5s(|0e2zbD%4*KGZfJ?)O zS{0lk)>zdAQbSdRqfAxE@|4P;&C`$=hN+BZEoLz3b%yCG9f}zc)Qn)L2E}j;#dWAE zjM}DDsZ;rH@$LyZ_AoE^#fkpRIVm=;Aw6S>JD z4Ohqef{*4V5z0sTDMl0!OpA@Gwks3WK-M0;+cS=wQJ|2X7^g-~~!Lb5`}>p^H8M zLs)`m7bi&RKC_Y1k)YfbWY}orv4#lC=>K;CL;g|nv3oRlDdtWGDr6O$HMWVsdc+2T zrwXbmM*Lx?J>)xFII@8Sk-hc=Nok>ilPW6{S8Z_%OjB8Mc3`eP?+c$IrEZ_)| zvgH{JdV?i+DMt^FRFu&H%2#2h{S+fe`_hmX){HESDy$q!7*z-hLrWF)l^!gFM$7F* zHl+m_`e$WO^WzeEqaP8u2^4Z%P{?sXA;$%U92XRFTu{hyK_SNlg&Y?Ya$HczaX}%+ z1%(_J6mncp$ZlwN5c@^U_~2)K<=^jZpWU16pYTk+srdr7@2%#~({4R~<=lHNZ_)2g zrT52q3LDTwN}9`O0DY5G^cL4ap6i)to?zO7uwZZ=T|MeUc2+LvO^62oboR6=SbGv2S&c^{&O=_6{iCj$7oNdn=}pHmy9q zEav@3&+pl|ValRD&3oRbxU$dGbS-h6*1Rd#r&x1hZ^q;~ z=GKY(y{+}83g*LcRd2NKH7-=vZ=vsPt9rBknVT_H-i-s}cEt4xyAM9jA1L@TZuyLw zjO^x|C#D$hzu7;2#gc{gr>!2 zkG${yu5N9vB}3m|+OMB_Y?Ze=Rwz1h^z}8LEq`qD`W2=Z+8@MvIk6=}xL3&i)$ji<{eHG&R;m59hnKGW9~I&Mo&W#< literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/keynote.png b/public/panel/style/ico/keynote.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d74300802c40ca2f0509388254d5d0fe98a7cd GIT binary patch literal 14948 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 literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/mmap.png b/public/panel/style/ico/mmap.png new file mode 100644 index 0000000000000000000000000000000000000000..ffeb91522490515f3a18a3b9f1dd782f2a8373a0 GIT binary patch literal 15244 zcmeI3eNYtV9mgM05HUy;L`FwlkKh~J?e4(>x7;0GI0!@z3}6Lqgk^6JcDUPJ@AkMu zEuJ+>sA!YeB8t(8W5lMFX7U2mRK+T7r4kayMhl5eV~CALrE!{S%-GJ}0e2ucc{-E- z_A_(*@%*0e_qY3fUXFjRepTKx;bC*b007}R*~S6@K&tc!4FLcg+mW^a05DC+E^z=b zJyQBi0{aid0Fb(rEh-j^O}Qk^+f286ds~8a}XDV1ur?~UpX$8WX zb&55F2{Q>9OeLGW(ascZ%qyZdR?!->B3&P*b(3zJU}HoIaoen%gLLZ@USE=PkkT-! zK)h4LDxJb0HAIR{tB?%d&LD&;SxMtKj-+T*IFXvDCK3=eh7%~JL2*op;UtccY77}d zp$|h4L~A!&$O2>5P&>QXqEl3gqCldk%jHtJ5>>pt0>w2N4T`BzwOVO6Ta=C(PNdvQ z&JpV~8TK(U4%*HNBFl4#Ti)J+K}uENmqL}q$K zBRK6=@1vP%l(8~4h7%nquENLF36;FaJ1Y4JT8@+_Z0xoPCeujoai7;_8@IJX%&Zn4 zuXGgE2n<@lIC!U>W-_Z8PK+Jz?M2q&Uz}0TAXO%OcE-(4Ad@OSnRhGr(7J5`nPF!r zk+&D|yjAbpWvhlGL^3kGy9!xqqG*M9NHw)c0};oEzX{rb!ELw^5>= zwNVueDsUBA)IS(7b7WtU8N8LZn|L#$Pt^LiTflID%DdOd9L^z99L?ky^=_M>Vp%gu z;Tj50)mW4kbuz9@vRG1;l%*V3YA7?4ltkl95}o7?(KJf_h_#WYozi(3vNl6n2go0> z&bPA_EJs-b=15Nu+hQD>M_OgG4w1Ll1QdpEp+aWE=+WVVmG$0A0%dnF(wWmKh7Vof z0T@B+J-Z}DOZSp&!jbRvu;?mzCX<&J*wB+&9!17qBU%8rNMZJ2c+nC`1m2~_1Zh%68 zq8WWMK_n7d@1-0#JXW!abu-ptBWq(ghqNz=09{1>b0a zF-sq&MMwTw8P@!;_}}OUL~a6w92XRFTu{hyK_SNlg&Y?Ya$HczaX}%+1%(_J6mncp z$ZH1B%?=}Dc5IVcS1i;2P06g0Oxc^@OJYNFf!~nQa1_0Rvz#RUS(ylB3g0AKm4Mpz0 zubOo$W1oxKaj3rDvh5fWYKRZ7jg4+x`ylc&MOEC+bgE07_gun{5~lpx*66u6IUy=I zGr^cpgw@w48^Sx5AD%@tDQ~}@H|xR|XV2|R`@;6VF43i`NnLXNU~@#=%h`kZXV1ocx+qZyHyz%#2ZkZQFth@MKZ%pC(vcoYRB4$mnVeLyR zYcje+no^E5cxnvYVNHogE_gJCxeKucy}=h_(XyodfBDUweaP`0Q?+8VG7%ccr_#{q*6MC82fHhM7+iA zyg9!6rlYFrwKtyKl((j{?8y@+I?K22+jrq^TRT;|zTxIgic=+)y|w%2&b$v_kDJ-G z`IpmwtW|w&8i+PdG}{9+cx z_nz~_$G?=_6oo}^>oG+V{a^N7@zhO?oZNamr*{9nL#?e>2Trz>PKmtpAg%7}HCLDw z=K&vg{r;=rgDszXPFefUP5HDldrSPEO%a{wr|Z7ml|C7~sOmZOi6XQ_`n_yUW}dP2 I>9U{x4~4P&q5uE@ literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/mp3.png b/public/panel/style/ico/mp3.png new file mode 100644 index 0000000000000000000000000000000000000000..c946e36d0c47a227d83180fc0ce5edb24c03f730 GIT binary patch literal 15116 zcmeI3e{dA#8OPsf0Ewo}7%7>cxEuoo~4}v3=+%;MIsd_w#7JFsfxfDMXED}gh-2;j$pC1HN>%4=s*P{v=MY@NoVgacbg+& zd^_WR?`Q7rkLP*6&-3p0{c-otZK_zdBr_v70|1a&>T&x300sK{mdOBs-5c(k2>_TX zd#Y6cZq3%;X<%np4gdx71b>xQ<^2J}OJNHakZPeN5|)9Eb5TU*_y(vEwXjYQU8XM% z9ySp|z-3xt^HN^92-XXpRs~kJF7xxP4ZI^@TEu2JBTOVLhoQz1k#I;ii zqlZZo5gnp6xJ-q5L!!!CK@>>}By1MDnWt%*Sm?0Owt_sXZ2@7WXd6j6NSZQJG(%I2 zl_KJp*bIUooJt_b_}nG&c1j@VGSzFE%#dVrbF-y6&mt*xB<*lGNXklDt!5<B(gPxgi?l2-uAk#B3S#&GJa7My1Q=~vn zlN7%sh1l3Gs~EMAC@PBXDq^0O;{{Rob-t5K6(v_ZSr5874YF2>wwo!N*_!XC7c%*F zhR(Z}DqtweP$V`orG{4u2*H+dYS?Uy)o!d|7@1lFYFvQRxNlU&IMz@nz%xNf33D1N zgt(5>b0)W&A#6}Z_Zm|wsv0Nqu++^)!m>pW0*u{} z&(+ej%?zQvz?^TVDRTkLFEBguY_K+Ha|CN^YojK5$H=cM?UwjP{k+6W2M|jeiRvtmsB&EfW7`=rm;hM40(L_jy-bym3s8Bz1F4O3tGai5h z&gj`?I9|WcSYAI8FyJJ|M3d7>5SI!6?*hi^8{`xBXs(CijSf_-RCLtDMN}!MHFF9q ztb?NV%}#r)?pR@J11G6}1B8UJiCA>(3XSgB>sQpNUu^nrfTG4lSAlj$FS{|ZWarrU zDt%Q$jnVN7trSI3B&~nOrN(rswED(UV>(ruR6ZaI8f%SrO9>lP`t2LL0V-vVhpgRZ z%d61hxwaY!?#PE+nvBNMO5=z;+>l?Lq?Eg#@+>32YY<*e)cnT}WWN zkid2!f$c&9+l2(S3khr&64)*zuw6)CyO6+kA%X2e0^5ZIwhIYt7ZTVmB(PmbV7rjO zb|Hc7LIT@`1hxwaY!?#PE+nvBNMO5=z;+>VL%TAPfB%DGz-4MSEn=C~7hC`Ug7^5m z0JP2lpuGctuSWoA|0e*A6ab&C27vhm0Mn&yKR#Llz)dx!?m~a$P36es?A$5lz3*8pCEAIR=jP=+qjBxlJGvI+ zWX&5sGH~$WRrzH*hRYu6IorlAReKs<>306@Y)kL47w#|X|LMo%U$*t7%h{f+N4wY^ z7I3<-`*53Z<+TCr+AMja{K8lNZERa~w|(c9B~$Aj@2mQLyKv;`wX-t+TsG+WusuBc zf%G>X^H0mkdD%*3S%(+DzrFCuNpSu7^G^^zcYSoLu;H$%AAORRHqcqTVD8FU>ppJ- zS>B%A{!V|9shQKe?%MzE-LJnJoa8(5*`D`5 zSh8a6sja`8yJBPZuYCvCP5$z7?iuC9lYPBx$BC`!PtAGWF@>!8$;R*eb@{2)Gv=JT znsL)(x3H~)gT1YNO%L`Tom1{QbzYc4_FZYZvwygA*UVQ}ei^y+!P{#tKXPb!_tLq~ z4u-_0Zufn^b?lhFigoQ#uXPo(($-@+p83^R|6XZ1cxdF}w85dFe?PP3i{9VtEEoRp ztNedtZ8#VF;mx*+_-ohA`{oZ-H%w~VS8!3-8+`aS&+X42o|fL3=}a54Kl_y(ygKl* V?E5Yh^#7}t7B6$Za{uZ_{|9{%$@u^P literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/mp4.png b/public/panel/style/ico/mp4.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c5985d02431eed32744aea6e4c6ce64fd4b590 GIT binary patch literal 15011 zcmeI3d2AF_9LHak0DV@j$74URCSsH`()i8JBL$U0*UlTIQr#aL0| zTwpaMYQt4TsiHx`>n?WjG))t}fSdOE3q9T&2oFVjNh(0nl#8MnnqoW@k-`~t5Cp+$ zLK9ORDoeG~gr*W_#4uEbBxA9dJ67mcv}TeH1Og=GAw3?KCN#P9m9oK^E?J+IG#T*; zL7mq`)ese#uza~jrPU~LI;}=&Qtu_H=|-}i%8pkg(&SWZ@Lx;$=UQ&Pj>bnh{rSCYnTts9HljB_jXnw2UftD&y6 zYCK%j24!Q`SZ{BLO_{|R^$b>J+-HZTIF8J!BxQ-Mkc2fQl_}LAXDC{YqC|tqT~;*` zAyHbI*i}S9nBzs+%5@G)W{WZ_p7Dbr&VWG=MHjm$uggFwwc);(BK5l;Qp11eXh+%;F%^xlQ<(NN?bD}Rk@iZGlRC7 z>3zkNDp5rXD*_A_vYG8>8@8zudyT1(b%T?6SP=@ElIj*kf#E&HkO~wxy0}I<;3^8x z&=ugDie0`UzmMkv-a>D{n+P#HN`97gNa0(p^OCX_5Up+Uv#b|uVzVf7QQI8r=}}vZ zVRKfia#1%FZKbU+atkeiEu%+A3Q;j}E2*5OL+i|yI7beh{Q#t46K9v%{*3`luZ1u3z+n`$;a;zi$M8Y2P$cmm^HqMt~41jPJ;`Yp=|uS)1LGlEzEAf zlGZmsR2*GMj*ecTkv)6%in7+lX6*(j8(d-)Xf|=#jT*~zPR_5jRyEq1nD6sY6h)D= z^*1H8m$RjH=a$;b+0u;ic3Cuno>aH2VVlajeUmr95|!g&u-NM@^sxRAhcA%WvU0>^~}jtdDK7ZNxwBye0v;JA>$aUp@@LITHy1da;{92XKe zE+lYVNZ`1Tz;Pjg<3i$`aXB(S|AVqn;*2@x1tTx6Jq7?E`10y70P*Vp=(rDnKZXJ5 z_z{3s3V@#)0AMx&aGA2gv89tXaSO(*@feI?yWYz2Q)AqvNH((l1X^pltf) z`rX$Ju{}fkmu+Q-X6;^e@~fePw|r22bIbaTN8Y~nH^-*jOCnDk-L@ld&+*pb9|wmA zB1?un)Pwc!ZB;h@J!6KryzlAeeckP3$DF}+q%dLs$MnZV4L#-gYp%K`oEtCOoHw}k z)2k0h3dr6^_jWh#{Qe4;kS3Jrcz2nB?U2|uGozK0z-P2yV?}>^! zF5bKL(5;iJI?kK+G{`+HwUeJc@ZdJ~z|5YOzrWtr`1{(aGv`ig`#Jtt!=Ej0`7Y{i zakBBlf4+bG@RrN-kNG;Mzj38Mdx#r1*8X|K z#942yYdA4*@%Q_N?^<^KoL97)Tz|#dmbV|>HPP33|JTg>yKkwUJ)vNJjwAJs1@m+2 z^S^zjf9t$~4kd5Wu2)v|Z<(|qGI-aTo&(*E-<~~q%mAUvShT-ByxIC0X~m+-(5{6I Go&Nv}uA9&R literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/null.jpg b/public/panel/style/ico/null.jpg new file mode 100644 index 0000000000000000000000000000000000000000..347ff002a258907046f859685ff7779a7798b32b GIT binary patch literal 1220 zcmbV}Yfw~m7{=fKx$If?g1c}QfeBe|aS&{{EF>_x3$(kkmF^)ZVPu9oELq4^VWtK! zt#(L*K#~u7T)ZqQ%&4JkIfMok77-|kIB6gj;RjibMX=cBpi?t_s-F2jAKv*t^Um{| z*E#O|31kLcvJMbJkOf%)&Si*CO3@~yZb^w#7Ur!h-jQFZtcrLpT**|Ho8Bx`CL8oh zgHfwjR>eeygeglav$vZns+Aj*vEd@;O-KS9!}y2eIDz8?DI`gPAVm}<5K2T6iC82S zOI_V$QdhaFSS<69$=zv%LLphT+S7yfbfXnCzXag~K@y}3NxINdv6TMLa`u5-2zii) zBY(i;2$v&gKllP560HcH3Sl@w3MiqANbKx~ZW&+*$1wuuTLYlC5QYOGC*Axa5(MsS zHsxPRN7gkS5e6ilxui%LnG1}{DXVu8d93#I@(y}7mZe)QP!6V{HC zXU~1oef~m^?bFL&^bdUb)z^bpMz3BQ`{DZdjfu&rJJWZ6{$=LZS^I;Bzs)-q9xX2M zTnO+dSo|GV^bamMUidb8vdXxX0X_)TTq<~9@7TuO1q-c5LrIhz*f6J4cUDp_*9TPxmGw>A9&=065+fzyY?te| zaGkp@ZhV-2Kdq%}l{U0nKlQq)#P8f%>jB5(-r3LI$X#>|)lE!q7EZ9ulg$n%+%r!oOD?HU4SkBe&gaA z^`X$?y(x~)x}Lcm@wMgVsfvT%@ni7dHnTMEYgOD7&q#`IXy{fHQFU=dGbVWm69KPOSW`K7) z&1xV}rWc$Z?8r2PU$yyeD>%h!P~d#*0ym-sntdAN!$UNy5fly4g=SzlRzuR>3|JaQ vG$hRr1!j=qZ48IC(yT@p&)(D0u!b3;jp$I(uz}%lRe_m-XGXL%a^Cn8Qx>y; literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/number.png b/public/panel/style/ico/number.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7b84612ec9ca7b05ac2ca42eb1527cab742fc3 GIT binary patch literal 14999 zcmeI3eQXnD9LJxcQ!F9`2u?BNEJDUhdoOFZ_GmliI@pAcWgDd3W88 z$;*PGNFoUu6!0Ao5P=C1@b8Xk&%0_%l{O|cB-5<~I z`F?+Q-{+(DOc`ju*$x00SY8&Y0swf;PycHG0Gl6}I1&JGol;h(0We^w`LThu zPv!#P%@b>C_1f?>mX~8LPLLa*%ZMq!#9w4696t~0L<4LRrGVqyzWokD6atP}o-h?w zN?=4RYgJ)&Yefy;I*<1Wj-sI5Z?Hy8i9wwsj966CSR>#___C75n!}`nNKDb^1sug@ zL!vfZNtDPcBs{JHCr{HfQRs8g9&bM5nLscU?I9^2NmEXWW@(CLC?bU;XeS85uL_N9 zRcLamohmd291&etSdwgMX>qmWyJWSAqqk4OLU2M!OPLF3WD}6pYG{in+W+f?0Y=tC#Bc`w=D&%xot&!zuFuBVryCWn@ zN)o$@$P074D4DsA^^@76%!+6HV2IOUkfG=TC*^T6?i#v~br-OVdpzZ3DavA!oSEej zmIbkKelH##56cu-JuEY`J)q7BoX-6#7wcS$kHE8yvKr&`pcvztAgM@Aeljy?nVH^K zY>6C|)vzqUV7@=I-7LcvRbsEP<&vgz5)aEmK_jNPL{VV*0-uMbyu6d~F!@fm&)4Ae zGKF3z?S}b8mg$_FUu&*vG@h7W$WRnTk+k_Y zCAF5brFB=9TFcqejBOm&eEo<1KGH>7H4N$FcJPa0iJoz4f;!?H_XDcd214e5@ zVhl=}xi38hDNS~vS7BXWLQ5efOfHq>D?L$2j#h;x2km|`{m)9b=Km%0M*kzY2@*Ii zBye0v;JA>$aUp@@LITHy1da;{92XKeE+lYVNZ`1Tz;Pjg<3a+*g#?ZZ2^<#^I4&e` zTu9)!kic;vf#X5~$Atur3ke(-5;!g-a9l{>xRAhcA%WvU0>^~}jtdDK7ZNxwBye0v z;JA>$aUp@@LITHy#1-SRXMX+%B_ZHwaTEpbAMwQn006<4RfPd)9SuO+eE|IaHvnyC z0Ekln{5Tf?b~OMu%8$%>XEFe`Gv%S;8l&T<<3&?P73Us0f6le<&8x}H#@*VtJ38ve zFIn0?sdM+E#_U_(xZ3yk@OOy9JE^OgLDv^Agwc^qTA6wl8Vh^yhCUMz@vD9lUIP@!tA3ruAF%(q9k0wrAZd)#@T! zZgKnJ;K=;X7aVnoi%UK}+;6CCo3>8ga(l<>Rm)dyw2hynC=eRtF7;EPwU;TFLiA*Q!Ba=KHhV)PiX{KaEF9UwALn zx_0ohASahuapJ;`lhu2e_LCi3$WM-aHsymSZf!iY=X_W6mWr-R`gnGF=h;(Z8!jHa zSaEp8k#E@H+h)1H8zv7~pp4k?UTDbXErZ1!M`zY8d)ZhrZotanlU6M~J)=D`rGz~A zbJu5V{LWz?)lST9I=7&ZEj@W}{R6W%-O#q-c-aS2r@Xj)%vbNOYhJjuZsT<}du3a{ z>z`U&xT*B#uCqho!mo37?=8B+^-K=&_{Te&sqI^*?^^lroFmo0%yyr6{)~82WixLJ z9zQhor$6f!Jww-awx7RmV*CJMJbLbNI&bLfASZ89!gJWOt^)%O1{Qy4n>FxS>9I=z sukE%^PRlvBYB^i4Dw;a|%RxZ>@X7icBDZy#KOHSEtq5(ueeRNf0Qjkc761SM literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/pages.png b/public/panel/style/ico/pages.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8311b10c3723682adb47024907338b0d56fb35 GIT binary patch literal 15099 zcmeI3eQXow9mgLCO@d2G!v+hiq!-gtDr4W-iC=Qqj#8VURKBWtH>&48|Af-x!>o7O_W3|?hXbRR5K2e5*-QqB_R;!h8R$8ofSGmnTm#|S*J4scNR?19SX)8tB zC?bu~Yaj^1Er-H%y}u^iP7Z}V#&%VeXp)S@VwPCBMU>k}Yh`66N!du7%`At)W~D<= znYdX{W~GV@*YQJzl{rb}M1j!iGOc1%^%#v>qYUZi;-yR@K}mbZiaZ%-B+_c3$k9Y0 zHlvZEawIvm5KF=c1Ad(`>z{HU!Jb^c2A z!AhmELxN;IRK%#v!uczqpw1fY=~XVAU7Qhf&@yAr9mcsaWLhRAOKyb}?l>>eJ{dBq zC^w2?#GBe>b;A}CK3{TI5p#kJ%L$sVPrJ!nQFg_%^`M_oq1Q%P9cIdIwpBD*opgnR zE_a$J7fn&RBB_x%HG*P@3wMlC!)~W-4t)*X$lMxGWkQU~e61?_vAQ}TmJW+D&!}FG zXWAes32kmN8`O==>?_(QMnpL%hM>3Ho!xG_uuhfSYjmxksEokETE92WOBRj`(XL7d zV`H6Gvx6$Pn=8VOu-R4aaGIS~3bJ;GtAY)+CQS^Ekl$C@FS1eXyrfHq5KHUi_m%#> z%(Za>6VZ*)W{=uplrs0V3UG=l${o7I@GaB;pBot+PDHrmtt2tB0<|;eF%BO({Q=0} zPM%$wVYU0r%W6jghTPeIQ>r4N?s)49^Da%4^^g8VJ za=SZuDeJ?ziaIV1BTasehk~N*OS>bj$xVzZTsoFemq-g!OQritPbN~)dVh`A;3hLa zR)#g-EZHae2Ek2`z;+>l?Lq?Eg#@+>32YY<*e)cnT}WWNkid2!f$c&9+l2(S3khr& z64)*zuw6)CyO6+kA%X2e0^5ZIwhIYt7ZTVmB(PmbV7rjOb|Hc7LIT@`1hxwaY!?#P zE+nvBNMO5=z;+>l?Lq?Eg#@+>32YY<*e)a`LC8u{vLHobzi%=taGsU=NF$S9e?Pvmb0f89B6o|*iV;CU3Go?$32s# z74JV(Gog5H&4E{jb`PET!3o$LhJRcA-@%)`aA3gFlB!51mq3i0cJ9oFN>(8sa(AK@~;;RGi#qQ2&{?EC`KJ^{@02DjBesXcstg_Yb zFE|+m;dN~C;G*$Pkd(A ziM+|XpYauK=KDTcJ~{f)%cc9K(qEqZ&9nXB<{7a3g?h{bg=tH>9?$*B+_+z zsO8f~3+MLb?R&n|vN?a=B)VLEF_{0w%8GL8^k$)~LxV%=G+GHr8R(}N z^sKK>Jai^;uKs6N3+wu8)|jN%p4c;C;n~-}aDqFHzdI7C`!lQkJ+*fJBLD7ZT6+Em Dq_Md( literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/pdf.png b/public/panel/style/ico/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..c61c3b42b87c58fe54f1d0651a7a640019405e03 GIT binary patch literal 15641 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 iNU(LdXpQt)HE<|8;iJcee3d(rP$oVSet literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/rar.png b/public/panel/style/ico/rar.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5e449b3b9c569305b4fd4462f2f94fd3f5ef19 GIT binary patch literal 15368 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 x?&m1OacJ78e>vO07iS#FDFn~ zwS)!@G#iY7MiFKvcAa0)i_ zaB{M}NN*h#N+KrANMQudq3gmLB8v*;a_L5W^gNfr*w+Xrd%Qyk1K$iA`NBW}e<+a_ z>C+gqOnTeYva42FQIjDx3&|QnM|&eBQ_J&1LQB2RuM=ReO`J> zYZ;bykiS%Vt_jP)a9Hm!hMqms7DJSIsZ|U{QiLhTA<=saC8CQ5Mtc)_%yugoVH1hc zXD*c6d*~bwKpzU**@a+)zR#2heI!t=fg zgNnX=?KeQ85k^pDkW?y`Dr}dsV|cJ49y6o*WEEyWagyGb(x4vA;KY!^l;MO9i5{VS zsT{u2Z3%lcK^3iZQ}FwKtn_MrU;3ZucZ6-i2-Yq}uy!$mwTls~U5sGuVgzd!BUrl_ z!P>{?AF$rn_a{U0XtOVdc-2hnH0mu>n(D5Mv&=vr^ zh=TO`XaHV&8mo#(GGG09>j#+&Q18>rr^a6MQ(rAyR$kq_zoFXwc-F4hWl?Xo*2%vp z_gcAeY{h#K8*WDB*Q;d<&&A*U{Fi;2>f_#`DE|qS^Tyt-&%d!Mpk7|Mq_p9pN7e4D zlGv^5$s-rOsl^OGq}(}jMUvQ})rA*(Is1R}^~pWAXN;8B zbUKBfDT$JvdFs18Ok7f49I1=i>+0DwBGt7@kDb_={P5c<&7ta1vmcL%&G%Y*YU8av zXH(*4gr51=ckW3%Lu%d8jh~uJJ9&V6=J}ECN25p2tTz4qAbxa3z+P|5>XX}z!e^z6 zH$+;_*$-=Po?k5+DQl_8hjm=wicsHqgT4wcJQ}42N`RB`IrcLR~k9~D7Z^0kd zPO?ghFZ>W)yFaF7sptELq1?1}607yXou^~sx~$KuzRj-OrS}0LXP;EmA5HXG?R&E5 z;jxwZQ(QQ8Doqi&^1f?reg~2yUxbw?r#x$XLN>kCUwv!tTpL21tE zpqlMJ9_}2O;}p;-n|G`^Bp_^G>ZpTOYe#L@{QH$x)BJpPG!(==%1=Bo;lP(0))TY7 zZ}RMHuT5ROtwlzS+FSOP1m4JqO`C&n2hk#^&;%N*{#sb~W7v!tm-n9QSmpCwyrtrjueg1SAoBQ64bIzLqX{>$ zV%xegaq7V3$175^J=fpfl-QoPqEx#jyjWH?X>Nq|?EKZ@(`sXf*OW20y2txJ!Zoc0 zO)AZr&mLSUm~i{rpC@#VyB00*Y#JePQit0=>NdU>JWbx%RS#->U5ZGL&8_N*P7}R< nBAi>RitFS%{Ky-PPN1N9_NCcZeS+ve630f(QGGS@!xjGn7`L2m literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/xmind.png b/public/panel/style/ico/xmind.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d2ea706f16cfec757bdeeb6d3ac51b95a43493 GIT binary patch literal 15302 zcmeI3eNYo;9>*UT!uBs?;bubM;OW= z&(xYRGapCiF$u*EI;}V~4d92tFv6z#QIL<*MT2-WyRIAlUluo7AMu%&(zdLz$pt-{ceL=-uo z;R_r#&!bT!O512V%?eIbtx}JuYgp+SqO9&E|pLBR;R)K4NR9FuzcE zzS5aq#M5Xh?c@p^Bt5^7W`$WJy}iI#2N!3^Gl-Q@pPhCyqsYXHSLWFYUi5A|kH4W^D%Vp^ppB3&JY zN9gcyjRK3tG0exrJ9C(anWGqM(Fh(|Ev||5_3)WF+=CVfiV%pOQ2(BNc188##U}0sniUAoDya3I z%WlZnU}x`qi@2(`0?+&?4TfPDsuutDNqx)1rCHCH`j&@F2bCEtBN#P(-G&YOsKndX zdjq8L1W6kswc2p4-g7DY4i8r(Gj7^uF)?A;krS6c-dyTu?}HK_SHjg%lSQQe03-aX}%) z1%(tB6jEGJNO3_S#RY{F7Zg%lP)Kn>A;krS6c-dyTu?}HK_SHjg%lSQ&y6c+@aKOt zOBv)Y`COyz(93%P00^0oY6hS<6o9hj06h5-fU=ta6kq_{$_4Tln1Y@J2;!V^Pl=|4QXw6$vPJo^gjCjd`b27%|%Pk6`e1tP9yIZ zAN?Wo%{S%PxP4;+WwA-uLC1yL-!$Lsl3ma3^(+0{GPS3~b#%M4;+w9_ice1_L z?a(EM5BqmFUoJZl>n^Pr-_iO-=;2peTDR83w03vKt9CpJoYHY8sb=*WV)3g7>Sn#I zI%?k(t^donMA)2VxBe7{uBbxR%jcYRRhCXP8dcq{WGcA*p^(+1cpX9CT6%nkqPhFS z4?8*>=l+9l6w_#&tWrxsndfO$1!diOd>kTVw zx5saP`mdM1JU?~po~?ej{(CL^#ugQNEwt`HHMm_ErmQp@jYd<4rKUdXhcjpXI{pS9 zlNmzgK0Q#P|LW3fdmsHSB;?ba^XFn0tT>q;ru&#*GV$WYl-k+9n#kAxp>Y{_{P~mR zt5-L+Z2Z1ELYpZ6@!PVtwi9(@k7hMpu3AVN*3Jm3+Ja`7YR$j@duQjq&t@ato Kw0mCmpZ^Dd;wD}I literal 0 HcmV?d00001 diff --git a/public/panel/style/ico/zip.png b/public/panel/style/ico/zip.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5e449b3b9c569305b4fd4462f2f94fd3f5ef19 GIT binary patch literal 15368 zcmeI3d2AF_9LFCO)UFmn!3Yh}$u=qovom{lr@M=#TWp0bO<6;UBz8LUwjH{2Ff(Ph z)###85Csn~Q1HMALV`62N<>uR0mfTnR3IGnw%`%Py8>qRoNimvr!oHXKFRJMzxTes z-<$7yzc>5O-qlclZHcAK0sttfs|_^*04j{nh35kRw%u8I833SIsa>c6aM1+gGYV{Y zXc7RvFN8>w-V~n8aI$D)dASAJ5~2bO{4)~@%e6zDXo0PQ6tMoVcb}CI_<(hRJ4}a_ zYS<>!cBycFSAB%*YUg~sb!O1wPcR8l5uwf!2{9&VOd?=S%1M(BC*z_SmxIV)4O$3-@T+{3 zX$;NIlvDX=z}lwk3PVxxc-$6u+GMqrvip2Kigr*A2dVN=QtOm-HbF{Sc{)ipPY7z9 zDk!=jON5b^ZIL_lfYoXg%8_|4QOOmOw2XJ0EK&(pq3kxA8cM`-IgQex#!^e;ISR(0 z2qj&k>^A$5I;Bn4Wvxvfretn-*un`>35RpFhg`2H4p~~$YnJNgR%($>1yYSrlRH!n z)+~jRUOv>*>q0cYIRn;Uj10SWm=K1M86#;~>L{e~Cq#v*Rw1j)YDAV}!SpF>$XZBL zSEo)DF*VF`f@JtQ%}*7I@;jc-2Scn5gAUs6A!#@1a7FB1#%*V4*L1pqp=nc+^vr@B zVVM`Aou(WflJ-RGPR8M3oIZ07)6BvgP-l5oXGfI9JlB+m=a{IhimVg-xo|S!3!XO=l$z)`fxzQLzaE&v>2DDBI$7ku5au zAYER&oAg!Kqojkcu+u)?*+R35HnmAUDD^y5XcZ(jW}0KH9<{^}X$F<56*OH|J52-GTWCI9 zGBBDQhzY4%NnuqD8a)@VW}D9306F}r-ep+MxX*%|(GrmNQv;&;W#!1oguxp)GMCf& zP4eMu#M_{Bu7*mdO3fNRi6%$&IIF^{Rw(Hs>-Kcsfx^N9e#&?Q#Du{E>G;3c3XNU* z?>1s&o%GK(V#r(R|J(@U^r!1{ZLHJ^`5=`&#M!{e_Ab4n1G_7GDGcsLzwuHsIvGkj zo9ZCDKlP#-5X)Ci&u=n1GS-or?{&~LO;dK`J0mp@7fKhNTWTIIl;)M!OM)JBWU3W} zO)BHfnZCW}D=Y_t9=F@+_NQK`=5V2+K}f(@Q%De@q#1XL+mq204h$(=IGoTlkP)W0 z%Jg$AHIR-rhGqvXek%7vGpqS;$v@G52rhyIwhIYt7ZTVmB(PmbV7rjOb|Hc7LIT@` z1hxwaY!?#PE+nvBNMO5=z;+>l?Lq?Eg#@+>32YY<*e)cnT}WWNkid2!f$c&9+l2(S z3khr&64)*zuw6)CyO6+kA%X2e0^5ZIwhIYt7ZTVmB(PmbV7rjOb|G<2yDa&?ZbFF< zSmV~2!CrdJI{*NJt8EMe&~*g>$=d<=<17HlJ^(ss08TUmz^n)0Qu%=!_s<4k)FXAF zsz~DSw}BpI-I*D+{*&)Va9whIe1Mpnw0fU#{5C-~Y$1QnBRZ zEyZtkAG58V`}xK|{E+8^>0^7z>HVn^8^=HL&FRDMukYVoeEdky+HEJ3SFii4(!_fMb$+Q-23aFn?Jrg;;!$# z<*FTvC}GYScGT$aPU}7Eo+*NtT#|c;qKTWt#hxJpb@F4P-~w*2S=i{4mtY?(N%+4!$+T}^%Hsaegp{SD+6;_m 文件管理 -

    文件管理正在开发中!

    \ No newline at end of file +
    +
    +
    该功能尚未完成开发,请等待!(推荐使用sftp临时代替)
    +
    +
    +
    +
    +
    +
    +
    + diff --git a/resources/views/website/list.blade.php b/resources/views/website/list.blade.php index 49224c89..dbb3a41f 100644 --- a/resources/views/website/list.blade.php +++ b/resources/views/website/list.blade.php @@ -85,12 +85,9 @@ Date: 2022-11-28 , {field: 'php', title: 'PHP', width: 60} , {field: 'ssl', title: 'SSL', width: 110, templet: '#website-ssl'} , {field: 'note', title: '备注', edit: 'textarea'} - , {fixed: 'right', title: '操作', unresize: true, toolbar: '#website-control', width: 160} + , {fixed: 'right', title: '操作', unresize: true, toolbar: '#website-control', width: 180} ]] - /** - * TODO: 分页 - */ - //, page: true + , page: true }); // 头工具栏事件 diff --git a/routes/api.php b/routes/api.php index 6cb6f210..987a40b8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,6 +1,7 @@ group(function () { Route::get('getInstalledDbAndPhp', [InfosController::class, 'getInstalledDbAndPhp']); }); - // 网站 + // 网站管理 Route::middleware('auth:sanctum')->prefix('website')->group(function () { - // 获取网站列表 + // 获取默认设置 Route::get('getDefaultSettings', [WebsitesController::class, 'getDefaultSettings']); + // 保存默认设置 Route::post('saveDefaultSettings', [WebsitesController::class, 'saveDefaultSettings']); + // 获取网站列表 Route::get('getList', [WebsitesController::class, 'getList']); + // 添加网站 Route::post('add', [WebsitesController::class, 'add']); + // 删除网站 Route::post('delete', [WebsitesController::class, 'delete']); + // 获取网站设置 Route::get('getSiteSettings', [WebsitesController::class, 'getSiteSettings']); + // 保存网站设置 Route::post('saveSiteSettings', [WebsitesController::class, 'saveSiteSettings']); + // 清空网站日志 Route::post('clearSiteLog', [WebsitesController::class, 'clearSiteLog']); + // 更新网站备注 Route::post('updateSiteNote', [WebsitesController::class, 'updateSiteNote']); + // 设置网站状态 Route::post('setSiteStatus', [WebsitesController::class, 'setSiteStatus']); // 获取备份列表 Route::get('getBackupList', [WebsitesController::class, 'getBackupList']); + // 创建备份 Route::post('createBackup', [WebsitesController::class, 'createBackup']); + // 上传备份 Route::post('uploadBackup', [WebsitesController::class, 'uploadBackup']); + // 恢复备份 Route::post('restoreBackup', [WebsitesController::class, 'restoreBackup']); + // 删除备份 Route::post('deleteBackup', [WebsitesController::class, 'deleteBackup']); // 重置网站配置 Route::post('resetSiteConfig', [WebsitesController::class, 'resetSiteConfig']); // 签发SSL证书 Route::post('issueSsl', [WebsitesController::class, 'issueSsl']); }); - // 监控 + // 资源监控 Route::middleware('auth:sanctum')->prefix('monitor')->group(function () { // 获取监控数据 Route::get('getMonitorData', [MonitorsController::class, 'getMonitorData']); @@ -100,7 +113,7 @@ Route::prefix('panel')->group(function () { // 清空监控数据 Route::post('clearMonitorData', [MonitorsController::class, 'clearMonitorData']); }); - // 安全 + // 系统安全 Route::middleware('auth:sanctum')->prefix('safe')->group(function () { // 获取防火墙状态 Route::get('getFirewallStatus', [SafesController::class, 'getFirewallStatus']); @@ -125,26 +138,40 @@ Route::prefix('panel')->group(function () { // 删除防火墙规则 Route::post('deleteFirewallRule', [SafesController::class, 'deleteFirewallRule']); }); - // 插件 - Route::middleware('auth:sanctum')->prefix('plugin')->group(function () { - // 获取插件列表 - Route::get('getList', [PluginsController::class, 'getList']); - Route::post('install', [PluginsController::class, 'install']); - Route::post('uninstall', [PluginsController::class, 'uninstall']); - Route::post('update', [PluginsController::class, 'update']); - Route::post('setShowHome', [PluginsController::class, 'setShowHome']); + // 文件管理 + Route::middleware('auth:sanctum')->prefix('file')->group(function () { + // 获取文件(夹)列表 + Route::get('getList', [FilesController::class, 'getList']); }); // 计划任务 Route::middleware('auth:sanctum')->prefix('cron')->group(function () { // 获取计划任务列表 Route::get('getList', [CronsController::class, 'getList']); + // 添加计划任务 Route::post('add', [CronsController::class, 'add']); + // 编辑计划任务 Route::post('edit', [CronsController::class, 'edit']); + // 删除计划任务 Route::post('delete', [CronsController::class, 'delete']); + // 设置计划任务状态 Route::post('setStatus', [CronsController::class, 'setStatus']); + // 获取计划任务日志 Route::get('getLog', [CronsController::class, 'getLog']); }); - // 设置 + // 插件中心 + Route::middleware('auth:sanctum')->prefix('plugin')->group(function () { + // 获取插件列表 + Route::get('getList', [PluginsController::class, 'getList']); + // 安装插件 + Route::post('install', [PluginsController::class, 'install']); + // 卸载插件 + Route::post('uninstall', [PluginsController::class, 'uninstall']); + // 更新插件 + Route::post('update', [PluginsController::class, 'update']); + // 设置插件首页显示 + Route::post('setShowHome', [PluginsController::class, 'setShowHome']); + }); + // 面板设置 Route::middleware('auth:sanctum')->prefix('setting')->group(function () { // 获取设置 Route::get('get', [SettingsController::class, 'get']); @@ -152,4 +179,3 @@ Route::prefix('panel')->group(function () { Route::post('save', [SettingsController::class, 'save']); }); }); -