├── .gitignore
├── README.md
├── composer.json
├── config
└── permission_ui.php
├── lang
├── en
│ └── permissions.php
└── pt-BR
│ └── permissions.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── postcss.config.js
├── public
└── build
│ ├── assets
│ └── app.8012c57d.css
│ └── manifest.json
├── resources
├── css
│ └── app.css
└── views
│ ├── layout.blade.php
│ ├── permissions
│ ├── create.blade.php
│ ├── edit.blade.php
│ └── index.blade.php
│ ├── roles
│ ├── create.blade.php
│ ├── edit.blade.php
│ └── index.blade.php
│ └── users
│ ├── edit.blade.php
│ └── index.blade.php
├── routes
└── web.php
├── src
├── Controllers
│ ├── Controller.php
│ ├── PermissionController.php
│ ├── RoleController.php
│ └── UserController.php
├── Facades
│ └── PermissionsUI.php
└── PermissionsUIServiceProvider.php
├── tailwind.config.js
├── tests
├── Models
│ └── User.php
├── PermissionsTest.php
└── TestCase.php
└── vite.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | composer.lock
2 | vendor/
3 | node_modules/
4 | tests/temp
5 | .idea
6 | .vscode
7 | .phpunit.result.cache
8 | .php-cs-fixer.cache
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Laravel Permission UI
2 |
3 | __Status update: package idea abandoned.__
4 |
5 | __Unfortunately, it's not possible/easy to build this package as flexible as I was expecting, with different layouts for Tailwind/Bootstrap/whatever and auto-implementing all Spatie package features for all possible cases. So I decided not to pursue this idea further and focus on other projects.__
6 |
7 | - - - - -
8 |
9 | This package will create a simple Dashboard for managing roles/permissions based on the [spatie/laravel-permission](https://github.com/spatie/laravel-permission) package.
10 |
11 | **Notice**: this is a very early version of the package, may be buggy. Please report issues.
12 |
13 | - - - - -
14 |
15 | ## Installation
16 |
17 | First, before installing this package, you need to have the `spatie/laravel-permission` installed and configured.
18 |
19 | ```sh
20 | composer require laraveldaily/laravel-permission-ui
21 | ```
22 |
23 | Go to `yourdomain.com/permissions` and you should see a simple dashboard with three menu items on top: to manage roles, permissions and assign them to users.
24 |
25 | 
26 |
27 | That dashboard is by default protected by the `auth` middleware, but you can configure it, by publishing the config:
28 |
29 | ```sh
30 | php artisan vendor:publish --provider="LaravelDaily\PermissionsUI\PermissionsUIServiceProvider" --tag="config"
31 | ```
32 |
33 | And then edit the values in `config/permission_ui.php`:
34 |
35 | ```php
36 | return [
37 | 'middleware' => ['web', 'auth'],
38 | 'url_prefix' => 'permissions',
39 | 'route_name_prefix' => 'permission_ui.',
40 | ];
41 | ```
42 |
43 | The visual design is based on simple Tailwind classes.
44 | At the moment, no visual customization options are available, but we may add them in the future, based on your ideas and feedback.
45 |
46 | ---
47 |
48 | ## Publishing translations
49 |
50 | If you wish to translate the package, you may publish the language files using:
51 |
52 | ```sh
53 | php artisan vendor:publish --provider="LaravelDaily\PermissionsUI\PermissionsUIServiceProvider" --tag="lang"
54 | ```
55 |
56 | - - - - -
57 |
58 | ## Testing
59 |
60 | To run the package's unit tests, run the following command:
61 |
62 | ```sh
63 | vendor/bin/phpunit
64 | ```
65 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laraveldaily/laravel-permission-ui",
3 | "description": "A Laravel package for adding UI for spatie/Laravel-permission package.",
4 | "type": "library",
5 | "homepage": "https://github.com/LaravelDaily/laravel-permission-ui",
6 | "license": "MIT",
7 | "authors": [
8 | {
9 | "name": "Povilas Korop",
10 | "email": "povilas@laraveldaily.com"
11 | }
12 | ],
13 | "require": {
14 | "php": "^8.0",
15 | "spatie/laravel-permission": "^5.5"
16 | },
17 | "require-dev": {
18 | "orchestra/testbench": "^7.0",
19 | "phpunit/phpunit": "^9.0"
20 | },
21 | "autoload": {
22 | "psr-4": {
23 | "LaravelDaily\\PermissionsUI\\": "src/"
24 | }
25 | },
26 | "autoload-dev": {
27 | "psr-4": {
28 | "LaravelDaily\\PermissionsUI\\Tests\\": "tests/"
29 | }
30 | },
31 | "extra": {
32 | "laravel": {
33 | "providers": [
34 | "LaravelDaily\\PermissionsUI\\PermissionsUIServiceProvider"
35 | ]
36 | }
37 | },
38 | "scripts": {
39 | "test": "vendor/bin/phpunit"
40 | },
41 | "minimum-stability": "dev",
42 | "prefer-stable": true,
43 | "version": "0.1.4"
44 | }
45 |
--------------------------------------------------------------------------------
/config/permission_ui.php:
--------------------------------------------------------------------------------
1 | ['web', 'auth'],
5 | 'url_prefix' => 'permissions',
6 | 'route_name_prefix' => 'permission_ui.',
7 | ];
8 |
--------------------------------------------------------------------------------
/lang/en/permissions.php:
--------------------------------------------------------------------------------
1 | [
5 | 'create' => 'Create',
6 | 'edit' => 'Edit',
7 | 'delete' => 'Delete',
8 | 'save' => 'Save',
9 | 'no_records' => 'No records.',
10 | 'confirm_action' => 'Are you sure?',
11 | ],
12 |
13 | 'permissions' => [
14 | 'title' => 'Permissions',
15 | 'fields' => [
16 | 'id' => 'ID',
17 | 'name' => 'Name',
18 | 'created_at' => 'Created at',
19 | 'updated_at' => 'Updated at',
20 | ]
21 | ],
22 |
23 | 'roles' => [
24 | 'title' => 'Roles',
25 | 'fields' => [
26 | 'id' => 'ID',
27 | 'name' => 'Name',
28 | 'permissions' => 'Permissions',
29 | 'created_at' => 'Created at',
30 | 'updated_at' => 'Updated at',
31 | ]
32 | ],
33 |
34 | 'users' => [
35 | 'title' => 'Users',
36 | 'fields' => [
37 | 'id' => 'ID',
38 | 'name' => 'Name',
39 | 'email' => 'Email',
40 | 'roles' => 'Roles',
41 | 'created_at' => 'Created at',
42 | 'updated_at' => 'Updated at',
43 | ]
44 | ],
45 | ];
46 |
--------------------------------------------------------------------------------
/lang/pt-BR/permissions.php:
--------------------------------------------------------------------------------
1 | [
5 | 'create' => 'Criar',
6 | 'edit' => 'Editar',
7 | 'delete' => 'Excluir',
8 | 'save' => 'Salvar',
9 | 'no_records' => 'Nenhum registro encontrado.',
10 | 'confirm_action' => 'Tem certeza?',
11 | ],
12 |
13 | 'permissions' => [
14 | 'title' => 'Permissões',
15 | 'fields' => [
16 | 'id' => 'ID',
17 | 'name' => 'Nome',
18 | 'created_at' => 'Criado em',
19 | 'updated_at' => 'Atualizado em',
20 | ]
21 | ],
22 |
23 | 'roles' => [
24 | 'title' => 'Funções',
25 | 'fields' => [
26 | 'id' => 'ID',
27 | 'name' => 'Nome',
28 | 'permissions' => 'Permissões',
29 | 'created_at' => 'Criado em',
30 | 'updated_at' => 'Atualizado em',
31 | ]
32 | ],
33 |
34 | 'users' => [
35 | 'title' => 'Usuários',
36 | 'fields' => [
37 | 'id' => 'ID',
38 | 'name' => 'Nome',
39 | 'email' => 'E-mail',
40 | 'roles' => 'Funções',
41 | 'created_at' => 'Criado em',
42 | 'updated_at' => 'Atualizado em',
43 | ]
44 | ],
45 | ];
46 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "permissions-ui",
3 | "lockfileVersion": 2,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "devDependencies": {
8 | "autoprefixer": "^10.4.12",
9 | "laravel-vite-plugin": "^0.6.1",
10 | "postcss": "^8.4.17",
11 | "tailwindcss": "^3.1.8",
12 | "vite": "^3.1.7"
13 | }
14 | },
15 | "node_modules/@esbuild/android-arm": {
16 | "version": "0.15.10",
17 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz",
18 | "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==",
19 | "cpu": [
20 | "arm"
21 | ],
22 | "dev": true,
23 | "optional": true,
24 | "os": [
25 | "android"
26 | ],
27 | "engines": {
28 | "node": ">=12"
29 | }
30 | },
31 | "node_modules/@esbuild/linux-loong64": {
32 | "version": "0.15.10",
33 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz",
34 | "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==",
35 | "cpu": [
36 | "loong64"
37 | ],
38 | "dev": true,
39 | "optional": true,
40 | "os": [
41 | "linux"
42 | ],
43 | "engines": {
44 | "node": ">=12"
45 | }
46 | },
47 | "node_modules/@nodelib/fs.scandir": {
48 | "version": "2.1.5",
49 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
50 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
51 | "dev": true,
52 | "dependencies": {
53 | "@nodelib/fs.stat": "2.0.5",
54 | "run-parallel": "^1.1.9"
55 | },
56 | "engines": {
57 | "node": ">= 8"
58 | }
59 | },
60 | "node_modules/@nodelib/fs.stat": {
61 | "version": "2.0.5",
62 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
63 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
64 | "dev": true,
65 | "engines": {
66 | "node": ">= 8"
67 | }
68 | },
69 | "node_modules/@nodelib/fs.walk": {
70 | "version": "1.2.8",
71 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
72 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
73 | "dev": true,
74 | "dependencies": {
75 | "@nodelib/fs.scandir": "2.1.5",
76 | "fastq": "^1.6.0"
77 | },
78 | "engines": {
79 | "node": ">= 8"
80 | }
81 | },
82 | "node_modules/acorn": {
83 | "version": "7.4.1",
84 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
85 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
86 | "dev": true,
87 | "bin": {
88 | "acorn": "bin/acorn"
89 | },
90 | "engines": {
91 | "node": ">=0.4.0"
92 | }
93 | },
94 | "node_modules/acorn-node": {
95 | "version": "1.8.2",
96 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
97 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
98 | "dev": true,
99 | "dependencies": {
100 | "acorn": "^7.0.0",
101 | "acorn-walk": "^7.0.0",
102 | "xtend": "^4.0.2"
103 | }
104 | },
105 | "node_modules/acorn-walk": {
106 | "version": "7.2.0",
107 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
108 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
109 | "dev": true,
110 | "engines": {
111 | "node": ">=0.4.0"
112 | }
113 | },
114 | "node_modules/anymatch": {
115 | "version": "3.1.2",
116 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
117 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
118 | "dev": true,
119 | "dependencies": {
120 | "normalize-path": "^3.0.0",
121 | "picomatch": "^2.0.4"
122 | },
123 | "engines": {
124 | "node": ">= 8"
125 | }
126 | },
127 | "node_modules/arg": {
128 | "version": "5.0.2",
129 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
130 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
131 | "dev": true
132 | },
133 | "node_modules/autoprefixer": {
134 | "version": "10.4.12",
135 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
136 | "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
137 | "dev": true,
138 | "funding": [
139 | {
140 | "type": "opencollective",
141 | "url": "https://opencollective.com/postcss/"
142 | },
143 | {
144 | "type": "tidelift",
145 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
146 | }
147 | ],
148 | "dependencies": {
149 | "browserslist": "^4.21.4",
150 | "caniuse-lite": "^1.0.30001407",
151 | "fraction.js": "^4.2.0",
152 | "normalize-range": "^0.1.2",
153 | "picocolors": "^1.0.0",
154 | "postcss-value-parser": "^4.2.0"
155 | },
156 | "bin": {
157 | "autoprefixer": "bin/autoprefixer"
158 | },
159 | "engines": {
160 | "node": "^10 || ^12 || >=14"
161 | },
162 | "peerDependencies": {
163 | "postcss": "^8.1.0"
164 | }
165 | },
166 | "node_modules/binary-extensions": {
167 | "version": "2.2.0",
168 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
169 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
170 | "dev": true,
171 | "engines": {
172 | "node": ">=8"
173 | }
174 | },
175 | "node_modules/braces": {
176 | "version": "3.0.2",
177 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
178 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
179 | "dev": true,
180 | "dependencies": {
181 | "fill-range": "^7.0.1"
182 | },
183 | "engines": {
184 | "node": ">=8"
185 | }
186 | },
187 | "node_modules/browserslist": {
188 | "version": "4.21.4",
189 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
190 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
191 | "dev": true,
192 | "funding": [
193 | {
194 | "type": "opencollective",
195 | "url": "https://opencollective.com/browserslist"
196 | },
197 | {
198 | "type": "tidelift",
199 | "url": "https://tidelift.com/funding/github/npm/browserslist"
200 | }
201 | ],
202 | "dependencies": {
203 | "caniuse-lite": "^1.0.30001400",
204 | "electron-to-chromium": "^1.4.251",
205 | "node-releases": "^2.0.6",
206 | "update-browserslist-db": "^1.0.9"
207 | },
208 | "bin": {
209 | "browserslist": "cli.js"
210 | },
211 | "engines": {
212 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
213 | }
214 | },
215 | "node_modules/camelcase-css": {
216 | "version": "2.0.1",
217 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
218 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
219 | "dev": true,
220 | "engines": {
221 | "node": ">= 6"
222 | }
223 | },
224 | "node_modules/caniuse-lite": {
225 | "version": "1.0.30001418",
226 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
227 | "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==",
228 | "dev": true,
229 | "funding": [
230 | {
231 | "type": "opencollective",
232 | "url": "https://opencollective.com/browserslist"
233 | },
234 | {
235 | "type": "tidelift",
236 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
237 | }
238 | ]
239 | },
240 | "node_modules/chokidar": {
241 | "version": "3.5.3",
242 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
243 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
244 | "dev": true,
245 | "funding": [
246 | {
247 | "type": "individual",
248 | "url": "https://paulmillr.com/funding/"
249 | }
250 | ],
251 | "dependencies": {
252 | "anymatch": "~3.1.2",
253 | "braces": "~3.0.2",
254 | "glob-parent": "~5.1.2",
255 | "is-binary-path": "~2.1.0",
256 | "is-glob": "~4.0.1",
257 | "normalize-path": "~3.0.0",
258 | "readdirp": "~3.6.0"
259 | },
260 | "engines": {
261 | "node": ">= 8.10.0"
262 | },
263 | "optionalDependencies": {
264 | "fsevents": "~2.3.2"
265 | }
266 | },
267 | "node_modules/chokidar/node_modules/glob-parent": {
268 | "version": "5.1.2",
269 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
270 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
271 | "dev": true,
272 | "dependencies": {
273 | "is-glob": "^4.0.1"
274 | },
275 | "engines": {
276 | "node": ">= 6"
277 | }
278 | },
279 | "node_modules/color-name": {
280 | "version": "1.1.4",
281 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
282 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
283 | "dev": true
284 | },
285 | "node_modules/cssesc": {
286 | "version": "3.0.0",
287 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
288 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
289 | "dev": true,
290 | "bin": {
291 | "cssesc": "bin/cssesc"
292 | },
293 | "engines": {
294 | "node": ">=4"
295 | }
296 | },
297 | "node_modules/defined": {
298 | "version": "1.0.0",
299 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
300 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
301 | "dev": true
302 | },
303 | "node_modules/detective": {
304 | "version": "5.2.1",
305 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
306 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
307 | "dev": true,
308 | "dependencies": {
309 | "acorn-node": "^1.8.2",
310 | "defined": "^1.0.0",
311 | "minimist": "^1.2.6"
312 | },
313 | "bin": {
314 | "detective": "bin/detective.js"
315 | },
316 | "engines": {
317 | "node": ">=0.8.0"
318 | }
319 | },
320 | "node_modules/didyoumean": {
321 | "version": "1.2.2",
322 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
323 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
324 | "dev": true
325 | },
326 | "node_modules/dlv": {
327 | "version": "1.1.3",
328 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
329 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
330 | "dev": true
331 | },
332 | "node_modules/electron-to-chromium": {
333 | "version": "1.4.279",
334 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.279.tgz",
335 | "integrity": "sha512-xs7vEuSZ84+JsHSTFqqG0TE3i8EAivHomRQZhhcRvsmnjsh5C2KdhwNKf4ZRYtzq75wojpFyqb62m32Oam57wA==",
336 | "dev": true
337 | },
338 | "node_modules/esbuild": {
339 | "version": "0.15.10",
340 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz",
341 | "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==",
342 | "dev": true,
343 | "hasInstallScript": true,
344 | "bin": {
345 | "esbuild": "bin/esbuild"
346 | },
347 | "engines": {
348 | "node": ">=12"
349 | },
350 | "optionalDependencies": {
351 | "@esbuild/android-arm": "0.15.10",
352 | "@esbuild/linux-loong64": "0.15.10",
353 | "esbuild-android-64": "0.15.10",
354 | "esbuild-android-arm64": "0.15.10",
355 | "esbuild-darwin-64": "0.15.10",
356 | "esbuild-darwin-arm64": "0.15.10",
357 | "esbuild-freebsd-64": "0.15.10",
358 | "esbuild-freebsd-arm64": "0.15.10",
359 | "esbuild-linux-32": "0.15.10",
360 | "esbuild-linux-64": "0.15.10",
361 | "esbuild-linux-arm": "0.15.10",
362 | "esbuild-linux-arm64": "0.15.10",
363 | "esbuild-linux-mips64le": "0.15.10",
364 | "esbuild-linux-ppc64le": "0.15.10",
365 | "esbuild-linux-riscv64": "0.15.10",
366 | "esbuild-linux-s390x": "0.15.10",
367 | "esbuild-netbsd-64": "0.15.10",
368 | "esbuild-openbsd-64": "0.15.10",
369 | "esbuild-sunos-64": "0.15.10",
370 | "esbuild-windows-32": "0.15.10",
371 | "esbuild-windows-64": "0.15.10",
372 | "esbuild-windows-arm64": "0.15.10"
373 | }
374 | },
375 | "node_modules/esbuild-android-64": {
376 | "version": "0.15.10",
377 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz",
378 | "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==",
379 | "cpu": [
380 | "x64"
381 | ],
382 | "dev": true,
383 | "optional": true,
384 | "os": [
385 | "android"
386 | ],
387 | "engines": {
388 | "node": ">=12"
389 | }
390 | },
391 | "node_modules/esbuild-android-arm64": {
392 | "version": "0.15.10",
393 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz",
394 | "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==",
395 | "cpu": [
396 | "arm64"
397 | ],
398 | "dev": true,
399 | "optional": true,
400 | "os": [
401 | "android"
402 | ],
403 | "engines": {
404 | "node": ">=12"
405 | }
406 | },
407 | "node_modules/esbuild-darwin-64": {
408 | "version": "0.15.10",
409 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz",
410 | "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==",
411 | "cpu": [
412 | "x64"
413 | ],
414 | "dev": true,
415 | "optional": true,
416 | "os": [
417 | "darwin"
418 | ],
419 | "engines": {
420 | "node": ">=12"
421 | }
422 | },
423 | "node_modules/esbuild-darwin-arm64": {
424 | "version": "0.15.10",
425 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz",
426 | "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==",
427 | "cpu": [
428 | "arm64"
429 | ],
430 | "dev": true,
431 | "optional": true,
432 | "os": [
433 | "darwin"
434 | ],
435 | "engines": {
436 | "node": ">=12"
437 | }
438 | },
439 | "node_modules/esbuild-freebsd-64": {
440 | "version": "0.15.10",
441 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz",
442 | "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==",
443 | "cpu": [
444 | "x64"
445 | ],
446 | "dev": true,
447 | "optional": true,
448 | "os": [
449 | "freebsd"
450 | ],
451 | "engines": {
452 | "node": ">=12"
453 | }
454 | },
455 | "node_modules/esbuild-freebsd-arm64": {
456 | "version": "0.15.10",
457 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz",
458 | "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==",
459 | "cpu": [
460 | "arm64"
461 | ],
462 | "dev": true,
463 | "optional": true,
464 | "os": [
465 | "freebsd"
466 | ],
467 | "engines": {
468 | "node": ">=12"
469 | }
470 | },
471 | "node_modules/esbuild-linux-32": {
472 | "version": "0.15.10",
473 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz",
474 | "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==",
475 | "cpu": [
476 | "ia32"
477 | ],
478 | "dev": true,
479 | "optional": true,
480 | "os": [
481 | "linux"
482 | ],
483 | "engines": {
484 | "node": ">=12"
485 | }
486 | },
487 | "node_modules/esbuild-linux-64": {
488 | "version": "0.15.10",
489 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz",
490 | "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==",
491 | "cpu": [
492 | "x64"
493 | ],
494 | "dev": true,
495 | "optional": true,
496 | "os": [
497 | "linux"
498 | ],
499 | "engines": {
500 | "node": ">=12"
501 | }
502 | },
503 | "node_modules/esbuild-linux-arm": {
504 | "version": "0.15.10",
505 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz",
506 | "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==",
507 | "cpu": [
508 | "arm"
509 | ],
510 | "dev": true,
511 | "optional": true,
512 | "os": [
513 | "linux"
514 | ],
515 | "engines": {
516 | "node": ">=12"
517 | }
518 | },
519 | "node_modules/esbuild-linux-arm64": {
520 | "version": "0.15.10",
521 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz",
522 | "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==",
523 | "cpu": [
524 | "arm64"
525 | ],
526 | "dev": true,
527 | "optional": true,
528 | "os": [
529 | "linux"
530 | ],
531 | "engines": {
532 | "node": ">=12"
533 | }
534 | },
535 | "node_modules/esbuild-linux-mips64le": {
536 | "version": "0.15.10",
537 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz",
538 | "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==",
539 | "cpu": [
540 | "mips64el"
541 | ],
542 | "dev": true,
543 | "optional": true,
544 | "os": [
545 | "linux"
546 | ],
547 | "engines": {
548 | "node": ">=12"
549 | }
550 | },
551 | "node_modules/esbuild-linux-ppc64le": {
552 | "version": "0.15.10",
553 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz",
554 | "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==",
555 | "cpu": [
556 | "ppc64"
557 | ],
558 | "dev": true,
559 | "optional": true,
560 | "os": [
561 | "linux"
562 | ],
563 | "engines": {
564 | "node": ">=12"
565 | }
566 | },
567 | "node_modules/esbuild-linux-riscv64": {
568 | "version": "0.15.10",
569 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz",
570 | "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==",
571 | "cpu": [
572 | "riscv64"
573 | ],
574 | "dev": true,
575 | "optional": true,
576 | "os": [
577 | "linux"
578 | ],
579 | "engines": {
580 | "node": ">=12"
581 | }
582 | },
583 | "node_modules/esbuild-linux-s390x": {
584 | "version": "0.15.10",
585 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz",
586 | "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==",
587 | "cpu": [
588 | "s390x"
589 | ],
590 | "dev": true,
591 | "optional": true,
592 | "os": [
593 | "linux"
594 | ],
595 | "engines": {
596 | "node": ">=12"
597 | }
598 | },
599 | "node_modules/esbuild-netbsd-64": {
600 | "version": "0.15.10",
601 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz",
602 | "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==",
603 | "cpu": [
604 | "x64"
605 | ],
606 | "dev": true,
607 | "optional": true,
608 | "os": [
609 | "netbsd"
610 | ],
611 | "engines": {
612 | "node": ">=12"
613 | }
614 | },
615 | "node_modules/esbuild-openbsd-64": {
616 | "version": "0.15.10",
617 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz",
618 | "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==",
619 | "cpu": [
620 | "x64"
621 | ],
622 | "dev": true,
623 | "optional": true,
624 | "os": [
625 | "openbsd"
626 | ],
627 | "engines": {
628 | "node": ">=12"
629 | }
630 | },
631 | "node_modules/esbuild-sunos-64": {
632 | "version": "0.15.10",
633 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz",
634 | "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==",
635 | "cpu": [
636 | "x64"
637 | ],
638 | "dev": true,
639 | "optional": true,
640 | "os": [
641 | "sunos"
642 | ],
643 | "engines": {
644 | "node": ">=12"
645 | }
646 | },
647 | "node_modules/esbuild-windows-32": {
648 | "version": "0.15.10",
649 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz",
650 | "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==",
651 | "cpu": [
652 | "ia32"
653 | ],
654 | "dev": true,
655 | "optional": true,
656 | "os": [
657 | "win32"
658 | ],
659 | "engines": {
660 | "node": ">=12"
661 | }
662 | },
663 | "node_modules/esbuild-windows-64": {
664 | "version": "0.15.10",
665 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz",
666 | "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==",
667 | "cpu": [
668 | "x64"
669 | ],
670 | "dev": true,
671 | "optional": true,
672 | "os": [
673 | "win32"
674 | ],
675 | "engines": {
676 | "node": ">=12"
677 | }
678 | },
679 | "node_modules/esbuild-windows-arm64": {
680 | "version": "0.15.10",
681 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz",
682 | "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==",
683 | "cpu": [
684 | "arm64"
685 | ],
686 | "dev": true,
687 | "optional": true,
688 | "os": [
689 | "win32"
690 | ],
691 | "engines": {
692 | "node": ">=12"
693 | }
694 | },
695 | "node_modules/escalade": {
696 | "version": "3.1.1",
697 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
698 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
699 | "dev": true,
700 | "engines": {
701 | "node": ">=6"
702 | }
703 | },
704 | "node_modules/fast-glob": {
705 | "version": "3.2.12",
706 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
707 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
708 | "dev": true,
709 | "dependencies": {
710 | "@nodelib/fs.stat": "^2.0.2",
711 | "@nodelib/fs.walk": "^1.2.3",
712 | "glob-parent": "^5.1.2",
713 | "merge2": "^1.3.0",
714 | "micromatch": "^4.0.4"
715 | },
716 | "engines": {
717 | "node": ">=8.6.0"
718 | }
719 | },
720 | "node_modules/fast-glob/node_modules/glob-parent": {
721 | "version": "5.1.2",
722 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
723 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
724 | "dev": true,
725 | "dependencies": {
726 | "is-glob": "^4.0.1"
727 | },
728 | "engines": {
729 | "node": ">= 6"
730 | }
731 | },
732 | "node_modules/fastq": {
733 | "version": "1.13.0",
734 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
735 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
736 | "dev": true,
737 | "dependencies": {
738 | "reusify": "^1.0.4"
739 | }
740 | },
741 | "node_modules/fill-range": {
742 | "version": "7.0.1",
743 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
744 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
745 | "dev": true,
746 | "dependencies": {
747 | "to-regex-range": "^5.0.1"
748 | },
749 | "engines": {
750 | "node": ">=8"
751 | }
752 | },
753 | "node_modules/fraction.js": {
754 | "version": "4.2.0",
755 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
756 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
757 | "dev": true,
758 | "engines": {
759 | "node": "*"
760 | },
761 | "funding": {
762 | "type": "patreon",
763 | "url": "https://www.patreon.com/infusion"
764 | }
765 | },
766 | "node_modules/fsevents": {
767 | "version": "2.3.2",
768 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
769 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
770 | "dev": true,
771 | "hasInstallScript": true,
772 | "optional": true,
773 | "os": [
774 | "darwin"
775 | ],
776 | "engines": {
777 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
778 | }
779 | },
780 | "node_modules/function-bind": {
781 | "version": "1.1.1",
782 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
783 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
784 | "dev": true
785 | },
786 | "node_modules/glob-parent": {
787 | "version": "6.0.2",
788 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
789 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
790 | "dev": true,
791 | "dependencies": {
792 | "is-glob": "^4.0.3"
793 | },
794 | "engines": {
795 | "node": ">=10.13.0"
796 | }
797 | },
798 | "node_modules/has": {
799 | "version": "1.0.3",
800 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
801 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
802 | "dev": true,
803 | "dependencies": {
804 | "function-bind": "^1.1.1"
805 | },
806 | "engines": {
807 | "node": ">= 0.4.0"
808 | }
809 | },
810 | "node_modules/is-binary-path": {
811 | "version": "2.1.0",
812 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
813 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
814 | "dev": true,
815 | "dependencies": {
816 | "binary-extensions": "^2.0.0"
817 | },
818 | "engines": {
819 | "node": ">=8"
820 | }
821 | },
822 | "node_modules/is-core-module": {
823 | "version": "2.10.0",
824 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
825 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
826 | "dev": true,
827 | "dependencies": {
828 | "has": "^1.0.3"
829 | },
830 | "funding": {
831 | "url": "https://github.com/sponsors/ljharb"
832 | }
833 | },
834 | "node_modules/is-extglob": {
835 | "version": "2.1.1",
836 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
837 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
838 | "dev": true,
839 | "engines": {
840 | "node": ">=0.10.0"
841 | }
842 | },
843 | "node_modules/is-glob": {
844 | "version": "4.0.3",
845 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
846 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
847 | "dev": true,
848 | "dependencies": {
849 | "is-extglob": "^2.1.1"
850 | },
851 | "engines": {
852 | "node": ">=0.10.0"
853 | }
854 | },
855 | "node_modules/is-number": {
856 | "version": "7.0.0",
857 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
858 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
859 | "dev": true,
860 | "engines": {
861 | "node": ">=0.12.0"
862 | }
863 | },
864 | "node_modules/laravel-vite-plugin": {
865 | "version": "0.6.1",
866 | "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.6.1.tgz",
867 | "integrity": "sha512-L8zt+bttm6+C0mo3an5J8wRW03SsjbTEouGb3bH2jj/XclFVAX/xEUkG9efhdRHjbEH5RY6cmdJ7bmf7zqjwIQ==",
868 | "dev": true,
869 | "dependencies": {
870 | "vite-plugin-full-reload": "^1.0.1"
871 | },
872 | "engines": {
873 | "node": ">=14"
874 | },
875 | "peerDependencies": {
876 | "vite": "^3.0.0"
877 | }
878 | },
879 | "node_modules/lilconfig": {
880 | "version": "2.0.6",
881 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
882 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
883 | "dev": true,
884 | "engines": {
885 | "node": ">=10"
886 | }
887 | },
888 | "node_modules/merge2": {
889 | "version": "1.4.1",
890 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
891 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
892 | "dev": true,
893 | "engines": {
894 | "node": ">= 8"
895 | }
896 | },
897 | "node_modules/micromatch": {
898 | "version": "4.0.5",
899 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
900 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
901 | "dev": true,
902 | "dependencies": {
903 | "braces": "^3.0.2",
904 | "picomatch": "^2.3.1"
905 | },
906 | "engines": {
907 | "node": ">=8.6"
908 | }
909 | },
910 | "node_modules/minimist": {
911 | "version": "1.2.7",
912 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
913 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
914 | "dev": true,
915 | "funding": {
916 | "url": "https://github.com/sponsors/ljharb"
917 | }
918 | },
919 | "node_modules/nanoid": {
920 | "version": "3.3.4",
921 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
922 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
923 | "dev": true,
924 | "bin": {
925 | "nanoid": "bin/nanoid.cjs"
926 | },
927 | "engines": {
928 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
929 | }
930 | },
931 | "node_modules/node-releases": {
932 | "version": "2.0.6",
933 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
934 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
935 | "dev": true
936 | },
937 | "node_modules/normalize-path": {
938 | "version": "3.0.0",
939 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
940 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
941 | "dev": true,
942 | "engines": {
943 | "node": ">=0.10.0"
944 | }
945 | },
946 | "node_modules/normalize-range": {
947 | "version": "0.1.2",
948 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
949 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
950 | "dev": true,
951 | "engines": {
952 | "node": ">=0.10.0"
953 | }
954 | },
955 | "node_modules/object-hash": {
956 | "version": "3.0.0",
957 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
958 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
959 | "dev": true,
960 | "engines": {
961 | "node": ">= 6"
962 | }
963 | },
964 | "node_modules/path-parse": {
965 | "version": "1.0.7",
966 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
967 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
968 | "dev": true
969 | },
970 | "node_modules/picocolors": {
971 | "version": "1.0.0",
972 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
973 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
974 | "dev": true
975 | },
976 | "node_modules/picomatch": {
977 | "version": "2.3.1",
978 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
979 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
980 | "dev": true,
981 | "engines": {
982 | "node": ">=8.6"
983 | },
984 | "funding": {
985 | "url": "https://github.com/sponsors/jonschlinkert"
986 | }
987 | },
988 | "node_modules/pify": {
989 | "version": "2.3.0",
990 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
991 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
992 | "dev": true,
993 | "engines": {
994 | "node": ">=0.10.0"
995 | }
996 | },
997 | "node_modules/postcss": {
998 | "version": "8.4.17",
999 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
1000 | "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
1001 | "dev": true,
1002 | "funding": [
1003 | {
1004 | "type": "opencollective",
1005 | "url": "https://opencollective.com/postcss/"
1006 | },
1007 | {
1008 | "type": "tidelift",
1009 | "url": "https://tidelift.com/funding/github/npm/postcss"
1010 | }
1011 | ],
1012 | "dependencies": {
1013 | "nanoid": "^3.3.4",
1014 | "picocolors": "^1.0.0",
1015 | "source-map-js": "^1.0.2"
1016 | },
1017 | "engines": {
1018 | "node": "^10 || ^12 || >=14"
1019 | }
1020 | },
1021 | "node_modules/postcss-import": {
1022 | "version": "14.1.0",
1023 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
1024 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
1025 | "dev": true,
1026 | "dependencies": {
1027 | "postcss-value-parser": "^4.0.0",
1028 | "read-cache": "^1.0.0",
1029 | "resolve": "^1.1.7"
1030 | },
1031 | "engines": {
1032 | "node": ">=10.0.0"
1033 | },
1034 | "peerDependencies": {
1035 | "postcss": "^8.0.0"
1036 | }
1037 | },
1038 | "node_modules/postcss-js": {
1039 | "version": "4.0.0",
1040 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
1041 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
1042 | "dev": true,
1043 | "dependencies": {
1044 | "camelcase-css": "^2.0.1"
1045 | },
1046 | "engines": {
1047 | "node": "^12 || ^14 || >= 16"
1048 | },
1049 | "funding": {
1050 | "type": "opencollective",
1051 | "url": "https://opencollective.com/postcss/"
1052 | },
1053 | "peerDependencies": {
1054 | "postcss": "^8.3.3"
1055 | }
1056 | },
1057 | "node_modules/postcss-load-config": {
1058 | "version": "3.1.4",
1059 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
1060 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
1061 | "dev": true,
1062 | "dependencies": {
1063 | "lilconfig": "^2.0.5",
1064 | "yaml": "^1.10.2"
1065 | },
1066 | "engines": {
1067 | "node": ">= 10"
1068 | },
1069 | "funding": {
1070 | "type": "opencollective",
1071 | "url": "https://opencollective.com/postcss/"
1072 | },
1073 | "peerDependencies": {
1074 | "postcss": ">=8.0.9",
1075 | "ts-node": ">=9.0.0"
1076 | },
1077 | "peerDependenciesMeta": {
1078 | "postcss": {
1079 | "optional": true
1080 | },
1081 | "ts-node": {
1082 | "optional": true
1083 | }
1084 | }
1085 | },
1086 | "node_modules/postcss-nested": {
1087 | "version": "5.0.6",
1088 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
1089 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
1090 | "dev": true,
1091 | "dependencies": {
1092 | "postcss-selector-parser": "^6.0.6"
1093 | },
1094 | "engines": {
1095 | "node": ">=12.0"
1096 | },
1097 | "funding": {
1098 | "type": "opencollective",
1099 | "url": "https://opencollective.com/postcss/"
1100 | },
1101 | "peerDependencies": {
1102 | "postcss": "^8.2.14"
1103 | }
1104 | },
1105 | "node_modules/postcss-selector-parser": {
1106 | "version": "6.0.10",
1107 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
1108 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
1109 | "dev": true,
1110 | "dependencies": {
1111 | "cssesc": "^3.0.0",
1112 | "util-deprecate": "^1.0.2"
1113 | },
1114 | "engines": {
1115 | "node": ">=4"
1116 | }
1117 | },
1118 | "node_modules/postcss-value-parser": {
1119 | "version": "4.2.0",
1120 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1121 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
1122 | "dev": true
1123 | },
1124 | "node_modules/queue-microtask": {
1125 | "version": "1.2.3",
1126 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1127 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1128 | "dev": true,
1129 | "funding": [
1130 | {
1131 | "type": "github",
1132 | "url": "https://github.com/sponsors/feross"
1133 | },
1134 | {
1135 | "type": "patreon",
1136 | "url": "https://www.patreon.com/feross"
1137 | },
1138 | {
1139 | "type": "consulting",
1140 | "url": "https://feross.org/support"
1141 | }
1142 | ]
1143 | },
1144 | "node_modules/quick-lru": {
1145 | "version": "5.1.1",
1146 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
1147 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
1148 | "dev": true,
1149 | "engines": {
1150 | "node": ">=10"
1151 | },
1152 | "funding": {
1153 | "url": "https://github.com/sponsors/sindresorhus"
1154 | }
1155 | },
1156 | "node_modules/read-cache": {
1157 | "version": "1.0.0",
1158 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
1159 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
1160 | "dev": true,
1161 | "dependencies": {
1162 | "pify": "^2.3.0"
1163 | }
1164 | },
1165 | "node_modules/readdirp": {
1166 | "version": "3.6.0",
1167 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1168 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1169 | "dev": true,
1170 | "dependencies": {
1171 | "picomatch": "^2.2.1"
1172 | },
1173 | "engines": {
1174 | "node": ">=8.10.0"
1175 | }
1176 | },
1177 | "node_modules/resolve": {
1178 | "version": "1.22.1",
1179 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1180 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1181 | "dev": true,
1182 | "dependencies": {
1183 | "is-core-module": "^2.9.0",
1184 | "path-parse": "^1.0.7",
1185 | "supports-preserve-symlinks-flag": "^1.0.0"
1186 | },
1187 | "bin": {
1188 | "resolve": "bin/resolve"
1189 | },
1190 | "funding": {
1191 | "url": "https://github.com/sponsors/ljharb"
1192 | }
1193 | },
1194 | "node_modules/reusify": {
1195 | "version": "1.0.4",
1196 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1197 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1198 | "dev": true,
1199 | "engines": {
1200 | "iojs": ">=1.0.0",
1201 | "node": ">=0.10.0"
1202 | }
1203 | },
1204 | "node_modules/rollup": {
1205 | "version": "2.78.1",
1206 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
1207 | "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
1208 | "dev": true,
1209 | "bin": {
1210 | "rollup": "dist/bin/rollup"
1211 | },
1212 | "engines": {
1213 | "node": ">=10.0.0"
1214 | },
1215 | "optionalDependencies": {
1216 | "fsevents": "~2.3.2"
1217 | }
1218 | },
1219 | "node_modules/run-parallel": {
1220 | "version": "1.2.0",
1221 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1222 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1223 | "dev": true,
1224 | "funding": [
1225 | {
1226 | "type": "github",
1227 | "url": "https://github.com/sponsors/feross"
1228 | },
1229 | {
1230 | "type": "patreon",
1231 | "url": "https://www.patreon.com/feross"
1232 | },
1233 | {
1234 | "type": "consulting",
1235 | "url": "https://feross.org/support"
1236 | }
1237 | ],
1238 | "dependencies": {
1239 | "queue-microtask": "^1.2.2"
1240 | }
1241 | },
1242 | "node_modules/source-map-js": {
1243 | "version": "1.0.2",
1244 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1245 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1246 | "dev": true,
1247 | "engines": {
1248 | "node": ">=0.10.0"
1249 | }
1250 | },
1251 | "node_modules/supports-preserve-symlinks-flag": {
1252 | "version": "1.0.0",
1253 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1254 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1255 | "dev": true,
1256 | "engines": {
1257 | "node": ">= 0.4"
1258 | },
1259 | "funding": {
1260 | "url": "https://github.com/sponsors/ljharb"
1261 | }
1262 | },
1263 | "node_modules/tailwindcss": {
1264 | "version": "3.1.8",
1265 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
1266 | "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
1267 | "dev": true,
1268 | "dependencies": {
1269 | "arg": "^5.0.2",
1270 | "chokidar": "^3.5.3",
1271 | "color-name": "^1.1.4",
1272 | "detective": "^5.2.1",
1273 | "didyoumean": "^1.2.2",
1274 | "dlv": "^1.1.3",
1275 | "fast-glob": "^3.2.11",
1276 | "glob-parent": "^6.0.2",
1277 | "is-glob": "^4.0.3",
1278 | "lilconfig": "^2.0.6",
1279 | "normalize-path": "^3.0.0",
1280 | "object-hash": "^3.0.0",
1281 | "picocolors": "^1.0.0",
1282 | "postcss": "^8.4.14",
1283 | "postcss-import": "^14.1.0",
1284 | "postcss-js": "^4.0.0",
1285 | "postcss-load-config": "^3.1.4",
1286 | "postcss-nested": "5.0.6",
1287 | "postcss-selector-parser": "^6.0.10",
1288 | "postcss-value-parser": "^4.2.0",
1289 | "quick-lru": "^5.1.1",
1290 | "resolve": "^1.22.1"
1291 | },
1292 | "bin": {
1293 | "tailwind": "lib/cli.js",
1294 | "tailwindcss": "lib/cli.js"
1295 | },
1296 | "engines": {
1297 | "node": ">=12.13.0"
1298 | },
1299 | "peerDependencies": {
1300 | "postcss": "^8.0.9"
1301 | }
1302 | },
1303 | "node_modules/to-regex-range": {
1304 | "version": "5.0.1",
1305 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1306 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1307 | "dev": true,
1308 | "dependencies": {
1309 | "is-number": "^7.0.0"
1310 | },
1311 | "engines": {
1312 | "node": ">=8.0"
1313 | }
1314 | },
1315 | "node_modules/update-browserslist-db": {
1316 | "version": "1.0.10",
1317 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
1318 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
1319 | "dev": true,
1320 | "funding": [
1321 | {
1322 | "type": "opencollective",
1323 | "url": "https://opencollective.com/browserslist"
1324 | },
1325 | {
1326 | "type": "tidelift",
1327 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1328 | }
1329 | ],
1330 | "dependencies": {
1331 | "escalade": "^3.1.1",
1332 | "picocolors": "^1.0.0"
1333 | },
1334 | "bin": {
1335 | "browserslist-lint": "cli.js"
1336 | },
1337 | "peerDependencies": {
1338 | "browserslist": ">= 4.21.0"
1339 | }
1340 | },
1341 | "node_modules/util-deprecate": {
1342 | "version": "1.0.2",
1343 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1344 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
1345 | "dev": true
1346 | },
1347 | "node_modules/vite": {
1348 | "version": "3.1.7",
1349 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.7.tgz",
1350 | "integrity": "sha512-5vCAmU4S8lyVdFCInu9M54f/g8qbOMakVw5xJ4pjoaDy5wgy9sLLZkGdSLN52dlsBqh0tBqxjaqqa8LgPqwRAA==",
1351 | "dev": true,
1352 | "dependencies": {
1353 | "esbuild": "^0.15.9",
1354 | "postcss": "^8.4.16",
1355 | "resolve": "^1.22.1",
1356 | "rollup": "~2.78.0"
1357 | },
1358 | "bin": {
1359 | "vite": "bin/vite.js"
1360 | },
1361 | "engines": {
1362 | "node": "^14.18.0 || >=16.0.0"
1363 | },
1364 | "optionalDependencies": {
1365 | "fsevents": "~2.3.2"
1366 | },
1367 | "peerDependencies": {
1368 | "less": "*",
1369 | "sass": "*",
1370 | "stylus": "*",
1371 | "terser": "^5.4.0"
1372 | },
1373 | "peerDependenciesMeta": {
1374 | "less": {
1375 | "optional": true
1376 | },
1377 | "sass": {
1378 | "optional": true
1379 | },
1380 | "stylus": {
1381 | "optional": true
1382 | },
1383 | "terser": {
1384 | "optional": true
1385 | }
1386 | }
1387 | },
1388 | "node_modules/vite-plugin-full-reload": {
1389 | "version": "1.0.4",
1390 | "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.4.tgz",
1391 | "integrity": "sha512-9WejQII6zJ++m/YE173Zvl2jq4cqa404KNrVT+JDzDnqaGRq5UvOvA48fnsSWPIMXFV7S0dq5+sZqcSB+tKBgA==",
1392 | "dev": true,
1393 | "dependencies": {
1394 | "picocolors": "^1.0.0",
1395 | "picomatch": "^2.3.1"
1396 | },
1397 | "peerDependencies": {
1398 | "vite": "^2 || ^3"
1399 | }
1400 | },
1401 | "node_modules/xtend": {
1402 | "version": "4.0.2",
1403 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
1404 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
1405 | "dev": true,
1406 | "engines": {
1407 | "node": ">=0.4"
1408 | }
1409 | },
1410 | "node_modules/yaml": {
1411 | "version": "1.10.2",
1412 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
1413 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
1414 | "dev": true,
1415 | "engines": {
1416 | "node": ">= 6"
1417 | }
1418 | }
1419 | },
1420 | "dependencies": {
1421 | "@esbuild/android-arm": {
1422 | "version": "0.15.10",
1423 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz",
1424 | "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==",
1425 | "dev": true,
1426 | "optional": true
1427 | },
1428 | "@esbuild/linux-loong64": {
1429 | "version": "0.15.10",
1430 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz",
1431 | "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==",
1432 | "dev": true,
1433 | "optional": true
1434 | },
1435 | "@nodelib/fs.scandir": {
1436 | "version": "2.1.5",
1437 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1438 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1439 | "dev": true,
1440 | "requires": {
1441 | "@nodelib/fs.stat": "2.0.5",
1442 | "run-parallel": "^1.1.9"
1443 | }
1444 | },
1445 | "@nodelib/fs.stat": {
1446 | "version": "2.0.5",
1447 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1448 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1449 | "dev": true
1450 | },
1451 | "@nodelib/fs.walk": {
1452 | "version": "1.2.8",
1453 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1454 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1455 | "dev": true,
1456 | "requires": {
1457 | "@nodelib/fs.scandir": "2.1.5",
1458 | "fastq": "^1.6.0"
1459 | }
1460 | },
1461 | "acorn": {
1462 | "version": "7.4.1",
1463 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1464 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1465 | "dev": true
1466 | },
1467 | "acorn-node": {
1468 | "version": "1.8.2",
1469 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
1470 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
1471 | "dev": true,
1472 | "requires": {
1473 | "acorn": "^7.0.0",
1474 | "acorn-walk": "^7.0.0",
1475 | "xtend": "^4.0.2"
1476 | }
1477 | },
1478 | "acorn-walk": {
1479 | "version": "7.2.0",
1480 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
1481 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
1482 | "dev": true
1483 | },
1484 | "anymatch": {
1485 | "version": "3.1.2",
1486 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
1487 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
1488 | "dev": true,
1489 | "requires": {
1490 | "normalize-path": "^3.0.0",
1491 | "picomatch": "^2.0.4"
1492 | }
1493 | },
1494 | "arg": {
1495 | "version": "5.0.2",
1496 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1497 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1498 | "dev": true
1499 | },
1500 | "autoprefixer": {
1501 | "version": "10.4.12",
1502 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
1503 | "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
1504 | "dev": true,
1505 | "requires": {
1506 | "browserslist": "^4.21.4",
1507 | "caniuse-lite": "^1.0.30001407",
1508 | "fraction.js": "^4.2.0",
1509 | "normalize-range": "^0.1.2",
1510 | "picocolors": "^1.0.0",
1511 | "postcss-value-parser": "^4.2.0"
1512 | }
1513 | },
1514 | "binary-extensions": {
1515 | "version": "2.2.0",
1516 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1517 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1518 | "dev": true
1519 | },
1520 | "braces": {
1521 | "version": "3.0.2",
1522 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1523 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1524 | "dev": true,
1525 | "requires": {
1526 | "fill-range": "^7.0.1"
1527 | }
1528 | },
1529 | "browserslist": {
1530 | "version": "4.21.4",
1531 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
1532 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
1533 | "dev": true,
1534 | "requires": {
1535 | "caniuse-lite": "^1.0.30001400",
1536 | "electron-to-chromium": "^1.4.251",
1537 | "node-releases": "^2.0.6",
1538 | "update-browserslist-db": "^1.0.9"
1539 | }
1540 | },
1541 | "camelcase-css": {
1542 | "version": "2.0.1",
1543 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1544 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1545 | "dev": true
1546 | },
1547 | "caniuse-lite": {
1548 | "version": "1.0.30001418",
1549 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
1550 | "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==",
1551 | "dev": true
1552 | },
1553 | "chokidar": {
1554 | "version": "3.5.3",
1555 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1556 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1557 | "dev": true,
1558 | "requires": {
1559 | "anymatch": "~3.1.2",
1560 | "braces": "~3.0.2",
1561 | "fsevents": "~2.3.2",
1562 | "glob-parent": "~5.1.2",
1563 | "is-binary-path": "~2.1.0",
1564 | "is-glob": "~4.0.1",
1565 | "normalize-path": "~3.0.0",
1566 | "readdirp": "~3.6.0"
1567 | },
1568 | "dependencies": {
1569 | "glob-parent": {
1570 | "version": "5.1.2",
1571 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1572 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1573 | "dev": true,
1574 | "requires": {
1575 | "is-glob": "^4.0.1"
1576 | }
1577 | }
1578 | }
1579 | },
1580 | "color-name": {
1581 | "version": "1.1.4",
1582 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1583 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1584 | "dev": true
1585 | },
1586 | "cssesc": {
1587 | "version": "3.0.0",
1588 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1589 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1590 | "dev": true
1591 | },
1592 | "defined": {
1593 | "version": "1.0.0",
1594 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
1595 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
1596 | "dev": true
1597 | },
1598 | "detective": {
1599 | "version": "5.2.1",
1600 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
1601 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
1602 | "dev": true,
1603 | "requires": {
1604 | "acorn-node": "^1.8.2",
1605 | "defined": "^1.0.0",
1606 | "minimist": "^1.2.6"
1607 | }
1608 | },
1609 | "didyoumean": {
1610 | "version": "1.2.2",
1611 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1612 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1613 | "dev": true
1614 | },
1615 | "dlv": {
1616 | "version": "1.1.3",
1617 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1618 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1619 | "dev": true
1620 | },
1621 | "electron-to-chromium": {
1622 | "version": "1.4.279",
1623 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.279.tgz",
1624 | "integrity": "sha512-xs7vEuSZ84+JsHSTFqqG0TE3i8EAivHomRQZhhcRvsmnjsh5C2KdhwNKf4ZRYtzq75wojpFyqb62m32Oam57wA==",
1625 | "dev": true
1626 | },
1627 | "esbuild": {
1628 | "version": "0.15.10",
1629 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz",
1630 | "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==",
1631 | "dev": true,
1632 | "requires": {
1633 | "@esbuild/android-arm": "0.15.10",
1634 | "@esbuild/linux-loong64": "0.15.10",
1635 | "esbuild-android-64": "0.15.10",
1636 | "esbuild-android-arm64": "0.15.10",
1637 | "esbuild-darwin-64": "0.15.10",
1638 | "esbuild-darwin-arm64": "0.15.10",
1639 | "esbuild-freebsd-64": "0.15.10",
1640 | "esbuild-freebsd-arm64": "0.15.10",
1641 | "esbuild-linux-32": "0.15.10",
1642 | "esbuild-linux-64": "0.15.10",
1643 | "esbuild-linux-arm": "0.15.10",
1644 | "esbuild-linux-arm64": "0.15.10",
1645 | "esbuild-linux-mips64le": "0.15.10",
1646 | "esbuild-linux-ppc64le": "0.15.10",
1647 | "esbuild-linux-riscv64": "0.15.10",
1648 | "esbuild-linux-s390x": "0.15.10",
1649 | "esbuild-netbsd-64": "0.15.10",
1650 | "esbuild-openbsd-64": "0.15.10",
1651 | "esbuild-sunos-64": "0.15.10",
1652 | "esbuild-windows-32": "0.15.10",
1653 | "esbuild-windows-64": "0.15.10",
1654 | "esbuild-windows-arm64": "0.15.10"
1655 | }
1656 | },
1657 | "esbuild-android-64": {
1658 | "version": "0.15.10",
1659 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz",
1660 | "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==",
1661 | "dev": true,
1662 | "optional": true
1663 | },
1664 | "esbuild-android-arm64": {
1665 | "version": "0.15.10",
1666 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz",
1667 | "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==",
1668 | "dev": true,
1669 | "optional": true
1670 | },
1671 | "esbuild-darwin-64": {
1672 | "version": "0.15.10",
1673 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz",
1674 | "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==",
1675 | "dev": true,
1676 | "optional": true
1677 | },
1678 | "esbuild-darwin-arm64": {
1679 | "version": "0.15.10",
1680 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz",
1681 | "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==",
1682 | "dev": true,
1683 | "optional": true
1684 | },
1685 | "esbuild-freebsd-64": {
1686 | "version": "0.15.10",
1687 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz",
1688 | "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==",
1689 | "dev": true,
1690 | "optional": true
1691 | },
1692 | "esbuild-freebsd-arm64": {
1693 | "version": "0.15.10",
1694 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz",
1695 | "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==",
1696 | "dev": true,
1697 | "optional": true
1698 | },
1699 | "esbuild-linux-32": {
1700 | "version": "0.15.10",
1701 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz",
1702 | "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==",
1703 | "dev": true,
1704 | "optional": true
1705 | },
1706 | "esbuild-linux-64": {
1707 | "version": "0.15.10",
1708 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz",
1709 | "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==",
1710 | "dev": true,
1711 | "optional": true
1712 | },
1713 | "esbuild-linux-arm": {
1714 | "version": "0.15.10",
1715 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz",
1716 | "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==",
1717 | "dev": true,
1718 | "optional": true
1719 | },
1720 | "esbuild-linux-arm64": {
1721 | "version": "0.15.10",
1722 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz",
1723 | "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==",
1724 | "dev": true,
1725 | "optional": true
1726 | },
1727 | "esbuild-linux-mips64le": {
1728 | "version": "0.15.10",
1729 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz",
1730 | "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==",
1731 | "dev": true,
1732 | "optional": true
1733 | },
1734 | "esbuild-linux-ppc64le": {
1735 | "version": "0.15.10",
1736 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz",
1737 | "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==",
1738 | "dev": true,
1739 | "optional": true
1740 | },
1741 | "esbuild-linux-riscv64": {
1742 | "version": "0.15.10",
1743 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz",
1744 | "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==",
1745 | "dev": true,
1746 | "optional": true
1747 | },
1748 | "esbuild-linux-s390x": {
1749 | "version": "0.15.10",
1750 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz",
1751 | "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==",
1752 | "dev": true,
1753 | "optional": true
1754 | },
1755 | "esbuild-netbsd-64": {
1756 | "version": "0.15.10",
1757 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz",
1758 | "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==",
1759 | "dev": true,
1760 | "optional": true
1761 | },
1762 | "esbuild-openbsd-64": {
1763 | "version": "0.15.10",
1764 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz",
1765 | "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==",
1766 | "dev": true,
1767 | "optional": true
1768 | },
1769 | "esbuild-sunos-64": {
1770 | "version": "0.15.10",
1771 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz",
1772 | "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==",
1773 | "dev": true,
1774 | "optional": true
1775 | },
1776 | "esbuild-windows-32": {
1777 | "version": "0.15.10",
1778 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz",
1779 | "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==",
1780 | "dev": true,
1781 | "optional": true
1782 | },
1783 | "esbuild-windows-64": {
1784 | "version": "0.15.10",
1785 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz",
1786 | "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==",
1787 | "dev": true,
1788 | "optional": true
1789 | },
1790 | "esbuild-windows-arm64": {
1791 | "version": "0.15.10",
1792 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz",
1793 | "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==",
1794 | "dev": true,
1795 | "optional": true
1796 | },
1797 | "escalade": {
1798 | "version": "3.1.1",
1799 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1800 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1801 | "dev": true
1802 | },
1803 | "fast-glob": {
1804 | "version": "3.2.12",
1805 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
1806 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
1807 | "dev": true,
1808 | "requires": {
1809 | "@nodelib/fs.stat": "^2.0.2",
1810 | "@nodelib/fs.walk": "^1.2.3",
1811 | "glob-parent": "^5.1.2",
1812 | "merge2": "^1.3.0",
1813 | "micromatch": "^4.0.4"
1814 | },
1815 | "dependencies": {
1816 | "glob-parent": {
1817 | "version": "5.1.2",
1818 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1819 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1820 | "dev": true,
1821 | "requires": {
1822 | "is-glob": "^4.0.1"
1823 | }
1824 | }
1825 | }
1826 | },
1827 | "fastq": {
1828 | "version": "1.13.0",
1829 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
1830 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
1831 | "dev": true,
1832 | "requires": {
1833 | "reusify": "^1.0.4"
1834 | }
1835 | },
1836 | "fill-range": {
1837 | "version": "7.0.1",
1838 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1839 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1840 | "dev": true,
1841 | "requires": {
1842 | "to-regex-range": "^5.0.1"
1843 | }
1844 | },
1845 | "fraction.js": {
1846 | "version": "4.2.0",
1847 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
1848 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1849 | "dev": true
1850 | },
1851 | "fsevents": {
1852 | "version": "2.3.2",
1853 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1854 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1855 | "dev": true,
1856 | "optional": true
1857 | },
1858 | "function-bind": {
1859 | "version": "1.1.1",
1860 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1861 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1862 | "dev": true
1863 | },
1864 | "glob-parent": {
1865 | "version": "6.0.2",
1866 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1867 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1868 | "dev": true,
1869 | "requires": {
1870 | "is-glob": "^4.0.3"
1871 | }
1872 | },
1873 | "has": {
1874 | "version": "1.0.3",
1875 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1876 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1877 | "dev": true,
1878 | "requires": {
1879 | "function-bind": "^1.1.1"
1880 | }
1881 | },
1882 | "is-binary-path": {
1883 | "version": "2.1.0",
1884 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1885 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1886 | "dev": true,
1887 | "requires": {
1888 | "binary-extensions": "^2.0.0"
1889 | }
1890 | },
1891 | "is-core-module": {
1892 | "version": "2.10.0",
1893 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
1894 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
1895 | "dev": true,
1896 | "requires": {
1897 | "has": "^1.0.3"
1898 | }
1899 | },
1900 | "is-extglob": {
1901 | "version": "2.1.1",
1902 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1903 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1904 | "dev": true
1905 | },
1906 | "is-glob": {
1907 | "version": "4.0.3",
1908 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1909 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1910 | "dev": true,
1911 | "requires": {
1912 | "is-extglob": "^2.1.1"
1913 | }
1914 | },
1915 | "is-number": {
1916 | "version": "7.0.0",
1917 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1918 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1919 | "dev": true
1920 | },
1921 | "laravel-vite-plugin": {
1922 | "version": "0.6.1",
1923 | "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.6.1.tgz",
1924 | "integrity": "sha512-L8zt+bttm6+C0mo3an5J8wRW03SsjbTEouGb3bH2jj/XclFVAX/xEUkG9efhdRHjbEH5RY6cmdJ7bmf7zqjwIQ==",
1925 | "dev": true,
1926 | "requires": {
1927 | "vite-plugin-full-reload": "^1.0.1"
1928 | }
1929 | },
1930 | "lilconfig": {
1931 | "version": "2.0.6",
1932 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
1933 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
1934 | "dev": true
1935 | },
1936 | "merge2": {
1937 | "version": "1.4.1",
1938 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1939 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1940 | "dev": true
1941 | },
1942 | "micromatch": {
1943 | "version": "4.0.5",
1944 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1945 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1946 | "dev": true,
1947 | "requires": {
1948 | "braces": "^3.0.2",
1949 | "picomatch": "^2.3.1"
1950 | }
1951 | },
1952 | "minimist": {
1953 | "version": "1.2.7",
1954 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
1955 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
1956 | "dev": true
1957 | },
1958 | "nanoid": {
1959 | "version": "3.3.4",
1960 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1961 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
1962 | "dev": true
1963 | },
1964 | "node-releases": {
1965 | "version": "2.0.6",
1966 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
1967 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
1968 | "dev": true
1969 | },
1970 | "normalize-path": {
1971 | "version": "3.0.0",
1972 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1973 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1974 | "dev": true
1975 | },
1976 | "normalize-range": {
1977 | "version": "0.1.2",
1978 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
1979 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
1980 | "dev": true
1981 | },
1982 | "object-hash": {
1983 | "version": "3.0.0",
1984 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1985 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1986 | "dev": true
1987 | },
1988 | "path-parse": {
1989 | "version": "1.0.7",
1990 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1991 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1992 | "dev": true
1993 | },
1994 | "picocolors": {
1995 | "version": "1.0.0",
1996 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1997 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
1998 | "dev": true
1999 | },
2000 | "picomatch": {
2001 | "version": "2.3.1",
2002 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2003 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2004 | "dev": true
2005 | },
2006 | "pify": {
2007 | "version": "2.3.0",
2008 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2009 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
2010 | "dev": true
2011 | },
2012 | "postcss": {
2013 | "version": "8.4.17",
2014 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
2015 | "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
2016 | "dev": true,
2017 | "requires": {
2018 | "nanoid": "^3.3.4",
2019 | "picocolors": "^1.0.0",
2020 | "source-map-js": "^1.0.2"
2021 | }
2022 | },
2023 | "postcss-import": {
2024 | "version": "14.1.0",
2025 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
2026 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
2027 | "dev": true,
2028 | "requires": {
2029 | "postcss-value-parser": "^4.0.0",
2030 | "read-cache": "^1.0.0",
2031 | "resolve": "^1.1.7"
2032 | }
2033 | },
2034 | "postcss-js": {
2035 | "version": "4.0.0",
2036 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
2037 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
2038 | "dev": true,
2039 | "requires": {
2040 | "camelcase-css": "^2.0.1"
2041 | }
2042 | },
2043 | "postcss-load-config": {
2044 | "version": "3.1.4",
2045 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
2046 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
2047 | "dev": true,
2048 | "requires": {
2049 | "lilconfig": "^2.0.5",
2050 | "yaml": "^1.10.2"
2051 | }
2052 | },
2053 | "postcss-nested": {
2054 | "version": "5.0.6",
2055 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
2056 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
2057 | "dev": true,
2058 | "requires": {
2059 | "postcss-selector-parser": "^6.0.6"
2060 | }
2061 | },
2062 | "postcss-selector-parser": {
2063 | "version": "6.0.10",
2064 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
2065 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
2066 | "dev": true,
2067 | "requires": {
2068 | "cssesc": "^3.0.0",
2069 | "util-deprecate": "^1.0.2"
2070 | }
2071 | },
2072 | "postcss-value-parser": {
2073 | "version": "4.2.0",
2074 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2075 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2076 | "dev": true
2077 | },
2078 | "queue-microtask": {
2079 | "version": "1.2.3",
2080 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2081 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2082 | "dev": true
2083 | },
2084 | "quick-lru": {
2085 | "version": "5.1.1",
2086 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
2087 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
2088 | "dev": true
2089 | },
2090 | "read-cache": {
2091 | "version": "1.0.0",
2092 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2093 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2094 | "dev": true,
2095 | "requires": {
2096 | "pify": "^2.3.0"
2097 | }
2098 | },
2099 | "readdirp": {
2100 | "version": "3.6.0",
2101 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2102 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2103 | "dev": true,
2104 | "requires": {
2105 | "picomatch": "^2.2.1"
2106 | }
2107 | },
2108 | "resolve": {
2109 | "version": "1.22.1",
2110 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
2111 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
2112 | "dev": true,
2113 | "requires": {
2114 | "is-core-module": "^2.9.0",
2115 | "path-parse": "^1.0.7",
2116 | "supports-preserve-symlinks-flag": "^1.0.0"
2117 | }
2118 | },
2119 | "reusify": {
2120 | "version": "1.0.4",
2121 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2122 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2123 | "dev": true
2124 | },
2125 | "rollup": {
2126 | "version": "2.78.1",
2127 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
2128 | "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
2129 | "dev": true,
2130 | "requires": {
2131 | "fsevents": "~2.3.2"
2132 | }
2133 | },
2134 | "run-parallel": {
2135 | "version": "1.2.0",
2136 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2137 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2138 | "dev": true,
2139 | "requires": {
2140 | "queue-microtask": "^1.2.2"
2141 | }
2142 | },
2143 | "source-map-js": {
2144 | "version": "1.0.2",
2145 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2146 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
2147 | "dev": true
2148 | },
2149 | "supports-preserve-symlinks-flag": {
2150 | "version": "1.0.0",
2151 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2152 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2153 | "dev": true
2154 | },
2155 | "tailwindcss": {
2156 | "version": "3.1.8",
2157 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
2158 | "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
2159 | "dev": true,
2160 | "requires": {
2161 | "arg": "^5.0.2",
2162 | "chokidar": "^3.5.3",
2163 | "color-name": "^1.1.4",
2164 | "detective": "^5.2.1",
2165 | "didyoumean": "^1.2.2",
2166 | "dlv": "^1.1.3",
2167 | "fast-glob": "^3.2.11",
2168 | "glob-parent": "^6.0.2",
2169 | "is-glob": "^4.0.3",
2170 | "lilconfig": "^2.0.6",
2171 | "normalize-path": "^3.0.0",
2172 | "object-hash": "^3.0.0",
2173 | "picocolors": "^1.0.0",
2174 | "postcss": "^8.4.14",
2175 | "postcss-import": "^14.1.0",
2176 | "postcss-js": "^4.0.0",
2177 | "postcss-load-config": "^3.1.4",
2178 | "postcss-nested": "5.0.6",
2179 | "postcss-selector-parser": "^6.0.10",
2180 | "postcss-value-parser": "^4.2.0",
2181 | "quick-lru": "^5.1.1",
2182 | "resolve": "^1.22.1"
2183 | }
2184 | },
2185 | "to-regex-range": {
2186 | "version": "5.0.1",
2187 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2188 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2189 | "dev": true,
2190 | "requires": {
2191 | "is-number": "^7.0.0"
2192 | }
2193 | },
2194 | "update-browserslist-db": {
2195 | "version": "1.0.10",
2196 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
2197 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
2198 | "dev": true,
2199 | "requires": {
2200 | "escalade": "^3.1.1",
2201 | "picocolors": "^1.0.0"
2202 | }
2203 | },
2204 | "util-deprecate": {
2205 | "version": "1.0.2",
2206 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2207 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2208 | "dev": true
2209 | },
2210 | "vite": {
2211 | "version": "3.1.7",
2212 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.7.tgz",
2213 | "integrity": "sha512-5vCAmU4S8lyVdFCInu9M54f/g8qbOMakVw5xJ4pjoaDy5wgy9sLLZkGdSLN52dlsBqh0tBqxjaqqa8LgPqwRAA==",
2214 | "dev": true,
2215 | "requires": {
2216 | "esbuild": "^0.15.9",
2217 | "fsevents": "~2.3.2",
2218 | "postcss": "^8.4.16",
2219 | "resolve": "^1.22.1",
2220 | "rollup": "~2.78.0"
2221 | }
2222 | },
2223 | "vite-plugin-full-reload": {
2224 | "version": "1.0.4",
2225 | "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.4.tgz",
2226 | "integrity": "sha512-9WejQII6zJ++m/YE173Zvl2jq4cqa404KNrVT+JDzDnqaGRq5UvOvA48fnsSWPIMXFV7S0dq5+sZqcSB+tKBgA==",
2227 | "dev": true,
2228 | "requires": {
2229 | "picocolors": "^1.0.0",
2230 | "picomatch": "^2.3.1"
2231 | }
2232 | },
2233 | "xtend": {
2234 | "version": "4.0.2",
2235 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2236 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
2237 | "dev": true
2238 | },
2239 | "yaml": {
2240 | "version": "1.10.2",
2241 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2242 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2243 | "dev": true
2244 | }
2245 | }
2246 | }
2247 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "vite",
5 | "build": "vite build"
6 | },
7 | "devDependencies": {
8 | "laravel-vite-plugin": "^0.6.1",
9 | "postcss": "^8.4.17",
10 | "tailwindcss": "^3.1.8",
11 | "autoprefixer": "^10.4.12",
12 | "vite": "^3.1.7"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | src/
6 |
7 |
8 |
9 |
10 | tests
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
--------------------------------------------------------------------------------
/public/build/assets/app.8012c57d.css:
--------------------------------------------------------------------------------
1 | *,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.relative{position:relative}.z-0{z-index:0}.mx-auto{margin-left:auto;margin-right:auto}.ml-3{margin-left:.75rem}.-ml-px{margin-left:-1px}.mb-4{margin-bottom:1rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.h-5{height:1.25rem}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.table-auto{table-layout:auto}.cursor-default{cursor:default}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-x-2>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(2px * var(--tw-divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--tw-divide-x-reverse)))}.overflow-x-auto{overflow-x:auto}.whitespace-nowrap{white-space:nowrap}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.bg-gray-500\/5{background-color:#6b72800d}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity))}.p-5{padding:1.25rem}.p-4{padding:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.leading-5{line-height:1.25rem}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-gray-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.active\:bg-gray-100:active{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.active\:text-gray-700:active{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.active\:text-gray-500:active{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:flex-1{flex:1 1 0%}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}}
2 |
--------------------------------------------------------------------------------
/public/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "resources/css/app.css": {
3 | "file": "assets/app.8012c57d.css",
4 | "src": "resources/css/app.css",
5 | "isEntry": true
6 | }
7 | }
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
--------------------------------------------------------------------------------
/resources/views/layout.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Permissions - {{ config('app.name', 'Laravel') }}
9 |
10 | @vite('resources/css/app.css', 'vendor/permission_ui/build')
11 |
12 |
13 |
14 |
19 |
20 |
21 | @yield('content')
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/views/permissions/create.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
36 | @endsection
37 |
--------------------------------------------------------------------------------
/resources/views/permissions/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
36 | @endsection
37 |
--------------------------------------------------------------------------------
/resources/views/permissions/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
7 |
8 |
9 |
10 |
11 |
12 | {{ __('PermissionsUI::permissions.permissions.fields.id') }} |
13 | {{ __('PermissionsUI::permissions.permissions.fields.name') }} |
14 | {{ __('PermissionsUI::permissions.permissions.fields.created_at') }} |
15 | |
16 |
17 |
18 |
19 |
20 | @forelse($permissions as $permission)
21 |
22 | {{ $permission->id }} |
23 | {{ $permission->name }} |
24 | {{ $permission->created_at }} |
25 |
26 |
27 | {{ __('PermissionsUI::permissions.global.edit') }}
28 |
29 |
30 |
37 | |
38 |
39 | @empty
40 |
41 | {{ __('PermissionsUI::permissions.global.no_records') }} |
42 |
43 | @endforelse
44 |
45 |
46 |
47 | @endsection
48 |
--------------------------------------------------------------------------------
/resources/views/roles/create.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
36 | @endsection
37 |
--------------------------------------------------------------------------------
/resources/views/roles/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
37 | @endsection
38 |
--------------------------------------------------------------------------------
/resources/views/roles/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
7 |
8 |
9 |
10 |
11 |
12 | {{ __('PermissionsUI::permissions.roles.fields.id') }} |
13 | {{ __('PermissionsUI::permissions.roles.fields.name') }} |
14 | {{ __('PermissionsUI::permissions.roles.fields.permissions') }} |
15 | {{ __('PermissionsUI::permissions.roles.fields.created_at') }} |
16 | |
17 |
18 |
19 |
20 |
21 | @forelse($roles as $role)
22 |
23 | {{ $role->id }} |
24 | {{ $role->name }} |
25 |
26 | @foreach($role->permissions as $permission)
27 | {{ $permission->name }}
28 | @endforeach
29 | |
30 | {{ $role->created_at }} |
31 |
32 |
33 | {{ __('PermissionsUI::permissions.global.edit') }}
34 |
35 |
36 |
43 | |
44 |
45 | @empty
46 |
47 | {{ __('PermissionsUI::permissions.global.no_records') }} |
48 |
49 | @endforelse
50 |
51 |
52 |
53 | @endsection
54 |
--------------------------------------------------------------------------------
/resources/views/users/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
31 | @endsection
32 |
--------------------------------------------------------------------------------
/resources/views/users/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('PermissionsUI::layout')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 | {{ __('PermissionsUI::permissions.users.fields.id') }} |
9 | {{ __('PermissionsUI::permissions.users.fields.name') }} |
10 | {{ __('PermissionsUI::permissions.users.fields.email') }} |
11 | {{ __('PermissionsUI::permissions.users.fields.roles') }} |
12 | {{ __('PermissionsUI::permissions.users.fields.created_at') }} |
13 | |
14 |
15 |
16 |
17 |
18 | @forelse($users as $user)
19 |
20 | {{ $user->id }} |
21 | {{ $user->name }} |
22 | {{ $user->email }} |
23 |
24 | @foreach($user->roles as $role)
25 | {{ $role->name }}
26 | @endforeach
27 | |
28 | {{ $user->created_at }} |
29 |
30 |
31 | {{ __('PermissionsUI::permissions.global.edit') }}
32 |
33 | |
34 |
35 | @empty
36 |
37 | {{ __('PermissionsUI::permissions.global.no_records') }} |
38 |
39 | @endforelse
40 |
41 |
42 |
43 | @if($users->links())
44 |
45 | {{ $users->links() }}
46 |
47 | @endif
48 |
49 | @endsection
50 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 | config('permission_ui.middleware'),
12 | 'prefix' => config('permission_ui.url_prefix'),
13 | 'as' => config('permission_ui.route_name_prefix')],
14 | function () {
15 | Route::resource('roles', RoleController::class)->except('show');
16 | Route::resource('permissions', PermissionController::class)->except('show');
17 | Route::resource('users', UserController::class)->only('index', 'edit', 'update');
18 | });
19 |
--------------------------------------------------------------------------------
/src/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | validate([
30 | 'name' => ['required', 'string'],
31 | 'roles' => ['array'],
32 | ]);
33 |
34 | $permission = Permission::create($data);
35 |
36 | $permission->syncRoles($request->input('roles'));
37 |
38 | return redirect()->route(config('permission_ui.route_name_prefix') . 'permissions.index');
39 | }
40 |
41 | public function edit(Permission $permission): View
42 | {
43 | $roles = Role::pluck('name', 'id');
44 |
45 | return view('PermissionsUI::permissions.edit', compact('permission', 'roles'));
46 | }
47 |
48 | public function update(Request $request, Permission $permission): RedirectResponse
49 | {
50 | $data = $request->validate([
51 | 'name' => ['required', 'string'],
52 | 'roles' => ['array'],
53 | ]);
54 |
55 | $permission->update($data);
56 |
57 | $permission->syncRoles($request->input('roles'));
58 |
59 | return redirect()->route(config('permission_ui.route_name_prefix') . 'permissions.index');
60 | }
61 |
62 | public function destroy(Permission $permission): RedirectResponse
63 | {
64 | $permission->delete();
65 |
66 | return redirect()->route(config('permission_ui.route_name_prefix') . 'permissions.index');
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/Controllers/RoleController.php:
--------------------------------------------------------------------------------
1 | get();
16 |
17 | return view('PermissionsUI::roles.index', compact('roles'));
18 | }
19 |
20 | public function create(): View
21 | {
22 | $permissions = Permission::pluck('name', 'id');
23 |
24 | return view('PermissionsUI::roles.create', compact('permissions'));
25 | }
26 |
27 | public function store(Request $request): RedirectResponse
28 | {
29 | $request->validate([
30 | 'name' => ['required', 'string'],
31 | 'permissions' => ['array'],
32 | ]);
33 |
34 | $role = Role::create(['name' => $request->input('name')]);
35 |
36 | $role->givePermissionTo($request->input('permissions'));
37 |
38 | return redirect()->route(config('permission_ui.route_name_prefix') . 'roles.index');
39 | }
40 |
41 | public function edit(Role $role): View
42 | {
43 | $permissions = Permission::pluck('name', 'id');
44 |
45 | return view('PermissionsUI::roles.edit', compact('role', 'permissions'));
46 | }
47 |
48 | public function update(Request $request, Role $role): RedirectResponse
49 | {
50 | $request->validate([
51 | 'name' => ['required', 'string'],
52 | 'permissions' => ['array'],
53 | ]);
54 |
55 | $role->update(['name' => $request->input('name')]);
56 |
57 | $role->syncPermissions($request->input('permissions'));
58 |
59 | return redirect()->route(config('permission_ui.route_name_prefix') . 'roles.index');
60 | }
61 |
62 | public function destroy(Role $role): RedirectResponse
63 | {
64 | $role->delete();
65 |
66 | return redirect()->route(config('permission_ui.route_name_prefix') . 'roles.index');
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/Controllers/UserController.php:
--------------------------------------------------------------------------------
1 | paginate();
16 |
17 | return view('PermissionsUI::users.index', compact('users'));
18 | }
19 |
20 | public function edit(User $user): View
21 | {
22 | $roles = Role::pluck('name', 'id');
23 |
24 | return view('PermissionsUI::users.edit', compact('user', 'roles'));
25 | }
26 |
27 | public function update(Request $request, User $user): RedirectResponse
28 | {
29 | $request->validate([
30 | 'roles' => ['required', 'array'],
31 | ]);
32 |
33 | $user->syncRoles($request->input('roles'));
34 |
35 | return redirect()->route(config('permission_ui.route_name_prefix') . 'users.index');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/Facades/PermissionsUI.php:
--------------------------------------------------------------------------------
1 | mergeConfigFrom(__DIR__ . '/../config/permission_ui.php', 'permission_ui');
12 | }
13 |
14 | public function boot()
15 | {
16 | // registering routes
17 | $this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
18 |
19 | // registering views
20 | $this->loadViewsFrom(__DIR__ . '/../resources/views', 'PermissionsUI');
21 |
22 | // registering lang
23 | $this->loadTranslationsFrom(__DIR__.'/../lang', 'PermissionsUI');
24 |
25 | // publish lang
26 | $this->publishes([
27 | __DIR__.'/../lang' => $this->app->langPath('vendor/permission_ui'),
28 | ], 'lang');
29 |
30 | // publish config
31 | $this->publishes([
32 | __DIR__ . '/../config/permission_ui.php' => config_path('permission_ui.php'),
33 | ], 'config');
34 |
35 | // publish assets
36 | $this->publishes([
37 | __DIR__ . '/../public' => public_path('vendor/permission_ui'),
38 | ], ['permission_ui-assets', 'laravel-assets']);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
5 | './resources/**/*.blade.php',
6 | ],
7 | theme: {
8 | extend: {},
9 | },
10 | plugins: [],
11 | }
--------------------------------------------------------------------------------
/tests/Models/User.php:
--------------------------------------------------------------------------------
1 | actingAs(User::factory()->create())->get(config('permission_ui.url_prefix'));
15 |
16 | $response->assertRedirect(route(config('permission_ui.route_name_prefix') . 'users.index'));
17 | }
18 |
19 | public function testPermissionCanBeAttachedToRole()
20 | {
21 | $permission = Permission::create(['name' => 'permission']);
22 |
23 | $response = $this->actingAs(User::factory()->create())->post(route(config('permission_ui.route_name_prefix') . 'roles.store'), [
24 | 'name' => 'role',
25 | 'permissions' => [$permission->id],
26 | ]);
27 |
28 | $response->assertRedirect(route(config('permission_ui.route_name_prefix') . 'roles.index'));
29 |
30 | $this->assertTrue(Role::first()->hasPermissionTo($permission));
31 | }
32 |
33 | public function testPermissionsShowsOnCreateAndEditRolePages()
34 | {
35 | $user = User::factory()->create();
36 |
37 | Permission::create(['name' => 'create user']);
38 |
39 | $response = $this->actingAs($user)->get(route(config('permission_ui.route_name_prefix') . 'roles.create'));
40 |
41 | $response->assertOk()
42 | ->assertViewHas('permissions', function (Collection $permissions) {
43 | foreach ($permissions as $permission) {
44 | return $permission === 'create user';
45 | }
46 | });
47 |
48 | $role = Role::create(['name' => 'admin']);
49 |
50 | $response = $this->actingAs($user)->get(route(config('permission_ui.route_name_prefix') . 'roles.edit', $role));
51 |
52 | $response->assertOk()
53 | ->assertViewHas('permissions', function (Collection $permissions) {
54 | foreach ($permissions as $permission) {
55 | return $permission === 'create user';
56 | }
57 | });
58 | }
59 |
60 | public function testWhenCreatingPermissionItCanBeAssignedToRole()
61 | {
62 | $role = Role::create(['name' => 'admin']);
63 |
64 | $response = $this->actingAs(User::factory()->create())->post(route(config('permission_ui.route_name_prefix') . 'permissions.store'), [
65 | 'name' => 'create user',
66 | 'roles' => [$role->id],
67 | ]);
68 |
69 | $response->assertRedirect(route(config('permission_ui.route_name_prefix') . 'permissions.index'));
70 |
71 | $this->assertTrue(Permission::first()->hasRole($role));
72 | }
73 |
74 | public function testWhenEditingPermissionItCanBeAssignedToRole()
75 | {
76 | $role = Role::create(['name' => 'admin']);
77 | $permission = Permission::create(['name' => 'create user']);
78 |
79 | $response = $this->actingAs(User::factory()->create())->patch(route(config('permission_ui.route_name_prefix') . 'permissions.update', $permission), [
80 | 'name' => 'create_user',
81 | 'roles' => [$role->id],
82 | ]);
83 |
84 | $response->assertRedirect(route(config('permission_ui.route_name_prefix') . 'permissions.index'));
85 |
86 | $this->assertTrue(Permission::first()->hasRole($role));
87 |
88 | $this->assertDatabaseHas('permissions', [
89 | 'name' => 'create_user',
90 | ]);
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | withoutVite();
19 | }
20 |
21 | protected function defineEnvironment($app)
22 | {
23 | // Setup default database to use sqlite :memory:
24 | $app['config']->set('database.default', 'testbench');
25 | $app['config']->set('database.connections.testbench', [
26 | 'driver' => 'sqlite',
27 | 'database' => ':memory:',
28 | 'prefix' => '',
29 | ]);
30 | }
31 |
32 | protected function getPackageProviders($app): array
33 | {
34 | return [
35 | PermissionServiceProvider::class,
36 | PermissionsUIServiceProvider::class,
37 | ];
38 | }
39 |
40 | protected function defineDatabaseMigrations(): void
41 | {
42 | $this->loadLaravelMigrations();
43 |
44 | include_once __DIR__.'/../vendor/spatie/laravel-permission/database/migrations/create_permission_tables.php.stub';
45 | (new \CreatePermissionTables)->up();
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import laravel from 'laravel-vite-plugin';
3 |
4 | export default defineConfig({
5 | plugins: [
6 | laravel({
7 | input: ['resources/css/app.css']
8 | }),
9 | ],
10 | });
--------------------------------------------------------------------------------