├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── favicon.ico
├── index.html
├── package.json
├── pnpm-lock.yaml
├── src
├── App.vue
├── assets
│ ├── 24
│ │ ├── img
│ │ │ ├── bg.webp
│ │ │ ├── blow
│ │ │ │ ├── 1.webp
│ │ │ │ ├── 2.webp
│ │ │ │ ├── 3.webp
│ │ │ │ ├── 4.webp
│ │ │ │ ├── 5.webp
│ │ │ │ ├── 6.webp
│ │ │ │ ├── 7.webp
│ │ │ │ ├── 8.webp
│ │ │ │ └── 9.webp
│ │ │ ├── bullet.webp
│ │ │ ├── ebullet.webp
│ │ │ ├── eplane.webp
│ │ │ └── plane.webp
│ │ └── sounds
│ │ │ ├── bgm.mp3
│ │ │ ├── bullet.mp3
│ │ │ ├── end.mp3
│ │ │ ├── enemy_down.mp3
│ │ │ ├── enemy_hit.mp3
│ │ │ ├── lv_up.mp3
│ │ │ ├── player_skill_0.mp3
│ │ │ ├── player_skill_1.mp3
│ │ │ ├── player_skill_2.mp3
│ │ │ ├── player_skill_3.mp3
│ │ │ ├── player_treat.mp3
│ │ │ └── start.mp3
│ ├── aniki
│ │ ├── img
│ │ │ ├── bg.webp
│ │ │ ├── blow
│ │ │ │ ├── 1.webp
│ │ │ │ ├── 2.webp
│ │ │ │ ├── 3.webp
│ │ │ │ ├── 4.webp
│ │ │ │ ├── 5.webp
│ │ │ │ ├── 6.webp
│ │ │ │ ├── 7.webp
│ │ │ │ ├── 8.webp
│ │ │ │ └── 9.webp
│ │ │ ├── bullet.webp
│ │ │ ├── ebullet.webp
│ │ │ ├── eplane.webp
│ │ │ └── plane.webp
│ │ └── sounds
│ │ │ ├── bgm.mp3
│ │ │ ├── bullet.mp3
│ │ │ ├── end.mp3
│ │ │ ├── enemy_down.mp3
│ │ │ ├── enemy_hit.mp3
│ │ │ ├── lv_up.mp3
│ │ │ ├── player_skill_0.mp3
│ │ │ ├── player_skill_1.mp3
│ │ │ ├── player_skill_2.mp3
│ │ │ ├── player_skill_3.mp3
│ │ │ ├── player_treat.mp3
│ │ │ └── start.mp3
│ └── bg_welcome.webp
├── components
│ └── MainCanvas.vue
├── game
│ ├── assets.js
│ ├── circle-points.js
│ ├── type.js
│ └── utils.js
├── hooks
│ └── useGameAudio.js
├── main.css
├── main.js
├── router
│ └── index.js
├── stores
│ ├── bitmap-store.js
│ └── log-store.js
└── views
│ ├── end.vue
│ ├── play.vue
│ └── welcome.vue
└── vite.config.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | insert_final_newline = true
8 | trim_trailing_whitespace = true
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | dist
13 | dist-ssr
14 | coverage
15 | *.local
16 |
17 | /cypress/videos/
18 | /cypress/screenshots/
19 |
20 | # Editor directories and files
21 | .vscode/*
22 | !.vscode/extensions.json
23 | .idea
24 | *.suo
25 | *.ntvs*
26 | *.njsproj
27 | *.sln
28 | *.sw?
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Mozilla Public License Version 2.0
2 | ==================================
3 |
4 | 1. Definitions
5 | --------------
6 |
7 | 1.1. "Contributor"
8 | means each individual or legal entity that creates, contributes to
9 | the creation of, or owns Covered Software.
10 |
11 | 1.2. "Contributor Version"
12 | means the combination of the Contributions of others (if any) used
13 | by a Contributor and that particular Contributor's Contribution.
14 |
15 | 1.3. "Contribution"
16 | means Covered Software of a particular Contributor.
17 |
18 | 1.4. "Covered Software"
19 | means Source Code Form to which the initial Contributor has attached
20 | the notice in Exhibit A, the Executable Form of such Source Code
21 | Form, and Modifications of such Source Code Form, in each case
22 | including portions thereof.
23 |
24 | 1.5. "Incompatible With Secondary Licenses"
25 | means
26 |
27 | (a) that the initial Contributor has attached the notice described
28 | in Exhibit B to the Covered Software; or
29 |
30 | (b) that the Covered Software was made available under the terms of
31 | version 1.1 or earlier of the License, but not also under the
32 | terms of a Secondary License.
33 |
34 | 1.6. "Executable Form"
35 | means any form of the work other than Source Code Form.
36 |
37 | 1.7. "Larger Work"
38 | means a work that combines Covered Software with other material, in
39 | a separate file or files, that is not Covered Software.
40 |
41 | 1.8. "License"
42 | means this document.
43 |
44 | 1.9. "Licensable"
45 | means having the right to grant, to the maximum extent possible,
46 | whether at the time of the initial grant or subsequently, any and
47 | all of the rights conveyed by this License.
48 |
49 | 1.10. "Modifications"
50 | means any of the following:
51 |
52 | (a) any file in Source Code Form that results from an addition to,
53 | deletion from, or modification of the contents of Covered
54 | Software; or
55 |
56 | (b) any new file in Source Code Form that contains any Covered
57 | Software.
58 |
59 | 1.11. "Patent Claims" of a Contributor
60 | means any patent claim(s), including without limitation, method,
61 | process, and apparatus claims, in any patent Licensable by such
62 | Contributor that would be infringed, but for the grant of the
63 | License, by the making, using, selling, offering for sale, having
64 | made, import, or transfer of either its Contributions or its
65 | Contributor Version.
66 |
67 | 1.12. "Secondary License"
68 | means either the GNU General Public License, Version 2.0, the GNU
69 | Lesser General Public License, Version 2.1, the GNU Affero General
70 | Public License, Version 3.0, or any later versions of those
71 | licenses.
72 |
73 | 1.13. "Source Code Form"
74 | means the form of the work preferred for making modifications.
75 |
76 | 1.14. "You" (or "Your")
77 | means an individual or a legal entity exercising rights under this
78 | License. For legal entities, "You" includes any entity that
79 | controls, is controlled by, or is under common control with You. For
80 | purposes of this definition, "control" means (a) the power, direct
81 | or indirect, to cause the direction or management of such entity,
82 | whether by contract or otherwise, or (b) ownership of more than
83 | fifty percent (50%) of the outstanding shares or beneficial
84 | ownership of such entity.
85 |
86 | 2. License Grants and Conditions
87 | --------------------------------
88 |
89 | 2.1. Grants
90 |
91 | Each Contributor hereby grants You a world-wide, royalty-free,
92 | non-exclusive license:
93 |
94 | (a) under intellectual property rights (other than patent or trademark)
95 | Licensable by such Contributor to use, reproduce, make available,
96 | modify, display, perform, distribute, and otherwise exploit its
97 | Contributions, either on an unmodified basis, with Modifications, or
98 | as part of a Larger Work; and
99 |
100 | (b) under Patent Claims of such Contributor to make, use, sell, offer
101 | for sale, have made, import, and otherwise transfer either its
102 | Contributions or its Contributor Version.
103 |
104 | 2.2. Effective Date
105 |
106 | The licenses granted in Section 2.1 with respect to any Contribution
107 | become effective for each Contribution on the date the Contributor first
108 | distributes such Contribution.
109 |
110 | 2.3. Limitations on Grant Scope
111 |
112 | The licenses granted in this Section 2 are the only rights granted under
113 | this License. No additional rights or licenses will be implied from the
114 | distribution or licensing of Covered Software under this License.
115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a
116 | Contributor:
117 |
118 | (a) for any code that a Contributor has removed from Covered Software;
119 | or
120 |
121 | (b) for infringements caused by: (i) Your and any other third party's
122 | modifications of Covered Software, or (ii) the combination of its
123 | Contributions with other software (except as part of its Contributor
124 | Version); or
125 |
126 | (c) under Patent Claims infringed by Covered Software in the absence of
127 | its Contributions.
128 |
129 | This License does not grant any rights in the trademarks, service marks,
130 | or logos of any Contributor (except as may be necessary to comply with
131 | the notice requirements in Section 3.4).
132 |
133 | 2.4. Subsequent Licenses
134 |
135 | No Contributor makes additional grants as a result of Your choice to
136 | distribute the Covered Software under a subsequent version of this
137 | License (see Section 10.2) or under the terms of a Secondary License (if
138 | permitted under the terms of Section 3.3).
139 |
140 | 2.5. Representation
141 |
142 | Each Contributor represents that the Contributor believes its
143 | Contributions are its original creation(s) or it has sufficient rights
144 | to grant the rights to its Contributions conveyed by this License.
145 |
146 | 2.6. Fair Use
147 |
148 | This License is not intended to limit any rights You have under
149 | applicable copyright doctrines of fair use, fair dealing, or other
150 | equivalents.
151 |
152 | 2.7. Conditions
153 |
154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155 | in Section 2.1.
156 |
157 | 3. Responsibilities
158 | -------------------
159 |
160 | 3.1. Distribution of Source Form
161 |
162 | All distribution of Covered Software in Source Code Form, including any
163 | Modifications that You create or to which You contribute, must be under
164 | the terms of this License. You must inform recipients that the Source
165 | Code Form of the Covered Software is governed by the terms of this
166 | License, and how they can obtain a copy of this License. You may not
167 | attempt to alter or restrict the recipients' rights in the Source Code
168 | Form.
169 |
170 | 3.2. Distribution of Executable Form
171 |
172 | If You distribute Covered Software in Executable Form then:
173 |
174 | (a) such Covered Software must also be made available in Source Code
175 | Form, as described in Section 3.1, and You must inform recipients of
176 | the Executable Form how they can obtain a copy of such Source Code
177 | Form by reasonable means in a timely manner, at a charge no more
178 | than the cost of distribution to the recipient; and
179 |
180 | (b) You may distribute such Executable Form under the terms of this
181 | License, or sublicense it under different terms, provided that the
182 | license for the Executable Form does not attempt to limit or alter
183 | the recipients' rights in the Source Code Form under this License.
184 |
185 | 3.3. Distribution of a Larger Work
186 |
187 | You may create and distribute a Larger Work under terms of Your choice,
188 | provided that You also comply with the requirements of this License for
189 | the Covered Software. If the Larger Work is a combination of Covered
190 | Software with a work governed by one or more Secondary Licenses, and the
191 | Covered Software is not Incompatible With Secondary Licenses, this
192 | License permits You to additionally distribute such Covered Software
193 | under the terms of such Secondary License(s), so that the recipient of
194 | the Larger Work may, at their option, further distribute the Covered
195 | Software under the terms of either this License or such Secondary
196 | License(s).
197 |
198 | 3.4. Notices
199 |
200 | You may not remove or alter the substance of any license notices
201 | (including copyright notices, patent notices, disclaimers of warranty,
202 | or limitations of liability) contained within the Source Code Form of
203 | the Covered Software, except that You may alter any license notices to
204 | the extent required to remedy known factual inaccuracies.
205 |
206 | 3.5. Application of Additional Terms
207 |
208 | You may choose to offer, and to charge a fee for, warranty, support,
209 | indemnity or liability obligations to one or more recipients of Covered
210 | Software. However, You may do so only on Your own behalf, and not on
211 | behalf of any Contributor. You must make it absolutely clear that any
212 | such warranty, support, indemnity, or liability obligation is offered by
213 | You alone, and You hereby agree to indemnify every Contributor for any
214 | liability incurred by such Contributor as a result of warranty, support,
215 | indemnity or liability terms You offer. You may include additional
216 | disclaimers of warranty and limitations of liability specific to any
217 | jurisdiction.
218 |
219 | 4. Inability to Comply Due to Statute or Regulation
220 | ---------------------------------------------------
221 |
222 | If it is impossible for You to comply with any of the terms of this
223 | License with respect to some or all of the Covered Software due to
224 | statute, judicial order, or regulation then You must: (a) comply with
225 | the terms of this License to the maximum extent possible; and (b)
226 | describe the limitations and the code they affect. Such description must
227 | be placed in a text file included with all distributions of the Covered
228 | Software under this License. Except to the extent prohibited by statute
229 | or regulation, such description must be sufficiently detailed for a
230 | recipient of ordinary skill to be able to understand it.
231 |
232 | 5. Termination
233 | --------------
234 |
235 | 5.1. The rights granted under this License will terminate automatically
236 | if You fail to comply with any of its terms. However, if You become
237 | compliant, then the rights granted under this License from a particular
238 | Contributor are reinstated (a) provisionally, unless and until such
239 | Contributor explicitly and finally terminates Your grants, and (b) on an
240 | ongoing basis, if such Contributor fails to notify You of the
241 | non-compliance by some reasonable means prior to 60 days after You have
242 | come back into compliance. Moreover, Your grants from a particular
243 | Contributor are reinstated on an ongoing basis if such Contributor
244 | notifies You of the non-compliance by some reasonable means, this is the
245 | first time You have received notice of non-compliance with this License
246 | from such Contributor, and You become compliant prior to 30 days after
247 | Your receipt of the notice.
248 |
249 | 5.2. If You initiate litigation against any entity by asserting a patent
250 | infringement claim (excluding declaratory judgment actions,
251 | counter-claims, and cross-claims) alleging that a Contributor Version
252 | directly or indirectly infringes any patent, then the rights granted to
253 | You by any and all Contributors for the Covered Software under Section
254 | 2.1 of this License shall terminate.
255 |
256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257 | end user license agreements (excluding distributors and resellers) which
258 | have been validly granted by You or Your distributors under this License
259 | prior to termination shall survive termination.
260 |
261 | ************************************************************************
262 | * *
263 | * 6. Disclaimer of Warranty *
264 | * ------------------------- *
265 | * *
266 | * Covered Software is provided under this License on an "as is" *
267 | * basis, without warranty of any kind, either expressed, implied, or *
268 | * statutory, including, without limitation, warranties that the *
269 | * Covered Software is free of defects, merchantable, fit for a *
270 | * particular purpose or non-infringing. The entire risk as to the *
271 | * quality and performance of the Covered Software is with You. *
272 | * Should any Covered Software prove defective in any respect, You *
273 | * (not any Contributor) assume the cost of any necessary servicing, *
274 | * repair, or correction. This disclaimer of warranty constitutes an *
275 | * essential part of this License. No use of any Covered Software is *
276 | * authorized under this License except under this disclaimer. *
277 | * *
278 | ************************************************************************
279 |
280 | ************************************************************************
281 | * *
282 | * 7. Limitation of Liability *
283 | * -------------------------- *
284 | * *
285 | * Under no circumstances and under no legal theory, whether tort *
286 | * (including negligence), contract, or otherwise, shall any *
287 | * Contributor, or anyone who distributes Covered Software as *
288 | * permitted above, be liable to You for any direct, indirect, *
289 | * special, incidental, or consequential damages of any character *
290 | * including, without limitation, damages for lost profits, loss of *
291 | * goodwill, work stoppage, computer failure or malfunction, or any *
292 | * and all other commercial damages or losses, even if such party *
293 | * shall have been informed of the possibility of such damages. This *
294 | * limitation of liability shall not apply to liability for death or *
295 | * personal injury resulting from such party's negligence to the *
296 | * extent applicable law prohibits such limitation. Some *
297 | * jurisdictions do not allow the exclusion or limitation of *
298 | * incidental or consequential damages, so this exclusion and *
299 | * limitation may not apply to You. *
300 | * *
301 | ************************************************************************
302 |
303 | 8. Litigation
304 | -------------
305 |
306 | Any litigation relating to this License may be brought only in the
307 | courts of a jurisdiction where the defendant maintains its principal
308 | place of business and such litigation shall be governed by laws of that
309 | jurisdiction, without reference to its conflict-of-law provisions.
310 | Nothing in this Section shall prevent a party's ability to bring
311 | cross-claims or counter-claims.
312 |
313 | 9. Miscellaneous
314 | ----------------
315 |
316 | This License represents the complete agreement concerning the subject
317 | matter hereof. If any provision of this License is held to be
318 | unenforceable, such provision shall be reformed only to the extent
319 | necessary to make it enforceable. Any law or regulation which provides
320 | that the language of a contract shall be construed against the drafter
321 | shall not be used to construe this License against a Contributor.
322 |
323 | 10. Versions of the License
324 | ---------------------------
325 |
326 | 10.1. New Versions
327 |
328 | Mozilla Foundation is the license steward. Except as provided in Section
329 | 10.3, no one other than the license steward has the right to modify or
330 | publish new versions of this License. Each version will be given a
331 | distinguishing version number.
332 |
333 | 10.2. Effect of New Versions
334 |
335 | You may distribute the Covered Software under the terms of the version
336 | of the License under which You originally received the Covered Software,
337 | or under the terms of any subsequent version published by the license
338 | steward.
339 |
340 | 10.3. Modified Versions
341 |
342 | If you create software not governed by this License, and you want to
343 | create a new license for such software, you may create and use a
344 | modified version of this License if you rename the license and remove
345 | any references to the name of the license steward (except to note that
346 | such modified license differs from this License).
347 |
348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary
349 | Licenses
350 |
351 | If You choose to distribute Source Code Form that is Incompatible With
352 | Secondary Licenses under the terms of this version of the License, the
353 | notice described in Exhibit B of this License must be attached.
354 |
355 | Exhibit A - Source Code Form License Notice
356 | -------------------------------------------
357 |
358 | This Source Code Form is subject to the terms of the Mozilla Public
359 | License, v. 2.0. If a copy of the MPL was not distributed with this
360 | file, You can obtain one at http://mozilla.org/MPL/2.0/.
361 |
362 | If it is not possible or desirable to put the notice in a particular
363 | file, then You may include the notice in a location (such as a LICENSE
364 | file in a relevant directory) where a recipient would be likely to look
365 | for such a notice.
366 |
367 | You may add additional accurate notices of copyright ownership.
368 |
369 | Exhibit B - "Incompatible With Secondary Licenses" Notice
370 | ---------------------------------------------------------
371 |
372 | This Source Code Form is "Incompatible With Secondary Licenses", as
373 | defined by the Mozilla Public License, v. 2.0.
374 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # plane-war-vue
2 |
3 | vue3 做的小游戏,支持电脑和手机游玩
4 |
5 | > 素材均来源于网络收集
6 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/favicon.ico
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 飞机大战
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "plane-war-vue",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite --host 0.0.0.0",
7 | "build": "vite build",
8 | "preview": "vite preview"
9 | },
10 | "dependencies": {
11 | "@vueuse/core": "^10.11.1",
12 | "@vueuse/sound": "^2.1.3",
13 | "pinia": "^2.3.1",
14 | "vue": "^3.5.16",
15 | "vue-router": "^4.5.1"
16 | },
17 | "devDependencies": {
18 | "@vitejs/plugin-vue": "^4.6.2",
19 | "postcss-preset-env": "^9.6.0",
20 | "vite": "^4.5.14"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@vueuse/core':
12 | specifier: ^10.11.1
13 | version: 10.11.1(vue@3.5.16)
14 | '@vueuse/sound':
15 | specifier: ^2.1.3
16 | version: 2.1.3(vue@3.5.16)
17 | pinia:
18 | specifier: ^2.3.1
19 | version: 2.3.1(vue@3.5.16)
20 | vue:
21 | specifier: ^3.5.16
22 | version: 3.5.16
23 | vue-router:
24 | specifier: ^4.5.1
25 | version: 4.5.1(vue@3.5.16)
26 | devDependencies:
27 | '@vitejs/plugin-vue':
28 | specifier: ^4.6.2
29 | version: 4.6.2(vite@4.5.14)(vue@3.5.16)
30 | postcss-preset-env:
31 | specifier: ^9.6.0
32 | version: 9.6.0(postcss@8.5.4)
33 | vite:
34 | specifier: ^4.5.14
35 | version: 4.5.14
36 |
37 | packages:
38 |
39 | '@babel/helper-string-parser@7.27.1':
40 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
41 | engines: {node: '>=6.9.0'}
42 |
43 | '@babel/helper-validator-identifier@7.27.1':
44 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
45 | engines: {node: '>=6.9.0'}
46 |
47 | '@babel/parser@7.27.4':
48 | resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==}
49 | engines: {node: '>=6.0.0'}
50 | hasBin: true
51 |
52 | '@babel/types@7.27.3':
53 | resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==}
54 | engines: {node: '>=6.9.0'}
55 |
56 | '@csstools/cascade-layer-name-parser@1.0.13':
57 | resolution: {integrity: sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==}
58 | engines: {node: ^14 || ^16 || >=18}
59 | peerDependencies:
60 | '@csstools/css-parser-algorithms': ^2.7.1
61 | '@csstools/css-tokenizer': ^2.4.1
62 |
63 | '@csstools/color-helpers@4.2.1':
64 | resolution: {integrity: sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==}
65 | engines: {node: ^14 || ^16 || >=18}
66 |
67 | '@csstools/css-calc@1.2.4':
68 | resolution: {integrity: sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q==}
69 | engines: {node: ^14 || ^16 || >=18}
70 | peerDependencies:
71 | '@csstools/css-parser-algorithms': ^2.7.1
72 | '@csstools/css-tokenizer': ^2.4.1
73 |
74 | '@csstools/css-color-parser@2.0.5':
75 | resolution: {integrity: sha512-lRZSmtl+DSjok3u9hTWpmkxFZnz7stkbZxzKc08aDUsdrWwhSgWo8yq9rq9DaFUtbAyAq2xnH92fj01S+pwIww==}
76 | engines: {node: ^14 || ^16 || >=18}
77 | peerDependencies:
78 | '@csstools/css-parser-algorithms': ^2.7.1
79 | '@csstools/css-tokenizer': ^2.4.1
80 |
81 | '@csstools/css-parser-algorithms@2.7.1':
82 | resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==}
83 | engines: {node: ^14 || ^16 || >=18}
84 | peerDependencies:
85 | '@csstools/css-tokenizer': ^2.4.1
86 |
87 | '@csstools/css-tokenizer@2.4.1':
88 | resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==}
89 | engines: {node: ^14 || ^16 || >=18}
90 |
91 | '@csstools/media-query-list-parser@2.1.13':
92 | resolution: {integrity: sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==}
93 | engines: {node: ^14 || ^16 || >=18}
94 | peerDependencies:
95 | '@csstools/css-parser-algorithms': ^2.7.1
96 | '@csstools/css-tokenizer': ^2.4.1
97 |
98 | '@csstools/postcss-cascade-layers@4.0.6':
99 | resolution: {integrity: sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==}
100 | engines: {node: ^14 || ^16 || >=18}
101 | peerDependencies:
102 | postcss: ^8.4
103 |
104 | '@csstools/postcss-color-function@3.0.19':
105 | resolution: {integrity: sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg==}
106 | engines: {node: ^14 || ^16 || >=18}
107 | peerDependencies:
108 | postcss: ^8.4
109 |
110 | '@csstools/postcss-color-mix-function@2.0.19':
111 | resolution: {integrity: sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg==}
112 | engines: {node: ^14 || ^16 || >=18}
113 | peerDependencies:
114 | postcss: ^8.4
115 |
116 | '@csstools/postcss-content-alt-text@1.0.0':
117 | resolution: {integrity: sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ==}
118 | engines: {node: ^14 || ^16 || >=18}
119 | peerDependencies:
120 | postcss: ^8.4
121 |
122 | '@csstools/postcss-exponential-functions@1.0.9':
123 | resolution: {integrity: sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ==}
124 | engines: {node: ^14 || ^16 || >=18}
125 | peerDependencies:
126 | postcss: ^8.4
127 |
128 | '@csstools/postcss-font-format-keywords@3.0.2':
129 | resolution: {integrity: sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==}
130 | engines: {node: ^14 || ^16 || >=18}
131 | peerDependencies:
132 | postcss: ^8.4
133 |
134 | '@csstools/postcss-gamut-mapping@1.0.11':
135 | resolution: {integrity: sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g==}
136 | engines: {node: ^14 || ^16 || >=18}
137 | peerDependencies:
138 | postcss: ^8.4
139 |
140 | '@csstools/postcss-gradients-interpolation-method@4.0.20':
141 | resolution: {integrity: sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og==}
142 | engines: {node: ^14 || ^16 || >=18}
143 | peerDependencies:
144 | postcss: ^8.4
145 |
146 | '@csstools/postcss-hwb-function@3.0.18':
147 | resolution: {integrity: sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ==}
148 | engines: {node: ^14 || ^16 || >=18}
149 | peerDependencies:
150 | postcss: ^8.4
151 |
152 | '@csstools/postcss-ic-unit@3.0.7':
153 | resolution: {integrity: sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g==}
154 | engines: {node: ^14 || ^16 || >=18}
155 | peerDependencies:
156 | postcss: ^8.4
157 |
158 | '@csstools/postcss-initial@1.0.1':
159 | resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==}
160 | engines: {node: ^14 || ^16 || >=18}
161 | peerDependencies:
162 | postcss: ^8.4
163 |
164 | '@csstools/postcss-is-pseudo-class@4.0.8':
165 | resolution: {integrity: sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==}
166 | engines: {node: ^14 || ^16 || >=18}
167 | peerDependencies:
168 | postcss: ^8.4
169 |
170 | '@csstools/postcss-light-dark-function@1.0.8':
171 | resolution: {integrity: sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew==}
172 | engines: {node: ^14 || ^16 || >=18}
173 | peerDependencies:
174 | postcss: ^8.4
175 |
176 | '@csstools/postcss-logical-float-and-clear@2.0.1':
177 | resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==}
178 | engines: {node: ^14 || ^16 || >=18}
179 | peerDependencies:
180 | postcss: ^8.4
181 |
182 | '@csstools/postcss-logical-overflow@1.0.1':
183 | resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==}
184 | engines: {node: ^14 || ^16 || >=18}
185 | peerDependencies:
186 | postcss: ^8.4
187 |
188 | '@csstools/postcss-logical-overscroll-behavior@1.0.1':
189 | resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==}
190 | engines: {node: ^14 || ^16 || >=18}
191 | peerDependencies:
192 | postcss: ^8.4
193 |
194 | '@csstools/postcss-logical-resize@2.0.1':
195 | resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==}
196 | engines: {node: ^14 || ^16 || >=18}
197 | peerDependencies:
198 | postcss: ^8.4
199 |
200 | '@csstools/postcss-logical-viewport-units@2.0.11':
201 | resolution: {integrity: sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg==}
202 | engines: {node: ^14 || ^16 || >=18}
203 | peerDependencies:
204 | postcss: ^8.4
205 |
206 | '@csstools/postcss-media-minmax@1.1.8':
207 | resolution: {integrity: sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w==}
208 | engines: {node: ^14 || ^16 || >=18}
209 | peerDependencies:
210 | postcss: ^8.4
211 |
212 | '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.11':
213 | resolution: {integrity: sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA==}
214 | engines: {node: ^14 || ^16 || >=18}
215 | peerDependencies:
216 | postcss: ^8.4
217 |
218 | '@csstools/postcss-nested-calc@3.0.2':
219 | resolution: {integrity: sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==}
220 | engines: {node: ^14 || ^16 || >=18}
221 | peerDependencies:
222 | postcss: ^8.4
223 |
224 | '@csstools/postcss-normalize-display-values@3.0.2':
225 | resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==}
226 | engines: {node: ^14 || ^16 || >=18}
227 | peerDependencies:
228 | postcss: ^8.4
229 |
230 | '@csstools/postcss-oklab-function@3.0.19':
231 | resolution: {integrity: sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q==}
232 | engines: {node: ^14 || ^16 || >=18}
233 | peerDependencies:
234 | postcss: ^8.4
235 |
236 | '@csstools/postcss-progressive-custom-properties@3.3.0':
237 | resolution: {integrity: sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg==}
238 | engines: {node: ^14 || ^16 || >=18}
239 | peerDependencies:
240 | postcss: ^8.4
241 |
242 | '@csstools/postcss-relative-color-syntax@2.0.19':
243 | resolution: {integrity: sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA==}
244 | engines: {node: ^14 || ^16 || >=18}
245 | peerDependencies:
246 | postcss: ^8.4
247 |
248 | '@csstools/postcss-scope-pseudo-class@3.0.1':
249 | resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==}
250 | engines: {node: ^14 || ^16 || >=18}
251 | peerDependencies:
252 | postcss: ^8.4
253 |
254 | '@csstools/postcss-stepped-value-functions@3.0.10':
255 | resolution: {integrity: sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g==}
256 | engines: {node: ^14 || ^16 || >=18}
257 | peerDependencies:
258 | postcss: ^8.4
259 |
260 | '@csstools/postcss-text-decoration-shorthand@3.0.7':
261 | resolution: {integrity: sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==}
262 | engines: {node: ^14 || ^16 || >=18}
263 | peerDependencies:
264 | postcss: ^8.4
265 |
266 | '@csstools/postcss-trigonometric-functions@3.0.10':
267 | resolution: {integrity: sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw==}
268 | engines: {node: ^14 || ^16 || >=18}
269 | peerDependencies:
270 | postcss: ^8.4
271 |
272 | '@csstools/postcss-unset-value@3.0.1':
273 | resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==}
274 | engines: {node: ^14 || ^16 || >=18}
275 | peerDependencies:
276 | postcss: ^8.4
277 |
278 | '@csstools/selector-resolve-nested@1.1.0':
279 | resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==}
280 | engines: {node: ^14 || ^16 || >=18}
281 | peerDependencies:
282 | postcss-selector-parser: ^6.0.13
283 |
284 | '@csstools/selector-specificity@3.1.1':
285 | resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==}
286 | engines: {node: ^14 || ^16 || >=18}
287 | peerDependencies:
288 | postcss-selector-parser: ^6.0.13
289 |
290 | '@csstools/utilities@1.0.0':
291 | resolution: {integrity: sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==}
292 | engines: {node: ^14 || ^16 || >=18}
293 | peerDependencies:
294 | postcss: ^8.4
295 |
296 | '@esbuild/android-arm64@0.18.20':
297 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
298 | engines: {node: '>=12'}
299 | cpu: [arm64]
300 | os: [android]
301 |
302 | '@esbuild/android-arm@0.18.20':
303 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
304 | engines: {node: '>=12'}
305 | cpu: [arm]
306 | os: [android]
307 |
308 | '@esbuild/android-x64@0.18.20':
309 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
310 | engines: {node: '>=12'}
311 | cpu: [x64]
312 | os: [android]
313 |
314 | '@esbuild/darwin-arm64@0.18.20':
315 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
316 | engines: {node: '>=12'}
317 | cpu: [arm64]
318 | os: [darwin]
319 |
320 | '@esbuild/darwin-x64@0.18.20':
321 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
322 | engines: {node: '>=12'}
323 | cpu: [x64]
324 | os: [darwin]
325 |
326 | '@esbuild/freebsd-arm64@0.18.20':
327 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
328 | engines: {node: '>=12'}
329 | cpu: [arm64]
330 | os: [freebsd]
331 |
332 | '@esbuild/freebsd-x64@0.18.20':
333 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
334 | engines: {node: '>=12'}
335 | cpu: [x64]
336 | os: [freebsd]
337 |
338 | '@esbuild/linux-arm64@0.18.20':
339 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
340 | engines: {node: '>=12'}
341 | cpu: [arm64]
342 | os: [linux]
343 |
344 | '@esbuild/linux-arm@0.18.20':
345 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
346 | engines: {node: '>=12'}
347 | cpu: [arm]
348 | os: [linux]
349 |
350 | '@esbuild/linux-ia32@0.18.20':
351 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
352 | engines: {node: '>=12'}
353 | cpu: [ia32]
354 | os: [linux]
355 |
356 | '@esbuild/linux-loong64@0.18.20':
357 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
358 | engines: {node: '>=12'}
359 | cpu: [loong64]
360 | os: [linux]
361 |
362 | '@esbuild/linux-mips64el@0.18.20':
363 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
364 | engines: {node: '>=12'}
365 | cpu: [mips64el]
366 | os: [linux]
367 |
368 | '@esbuild/linux-ppc64@0.18.20':
369 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
370 | engines: {node: '>=12'}
371 | cpu: [ppc64]
372 | os: [linux]
373 |
374 | '@esbuild/linux-riscv64@0.18.20':
375 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
376 | engines: {node: '>=12'}
377 | cpu: [riscv64]
378 | os: [linux]
379 |
380 | '@esbuild/linux-s390x@0.18.20':
381 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
382 | engines: {node: '>=12'}
383 | cpu: [s390x]
384 | os: [linux]
385 |
386 | '@esbuild/linux-x64@0.18.20':
387 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
388 | engines: {node: '>=12'}
389 | cpu: [x64]
390 | os: [linux]
391 |
392 | '@esbuild/netbsd-x64@0.18.20':
393 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
394 | engines: {node: '>=12'}
395 | cpu: [x64]
396 | os: [netbsd]
397 |
398 | '@esbuild/openbsd-x64@0.18.20':
399 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
400 | engines: {node: '>=12'}
401 | cpu: [x64]
402 | os: [openbsd]
403 |
404 | '@esbuild/sunos-x64@0.18.20':
405 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
406 | engines: {node: '>=12'}
407 | cpu: [x64]
408 | os: [sunos]
409 |
410 | '@esbuild/win32-arm64@0.18.20':
411 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
412 | engines: {node: '>=12'}
413 | cpu: [arm64]
414 | os: [win32]
415 |
416 | '@esbuild/win32-ia32@0.18.20':
417 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
418 | engines: {node: '>=12'}
419 | cpu: [ia32]
420 | os: [win32]
421 |
422 | '@esbuild/win32-x64@0.18.20':
423 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
424 | engines: {node: '>=12'}
425 | cpu: [x64]
426 | os: [win32]
427 |
428 | '@jridgewell/sourcemap-codec@1.5.0':
429 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
430 |
431 | '@types/web-bluetooth@0.0.20':
432 | resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
433 |
434 | '@vitejs/plugin-vue@4.6.2':
435 | resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
436 | engines: {node: ^14.18.0 || >=16.0.0}
437 | peerDependencies:
438 | vite: ^4.0.0 || ^5.0.0
439 | vue: ^3.2.25
440 |
441 | '@vue/compiler-core@3.5.16':
442 | resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
443 |
444 | '@vue/compiler-dom@3.5.16':
445 | resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==}
446 |
447 | '@vue/compiler-sfc@3.5.16':
448 | resolution: {integrity: sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==}
449 |
450 | '@vue/compiler-ssr@3.5.16':
451 | resolution: {integrity: sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==}
452 |
453 | '@vue/devtools-api@6.6.4':
454 | resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
455 |
456 | '@vue/reactivity@3.5.16':
457 | resolution: {integrity: sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==}
458 |
459 | '@vue/runtime-core@3.5.16':
460 | resolution: {integrity: sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==}
461 |
462 | '@vue/runtime-dom@3.5.16':
463 | resolution: {integrity: sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==}
464 |
465 | '@vue/server-renderer@3.5.16':
466 | resolution: {integrity: sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==}
467 | peerDependencies:
468 | vue: 3.5.16
469 |
470 | '@vue/shared@3.5.16':
471 | resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
472 |
473 | '@vueuse/core@10.11.1':
474 | resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
475 |
476 | '@vueuse/metadata@10.11.1':
477 | resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
478 |
479 | '@vueuse/shared@10.11.1':
480 | resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
481 |
482 | '@vueuse/sound@2.1.3':
483 | resolution: {integrity: sha512-yZW1dzMJqCp57+ZM1tJ2oPye4RJvWhzkUpGvokB5fhk/jAmOwKGbdvm8O7dJ/YAmP+eLFCBQmELjso6sXSfnAg==}
484 | peerDependencies:
485 | '@vue/composition-api': ^1.0.0-rc.1
486 | vue: ^2.0.0 || >=3.0.0
487 | peerDependenciesMeta:
488 | '@vue/composition-api':
489 | optional: true
490 |
491 | autoprefixer@10.4.21:
492 | resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
493 | engines: {node: ^10 || ^12 || >=14}
494 | hasBin: true
495 | peerDependencies:
496 | postcss: ^8.1.0
497 |
498 | browserslist@4.25.0:
499 | resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
500 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
501 | hasBin: true
502 |
503 | caniuse-lite@1.0.30001720:
504 | resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==}
505 |
506 | css-blank-pseudo@6.0.2:
507 | resolution: {integrity: sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==}
508 | engines: {node: ^14 || ^16 || >=18}
509 | peerDependencies:
510 | postcss: ^8.4
511 |
512 | css-has-pseudo@6.0.5:
513 | resolution: {integrity: sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==}
514 | engines: {node: ^14 || ^16 || >=18}
515 | peerDependencies:
516 | postcss: ^8.4
517 |
518 | css-prefers-color-scheme@9.0.1:
519 | resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==}
520 | engines: {node: ^14 || ^16 || >=18}
521 | peerDependencies:
522 | postcss: ^8.4
523 |
524 | cssdb@8.3.0:
525 | resolution: {integrity: sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==}
526 |
527 | cssesc@3.0.0:
528 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
529 | engines: {node: '>=4'}
530 | hasBin: true
531 |
532 | csstype@3.1.3:
533 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
534 |
535 | electron-to-chromium@1.5.162:
536 | resolution: {integrity: sha512-hQA+Zb5QQwoSaXJWEAGEw1zhk//O7qDzib05Z4qTqZfNju/FAkrm5ZInp0JbTp4Z18A6bilopdZWEYrFSsfllA==}
537 |
538 | entities@4.5.0:
539 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
540 | engines: {node: '>=0.12'}
541 |
542 | esbuild@0.18.20:
543 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
544 | engines: {node: '>=12'}
545 | hasBin: true
546 |
547 | escalade@3.2.0:
548 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
549 | engines: {node: '>=6'}
550 |
551 | estree-walker@2.0.2:
552 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
553 |
554 | fraction.js@4.3.7:
555 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
556 |
557 | fsevents@2.3.3:
558 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
559 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
560 | os: [darwin]
561 |
562 | howler@2.2.4:
563 | resolution: {integrity: sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w==}
564 |
565 | magic-string@0.30.17:
566 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
567 |
568 | nanoid@3.3.11:
569 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
570 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
571 | hasBin: true
572 |
573 | node-releases@2.0.19:
574 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
575 |
576 | normalize-range@0.1.2:
577 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
578 | engines: {node: '>=0.10.0'}
579 |
580 | picocolors@1.1.1:
581 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
582 |
583 | pinia@2.3.1:
584 | resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
585 | peerDependencies:
586 | typescript: '>=4.4.4'
587 | vue: ^2.7.0 || ^3.5.11
588 | peerDependenciesMeta:
589 | typescript:
590 | optional: true
591 |
592 | postcss-attribute-case-insensitive@6.0.3:
593 | resolution: {integrity: sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==}
594 | engines: {node: ^14 || ^16 || >=18}
595 | peerDependencies:
596 | postcss: ^8.4
597 |
598 | postcss-clamp@4.1.0:
599 | resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
600 | engines: {node: '>=7.6.0'}
601 | peerDependencies:
602 | postcss: ^8.4.6
603 |
604 | postcss-color-functional-notation@6.0.14:
605 | resolution: {integrity: sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A==}
606 | engines: {node: ^14 || ^16 || >=18}
607 | peerDependencies:
608 | postcss: ^8.4
609 |
610 | postcss-color-hex-alpha@9.0.4:
611 | resolution: {integrity: sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==}
612 | engines: {node: ^14 || ^16 || >=18}
613 | peerDependencies:
614 | postcss: ^8.4
615 |
616 | postcss-color-rebeccapurple@9.0.3:
617 | resolution: {integrity: sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==}
618 | engines: {node: ^14 || ^16 || >=18}
619 | peerDependencies:
620 | postcss: ^8.4
621 |
622 | postcss-custom-media@10.0.8:
623 | resolution: {integrity: sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ==}
624 | engines: {node: ^14 || ^16 || >=18}
625 | peerDependencies:
626 | postcss: ^8.4
627 |
628 | postcss-custom-properties@13.3.12:
629 | resolution: {integrity: sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA==}
630 | engines: {node: ^14 || ^16 || >=18}
631 | peerDependencies:
632 | postcss: ^8.4
633 |
634 | postcss-custom-selectors@7.1.12:
635 | resolution: {integrity: sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g==}
636 | engines: {node: ^14 || ^16 || >=18}
637 | peerDependencies:
638 | postcss: ^8.4
639 |
640 | postcss-dir-pseudo-class@8.0.1:
641 | resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==}
642 | engines: {node: ^14 || ^16 || >=18}
643 | peerDependencies:
644 | postcss: ^8.4
645 |
646 | postcss-double-position-gradients@5.0.7:
647 | resolution: {integrity: sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg==}
648 | engines: {node: ^14 || ^16 || >=18}
649 | peerDependencies:
650 | postcss: ^8.4
651 |
652 | postcss-focus-visible@9.0.1:
653 | resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==}
654 | engines: {node: ^14 || ^16 || >=18}
655 | peerDependencies:
656 | postcss: ^8.4
657 |
658 | postcss-focus-within@8.0.1:
659 | resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==}
660 | engines: {node: ^14 || ^16 || >=18}
661 | peerDependencies:
662 | postcss: ^8.4
663 |
664 | postcss-font-variant@5.0.0:
665 | resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
666 | peerDependencies:
667 | postcss: ^8.1.0
668 |
669 | postcss-gap-properties@5.0.1:
670 | resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==}
671 | engines: {node: ^14 || ^16 || >=18}
672 | peerDependencies:
673 | postcss: ^8.4
674 |
675 | postcss-image-set-function@6.0.3:
676 | resolution: {integrity: sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==}
677 | engines: {node: ^14 || ^16 || >=18}
678 | peerDependencies:
679 | postcss: ^8.4
680 |
681 | postcss-lab-function@6.0.19:
682 | resolution: {integrity: sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g==}
683 | engines: {node: ^14 || ^16 || >=18}
684 | peerDependencies:
685 | postcss: ^8.4
686 |
687 | postcss-logical@7.0.1:
688 | resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==}
689 | engines: {node: ^14 || ^16 || >=18}
690 | peerDependencies:
691 | postcss: ^8.4
692 |
693 | postcss-nesting@12.1.5:
694 | resolution: {integrity: sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==}
695 | engines: {node: ^14 || ^16 || >=18}
696 | peerDependencies:
697 | postcss: ^8.4
698 |
699 | postcss-opacity-percentage@2.0.0:
700 | resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==}
701 | engines: {node: ^14 || ^16 || >=18}
702 | peerDependencies:
703 | postcss: ^8.2
704 |
705 | postcss-overflow-shorthand@5.0.1:
706 | resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==}
707 | engines: {node: ^14 || ^16 || >=18}
708 | peerDependencies:
709 | postcss: ^8.4
710 |
711 | postcss-page-break@3.0.4:
712 | resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
713 | peerDependencies:
714 | postcss: ^8
715 |
716 | postcss-place@9.0.1:
717 | resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==}
718 | engines: {node: ^14 || ^16 || >=18}
719 | peerDependencies:
720 | postcss: ^8.4
721 |
722 | postcss-preset-env@9.6.0:
723 | resolution: {integrity: sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA==}
724 | engines: {node: ^14 || ^16 || >=18}
725 | peerDependencies:
726 | postcss: ^8.4
727 |
728 | postcss-pseudo-class-any-link@9.0.2:
729 | resolution: {integrity: sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==}
730 | engines: {node: ^14 || ^16 || >=18}
731 | peerDependencies:
732 | postcss: ^8.4
733 |
734 | postcss-replace-overflow-wrap@4.0.0:
735 | resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
736 | peerDependencies:
737 | postcss: ^8.0.3
738 |
739 | postcss-selector-not@7.0.2:
740 | resolution: {integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==}
741 | engines: {node: ^14 || ^16 || >=18}
742 | peerDependencies:
743 | postcss: ^8.4
744 |
745 | postcss-selector-parser@6.1.2:
746 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
747 | engines: {node: '>=4'}
748 |
749 | postcss-value-parser@4.2.0:
750 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
751 |
752 | postcss@8.5.4:
753 | resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
754 | engines: {node: ^10 || ^12 || >=14}
755 |
756 | rollup@3.29.5:
757 | resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
758 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
759 | hasBin: true
760 |
761 | source-map-js@1.2.1:
762 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
763 | engines: {node: '>=0.10.0'}
764 |
765 | update-browserslist-db@1.1.3:
766 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
767 | hasBin: true
768 | peerDependencies:
769 | browserslist: '>= 4.21.0'
770 |
771 | util-deprecate@1.0.2:
772 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
773 |
774 | vite@4.5.14:
775 | resolution: {integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==}
776 | engines: {node: ^14.18.0 || >=16.0.0}
777 | hasBin: true
778 | peerDependencies:
779 | '@types/node': '>= 14'
780 | less: '*'
781 | lightningcss: ^1.21.0
782 | sass: '*'
783 | stylus: '*'
784 | sugarss: '*'
785 | terser: ^5.4.0
786 | peerDependenciesMeta:
787 | '@types/node':
788 | optional: true
789 | less:
790 | optional: true
791 | lightningcss:
792 | optional: true
793 | sass:
794 | optional: true
795 | stylus:
796 | optional: true
797 | sugarss:
798 | optional: true
799 | terser:
800 | optional: true
801 |
802 | vue-demi@0.14.10:
803 | resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
804 | engines: {node: '>=12'}
805 | hasBin: true
806 | peerDependencies:
807 | '@vue/composition-api': ^1.0.0-rc.1
808 | vue: ^3.0.0-0 || ^2.6.0
809 | peerDependenciesMeta:
810 | '@vue/composition-api':
811 | optional: true
812 |
813 | vue-router@4.5.1:
814 | resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==}
815 | peerDependencies:
816 | vue: ^3.2.0
817 |
818 | vue@3.5.16:
819 | resolution: {integrity: sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==}
820 | peerDependencies:
821 | typescript: '*'
822 | peerDependenciesMeta:
823 | typescript:
824 | optional: true
825 |
826 | snapshots:
827 |
828 | '@babel/helper-string-parser@7.27.1': {}
829 |
830 | '@babel/helper-validator-identifier@7.27.1': {}
831 |
832 | '@babel/parser@7.27.4':
833 | dependencies:
834 | '@babel/types': 7.27.3
835 |
836 | '@babel/types@7.27.3':
837 | dependencies:
838 | '@babel/helper-string-parser': 7.27.1
839 | '@babel/helper-validator-identifier': 7.27.1
840 |
841 | '@csstools/cascade-layer-name-parser@1.0.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)':
842 | dependencies:
843 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
844 | '@csstools/css-tokenizer': 2.4.1
845 |
846 | '@csstools/color-helpers@4.2.1': {}
847 |
848 | '@csstools/css-calc@1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)':
849 | dependencies:
850 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
851 | '@csstools/css-tokenizer': 2.4.1
852 |
853 | '@csstools/css-color-parser@2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)':
854 | dependencies:
855 | '@csstools/color-helpers': 4.2.1
856 | '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
857 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
858 | '@csstools/css-tokenizer': 2.4.1
859 |
860 | '@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1)':
861 | dependencies:
862 | '@csstools/css-tokenizer': 2.4.1
863 |
864 | '@csstools/css-tokenizer@2.4.1': {}
865 |
866 | '@csstools/media-query-list-parser@2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)':
867 | dependencies:
868 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
869 | '@csstools/css-tokenizer': 2.4.1
870 |
871 | '@csstools/postcss-cascade-layers@4.0.6(postcss@8.5.4)':
872 | dependencies:
873 | '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
874 | postcss: 8.5.4
875 | postcss-selector-parser: 6.1.2
876 |
877 | '@csstools/postcss-color-function@3.0.19(postcss@8.5.4)':
878 | dependencies:
879 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
880 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
881 | '@csstools/css-tokenizer': 2.4.1
882 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
883 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
884 | postcss: 8.5.4
885 |
886 | '@csstools/postcss-color-mix-function@2.0.19(postcss@8.5.4)':
887 | dependencies:
888 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
889 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
890 | '@csstools/css-tokenizer': 2.4.1
891 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
892 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
893 | postcss: 8.5.4
894 |
895 | '@csstools/postcss-content-alt-text@1.0.0(postcss@8.5.4)':
896 | dependencies:
897 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
898 | '@csstools/css-tokenizer': 2.4.1
899 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
900 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
901 | postcss: 8.5.4
902 |
903 | '@csstools/postcss-exponential-functions@1.0.9(postcss@8.5.4)':
904 | dependencies:
905 | '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
906 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
907 | '@csstools/css-tokenizer': 2.4.1
908 | postcss: 8.5.4
909 |
910 | '@csstools/postcss-font-format-keywords@3.0.2(postcss@8.5.4)':
911 | dependencies:
912 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
913 | postcss: 8.5.4
914 | postcss-value-parser: 4.2.0
915 |
916 | '@csstools/postcss-gamut-mapping@1.0.11(postcss@8.5.4)':
917 | dependencies:
918 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
919 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
920 | '@csstools/css-tokenizer': 2.4.1
921 | postcss: 8.5.4
922 |
923 | '@csstools/postcss-gradients-interpolation-method@4.0.20(postcss@8.5.4)':
924 | dependencies:
925 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
926 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
927 | '@csstools/css-tokenizer': 2.4.1
928 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
929 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
930 | postcss: 8.5.4
931 |
932 | '@csstools/postcss-hwb-function@3.0.18(postcss@8.5.4)':
933 | dependencies:
934 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
935 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
936 | '@csstools/css-tokenizer': 2.4.1
937 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
938 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
939 | postcss: 8.5.4
940 |
941 | '@csstools/postcss-ic-unit@3.0.7(postcss@8.5.4)':
942 | dependencies:
943 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
944 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
945 | postcss: 8.5.4
946 | postcss-value-parser: 4.2.0
947 |
948 | '@csstools/postcss-initial@1.0.1(postcss@8.5.4)':
949 | dependencies:
950 | postcss: 8.5.4
951 |
952 | '@csstools/postcss-is-pseudo-class@4.0.8(postcss@8.5.4)':
953 | dependencies:
954 | '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
955 | postcss: 8.5.4
956 | postcss-selector-parser: 6.1.2
957 |
958 | '@csstools/postcss-light-dark-function@1.0.8(postcss@8.5.4)':
959 | dependencies:
960 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
961 | '@csstools/css-tokenizer': 2.4.1
962 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
963 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
964 | postcss: 8.5.4
965 |
966 | '@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.5.4)':
967 | dependencies:
968 | postcss: 8.5.4
969 |
970 | '@csstools/postcss-logical-overflow@1.0.1(postcss@8.5.4)':
971 | dependencies:
972 | postcss: 8.5.4
973 |
974 | '@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.5.4)':
975 | dependencies:
976 | postcss: 8.5.4
977 |
978 | '@csstools/postcss-logical-resize@2.0.1(postcss@8.5.4)':
979 | dependencies:
980 | postcss: 8.5.4
981 | postcss-value-parser: 4.2.0
982 |
983 | '@csstools/postcss-logical-viewport-units@2.0.11(postcss@8.5.4)':
984 | dependencies:
985 | '@csstools/css-tokenizer': 2.4.1
986 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
987 | postcss: 8.5.4
988 |
989 | '@csstools/postcss-media-minmax@1.1.8(postcss@8.5.4)':
990 | dependencies:
991 | '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
992 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
993 | '@csstools/css-tokenizer': 2.4.1
994 | '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
995 | postcss: 8.5.4
996 |
997 | '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.11(postcss@8.5.4)':
998 | dependencies:
999 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1000 | '@csstools/css-tokenizer': 2.4.1
1001 | '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1002 | postcss: 8.5.4
1003 |
1004 | '@csstools/postcss-nested-calc@3.0.2(postcss@8.5.4)':
1005 | dependencies:
1006 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1007 | postcss: 8.5.4
1008 | postcss-value-parser: 4.2.0
1009 |
1010 | '@csstools/postcss-normalize-display-values@3.0.2(postcss@8.5.4)':
1011 | dependencies:
1012 | postcss: 8.5.4
1013 | postcss-value-parser: 4.2.0
1014 |
1015 | '@csstools/postcss-oklab-function@3.0.19(postcss@8.5.4)':
1016 | dependencies:
1017 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1018 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1019 | '@csstools/css-tokenizer': 2.4.1
1020 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1021 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1022 | postcss: 8.5.4
1023 |
1024 | '@csstools/postcss-progressive-custom-properties@3.3.0(postcss@8.5.4)':
1025 | dependencies:
1026 | postcss: 8.5.4
1027 | postcss-value-parser: 4.2.0
1028 |
1029 | '@csstools/postcss-relative-color-syntax@2.0.19(postcss@8.5.4)':
1030 | dependencies:
1031 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1032 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1033 | '@csstools/css-tokenizer': 2.4.1
1034 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1035 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1036 | postcss: 8.5.4
1037 |
1038 | '@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.5.4)':
1039 | dependencies:
1040 | postcss: 8.5.4
1041 | postcss-selector-parser: 6.1.2
1042 |
1043 | '@csstools/postcss-stepped-value-functions@3.0.10(postcss@8.5.4)':
1044 | dependencies:
1045 | '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1046 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1047 | '@csstools/css-tokenizer': 2.4.1
1048 | postcss: 8.5.4
1049 |
1050 | '@csstools/postcss-text-decoration-shorthand@3.0.7(postcss@8.5.4)':
1051 | dependencies:
1052 | '@csstools/color-helpers': 4.2.1
1053 | postcss: 8.5.4
1054 | postcss-value-parser: 4.2.0
1055 |
1056 | '@csstools/postcss-trigonometric-functions@3.0.10(postcss@8.5.4)':
1057 | dependencies:
1058 | '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1059 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1060 | '@csstools/css-tokenizer': 2.4.1
1061 | postcss: 8.5.4
1062 |
1063 | '@csstools/postcss-unset-value@3.0.1(postcss@8.5.4)':
1064 | dependencies:
1065 | postcss: 8.5.4
1066 |
1067 | '@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.1.2)':
1068 | dependencies:
1069 | postcss-selector-parser: 6.1.2
1070 |
1071 | '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.2)':
1072 | dependencies:
1073 | postcss-selector-parser: 6.1.2
1074 |
1075 | '@csstools/utilities@1.0.0(postcss@8.5.4)':
1076 | dependencies:
1077 | postcss: 8.5.4
1078 |
1079 | '@esbuild/android-arm64@0.18.20':
1080 | optional: true
1081 |
1082 | '@esbuild/android-arm@0.18.20':
1083 | optional: true
1084 |
1085 | '@esbuild/android-x64@0.18.20':
1086 | optional: true
1087 |
1088 | '@esbuild/darwin-arm64@0.18.20':
1089 | optional: true
1090 |
1091 | '@esbuild/darwin-x64@0.18.20':
1092 | optional: true
1093 |
1094 | '@esbuild/freebsd-arm64@0.18.20':
1095 | optional: true
1096 |
1097 | '@esbuild/freebsd-x64@0.18.20':
1098 | optional: true
1099 |
1100 | '@esbuild/linux-arm64@0.18.20':
1101 | optional: true
1102 |
1103 | '@esbuild/linux-arm@0.18.20':
1104 | optional: true
1105 |
1106 | '@esbuild/linux-ia32@0.18.20':
1107 | optional: true
1108 |
1109 | '@esbuild/linux-loong64@0.18.20':
1110 | optional: true
1111 |
1112 | '@esbuild/linux-mips64el@0.18.20':
1113 | optional: true
1114 |
1115 | '@esbuild/linux-ppc64@0.18.20':
1116 | optional: true
1117 |
1118 | '@esbuild/linux-riscv64@0.18.20':
1119 | optional: true
1120 |
1121 | '@esbuild/linux-s390x@0.18.20':
1122 | optional: true
1123 |
1124 | '@esbuild/linux-x64@0.18.20':
1125 | optional: true
1126 |
1127 | '@esbuild/netbsd-x64@0.18.20':
1128 | optional: true
1129 |
1130 | '@esbuild/openbsd-x64@0.18.20':
1131 | optional: true
1132 |
1133 | '@esbuild/sunos-x64@0.18.20':
1134 | optional: true
1135 |
1136 | '@esbuild/win32-arm64@0.18.20':
1137 | optional: true
1138 |
1139 | '@esbuild/win32-ia32@0.18.20':
1140 | optional: true
1141 |
1142 | '@esbuild/win32-x64@0.18.20':
1143 | optional: true
1144 |
1145 | '@jridgewell/sourcemap-codec@1.5.0': {}
1146 |
1147 | '@types/web-bluetooth@0.0.20': {}
1148 |
1149 | '@vitejs/plugin-vue@4.6.2(vite@4.5.14)(vue@3.5.16)':
1150 | dependencies:
1151 | vite: 4.5.14
1152 | vue: 3.5.16
1153 |
1154 | '@vue/compiler-core@3.5.16':
1155 | dependencies:
1156 | '@babel/parser': 7.27.4
1157 | '@vue/shared': 3.5.16
1158 | entities: 4.5.0
1159 | estree-walker: 2.0.2
1160 | source-map-js: 1.2.1
1161 |
1162 | '@vue/compiler-dom@3.5.16':
1163 | dependencies:
1164 | '@vue/compiler-core': 3.5.16
1165 | '@vue/shared': 3.5.16
1166 |
1167 | '@vue/compiler-sfc@3.5.16':
1168 | dependencies:
1169 | '@babel/parser': 7.27.4
1170 | '@vue/compiler-core': 3.5.16
1171 | '@vue/compiler-dom': 3.5.16
1172 | '@vue/compiler-ssr': 3.5.16
1173 | '@vue/shared': 3.5.16
1174 | estree-walker: 2.0.2
1175 | magic-string: 0.30.17
1176 | postcss: 8.5.4
1177 | source-map-js: 1.2.1
1178 |
1179 | '@vue/compiler-ssr@3.5.16':
1180 | dependencies:
1181 | '@vue/compiler-dom': 3.5.16
1182 | '@vue/shared': 3.5.16
1183 |
1184 | '@vue/devtools-api@6.6.4': {}
1185 |
1186 | '@vue/reactivity@3.5.16':
1187 | dependencies:
1188 | '@vue/shared': 3.5.16
1189 |
1190 | '@vue/runtime-core@3.5.16':
1191 | dependencies:
1192 | '@vue/reactivity': 3.5.16
1193 | '@vue/shared': 3.5.16
1194 |
1195 | '@vue/runtime-dom@3.5.16':
1196 | dependencies:
1197 | '@vue/reactivity': 3.5.16
1198 | '@vue/runtime-core': 3.5.16
1199 | '@vue/shared': 3.5.16
1200 | csstype: 3.1.3
1201 |
1202 | '@vue/server-renderer@3.5.16(vue@3.5.16)':
1203 | dependencies:
1204 | '@vue/compiler-ssr': 3.5.16
1205 | '@vue/shared': 3.5.16
1206 | vue: 3.5.16
1207 |
1208 | '@vue/shared@3.5.16': {}
1209 |
1210 | '@vueuse/core@10.11.1(vue@3.5.16)':
1211 | dependencies:
1212 | '@types/web-bluetooth': 0.0.20
1213 | '@vueuse/metadata': 10.11.1
1214 | '@vueuse/shared': 10.11.1(vue@3.5.16)
1215 | vue-demi: 0.14.10(vue@3.5.16)
1216 | transitivePeerDependencies:
1217 | - '@vue/composition-api'
1218 | - vue
1219 |
1220 | '@vueuse/metadata@10.11.1': {}
1221 |
1222 | '@vueuse/shared@10.11.1(vue@3.5.16)':
1223 | dependencies:
1224 | vue-demi: 0.14.10(vue@3.5.16)
1225 | transitivePeerDependencies:
1226 | - '@vue/composition-api'
1227 | - vue
1228 |
1229 | '@vueuse/sound@2.1.3(vue@3.5.16)':
1230 | dependencies:
1231 | howler: 2.2.4
1232 | vue: 3.5.16
1233 | vue-demi: 0.14.10(vue@3.5.16)
1234 |
1235 | autoprefixer@10.4.21(postcss@8.5.4):
1236 | dependencies:
1237 | browserslist: 4.25.0
1238 | caniuse-lite: 1.0.30001720
1239 | fraction.js: 4.3.7
1240 | normalize-range: 0.1.2
1241 | picocolors: 1.1.1
1242 | postcss: 8.5.4
1243 | postcss-value-parser: 4.2.0
1244 |
1245 | browserslist@4.25.0:
1246 | dependencies:
1247 | caniuse-lite: 1.0.30001720
1248 | electron-to-chromium: 1.5.162
1249 | node-releases: 2.0.19
1250 | update-browserslist-db: 1.1.3(browserslist@4.25.0)
1251 |
1252 | caniuse-lite@1.0.30001720: {}
1253 |
1254 | css-blank-pseudo@6.0.2(postcss@8.5.4):
1255 | dependencies:
1256 | postcss: 8.5.4
1257 | postcss-selector-parser: 6.1.2
1258 |
1259 | css-has-pseudo@6.0.5(postcss@8.5.4):
1260 | dependencies:
1261 | '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
1262 | postcss: 8.5.4
1263 | postcss-selector-parser: 6.1.2
1264 | postcss-value-parser: 4.2.0
1265 |
1266 | css-prefers-color-scheme@9.0.1(postcss@8.5.4):
1267 | dependencies:
1268 | postcss: 8.5.4
1269 |
1270 | cssdb@8.3.0: {}
1271 |
1272 | cssesc@3.0.0: {}
1273 |
1274 | csstype@3.1.3: {}
1275 |
1276 | electron-to-chromium@1.5.162: {}
1277 |
1278 | entities@4.5.0: {}
1279 |
1280 | esbuild@0.18.20:
1281 | optionalDependencies:
1282 | '@esbuild/android-arm': 0.18.20
1283 | '@esbuild/android-arm64': 0.18.20
1284 | '@esbuild/android-x64': 0.18.20
1285 | '@esbuild/darwin-arm64': 0.18.20
1286 | '@esbuild/darwin-x64': 0.18.20
1287 | '@esbuild/freebsd-arm64': 0.18.20
1288 | '@esbuild/freebsd-x64': 0.18.20
1289 | '@esbuild/linux-arm': 0.18.20
1290 | '@esbuild/linux-arm64': 0.18.20
1291 | '@esbuild/linux-ia32': 0.18.20
1292 | '@esbuild/linux-loong64': 0.18.20
1293 | '@esbuild/linux-mips64el': 0.18.20
1294 | '@esbuild/linux-ppc64': 0.18.20
1295 | '@esbuild/linux-riscv64': 0.18.20
1296 | '@esbuild/linux-s390x': 0.18.20
1297 | '@esbuild/linux-x64': 0.18.20
1298 | '@esbuild/netbsd-x64': 0.18.20
1299 | '@esbuild/openbsd-x64': 0.18.20
1300 | '@esbuild/sunos-x64': 0.18.20
1301 | '@esbuild/win32-arm64': 0.18.20
1302 | '@esbuild/win32-ia32': 0.18.20
1303 | '@esbuild/win32-x64': 0.18.20
1304 |
1305 | escalade@3.2.0: {}
1306 |
1307 | estree-walker@2.0.2: {}
1308 |
1309 | fraction.js@4.3.7: {}
1310 |
1311 | fsevents@2.3.3:
1312 | optional: true
1313 |
1314 | howler@2.2.4: {}
1315 |
1316 | magic-string@0.30.17:
1317 | dependencies:
1318 | '@jridgewell/sourcemap-codec': 1.5.0
1319 |
1320 | nanoid@3.3.11: {}
1321 |
1322 | node-releases@2.0.19: {}
1323 |
1324 | normalize-range@0.1.2: {}
1325 |
1326 | picocolors@1.1.1: {}
1327 |
1328 | pinia@2.3.1(vue@3.5.16):
1329 | dependencies:
1330 | '@vue/devtools-api': 6.6.4
1331 | vue: 3.5.16
1332 | vue-demi: 0.14.10(vue@3.5.16)
1333 | transitivePeerDependencies:
1334 | - '@vue/composition-api'
1335 |
1336 | postcss-attribute-case-insensitive@6.0.3(postcss@8.5.4):
1337 | dependencies:
1338 | postcss: 8.5.4
1339 | postcss-selector-parser: 6.1.2
1340 |
1341 | postcss-clamp@4.1.0(postcss@8.5.4):
1342 | dependencies:
1343 | postcss: 8.5.4
1344 | postcss-value-parser: 4.2.0
1345 |
1346 | postcss-color-functional-notation@6.0.14(postcss@8.5.4):
1347 | dependencies:
1348 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1349 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1350 | '@csstools/css-tokenizer': 2.4.1
1351 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1352 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1353 | postcss: 8.5.4
1354 |
1355 | postcss-color-hex-alpha@9.0.4(postcss@8.5.4):
1356 | dependencies:
1357 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1358 | postcss: 8.5.4
1359 | postcss-value-parser: 4.2.0
1360 |
1361 | postcss-color-rebeccapurple@9.0.3(postcss@8.5.4):
1362 | dependencies:
1363 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1364 | postcss: 8.5.4
1365 | postcss-value-parser: 4.2.0
1366 |
1367 | postcss-custom-media@10.0.8(postcss@8.5.4):
1368 | dependencies:
1369 | '@csstools/cascade-layer-name-parser': 1.0.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1370 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1371 | '@csstools/css-tokenizer': 2.4.1
1372 | '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1373 | postcss: 8.5.4
1374 |
1375 | postcss-custom-properties@13.3.12(postcss@8.5.4):
1376 | dependencies:
1377 | '@csstools/cascade-layer-name-parser': 1.0.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1378 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1379 | '@csstools/css-tokenizer': 2.4.1
1380 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1381 | postcss: 8.5.4
1382 | postcss-value-parser: 4.2.0
1383 |
1384 | postcss-custom-selectors@7.1.12(postcss@8.5.4):
1385 | dependencies:
1386 | '@csstools/cascade-layer-name-parser': 1.0.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1387 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1388 | '@csstools/css-tokenizer': 2.4.1
1389 | postcss: 8.5.4
1390 | postcss-selector-parser: 6.1.2
1391 |
1392 | postcss-dir-pseudo-class@8.0.1(postcss@8.5.4):
1393 | dependencies:
1394 | postcss: 8.5.4
1395 | postcss-selector-parser: 6.1.2
1396 |
1397 | postcss-double-position-gradients@5.0.7(postcss@8.5.4):
1398 | dependencies:
1399 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1400 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1401 | postcss: 8.5.4
1402 | postcss-value-parser: 4.2.0
1403 |
1404 | postcss-focus-visible@9.0.1(postcss@8.5.4):
1405 | dependencies:
1406 | postcss: 8.5.4
1407 | postcss-selector-parser: 6.1.2
1408 |
1409 | postcss-focus-within@8.0.1(postcss@8.5.4):
1410 | dependencies:
1411 | postcss: 8.5.4
1412 | postcss-selector-parser: 6.1.2
1413 |
1414 | postcss-font-variant@5.0.0(postcss@8.5.4):
1415 | dependencies:
1416 | postcss: 8.5.4
1417 |
1418 | postcss-gap-properties@5.0.1(postcss@8.5.4):
1419 | dependencies:
1420 | postcss: 8.5.4
1421 |
1422 | postcss-image-set-function@6.0.3(postcss@8.5.4):
1423 | dependencies:
1424 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1425 | postcss: 8.5.4
1426 | postcss-value-parser: 4.2.0
1427 |
1428 | postcss-lab-function@6.0.19(postcss@8.5.4):
1429 | dependencies:
1430 | '@csstools/css-color-parser': 2.0.5(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)
1431 | '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1)
1432 | '@csstools/css-tokenizer': 2.4.1
1433 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1434 | '@csstools/utilities': 1.0.0(postcss@8.5.4)
1435 | postcss: 8.5.4
1436 |
1437 | postcss-logical@7.0.1(postcss@8.5.4):
1438 | dependencies:
1439 | postcss: 8.5.4
1440 | postcss-value-parser: 4.2.0
1441 |
1442 | postcss-nesting@12.1.5(postcss@8.5.4):
1443 | dependencies:
1444 | '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.1.2)
1445 | '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
1446 | postcss: 8.5.4
1447 | postcss-selector-parser: 6.1.2
1448 |
1449 | postcss-opacity-percentage@2.0.0(postcss@8.5.4):
1450 | dependencies:
1451 | postcss: 8.5.4
1452 |
1453 | postcss-overflow-shorthand@5.0.1(postcss@8.5.4):
1454 | dependencies:
1455 | postcss: 8.5.4
1456 | postcss-value-parser: 4.2.0
1457 |
1458 | postcss-page-break@3.0.4(postcss@8.5.4):
1459 | dependencies:
1460 | postcss: 8.5.4
1461 |
1462 | postcss-place@9.0.1(postcss@8.5.4):
1463 | dependencies:
1464 | postcss: 8.5.4
1465 | postcss-value-parser: 4.2.0
1466 |
1467 | postcss-preset-env@9.6.0(postcss@8.5.4):
1468 | dependencies:
1469 | '@csstools/postcss-cascade-layers': 4.0.6(postcss@8.5.4)
1470 | '@csstools/postcss-color-function': 3.0.19(postcss@8.5.4)
1471 | '@csstools/postcss-color-mix-function': 2.0.19(postcss@8.5.4)
1472 | '@csstools/postcss-content-alt-text': 1.0.0(postcss@8.5.4)
1473 | '@csstools/postcss-exponential-functions': 1.0.9(postcss@8.5.4)
1474 | '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.5.4)
1475 | '@csstools/postcss-gamut-mapping': 1.0.11(postcss@8.5.4)
1476 | '@csstools/postcss-gradients-interpolation-method': 4.0.20(postcss@8.5.4)
1477 | '@csstools/postcss-hwb-function': 3.0.18(postcss@8.5.4)
1478 | '@csstools/postcss-ic-unit': 3.0.7(postcss@8.5.4)
1479 | '@csstools/postcss-initial': 1.0.1(postcss@8.5.4)
1480 | '@csstools/postcss-is-pseudo-class': 4.0.8(postcss@8.5.4)
1481 | '@csstools/postcss-light-dark-function': 1.0.8(postcss@8.5.4)
1482 | '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.5.4)
1483 | '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.5.4)
1484 | '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.5.4)
1485 | '@csstools/postcss-logical-resize': 2.0.1(postcss@8.5.4)
1486 | '@csstools/postcss-logical-viewport-units': 2.0.11(postcss@8.5.4)
1487 | '@csstools/postcss-media-minmax': 1.1.8(postcss@8.5.4)
1488 | '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.11(postcss@8.5.4)
1489 | '@csstools/postcss-nested-calc': 3.0.2(postcss@8.5.4)
1490 | '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.5.4)
1491 | '@csstools/postcss-oklab-function': 3.0.19(postcss@8.5.4)
1492 | '@csstools/postcss-progressive-custom-properties': 3.3.0(postcss@8.5.4)
1493 | '@csstools/postcss-relative-color-syntax': 2.0.19(postcss@8.5.4)
1494 | '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.5.4)
1495 | '@csstools/postcss-stepped-value-functions': 3.0.10(postcss@8.5.4)
1496 | '@csstools/postcss-text-decoration-shorthand': 3.0.7(postcss@8.5.4)
1497 | '@csstools/postcss-trigonometric-functions': 3.0.10(postcss@8.5.4)
1498 | '@csstools/postcss-unset-value': 3.0.1(postcss@8.5.4)
1499 | autoprefixer: 10.4.21(postcss@8.5.4)
1500 | browserslist: 4.25.0
1501 | css-blank-pseudo: 6.0.2(postcss@8.5.4)
1502 | css-has-pseudo: 6.0.5(postcss@8.5.4)
1503 | css-prefers-color-scheme: 9.0.1(postcss@8.5.4)
1504 | cssdb: 8.3.0
1505 | postcss: 8.5.4
1506 | postcss-attribute-case-insensitive: 6.0.3(postcss@8.5.4)
1507 | postcss-clamp: 4.1.0(postcss@8.5.4)
1508 | postcss-color-functional-notation: 6.0.14(postcss@8.5.4)
1509 | postcss-color-hex-alpha: 9.0.4(postcss@8.5.4)
1510 | postcss-color-rebeccapurple: 9.0.3(postcss@8.5.4)
1511 | postcss-custom-media: 10.0.8(postcss@8.5.4)
1512 | postcss-custom-properties: 13.3.12(postcss@8.5.4)
1513 | postcss-custom-selectors: 7.1.12(postcss@8.5.4)
1514 | postcss-dir-pseudo-class: 8.0.1(postcss@8.5.4)
1515 | postcss-double-position-gradients: 5.0.7(postcss@8.5.4)
1516 | postcss-focus-visible: 9.0.1(postcss@8.5.4)
1517 | postcss-focus-within: 8.0.1(postcss@8.5.4)
1518 | postcss-font-variant: 5.0.0(postcss@8.5.4)
1519 | postcss-gap-properties: 5.0.1(postcss@8.5.4)
1520 | postcss-image-set-function: 6.0.3(postcss@8.5.4)
1521 | postcss-lab-function: 6.0.19(postcss@8.5.4)
1522 | postcss-logical: 7.0.1(postcss@8.5.4)
1523 | postcss-nesting: 12.1.5(postcss@8.5.4)
1524 | postcss-opacity-percentage: 2.0.0(postcss@8.5.4)
1525 | postcss-overflow-shorthand: 5.0.1(postcss@8.5.4)
1526 | postcss-page-break: 3.0.4(postcss@8.5.4)
1527 | postcss-place: 9.0.1(postcss@8.5.4)
1528 | postcss-pseudo-class-any-link: 9.0.2(postcss@8.5.4)
1529 | postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.4)
1530 | postcss-selector-not: 7.0.2(postcss@8.5.4)
1531 |
1532 | postcss-pseudo-class-any-link@9.0.2(postcss@8.5.4):
1533 | dependencies:
1534 | postcss: 8.5.4
1535 | postcss-selector-parser: 6.1.2
1536 |
1537 | postcss-replace-overflow-wrap@4.0.0(postcss@8.5.4):
1538 | dependencies:
1539 | postcss: 8.5.4
1540 |
1541 | postcss-selector-not@7.0.2(postcss@8.5.4):
1542 | dependencies:
1543 | postcss: 8.5.4
1544 | postcss-selector-parser: 6.1.2
1545 |
1546 | postcss-selector-parser@6.1.2:
1547 | dependencies:
1548 | cssesc: 3.0.0
1549 | util-deprecate: 1.0.2
1550 |
1551 | postcss-value-parser@4.2.0: {}
1552 |
1553 | postcss@8.5.4:
1554 | dependencies:
1555 | nanoid: 3.3.11
1556 | picocolors: 1.1.1
1557 | source-map-js: 1.2.1
1558 |
1559 | rollup@3.29.5:
1560 | optionalDependencies:
1561 | fsevents: 2.3.3
1562 |
1563 | source-map-js@1.2.1: {}
1564 |
1565 | update-browserslist-db@1.1.3(browserslist@4.25.0):
1566 | dependencies:
1567 | browserslist: 4.25.0
1568 | escalade: 3.2.0
1569 | picocolors: 1.1.1
1570 |
1571 | util-deprecate@1.0.2: {}
1572 |
1573 | vite@4.5.14:
1574 | dependencies:
1575 | esbuild: 0.18.20
1576 | postcss: 8.5.4
1577 | rollup: 3.29.5
1578 | optionalDependencies:
1579 | fsevents: 2.3.3
1580 |
1581 | vue-demi@0.14.10(vue@3.5.16):
1582 | dependencies:
1583 | vue: 3.5.16
1584 |
1585 | vue-router@4.5.1(vue@3.5.16):
1586 | dependencies:
1587 | '@vue/devtools-api': 6.6.4
1588 | vue: 3.5.16
1589 |
1590 | vue@3.5.16:
1591 | dependencies:
1592 | '@vue/compiler-dom': 3.5.16
1593 | '@vue/compiler-sfc': 3.5.16
1594 | '@vue/runtime-dom': 3.5.16
1595 | '@vue/server-renderer': 3.5.16(vue@3.5.16)
1596 | '@vue/shared': 3.5.16
1597 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
15 |
--------------------------------------------------------------------------------
/src/assets/24/img/bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/bg.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/1.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/2.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/3.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/4.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/4.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/5.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/6.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/7.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/8.webp
--------------------------------------------------------------------------------
/src/assets/24/img/blow/9.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/blow/9.webp
--------------------------------------------------------------------------------
/src/assets/24/img/bullet.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/bullet.webp
--------------------------------------------------------------------------------
/src/assets/24/img/ebullet.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/ebullet.webp
--------------------------------------------------------------------------------
/src/assets/24/img/eplane.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/eplane.webp
--------------------------------------------------------------------------------
/src/assets/24/img/plane.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/img/plane.webp
--------------------------------------------------------------------------------
/src/assets/24/sounds/bgm.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/bgm.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/bullet.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/bullet.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/end.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/end.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/enemy_down.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/enemy_down.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/enemy_hit.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/enemy_hit.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/lv_up.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/lv_up.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/player_skill_0.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/player_skill_0.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/player_skill_1.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/player_skill_1.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/player_skill_2.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/player_skill_2.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/player_skill_3.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/player_skill_3.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/player_treat.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/player_treat.mp3
--------------------------------------------------------------------------------
/src/assets/24/sounds/start.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/24/sounds/start.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/img/bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/bg.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/1.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/2.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/3.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/4.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/4.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/5.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/6.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/7.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/8.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/blow/9.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/blow/9.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/bullet.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/bullet.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/ebullet.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/ebullet.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/eplane.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/eplane.webp
--------------------------------------------------------------------------------
/src/assets/aniki/img/plane.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/img/plane.webp
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/bgm.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/bgm.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/bullet.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/bullet.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/end.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/end.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/enemy_down.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/enemy_down.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/enemy_hit.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/enemy_hit.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/lv_up.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/lv_up.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/player_skill_0.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/player_skill_0.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/player_skill_1.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/player_skill_1.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/player_skill_2.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/player_skill_2.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/player_skill_3.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/player_skill_3.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/player_treat.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/player_treat.mp3
--------------------------------------------------------------------------------
/src/assets/aniki/sounds/start.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/aniki/sounds/start.mp3
--------------------------------------------------------------------------------
/src/assets/bg_welcome.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blyrin/plane-war-vue/c0eca9bfa941751d17186178d1e67867be8375fc/src/assets/bg_welcome.webp
--------------------------------------------------------------------------------
/src/components/MainCanvas.vue:
--------------------------------------------------------------------------------
1 |
45 |
46 |
47 |
48 |
49 |
50 |
53 |
--------------------------------------------------------------------------------
/src/game/assets.js:
--------------------------------------------------------------------------------
1 | class AssetsMod {
2 | constructor(name, info) {
3 | this.name = name
4 | this.info = info
5 | this.#loadBitmapSrc()
6 | this.#loadAudioSrc()
7 | }
8 |
9 | #loadBitmapSrc() {
10 | const bg = new URL(`../assets/${this.name}/img/bg.webp`, import.meta.url).href
11 | const bitmaps = [
12 | new URL(`../assets/${this.name}/img/plane.webp`, import.meta.url),
13 | new URL(`../assets/${this.name}/img/bullet.webp`, import.meta.url),
14 | new URL(`../assets/${this.name}/img/eplane.webp`, import.meta.url),
15 | new URL(`../assets/${this.name}/img/ebullet.webp`, import.meta.url),
16 | ].map((url) => url.href)
17 | const blowBitmaps = Array.from(
18 | { length: 9 },
19 | (v, i) => new URL(`../assets/${this.name}/img/blow/${i + 1}.webp`, import.meta.url),
20 | ).map((url) => url.href)
21 | this.bitmapSrc = { bg, bitmaps, blowBitmaps }
22 | }
23 |
24 | #loadAudioSrc() {
25 | this.audioSrc = {
26 | bgm: new URL(`../assets/${this.name}/sounds/bgm.mp3`, import.meta.url).href,
27 | bullet: new URL(`../assets/${this.name}/sounds/bullet.mp3`, import.meta.url).href,
28 | end: new URL(`../assets/${this.name}/sounds/end.mp3`, import.meta.url).href,
29 | enemyHit: new URL(`../assets/${this.name}/sounds/enemy_hit.mp3`, import.meta.url).href,
30 | enemyDown: new URL(`../assets/${this.name}/sounds/enemy_down.mp3`, import.meta.url).href,
31 | playerSkill0: new URL(`../assets/${this.name}/sounds/player_skill_0.mp3`, import.meta.url).href,
32 | playerSkill1: new URL(`../assets/${this.name}/sounds/player_skill_1.mp3`, import.meta.url).href,
33 | playerSkill2: new URL(`../assets/${this.name}/sounds/player_skill_2.mp3`, import.meta.url).href,
34 | playerSkill3: new URL(`../assets/${this.name}/sounds/player_skill_3.mp3`, import.meta.url).href,
35 | playerTreat: new URL(`../assets/${this.name}/sounds/player_treat.mp3`, import.meta.url).href,
36 | lvUp: new URL(`../assets/${this.name}/sounds/lv_up.mp3`, import.meta.url).href,
37 | start: new URL(`../assets/${this.name}/sounds/start.mp3`, import.meta.url).href,
38 | }
39 | }
40 |
41 | }
42 |
43 | export default [
44 | new AssetsMod('aniki', '哲学♂'),
45 | new AssetsMod('24', '24号(仅BGM)'),
46 | ]
47 |
--------------------------------------------------------------------------------
/src/game/circle-points.js:
--------------------------------------------------------------------------------
1 | export default [
2 | [
3 | {
4 | x: -1.9177021544168118,
5 | y: 3.510330247561491,
6 | },
7 | {
8 | x: -0.7390914279064467,
9 | y: 3.9311250121555803,
10 | },
11 | {
12 | x: 0.5118667171201802,
13 | y: 3.9671138708013673,
14 | },
15 | {
16 | x: 1.7127197814899575,
17 | y: 3.614773983265481,
18 | },
19 | {
20 | x: 2.745919900427091,
21 | y: 2.9085948326362807,
22 | },
23 | {
24 | x: 3.5103302475614906,
25 | y: 1.9177021544168125,
26 | },
27 | {
28 | x: 3.93112501215558,
29 | y: 0.7390914279064471,
30 | },
31 | {
32 | x: 3.967113870801368,
33 | y: -0.51186671712018,
34 | },
35 | {
36 | x: 3.6147739832654815,
37 | y: -1.7127197814899568,
38 | },
39 | {
40 | x: 2.908594832636281,
41 | y: -2.745919900427091,
42 | },
43 | {
44 | x: 1.9177021544168122,
45 | y: -3.5103302475614906,
46 | },
47 | {
48 | x: 0.7390914279064471,
49 | y: -3.93112501215558,
50 | },
51 | {
52 | x: -0.5118667171201797,
53 | y: -3.967113870801368,
54 | },
55 | {
56 | x: -1.712719781489957,
57 | y: -3.6147739832654815,
58 | },
59 | {
60 | x: -2.7459199004270904,
61 | y: -2.908594832636281,
62 | },
63 | {
64 | x: -3.5103302475614906,
65 | y: -1.9177021544168125,
66 | },
67 | {
68 | x: -3.93112501215558,
69 | y: -0.7390914279064482,
70 | },
71 | {
72 | x: -3.967113870801368,
73 | y: 0.5118667171201786,
74 | },
75 | {
76 | x: -3.614773983265482,
77 | y: 1.712719781489956,
78 | },
79 | {
80 | x: -2.908594832636282,
81 | y: 2.74591990042709,
82 | },
83 | {
84 | x: -1.9177021544168134,
85 | y: 3.51033024756149,
86 | },
87 | ],
88 | [
89 | {
90 | x: -3.365883939231586,
91 | y: 2.161209223472559,
92 | },
93 | {
94 | x: -2.533295475046496,
95 | y: 3.095547453377019,
96 | },
97 | {
98 | x: -1.4527303992564078,
99 | y: 3.726871930597605,
100 | },
101 | {
102 | x: -0.22996195021923735,
103 | y: 3.993384216607684,
104 | },
105 | {
106 | x: 1.015316776744513,
107 | y: 3.8689962319523046,
108 | },
109 | {
110 | x: 2.161209223472559,
111 | y: 3.365883939231586,
112 | },
113 | {
114 | x: 3.095547453377019,
115 | y: 2.533295475046496,
116 | },
117 | {
118 | x: 3.726871930597605,
119 | y: 1.452730399256408,
120 | },
121 | {
122 | x: 3.9933842166076836,
123 | y: 0.22996195021923801,
124 | },
125 | {
126 | x: 3.868996231952305,
127 | y: -1.0153167767445128,
128 | },
129 | {
130 | x: 3.365883939231586,
131 | y: -2.1612092234725586,
132 | },
133 | {
134 | x: 2.5332954750464967,
135 | y: -3.0955474533770184,
136 | },
137 | {
138 | x: 1.4527303992564082,
139 | y: -3.726871930597605,
140 | },
141 | {
142 | x: 0.22996195021923782,
143 | y: -3.993384216607684,
144 | },
145 | {
146 | x: -1.0153167767445126,
147 | y: -3.868996231952305,
148 | },
149 | {
150 | x: -2.1612092234725586,
151 | y: -3.3658839392315865,
152 | },
153 | {
154 | x: -3.095547453377018,
155 | y: -2.5332954750464975,
156 | },
157 | {
158 | x: -3.7268719305976044,
159 | y: -1.4527303992564093,
160 | },
161 | {
162 | x: -3.9933842166076836,
163 | y: -0.22996195021923888,
164 | },
165 | {
166 | x: -3.868996231952305,
167 | y: 1.0153167767445115,
168 | },
169 | {
170 | x: -3.365883939231587,
171 | y: 2.1612092234725577,
172 | },
173 | ],
174 | [
175 | {
176 | x: -3.989979946416218,
177 | y: 0.2829488066708119,
178 | },
179 | {
180 | x: -3.707260438126739,
181 | y: 1.5020719170200665,
182 | },
183 | {
184 | x: -3.061648448151105,
185 | y: 2.574161762580963,
186 | },
187 | {
188 | x: -2.116340976311367,
189 | y: 3.3942747195808196,
190 | },
191 | {
192 | x: -0.9638713042956403,
193 | y: 3.882132417725524,
194 | },
195 | {
196 | x: 0.2829488066708116,
197 | y: 3.989979946416218,
198 | },
199 | {
200 | x: 1.5020719170200663,
201 | y: 3.707260438126739,
202 | },
203 | {
204 | x: 2.574161762580963,
205 | y: 3.061648448151105,
206 | },
207 | {
208 | x: 3.394274719580819,
209 | y: 2.1163409763113674,
210 | },
211 | {
212 | x: 3.882132417725524,
213 | y: 0.9638713042956405,
214 | },
215 | {
216 | x: 3.989979946416218,
217 | y: -0.2829488066708114,
218 | },
219 | {
220 | x: 3.7072604381267396,
221 | y: -1.502071917020066,
222 | },
223 | {
224 | x: 3.061648448151105,
225 | y: -2.574161762580963,
226 | },
227 | {
228 | x: 2.116340976311367,
229 | y: -3.394274719580819,
230 | },
231 | {
232 | x: 0.9638713042956408,
233 | y: -3.882132417725524,
234 | },
235 | {
236 | x: -0.2829488066708111,
237 | y: -3.989979946416218,
238 | },
239 | {
240 | x: -1.5020719170200667,
241 | y: -3.707260438126739,
242 | },
243 | {
244 | x: -2.5741617625809634,
245 | y: -3.0616484481511046,
246 | },
247 | {
248 | x: -3.3942747195808187,
249 | y: -2.116340976311368,
250 | },
251 | {
252 | x: -3.8821324177255234,
253 | y: -0.9638713042956418,
254 | },
255 | {
256 | x: -3.989979946416218,
257 | y: 0.2829488066708101,
258 | },
259 | ],
260 | [
261 | {
262 | x: -3.637189707302727,
263 | y: -1.6645873461885694,
264 | },
265 | {
266 | x: -3.9735587507256827,
267 | y: -0.45916321121291215,
268 | },
269 | {
270 | x: -3.9209681782158534,
271 | y: 0.7912070180544732,
272 | },
273 | {
274 | x: -3.4845659214305664,
275 | y: 1.9641283917312402,
276 | },
277 | {
278 | x: -2.7070700738572793,
279 | y: 2.9447871935381587,
280 | },
281 | {
282 | x: -1.6645873461885696,
283 | y: 3.637189707302727,
284 | },
285 | {
286 | x: -0.45916321121291237,
287 | y: 3.9735587507256827,
288 | },
289 | {
290 | x: 0.791207018054473,
291 | y: 3.9209681782158534,
292 | },
293 | {
294 | x: 1.96412839173124,
295 | y: 3.4845659214305664,
296 | },
297 | {
298 | x: 2.9447871935381587,
299 | y: 2.7070700738572793,
300 | },
301 | {
302 | x: 3.637189707302727,
303 | y: 1.6645873461885698,
304 | },
305 | {
306 | x: 3.9735587507256827,
307 | y: 0.45916321121291265,
308 | },
309 | {
310 | x: 3.9209681782158534,
311 | y: -0.7912070180544728,
312 | },
313 | {
314 | x: 3.4845659214305664,
315 | y: -1.9641283917312398,
316 | },
317 | {
318 | x: 2.7070700738572793,
319 | y: -2.9447871935381587,
320 | },
321 | {
322 | x: 1.66458734618857,
323 | y: -3.6371897073027264,
324 | },
325 | {
326 | x: 0.4591632112129119,
327 | y: -3.9735587507256827,
328 | },
329 | {
330 | x: -0.7912070180544735,
331 | y: -3.9209681782158534,
332 | },
333 | {
334 | x: -1.9641283917312404,
335 | y: -3.4845659214305664,
336 | },
337 | {
338 | x: -2.9447871935381578,
339 | y: -2.70707007385728,
340 | },
341 | {
342 | x: -3.637189707302726,
343 | y: -1.664587346188571,
344 | },
345 | ],
346 | [
347 | {
348 | x: -2.393888576415826,
349 | y: -3.204574462187735,
350 | },
351 | {
352 | x: -3.2669912984407676,
353 | y: -2.307979171464142,
354 | },
355 | {
356 | x: -3.8202981497074875,
357 | y: -1.1854627988011892,
358 | },
359 | {
360 | x: -3.9996476004984807,
361 | y: 0.053094932213419155,
362 | },
363 | {
364 | x: -3.787483676969223,
365 | y: 1.2864553613288325,
366 | },
367 | {
368 | x: -3.204574462187735,
369 | y: 2.393888576415826,
370 | },
371 | {
372 | x: -2.3079791714641424,
373 | y: 3.266991298440767,
374 | },
375 | {
376 | x: -1.1854627988011894,
377 | y: 3.8202981497074875,
378 | },
379 | {
380 | x: 0.053094932213418905,
381 | y: 3.9996476004984807,
382 | },
383 | {
384 | x: 1.2864553613288323,
385 | y: 3.787483676969223,
386 | },
387 | {
388 | x: 2.3938885764158258,
389 | y: 3.204574462187735,
390 | },
391 | {
392 | x: 3.266991298440767,
393 | y: 2.3079791714641424,
394 | },
395 | {
396 | x: 3.820298149707487,
397 | y: 1.1854627988011897,
398 | },
399 | {
400 | x: 3.9996476004984807,
401 | y: -0.05309493221341866,
402 | },
403 | {
404 | x: 3.787483676969223,
405 | y: -1.286455361328832,
406 | },
407 | {
408 | x: 3.2045744621877352,
409 | y: -2.3938885764158258,
410 | },
411 | {
412 | x: 2.307979171464142,
413 | y: -3.2669912984407676,
414 | },
415 | {
416 | x: 1.1854627988011888,
417 | y: -3.8202981497074875,
418 | },
419 | {
420 | x: -0.0530949322134194,
421 | y: -3.9996476004984807,
422 | },
423 | {
424 | x: -1.2864553613288328,
425 | y: -3.7874836769692224,
426 | },
427 | {
428 | x: -2.393888576415826,
429 | y: -3.204574462187735,
430 | },
431 | ],
432 | ]
433 |
--------------------------------------------------------------------------------
/src/game/type.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @class
3 | * @classdesc 游戏元素类
4 | */
5 | export class GameObject {
6 | /**
7 | * @class
8 | * @classdesc 游戏元素类
9 | * @param {CanvasImageSource} img 图片
10 | * @param {number} x 横坐标
11 | * @param {number} y 纵坐标
12 | * @param {number} w 像素宽度
13 | * @param {number} h 像素高度
14 | * @param {number} blood 血量
15 | * @param {number} damage 伤害
16 | */
17 | constructor(img, x, y, w, h, blood, damage) {
18 | this.img = img
19 | this.x = x
20 | this.y = y
21 | this.w = w
22 | this.h = h
23 | this.blood = blood || 1
24 | this.damage = damage || 1
25 | }
26 |
27 | /**
28 | * @property 是否存活
29 | * @return {boolean}
30 | */
31 | get isAlive() {
32 | return this.blood > 0
33 | }
34 |
35 | /**
36 | * @function 碰撞血量计算
37 | * @param {GameObject} other 另一个需要碰撞的游戏元素
38 | */
39 | collide(other) {
40 | other.blood -= this.damage
41 | this.blood -= other.damage
42 | }
43 | }
44 |
45 | /**
46 | * @class
47 | * @extends {GameObject}
48 | * @classdesc 自移动游戏元素类
49 | */
50 | export class MovableGameObject extends GameObject {
51 | /**
52 | * @class
53 | * @extends {GameObject}
54 | * @classdesc 自移动游戏元素类
55 | * @param {ImageBitmap} img 图片
56 | * @param {number} x 横坐标
57 | * @param {number} y 纵坐标
58 | * @param {number} w 像素宽度
59 | * @param {number} h 像素高度
60 | * @param {number} speedX 横坐标移动像素
61 | * @param {number} speedY 纵坐标移动像素
62 | * @param {number} blood 血量
63 | * @param {number} damage 伤害
64 | */
65 | constructor(img, x, y, w, h, speedX, speedY, blood, damage) {
66 | super(img, x, y, w, h, blood, damage)
67 | this.speedX = speedX
68 | this.speedY = speedY
69 | }
70 |
71 | /**
72 | * @function 移动元素
73 | * @param {number} limitX 横坐标限制
74 | * @param {number} limitY 纵坐标限制
75 | * @return {boolean} 是否移动成功
76 | */
77 | move(limitX, limitY) {
78 | const newX = this.x + this.speedX
79 | const newY = this.y + this.speedY
80 | if (
81 | newY < -this.h ||
82 | newX < -this.w ||
83 | newX > limitX + this.w ||
84 | newY > limitY + this.h
85 | ) {
86 | return false
87 | }
88 | this.x = newX
89 | this.y = newY
90 | return true
91 | }
92 | }
93 |
94 | /**
95 | * @class
96 | * @classdesc 动画对象, 用于渲染gif
97 | */
98 | export class AnimeGameObject {
99 | /**
100 | * @class
101 | * @classdesc 动画对象, 用于渲染gif
102 | * @param {CanvasImageSource[]} imgs 图片数组
103 | * @param {number} x 横坐标
104 | * @param {number} y 纵坐标
105 | * @param {number} w 像素宽度
106 | * @param {number} h 像素高度
107 | */
108 | constructor(imgs, x, y, w, h) {
109 | this.imgs = imgs
110 | this.x = x
111 | this.y = y
112 | this.w = w
113 | this.h = h
114 | this.index = 0
115 | }
116 |
117 | /**
118 | * @property 是否画完
119 | * @return {boolean}
120 | */
121 | get drawOver() {
122 | return this.index >= this.imgs.length
123 | }
124 |
125 | /**
126 | * @property 获取一张图片
127 | * @return {CanvasImageSource}
128 | */
129 | get img() {
130 | return this.imgs[Math.min(this.index++, this.imgs.length - 1)]
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/src/game/utils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 判断坐标是否在目标范围内
3 | */
4 | export const isColliding = (x, y, target) =>
5 | x > target.x && x < target.x + target.w &&
6 | y > target.y && y < target.y + target.h
7 |
8 | /**
9 | * 计算两点距离
10 | */
11 | export const distanceBetweenPoints = (x1, y1, x2, y2) =>
12 | Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))
13 |
--------------------------------------------------------------------------------
/src/hooks/useGameAudio.js:
--------------------------------------------------------------------------------
1 | import { useSound } from '@vueuse/sound'
2 | import assets from '@/game/assets'
3 | import { useLocalStorage } from '@vueuse/core'
4 |
5 | export default function () {
6 | const currentAssetsMod = useLocalStorage('assets-mod', { index: 0 })
7 | const audioSrc = assets[currentAssetsMod.value.index].audioSrc
8 | const bgm = new Audio(audioSrc.bgm)
9 | bgm.volume = 0.6
10 | bgm.loop = true
11 | const start = new Audio(audioSrc.start)
12 | start.loop = false
13 | const sounds = {}
14 | for (const key in audioSrc) {
15 | const options = { volume: 0.5 }
16 | sounds[key] = useSound(audioSrc[key], options).play
17 | }
18 |
19 | return {
20 | ...sounds,
21 | bgm: () => bgm.play(),
22 | start: () => start.play(),
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | html, body, #app {
8 | color-scheme: light only;
9 | width: 100%;
10 | height: 100%;
11 | overflow: hidden;
12 | overscroll-behavior: contain;
13 | }
14 |
15 | body {
16 | background: url(./assets/bg_welcome.webp) no-repeat center;
17 | background-size: cover;
18 | }
19 |
20 | #app {
21 | backdrop-filter: blur(1em);
22 | }
23 |
24 | .page-enter-active,
25 | .page-leave-active {
26 | transition: all 0.3s;
27 | }
28 |
29 | .page-enter-from,
30 | .page-leave-to {
31 | opacity: 0;
32 | filter: blur(1em);
33 | }
34 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import './main.css'
2 |
3 | import { createApp } from 'vue'
4 | import App from './App.vue'
5 | import { createPinia } from 'pinia'
6 | import router from './router'
7 |
8 | createApp(App)
9 | .use(createPinia())
10 | .use(router)
11 | .mount('#app')
12 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import { createMemoryHistory, createRouter } from 'vue-router'
2 | import { useLogStore } from '@/stores/log-store'
3 |
4 | const routeOptions = {
5 | history: createMemoryHistory(import.meta.env.BASE_URL),
6 | routes: [
7 | {
8 | path: '/',
9 | name: 'welcome',
10 | component: () => import('../views/welcome.vue'),
11 | },
12 | {
13 | path: '/play',
14 | name: 'play',
15 | component: () => import('../views/play.vue'),
16 | },
17 | {
18 | path: '/end',
19 | name: 'end',
20 | component: () => import('../views/end.vue'),
21 | },
22 | ],
23 | }
24 |
25 | const index = createRouter(routeOptions)
26 |
27 | index.beforeEach((to) => {
28 | if (to.name !== 'welcome') {
29 | const logStore = useLogStore()
30 | if (!logStore.loaded) {
31 | return {name: 'welcome'}
32 | }
33 | }
34 | return true
35 | })
36 |
37 | export default index
38 |
--------------------------------------------------------------------------------
/src/stores/bitmap-store.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { ref } from 'vue'
3 | import assets from '@/game/assets'
4 | import { useLocalStorage } from '@vueuse/core'
5 |
6 | export const useBitmapStore = defineStore('bitmap', () => {
7 | const currentAssetsMod = useLocalStorage('assets-mod', { index: 0 })
8 |
9 | let loaded = false
10 |
11 | const bg = ref(null)
12 |
13 | /** @const 图片源(0为玩家, 1为玩家子弹, 2为敌机, 3为敌机子弹) */
14 | const bitmaps = ref([])
15 |
16 | /** @const 爆炸图片源 */
17 | const blowBitmaps = ref([])
18 |
19 | /**
20 | * 从url加载bitmap
21 | */
22 | const loadBitmapFromUrl = async (url) => {
23 | const resp = await fetch(url)
24 | const blob = await resp.blob()
25 | return await createImageBitmap(blob)
26 | }
27 |
28 | /**
29 | * @function 加载图片
30 | * */
31 | const loadBitmaps = async () => {
32 | if (loaded) return
33 | const bitmapSrc = assets[currentAssetsMod.value.index].bitmapSrc
34 | bg.value = bitmapSrc.bg
35 | bitmaps.value = await Promise.all(bitmapSrc.bitmaps.map((src) => loadBitmapFromUrl(src)))
36 | blowBitmaps.value = await Promise.all(bitmapSrc.blowBitmaps.map((src) => loadBitmapFromUrl(src)))
37 | loaded = true
38 | }
39 |
40 | return { bg, bitmaps, blowBitmaps, loadBitmaps, currentAssetsMod }
41 | })
42 |
--------------------------------------------------------------------------------
/src/stores/log-store.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { computed, ref } from 'vue'
3 |
4 | export const useLogStore = defineStore('log', () => {
5 | const loaded = ref(false)
6 | const score = ref(0)
7 | // 全局日志
8 | const logger = {
9 | info(msg) {
10 | console.info(msg)
11 | this.history.push({code: 0, msg})
12 | },
13 | err(msg) {
14 | console.error(msg)
15 | this.history.push({code: 1, msg})
16 | },
17 | history: [],
18 | }
19 | const log = computed(() => {
20 | if (logger.history.length === 0) return ''
21 | const latestLog = logger.history[logger.history.length - 1]
22 | const title = latestLog.code === 0 ? '信息' : '错误'
23 | return `${title}:${latestLog.msg}`
24 | })
25 |
26 | return {loaded, score, logger, log}
27 | })
28 |
--------------------------------------------------------------------------------
/src/views/end.vue:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
游戏结束
15 |
分数:{{ logStore.score }}
16 |
加载中...
17 |
重新开始
18 |
项目 Github 地址
19 |
20 |
21 |
22 |
53 |
--------------------------------------------------------------------------------
/src/views/play.vue:
--------------------------------------------------------------------------------
1 |
513 |
514 |
515 |
519 |
520 |
521 |
522 |
524 | {{ playerSkillLogo(i) }}
525 |
526 |
527 |
528 | ♥ {{ player.blood }}/{{ playerMaxBlood }} ⚔ {{ logStore.score }}
529 |
533 |
534 |
535 |
536 |
537 |
538 |
640 |
--------------------------------------------------------------------------------
/src/views/welcome.vue:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 |
28 |
飞机大战
29 |
by blyrin
30 |
{{ logStore.log }}
31 |
加载中...
32 |
33 | 进入游戏
34 |
35 | 音效和图标包:
36 |
37 | {{ info }}
38 |
39 |
40 |
41 |
42 | 电脑玩家:鼠标单击画面后操控飞机,再次单击解除控制
43 | 手机玩家:直接拖动飞机操控
44 | Q 散射:发射几圈环形子弹清除周围的敌人(狂暴效果:增强发射速度)
45 | W 治疗:持续治疗一段时间(狂暴效果:提高治疗量)
46 | E 狂暴:提高子弹伤害和范围,开启狂暴后开启其他技能有所加强
47 | R 时停,暂停时间,期间免疫伤害(狂暴效果:清除所有敌机子弹)
48 |
49 |
项目 Github 地址
50 |
51 |
52 |
53 |
95 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from 'node:url'
2 |
3 | import { defineConfig } from 'vite'
4 | import vue from '@vitejs/plugin-vue'
5 | import postcssPresetEnv from 'postcss-preset-env'
6 |
7 | // https://vitejs.dev/config/
8 | export default defineConfig({
9 | build: {
10 | cssCodeSplit: false,
11 | },
12 | plugins: [
13 | vue(),
14 | ],
15 | css: {
16 | postcss: {
17 | plugins: [
18 | postcssPresetEnv({
19 | browsers: ['Chrome >= 87', 'Firefox >= 78', 'Safari >= 14', 'Edge >= 88'],
20 | features: {
21 | 'nesting-rules': true,
22 | },
23 | }),
24 | ],
25 | },
26 | },
27 | resolve: {
28 | alias: {
29 | '@': fileURLToPath(new URL('./src', import.meta.url)),
30 | },
31 | },
32 | })
33 |
--------------------------------------------------------------------------------