A photo manager for VRChat.

Compare changes

Choose any two refs to compare.

Changed files
+11356 -5928
public
src
src-tauri
+2 -1
.gitignore
··· 1 node_modules 2 - dist
··· 1 node_modules 2 + dist 3 + builds/
+657 -17
LICENSE
··· 1 - MIT License 2 3 - Copyright (c) 2024 Phaze 4 5 - Permission is hereby granted, free of charge, to any person obtaining a copy 6 - of this software and associated documentation files (the "Software"), to deal 7 - in the Software without restriction, including without limitation the rights 8 - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 - copies of the Software, and to permit persons to whom the Software is 10 - furnished to do so, subject to the following conditions: 11 12 - The above copyright notice and this permission notice shall be included in all 13 - copies or substantial portions of the Software. 14 15 - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 - SOFTWARE.
··· 1 + GNU AFFERO GENERAL PUBLIC LICENSE 2 + Version 3, 19 November 2007 3 + 4 + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> 5 + Everyone is permitted to copy and distribute verbatim copies 6 + of this license document, but changing it is not allowed. 7 + 8 + Preamble 9 + 10 + The GNU Affero General Public License is a free, copyleft license for 11 + software and other kinds of works, specifically designed to ensure 12 + cooperation with the community in the case of network server software. 13 + 14 + The licenses for most software and other practical works are designed 15 + to take away your freedom to share and change the works. By contrast, 16 + our General Public Licenses are intended to guarantee your freedom to 17 + share and change all versions of a program--to make sure it remains free 18 + software for all its users. 19 + 20 + When we speak of free software, we are referring to freedom, not 21 + price. Our General Public Licenses are designed to make sure that you 22 + have the freedom to distribute copies of free software (and charge for 23 + them if you wish), that you receive source code or can get it if you 24 + want it, that you can change the software or use pieces of it in new 25 + free programs, and that you know you can do these things. 26 + 27 + Developers that use our General Public Licenses protect your rights 28 + with two steps: (1) assert copyright on the software, and (2) offer 29 + you this License which gives you legal permission to copy, distribute 30 + and/or modify the software. 31 + 32 + A secondary benefit of defending all users' freedom is that 33 + improvements made in alternate versions of the program, if they 34 + receive widespread use, become available for other developers to 35 + incorporate. Many developers of free software are heartened and 36 + encouraged by the resulting cooperation. However, in the case of 37 + software used on network servers, this result may fail to come about. 38 + The GNU General Public License permits making a modified version and 39 + letting the public access it on a server without ever releasing its 40 + source code to the public. 41 + 42 + The GNU Affero General Public License is designed specifically to 43 + ensure that, in such cases, the modified source code becomes available 44 + to the community. It requires the operator of a network server to 45 + provide the source code of the modified version running there to the 46 + users of that server. Therefore, public use of a modified version, on 47 + a publicly accessible server, gives the public access to the source 48 + code of the modified version. 49 + 50 + An older license, called the Affero General Public License and 51 + published by Affero, was designed to accomplish similar goals. This is 52 + a different license, not a version of the Affero GPL, but Affero has 53 + released a new version of the Affero GPL which permits relicensing under 54 + this license. 55 + 56 + The precise terms and conditions for copying, distribution and 57 + modification follow. 58 + 59 + TERMS AND CONDITIONS 60 + 61 + 0. Definitions. 62 + 63 + "This License" refers to version 3 of the GNU Affero General Public License. 64 + 65 + "Copyright" also means copyright-like laws that apply to other kinds of 66 + works, such as semiconductor masks. 67 + 68 + "The Program" refers to any copyrightable work licensed under this 69 + License. Each licensee is addressed as "you". "Licensees" and 70 + "recipients" may be individuals or organizations. 71 + 72 + To "modify" a work means to copy from or adapt all or part of the work 73 + in a fashion requiring copyright permission, other than the making of an 74 + exact copy. The resulting work is called a "modified version" of the 75 + earlier work or a work "based on" the earlier work. 76 + 77 + A "covered work" means either the unmodified Program or a work based 78 + on the Program. 79 + 80 + To "propagate" a work means to do anything with it that, without 81 + permission, would make you directly or secondarily liable for 82 + infringement under applicable copyright law, except executing it on a 83 + computer or modifying a private copy. Propagation includes copying, 84 + distribution (with or without modification), making available to the 85 + public, and in some countries other activities as well. 86 + 87 + To "convey" a work means any kind of propagation that enables other 88 + parties to make or receive copies. Mere interaction with a user through 89 + a computer network, with no transfer of a copy, is not conveying. 90 + 91 + An interactive user interface displays "Appropriate Legal Notices" 92 + to the extent that it includes a convenient and prominently visible 93 + feature that (1) displays an appropriate copyright notice, and (2) 94 + tells the user that there is no warranty for the work (except to the 95 + extent that warranties are provided), that licensees may convey the 96 + work under this License, and how to view a copy of this License. If 97 + the interface presents a list of user commands or options, such as a 98 + menu, a prominent item in the list meets this criterion. 99 + 100 + 1. Source Code. 101 + 102 + The "source code" for a work means the preferred form of the work 103 + for making modifications to it. "Object code" means any non-source 104 + form of a work. 105 + 106 + A "Standard Interface" means an interface that either is an official 107 + standard defined by a recognized standards body, or, in the case of 108 + interfaces specified for a particular programming language, one that 109 + is widely used among developers working in that language. 110 + 111 + The "System Libraries" of an executable work include anything, other 112 + than the work as a whole, that (a) is included in the normal form of 113 + packaging a Major Component, but which is not part of that Major 114 + Component, and (b) serves only to enable use of the work with that 115 + Major Component, or to implement a Standard Interface for which an 116 + implementation is available to the public in source code form. A 117 + "Major Component", in this context, means a major essential component 118 + (kernel, window system, and so on) of the specific operating system 119 + (if any) on which the executable work runs, or a compiler used to 120 + produce the work, or an object code interpreter used to run it. 121 + 122 + The "Corresponding Source" for a work in object code form means all 123 + the source code needed to generate, install, and (for an executable 124 + work) run the object code and to modify the work, including scripts to 125 + control those activities. However, it does not include the work's 126 + System Libraries, or general-purpose tools or generally available free 127 + programs which are used unmodified in performing those activities but 128 + which are not part of the work. For example, Corresponding Source 129 + includes interface definition files associated with source files for 130 + the work, and the source code for shared libraries and dynamically 131 + linked subprograms that the work is specifically designed to require, 132 + such as by intimate data communication or control flow between those 133 + subprograms and other parts of the work. 134 + 135 + The Corresponding Source need not include anything that users 136 + can regenerate automatically from other parts of the Corresponding 137 + Source. 138 + 139 + The Corresponding Source for a work in source code form is that 140 + same work. 141 + 142 + 2. Basic Permissions. 143 + 144 + All rights granted under this License are granted for the term of 145 + copyright on the Program, and are irrevocable provided the stated 146 + conditions are met. This License explicitly affirms your unlimited 147 + permission to run the unmodified Program. The output from running a 148 + covered work is covered by this License only if the output, given its 149 + content, constitutes a covered work. This License acknowledges your 150 + rights of fair use or other equivalent, as provided by copyright law. 151 + 152 + You may make, run and propagate covered works that you do not 153 + convey, without conditions so long as your license otherwise remains 154 + in force. You may convey covered works to others for the sole purpose 155 + of having them make modifications exclusively for you, or provide you 156 + with facilities for running those works, provided that you comply with 157 + the terms of this License in conveying all material for which you do 158 + not control copyright. Those thus making or running the covered works 159 + for you must do so exclusively on your behalf, under your direction 160 + and control, on terms that prohibit them from making any copies of 161 + your copyrighted material outside their relationship with you. 162 + 163 + Conveying under any other circumstances is permitted solely under 164 + the conditions stated below. Sublicensing is not allowed; section 10 165 + makes it unnecessary. 166 + 167 + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 + 169 + No covered work shall be deemed part of an effective technological 170 + measure under any applicable law fulfilling obligations under article 171 + 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 + similar laws prohibiting or restricting circumvention of such 173 + measures. 174 175 + When you convey a covered work, you waive any legal power to forbid 176 + circumvention of technological measures to the extent such circumvention 177 + is effected by exercising rights under this License with respect to 178 + the covered work, and you disclaim any intention to limit operation or 179 + modification of the work as a means of enforcing, against the work's 180 + users, your or third parties' legal rights to forbid circumvention of 181 + technological measures. 182 183 + 4. Conveying Verbatim Copies. 184 185 + You may convey verbatim copies of the Program's source code as you 186 + receive it, in any medium, provided that you conspicuously and 187 + appropriately publish on each copy an appropriate copyright notice; 188 + keep intact all notices stating that this License and any 189 + non-permissive terms added in accord with section 7 apply to the code; 190 + keep intact all notices of the absence of any warranty; and give all 191 + recipients a copy of this License along with the Program. 192 + 193 + You may charge any price or no price for each copy that you convey, 194 + and you may offer support or warranty protection for a fee. 195 + 196 + 5. Conveying Modified Source Versions. 197 198 + You may convey a work based on the Program, or the modifications to 199 + produce it from the Program, in the form of source code under the 200 + terms of section 4, provided that you also meet all of these conditions: 201 + 202 + a) The work must carry prominent notices stating that you modified 203 + it, and giving a relevant date. 204 + 205 + b) The work must carry prominent notices stating that it is 206 + released under this License and any conditions added under section 207 + 7. This requirement modifies the requirement in section 4 to 208 + "keep intact all notices". 209 + 210 + c) You must license the entire work, as a whole, under this 211 + License to anyone who comes into possession of a copy. This 212 + License will therefore apply, along with any applicable section 7 213 + additional terms, to the whole of the work, and all its parts, 214 + regardless of how they are packaged. This License gives no 215 + permission to license the work in any other way, but it does not 216 + invalidate such permission if you have separately received it. 217 + 218 + d) If the work has interactive user interfaces, each must display 219 + Appropriate Legal Notices; however, if the Program has interactive 220 + interfaces that do not display Appropriate Legal Notices, your 221 + work need not make them do so. 222 + 223 + A compilation of a covered work with other separate and independent 224 + works, which are not by their nature extensions of the covered work, 225 + and which are not combined with it such as to form a larger program, 226 + in or on a volume of a storage or distribution medium, is called an 227 + "aggregate" if the compilation and its resulting copyright are not 228 + used to limit the access or legal rights of the compilation's users 229 + beyond what the individual works permit. Inclusion of a covered work 230 + in an aggregate does not cause this License to apply to the other 231 + parts of the aggregate. 232 + 233 + 6. Conveying Non-Source Forms. 234 + 235 + You may convey a covered work in object code form under the terms 236 + of sections 4 and 5, provided that you also convey the 237 + machine-readable Corresponding Source under the terms of this License, 238 + in one of these ways: 239 + 240 + a) Convey the object code in, or embodied in, a physical product 241 + (including a physical distribution medium), accompanied by the 242 + Corresponding Source fixed on a durable physical medium 243 + customarily used for software interchange. 244 + 245 + b) Convey the object code in, or embodied in, a physical product 246 + (including a physical distribution medium), accompanied by a 247 + written offer, valid for at least three years and valid for as 248 + long as you offer spare parts or customer support for that product 249 + model, to give anyone who possesses the object code either (1) a 250 + copy of the Corresponding Source for all the software in the 251 + product that is covered by this License, on a durable physical 252 + medium customarily used for software interchange, for a price no 253 + more than your reasonable cost of physically performing this 254 + conveying of source, or (2) access to copy the 255 + Corresponding Source from a network server at no charge. 256 + 257 + c) Convey individual copies of the object code with a copy of the 258 + written offer to provide the Corresponding Source. This 259 + alternative is allowed only occasionally and noncommercially, and 260 + only if you received the object code with such an offer, in accord 261 + with subsection 6b. 262 + 263 + d) Convey the object code by offering access from a designated 264 + place (gratis or for a charge), and offer equivalent access to the 265 + Corresponding Source in the same way through the same place at no 266 + further charge. You need not require recipients to copy the 267 + Corresponding Source along with the object code. If the place to 268 + copy the object code is a network server, the Corresponding Source 269 + may be on a different server (operated by you or a third party) 270 + that supports equivalent copying facilities, provided you maintain 271 + clear directions next to the object code saying where to find the 272 + Corresponding Source. Regardless of what server hosts the 273 + Corresponding Source, you remain obligated to ensure that it is 274 + available for as long as needed to satisfy these requirements. 275 + 276 + e) Convey the object code using peer-to-peer transmission, provided 277 + you inform other peers where the object code and Corresponding 278 + Source of the work are being offered to the general public at no 279 + charge under subsection 6d. 280 + 281 + A separable portion of the object code, whose source code is excluded 282 + from the Corresponding Source as a System Library, need not be 283 + included in conveying the object code work. 284 + 285 + A "User Product" is either (1) a "consumer product", which means any 286 + tangible personal property which is normally used for personal, family, 287 + or household purposes, or (2) anything designed or sold for incorporation 288 + into a dwelling. In determining whether a product is a consumer product, 289 + doubtful cases shall be resolved in favor of coverage. For a particular 290 + product received by a particular user, "normally used" refers to a 291 + typical or common use of that class of product, regardless of the status 292 + of the particular user or of the way in which the particular user 293 + actually uses, or expects or is expected to use, the product. A product 294 + is a consumer product regardless of whether the product has substantial 295 + commercial, industrial or non-consumer uses, unless such uses represent 296 + the only significant mode of use of the product. 297 + 298 + "Installation Information" for a User Product means any methods, 299 + procedures, authorization keys, or other information required to install 300 + and execute modified versions of a covered work in that User Product from 301 + a modified version of its Corresponding Source. The information must 302 + suffice to ensure that the continued functioning of the modified object 303 + code is in no case prevented or interfered with solely because 304 + modification has been made. 305 + 306 + If you convey an object code work under this section in, or with, or 307 + specifically for use in, a User Product, and the conveying occurs as 308 + part of a transaction in which the right of possession and use of the 309 + User Product is transferred to the recipient in perpetuity or for a 310 + fixed term (regardless of how the transaction is characterized), the 311 + Corresponding Source conveyed under this section must be accompanied 312 + by the Installation Information. But this requirement does not apply 313 + if neither you nor any third party retains the ability to install 314 + modified object code on the User Product (for example, the work has 315 + been installed in ROM). 316 + 317 + The requirement to provide Installation Information does not include a 318 + requirement to continue to provide support service, warranty, or updates 319 + for a work that has been modified or installed by the recipient, or for 320 + the User Product in which it has been modified or installed. Access to a 321 + network may be denied when the modification itself materially and 322 + adversely affects the operation of the network or violates the rules and 323 + protocols for communication across the network. 324 + 325 + Corresponding Source conveyed, and Installation Information provided, 326 + in accord with this section must be in a format that is publicly 327 + documented (and with an implementation available to the public in 328 + source code form), and must require no special password or key for 329 + unpacking, reading or copying. 330 + 331 + 7. Additional Terms. 332 + 333 + "Additional permissions" are terms that supplement the terms of this 334 + License by making exceptions from one or more of its conditions. 335 + Additional permissions that are applicable to the entire Program shall 336 + be treated as though they were included in this License, to the extent 337 + that they are valid under applicable law. If additional permissions 338 + apply only to part of the Program, that part may be used separately 339 + under those permissions, but the entire Program remains governed by 340 + this License without regard to the additional permissions. 341 + 342 + When you convey a copy of a covered work, you may at your option 343 + remove any additional permissions from that copy, or from any part of 344 + it. (Additional permissions may be written to require their own 345 + removal in certain cases when you modify the work.) You may place 346 + additional permissions on material, added by you to a covered work, 347 + for which you have or can give appropriate copyright permission. 348 + 349 + Notwithstanding any other provision of this License, for material you 350 + add to a covered work, you may (if authorized by the copyright holders of 351 + that material) supplement the terms of this License with terms: 352 + 353 + a) Disclaiming warranty or limiting liability differently from the 354 + terms of sections 15 and 16 of this License; or 355 + 356 + b) Requiring preservation of specified reasonable legal notices or 357 + author attributions in that material or in the Appropriate Legal 358 + Notices displayed by works containing it; or 359 + 360 + c) Prohibiting misrepresentation of the origin of that material, or 361 + requiring that modified versions of such material be marked in 362 + reasonable ways as different from the original version; or 363 + 364 + d) Limiting the use for publicity purposes of names of licensors or 365 + authors of the material; or 366 + 367 + e) Declining to grant rights under trademark law for use of some 368 + trade names, trademarks, or service marks; or 369 + 370 + f) Requiring indemnification of licensors and authors of that 371 + material by anyone who conveys the material (or modified versions of 372 + it) with contractual assumptions of liability to the recipient, for 373 + any liability that these contractual assumptions directly impose on 374 + those licensors and authors. 375 + 376 + All other non-permissive additional terms are considered "further 377 + restrictions" within the meaning of section 10. If the Program as you 378 + received it, or any part of it, contains a notice stating that it is 379 + governed by this License along with a term that is a further 380 + restriction, you may remove that term. If a license document contains 381 + a further restriction but permits relicensing or conveying under this 382 + License, you may add to a covered work material governed by the terms 383 + of that license document, provided that the further restriction does 384 + not survive such relicensing or conveying. 385 + 386 + If you add terms to a covered work in accord with this section, you 387 + must place, in the relevant source files, a statement of the 388 + additional terms that apply to those files, or a notice indicating 389 + where to find the applicable terms. 390 + 391 + Additional terms, permissive or non-permissive, may be stated in the 392 + form of a separately written license, or stated as exceptions; 393 + the above requirements apply either way. 394 + 395 + 8. Termination. 396 + 397 + You may not propagate or modify a covered work except as expressly 398 + provided under this License. Any attempt otherwise to propagate or 399 + modify it is void, and will automatically terminate your rights under 400 + this License (including any patent licenses granted under the third 401 + paragraph of section 11). 402 + 403 + However, if you cease all violation of this License, then your 404 + license from a particular copyright holder is reinstated (a) 405 + provisionally, unless and until the copyright holder explicitly and 406 + finally terminates your license, and (b) permanently, if the copyright 407 + holder fails to notify you of the violation by some reasonable means 408 + prior to 60 days after the cessation. 409 + 410 + Moreover, your license from a particular copyright holder is 411 + reinstated permanently if the copyright holder notifies you of the 412 + violation by some reasonable means, this is the first time you have 413 + received notice of violation of this License (for any work) from that 414 + copyright holder, and you cure the violation prior to 30 days after 415 + your receipt of the notice. 416 + 417 + Termination of your rights under this section does not terminate the 418 + licenses of parties who have received copies or rights from you under 419 + this License. If your rights have been terminated and not permanently 420 + reinstated, you do not qualify to receive new licenses for the same 421 + material under section 10. 422 + 423 + 9. Acceptance Not Required for Having Copies. 424 + 425 + You are not required to accept this License in order to receive or 426 + run a copy of the Program. Ancillary propagation of a covered work 427 + occurring solely as a consequence of using peer-to-peer transmission 428 + to receive a copy likewise does not require acceptance. However, 429 + nothing other than this License grants you permission to propagate or 430 + modify any covered work. These actions infringe copyright if you do 431 + not accept this License. Therefore, by modifying or propagating a 432 + covered work, you indicate your acceptance of this License to do so. 433 + 434 + 10. Automatic Licensing of Downstream Recipients. 435 + 436 + Each time you convey a covered work, the recipient automatically 437 + receives a license from the original licensors, to run, modify and 438 + propagate that work, subject to this License. You are not responsible 439 + for enforcing compliance by third parties with this License. 440 + 441 + An "entity transaction" is a transaction transferring control of an 442 + organization, or substantially all assets of one, or subdividing an 443 + organization, or merging organizations. If propagation of a covered 444 + work results from an entity transaction, each party to that 445 + transaction who receives a copy of the work also receives whatever 446 + licenses to the work the party's predecessor in interest had or could 447 + give under the previous paragraph, plus a right to possession of the 448 + Corresponding Source of the work from the predecessor in interest, if 449 + the predecessor has it or can get it with reasonable efforts. 450 + 451 + You may not impose any further restrictions on the exercise of the 452 + rights granted or affirmed under this License. For example, you may 453 + not impose a license fee, royalty, or other charge for exercise of 454 + rights granted under this License, and you may not initiate litigation 455 + (including a cross-claim or counterclaim in a lawsuit) alleging that 456 + any patent claim is infringed by making, using, selling, offering for 457 + sale, or importing the Program or any portion of it. 458 + 459 + 11. Patents. 460 + 461 + A "contributor" is a copyright holder who authorizes use under this 462 + License of the Program or a work on which the Program is based. The 463 + work thus licensed is called the contributor's "contributor version". 464 + 465 + A contributor's "essential patent claims" are all patent claims 466 + owned or controlled by the contributor, whether already acquired or 467 + hereafter acquired, that would be infringed by some manner, permitted 468 + by this License, of making, using, or selling its contributor version, 469 + but do not include claims that would be infringed only as a 470 + consequence of further modification of the contributor version. For 471 + purposes of this definition, "control" includes the right to grant 472 + patent sublicenses in a manner consistent with the requirements of 473 + this License. 474 + 475 + Each contributor grants you a non-exclusive, worldwide, royalty-free 476 + patent license under the contributor's essential patent claims, to 477 + make, use, sell, offer for sale, import and otherwise run, modify and 478 + propagate the contents of its contributor version. 479 + 480 + In the following three paragraphs, a "patent license" is any express 481 + agreement or commitment, however denominated, not to enforce a patent 482 + (such as an express permission to practice a patent or covenant not to 483 + sue for patent infringement). To "grant" such a patent license to a 484 + party means to make such an agreement or commitment not to enforce a 485 + patent against the party. 486 + 487 + If you convey a covered work, knowingly relying on a patent license, 488 + and the Corresponding Source of the work is not available for anyone 489 + to copy, free of charge and under the terms of this License, through a 490 + publicly available network server or other readily accessible means, 491 + then you must either (1) cause the Corresponding Source to be so 492 + available, or (2) arrange to deprive yourself of the benefit of the 493 + patent license for this particular work, or (3) arrange, in a manner 494 + consistent with the requirements of this License, to extend the patent 495 + license to downstream recipients. "Knowingly relying" means you have 496 + actual knowledge that, but for the patent license, your conveying the 497 + covered work in a country, or your recipient's use of the covered work 498 + in a country, would infringe one or more identifiable patents in that 499 + country that you have reason to believe are valid. 500 + 501 + If, pursuant to or in connection with a single transaction or 502 + arrangement, you convey, or propagate by procuring conveyance of, a 503 + covered work, and grant a patent license to some of the parties 504 + receiving the covered work authorizing them to use, propagate, modify 505 + or convey a specific copy of the covered work, then the patent license 506 + you grant is automatically extended to all recipients of the covered 507 + work and works based on it. 508 + 509 + A patent license is "discriminatory" if it does not include within 510 + the scope of its coverage, prohibits the exercise of, or is 511 + conditioned on the non-exercise of one or more of the rights that are 512 + specifically granted under this License. You may not convey a covered 513 + work if you are a party to an arrangement with a third party that is 514 + in the business of distributing software, under which you make payment 515 + to the third party based on the extent of your activity of conveying 516 + the work, and under which the third party grants, to any of the 517 + parties who would receive the covered work from you, a discriminatory 518 + patent license (a) in connection with copies of the covered work 519 + conveyed by you (or copies made from those copies), or (b) primarily 520 + for and in connection with specific products or compilations that 521 + contain the covered work, unless you entered into that arrangement, 522 + or that patent license was granted, prior to 28 March 2007. 523 + 524 + Nothing in this License shall be construed as excluding or limiting 525 + any implied license or other defenses to infringement that may 526 + otherwise be available to you under applicable patent law. 527 + 528 + 12. No Surrender of Others' Freedom. 529 + 530 + If conditions are imposed on you (whether by court order, agreement or 531 + otherwise) that contradict the conditions of this License, they do not 532 + excuse you from the conditions of this License. If you cannot convey a 533 + covered work so as to satisfy simultaneously your obligations under this 534 + License and any other pertinent obligations, then as a consequence you may 535 + not convey it at all. For example, if you agree to terms that obligate you 536 + to collect a royalty for further conveying from those to whom you convey 537 + the Program, the only way you could satisfy both those terms and this 538 + License would be to refrain entirely from conveying the Program. 539 + 540 + 13. Remote Network Interaction; Use with the GNU General Public License. 541 + 542 + Notwithstanding any other provision of this License, if you modify the 543 + Program, your modified version must prominently offer all users 544 + interacting with it remotely through a computer network (if your version 545 + supports such interaction) an opportunity to receive the Corresponding 546 + Source of your version by providing access to the Corresponding Source 547 + from a network server at no charge, through some standard or customary 548 + means of facilitating copying of software. This Corresponding Source 549 + shall include the Corresponding Source for any work covered by version 3 550 + of the GNU General Public License that is incorporated pursuant to the 551 + following paragraph. 552 + 553 + Notwithstanding any other provision of this License, you have 554 + permission to link or combine any covered work with a work licensed 555 + under version 3 of the GNU General Public License into a single 556 + combined work, and to convey the resulting work. The terms of this 557 + License will continue to apply to the part which is the covered work, 558 + but the work with which it is combined will remain governed by version 559 + 3 of the GNU General Public License. 560 + 561 + 14. Revised Versions of this License. 562 + 563 + The Free Software Foundation may publish revised and/or new versions of 564 + the GNU Affero General Public License from time to time. Such new versions 565 + will be similar in spirit to the present version, but may differ in detail to 566 + address new problems or concerns. 567 + 568 + Each version is given a distinguishing version number. If the 569 + Program specifies that a certain numbered version of the GNU Affero General 570 + Public License "or any later version" applies to it, you have the 571 + option of following the terms and conditions either of that numbered 572 + version or of any later version published by the Free Software 573 + Foundation. If the Program does not specify a version number of the 574 + GNU Affero General Public License, you may choose any version ever published 575 + by the Free Software Foundation. 576 + 577 + If the Program specifies that a proxy can decide which future 578 + versions of the GNU Affero General Public License can be used, that proxy's 579 + public statement of acceptance of a version permanently authorizes you 580 + to choose that version for the Program. 581 + 582 + Later license versions may give you additional or different 583 + permissions. However, no additional obligations are imposed on any 584 + author or copyright holder as a result of your choosing to follow a 585 + later version. 586 + 587 + 15. Disclaimer of Warranty. 588 + 589 + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 + OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 + ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 + 598 + 16. Limitation of Liability. 599 + 600 + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 + THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 + USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 + SUCH DAMAGES. 609 + 610 + 17. Interpretation of Sections 15 and 16. 611 + 612 + If the disclaimer of warranty and limitation of liability provided 613 + above cannot be given local legal effect according to their terms, 614 + reviewing courts shall apply local law that most closely approximates 615 + an absolute waiver of all civil liability in connection with the 616 + Program, unless a warranty or assumption of liability accompanies a 617 + copy of the Program in return for a fee. 618 + 619 + END OF TERMS AND CONDITIONS 620 + 621 + How to Apply These Terms to Your New Programs 622 + 623 + If you develop a new program, and you want it to be of the greatest 624 + possible use to the public, the best way to achieve this is to make it 625 + free software which everyone can redistribute and change under these terms. 626 + 627 + To do so, attach the following notices to the program. It is safest 628 + to attach them to the start of each source file to most effectively 629 + state the exclusion of warranty; and each file should have at least 630 + the "copyright" line and a pointer to where the full notice is found. 631 + 632 + <one line to give the program's name and a brief idea of what it does.> 633 + Copyright (C) 2025 Phaze 634 + 635 + This program is free software: you can redistribute it and/or modify 636 + it under the terms of the GNU Affero General Public License as published 637 + by the Free Software Foundation, either version 3 of the License, or 638 + (at your option) any later version. 639 + 640 + This program is distributed in the hope that it will be useful, 641 + but WITHOUT ANY WARRANTY; without even the implied warranty of 642 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 + GNU Affero General Public License for more details. 644 + 645 + You should have received a copy of the GNU Affero General Public License 646 + along with this program. If not, see <https://www.gnu.org/licenses/>. 647 + 648 + Also add information on how to contact you by electronic and paper mail. 649 + 650 + If your software can interact with users remotely through a computer 651 + network, you should also make sure that it provides a way for users to 652 + get its source. For example, if your program is a web application, its 653 + interface could display a "Source" link that leads users to an archive 654 + of the code. There are many ways you could offer source, and different 655 + solutions will be better for different programs; see section 13 for the 656 + specific requirements. 657 + 658 + You should also get your employer (if you work as a programmer) or school, 659 + if any, to sign a "copyright disclaimer" for the program, if necessary. 660 + For more information on this, and how to apply and follow the GNU AGPL, see 661 + <https://www.gnu.org/licenses/>.
+12 -14
README.md
··· 1 # VRChat Photo Manager (BETA) 2 3 - Install [here](https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe) 4 5 - This is the rust rewrite. 6 7 ## Feedback / Bug Reports 8 ··· 10 11 Also for bug reports if you can, please try replicating the issue with a debug variant of the app and sending the logs along with your issue 12 13 - You can download the debug EXEs using this url format: 14 - https://cdn.phaz.uk/vrcpm/builds/debug/vrcpm-[YOUR-APP-VERSION]-debug.exe 15 16 You can find your app version under appllication settings. 17 18 - (Please note that there are not debug releases for versions: 0.1.0, 0.1.1, 0.1.2, 0.1.3) 19 - 20 ## A photo manager for VRChat. 21 22 - Install [here](https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe) 23 24 - ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/c573e27f-52e6-4608-a8ea-a8a83336fbb9) 25 26 - Support for: 27 - - Files with VRCX metadata ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/06f44b67-083f-487e-b8b4-84c87d07604f) 28 - - Fetches world information from [VRCList](https://vrclist.com) 29 - - Cloud backups ![image](https://github.com/phaze-the-dumb/VRChat-Photo-Manager-Rust/assets/57566773/db703c66-09cc-4120-9ba6-81fe3ef8c87d) 30 - - Searching for photos taken in specific worlds / with specific users ![image](https://github.com/user-attachments/assets/ea67c4ef-c7e8-4f93-a29a-74aff5f35903) 31 - - And much more in the works!
··· 1 # VRChat Photo Manager (BETA) 2 3 + Windows users: Download the setup.exe file [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 4 5 + Linux Users: 6 + - I publish .deb, .rpm and .AppImage files [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest) 7 + - I also publish an [AUR](https://aur.archlinux.org/packages/vrchat-photo-manager) package 8 9 ## Feedback / Bug Reports 10 ··· 12 13 Also for bug reports if you can, please try replicating the issue with a debug variant of the app and sending the logs along with your issue 14 15 + You can download the debug EXEs [here](https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases) 16 17 You can find your app version under appllication settings. 18 19 ## A photo manager for VRChat. 20 21 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/bc702ee6-8891-463d-a987-c2db1dc24678" /> 22 23 + Files with VRCX metadata + Fetches world information from VRChat: 24 + 25 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/aae88c53-aab6-4520-bb89-d6f2bca1c51a" /> 26 + 27 + Searching for photos taken in specific worlds / with specific users: 28 29 + <img width="1352" height="739" alt="image" src="https://github.com/user-attachments/assets/f9af1724-5bb2-4276-bc32-e818dab31750" />
+24
build-release.sh
···
··· 1 + #!/bin/bash 2 + 3 + VERSION=0.2.7-hot1 4 + 5 + # Linux builds 6 + NO_STRIP=true pnpm tauri build 7 + 8 + # Windows builds 9 + pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc 10 + pnpm tauri build --debug --runner cargo-xwin --target x86_64-pc-windows-msvc 11 + 12 + # Move Files 13 + 14 + mkdir builds 15 + mkdir builds/$VERSION 16 + 17 + mv "src-tauri/target/release/bundle/appimage/VRChat Photo Manager_0.0.1_amd64.AppImage" builds/$VERSION/vrcpm-$VERSION.AppImage 18 + mv "src-tauri/target/release/bundle/deb/VRChat Photo Manager_0.0.1_amd64.deb" builds/$VERSION/vrcpm-$VERSION.deb 19 + mv "src-tauri/target/release/bundle/rpm/VRChat Photo Manager-0.0.1-1.x86_64.rpm" builds/$VERSION/vrcpm-$VERSION.rpm 20 + 21 + mv src-tauri/target/x86_64-pc-windows-msvc/release/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION.exe 22 + mv src-tauri/target/x86_64-pc-windows-msvc/debug/VRChatPhotoManager.exe builds/$VERSION/vrcpm-$VERSION-debug.exe 23 + 24 + mv "src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/VRChat Photo Manager_0.0.1_x64-setup.exe" builds/$VERSION/vrcpm-$VERSION-setup.exe
+80 -1
changelog
··· 51 52 v0.2.2: 53 - Use more linux friendly directories 54 - - Move away from localstorage and use the .config file
··· 51 52 v0.2.2: 53 - Use more linux friendly directories 54 + - Move away from localstorage and use the .config file 55 + - Seems to be semi-stable on linux 56 + - Update deeplink library 57 + - Fix bugs with multiple screens displaying on frontend 58 + - Fix caching issues with photo paths 59 + - Fix VRCPM using way to many resources while being minimised after starting in the background 60 + - Changed image resizing algorithm so preview images look less pixelated 61 + - Fix issue where photos wouldn't display in the list if you opened the app before it had loaded 62 + 63 + Hotfix 1: 64 + - Fixed world cache not being saved to the config file 65 + 66 + v0.2.3: 67 + - Finally replaced the awful render function in the frontend, ( should use less resources when app is open ) 68 + - Fixed photos not being lined up 69 + - Fixed filters not updating photo list 70 + - Fixed adding / removing photos not updating the photo list 71 + 72 + Hotfix 1: 73 + - Fixed new installations immediately crashing 74 + 75 + Dev Stuff: 76 + - Split frontend up into many smaller files for easier editing 77 + 78 + v0.2.4: 79 + - Refactor loading system to not load all photos at the start 80 + (should help with large numbers of photos) 81 + - Update UI to work on webkitgtk 82 + - Opening files on linux now works 83 + - Fixed not rendering properly when using webkitgtk 84 + - Switch world data api to vrchat 85 + - Fixed icons being MASSIVE when using webkitgtk 86 + - Photos are in the correct order on linux now 87 + - Fixed photos not rendering if the window isn't resized or reopened when using webkitgtk 88 + - Fixed scrolling being more and more snappy when the window is closed and reopened when using webkitgtk 89 + - Fixed render being called multiple times per frame when using webkitgtk 90 + 91 + Dev Stuff: 92 + - Implemented a view transition handler, should help with transitions when the app is scaled 93 + 94 + v0.2.5: 95 + - Fixed the "Start with windows" button appearing on linux 96 + - Fixed linux tray icon title 97 + - Fixed build-release.sh script outputting the wrong names for windows builds 98 + - Fixed clipboard on linux ( and sped it up on windows ) 99 + - Fixed some icons not fading out when moving to the settings menu 100 + - Removed the auto updater 101 + - Removed account login stuff 102 + - Fixed app name on windows 103 + - Update styles 104 + - Fixed filters removing photos without metadata 105 + 106 + v0.2.6: 107 + - Fixed photos not being loaded if they're too low resolution 108 + - Fixed "Open in folder" not selecting files on linux 109 + - Fixed scroll to top button not animating out 110 + - Fixed scroll to top button being ontop of filters menu 111 + - Fixed photo ordering 112 + - Fixed broken legacy named photos 113 + - Fixed photos being loaded with the wrong resolution 114 + 115 + - Added support for multilayer photos 116 + - Added close to tray toggle 117 + - Added update available prompt 118 + 119 + - Remove all sync stuff 120 + - Removed automatic updates 121 + 122 + Hotfix 1: 123 + - Fixed loading when an image file is corrupted 124 + - Fixed update prompt when not connected to internet 125 + 126 + v0.2.7: 127 + - Fixed image resizing when window is thinner than image 128 + - Fixed closing settings with keybinds 129 + - Fixed the behaviour of changing the photo path 130 + - Fixed loading photos in folders that aren't VRChat folders 131 + 132 + Hotfix 1: 133 + - Fixed resizing images (again)
+12 -11
package.json
··· 12 }, 13 "license": "MIT", 14 "dependencies": { 15 - "@tauri-apps/api": "2.0.0-rc.0", 16 - "@tauri-apps/plugin-http": "2.0.0-rc.1", 17 - "@tauri-apps/plugin-process": "2.0.0-rc.0", 18 - "@tauri-apps/plugin-shell": "2.0.0-rc.0", 19 - "@types/animejs": "^3.1.12", 20 - "animejs": "^3.2.2", 21 - "solid-js": "^1.9.2" 22 }, 23 "devDependencies": { 24 - "@tauri-apps/cli": "2.0.0-rc.5", 25 - "typescript": "^5.6.3", 26 - "vite": "^5.4.9", 27 - "vite-plugin-solid": "^2.10.2" 28 } 29 }
··· 12 }, 13 "license": "MIT", 14 "dependencies": { 15 + "@tauri-apps/api": "2.9.0", 16 + "@tauri-apps/plugin-deep-link": "^2.4.5", 17 + "@tauri-apps/plugin-http": "2.5.4", 18 + "@tauri-apps/plugin-process": "2.3.1", 19 + "@tauri-apps/plugin-shell": "2.3.3", 20 + "animejs": "^4.2.2", 21 + "solid-js": "^1.9.10" 22 }, 23 "devDependencies": { 24 + "@tauri-apps/cli": "2.9.3", 25 + "@types/animejs": "^3.1.13", 26 + "typescript": "^5.9.3", 27 + "vite": "^7.2.2", 28 + "vite-plugin-solid": "^2.11.10" 29 } 30 }
+665 -709
pnpm-lock.yaml
··· 9 .: 10 dependencies: 11 '@tauri-apps/api': 12 - specifier: 2.0.0-rc.0 13 - version: 2.0.0-rc.0 14 '@tauri-apps/plugin-http': 15 - specifier: 2.0.0-rc.1 16 - version: 2.0.0-rc.1 17 '@tauri-apps/plugin-process': 18 - specifier: 2.0.0-rc.0 19 - version: 2.0.0-rc.0 20 '@tauri-apps/plugin-shell': 21 - specifier: 2.0.0-rc.0 22 - version: 2.0.0-rc.0 23 - '@types/animejs': 24 - specifier: ^3.1.12 25 - version: 3.1.12 26 animejs: 27 - specifier: ^3.2.2 28 - version: 3.2.2 29 solid-js: 30 - specifier: ^1.9.2 31 - version: 1.9.2 32 devDependencies: 33 '@tauri-apps/cli': 34 - specifier: 2.0.0-rc.5 35 - version: 2.0.0-rc.5 36 typescript: 37 - specifier: ^5.6.3 38 - version: 5.6.3 39 vite: 40 - specifier: ^5.4.9 41 - version: 5.4.9 42 vite-plugin-solid: 43 - specifier: ^2.10.2 44 - version: 2.10.2(solid-js@1.9.2)(vite@5.4.9) 45 46 packages: 47 48 - '@ampproject/remapping@2.3.0': 49 - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 50 - engines: {node: '>=6.0.0'} 51 52 - '@babel/code-frame@7.25.7': 53 - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} 54 engines: {node: '>=6.9.0'} 55 56 - '@babel/compat-data@7.25.8': 57 - resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} 58 engines: {node: '>=6.9.0'} 59 60 - '@babel/core@7.25.8': 61 - resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} 62 engines: {node: '>=6.9.0'} 63 64 - '@babel/generator@7.25.7': 65 - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} 66 engines: {node: '>=6.9.0'} 67 68 - '@babel/helper-compilation-targets@7.25.7': 69 - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} 70 engines: {node: '>=6.9.0'} 71 72 '@babel/helper-module-imports@7.18.6': 73 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 74 engines: {node: '>=6.9.0'} 75 76 - '@babel/helper-module-imports@7.25.7': 77 - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} 78 engines: {node: '>=6.9.0'} 79 80 - '@babel/helper-module-transforms@7.25.7': 81 - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} 82 engines: {node: '>=6.9.0'} 83 peerDependencies: 84 '@babel/core': ^7.0.0 85 86 - '@babel/helper-plugin-utils@7.25.7': 87 - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} 88 - engines: {node: '>=6.9.0'} 89 - 90 - '@babel/helper-simple-access@7.25.7': 91 - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} 92 engines: {node: '>=6.9.0'} 93 94 - '@babel/helper-string-parser@7.25.7': 95 - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} 96 engines: {node: '>=6.9.0'} 97 98 - '@babel/helper-validator-identifier@7.25.7': 99 - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} 100 engines: {node: '>=6.9.0'} 101 102 - '@babel/helper-validator-option@7.25.7': 103 - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} 104 engines: {node: '>=6.9.0'} 105 106 - '@babel/helpers@7.25.7': 107 - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} 108 engines: {node: '>=6.9.0'} 109 110 - '@babel/highlight@7.25.7': 111 - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} 112 - engines: {node: '>=6.9.0'} 113 - 114 - '@babel/parser@7.25.8': 115 - resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} 116 engines: {node: '>=6.0.0'} 117 hasBin: true 118 119 - '@babel/plugin-syntax-jsx@7.25.7': 120 - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} 121 engines: {node: '>=6.9.0'} 122 peerDependencies: 123 '@babel/core': ^7.0.0-0 124 125 - '@babel/template@7.25.7': 126 - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} 127 engines: {node: '>=6.9.0'} 128 129 - '@babel/traverse@7.25.7': 130 - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} 131 engines: {node: '>=6.9.0'} 132 133 - '@babel/types@7.25.8': 134 - resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} 135 engines: {node: '>=6.9.0'} 136 137 - '@esbuild/aix-ppc64@0.21.5': 138 - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 139 - engines: {node: '>=12'} 140 cpu: [ppc64] 141 os: [aix] 142 143 - '@esbuild/android-arm64@0.21.5': 144 - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 145 - engines: {node: '>=12'} 146 cpu: [arm64] 147 os: [android] 148 149 - '@esbuild/android-arm@0.21.5': 150 - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 151 - engines: {node: '>=12'} 152 cpu: [arm] 153 os: [android] 154 155 - '@esbuild/android-x64@0.21.5': 156 - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 157 - engines: {node: '>=12'} 158 cpu: [x64] 159 os: [android] 160 161 - '@esbuild/darwin-arm64@0.21.5': 162 - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 163 - engines: {node: '>=12'} 164 cpu: [arm64] 165 os: [darwin] 166 167 - '@esbuild/darwin-x64@0.21.5': 168 - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 169 - engines: {node: '>=12'} 170 cpu: [x64] 171 os: [darwin] 172 173 - '@esbuild/freebsd-arm64@0.21.5': 174 - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 175 - engines: {node: '>=12'} 176 cpu: [arm64] 177 os: [freebsd] 178 179 - '@esbuild/freebsd-x64@0.21.5': 180 - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 181 - engines: {node: '>=12'} 182 cpu: [x64] 183 os: [freebsd] 184 185 - '@esbuild/linux-arm64@0.21.5': 186 - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 187 - engines: {node: '>=12'} 188 cpu: [arm64] 189 os: [linux] 190 191 - '@esbuild/linux-arm@0.21.5': 192 - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 193 - engines: {node: '>=12'} 194 cpu: [arm] 195 os: [linux] 196 197 - '@esbuild/linux-ia32@0.21.5': 198 - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 199 - engines: {node: '>=12'} 200 cpu: [ia32] 201 os: [linux] 202 203 - '@esbuild/linux-loong64@0.21.5': 204 - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 205 - engines: {node: '>=12'} 206 cpu: [loong64] 207 os: [linux] 208 209 - '@esbuild/linux-mips64el@0.21.5': 210 - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 211 - engines: {node: '>=12'} 212 cpu: [mips64el] 213 os: [linux] 214 215 - '@esbuild/linux-ppc64@0.21.5': 216 - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 217 - engines: {node: '>=12'} 218 cpu: [ppc64] 219 os: [linux] 220 221 - '@esbuild/linux-riscv64@0.21.5': 222 - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 223 - engines: {node: '>=12'} 224 cpu: [riscv64] 225 os: [linux] 226 227 - '@esbuild/linux-s390x@0.21.5': 228 - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 229 - engines: {node: '>=12'} 230 cpu: [s390x] 231 os: [linux] 232 233 - '@esbuild/linux-x64@0.21.5': 234 - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 235 - engines: {node: '>=12'} 236 cpu: [x64] 237 os: [linux] 238 239 - '@esbuild/netbsd-x64@0.21.5': 240 - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 241 - engines: {node: '>=12'} 242 cpu: [x64] 243 os: [netbsd] 244 245 - '@esbuild/openbsd-x64@0.21.5': 246 - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 247 - engines: {node: '>=12'} 248 cpu: [x64] 249 os: [openbsd] 250 251 - '@esbuild/sunos-x64@0.21.5': 252 - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 253 - engines: {node: '>=12'} 254 cpu: [x64] 255 os: [sunos] 256 257 - '@esbuild/win32-arm64@0.21.5': 258 - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 259 - engines: {node: '>=12'} 260 cpu: [arm64] 261 os: [win32] 262 263 - '@esbuild/win32-ia32@0.21.5': 264 - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 265 - engines: {node: '>=12'} 266 cpu: [ia32] 267 os: [win32] 268 269 - '@esbuild/win32-x64@0.21.5': 270 - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 271 - engines: {node: '>=12'} 272 cpu: [x64] 273 os: [win32] 274 275 - '@jest/schemas@29.6.3': 276 - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 277 - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 278 279 - '@jridgewell/gen-mapping@0.3.5': 280 - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 281 - engines: {node: '>=6.0.0'} 282 283 '@jridgewell/resolve-uri@3.1.2': 284 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 285 engines: {node: '>=6.0.0'} 286 287 - '@jridgewell/set-array@1.2.1': 288 - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 289 - engines: {node: '>=6.0.0'} 290 - 291 - '@jridgewell/sourcemap-codec@1.5.0': 292 - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 293 294 - '@jridgewell/trace-mapping@0.3.25': 295 - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 296 297 - '@rollup/rollup-android-arm-eabi@4.24.0': 298 - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} 299 cpu: [arm] 300 os: [android] 301 302 - '@rollup/rollup-android-arm64@4.24.0': 303 - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} 304 cpu: [arm64] 305 os: [android] 306 307 - '@rollup/rollup-darwin-arm64@4.24.0': 308 - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} 309 cpu: [arm64] 310 os: [darwin] 311 312 - '@rollup/rollup-darwin-x64@4.24.0': 313 - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} 314 cpu: [x64] 315 os: [darwin] 316 317 - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': 318 - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} 319 cpu: [arm] 320 os: [linux] 321 322 - '@rollup/rollup-linux-arm-musleabihf@4.24.0': 323 - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} 324 cpu: [arm] 325 os: [linux] 326 327 - '@rollup/rollup-linux-arm64-gnu@4.24.0': 328 - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} 329 cpu: [arm64] 330 os: [linux] 331 332 - '@rollup/rollup-linux-arm64-musl@4.24.0': 333 - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} 334 cpu: [arm64] 335 os: [linux] 336 337 - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': 338 - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} 339 cpu: [ppc64] 340 os: [linux] 341 342 - '@rollup/rollup-linux-riscv64-gnu@4.24.0': 343 - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} 344 cpu: [riscv64] 345 os: [linux] 346 347 - '@rollup/rollup-linux-s390x-gnu@4.24.0': 348 - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} 349 cpu: [s390x] 350 os: [linux] 351 352 - '@rollup/rollup-linux-x64-gnu@4.24.0': 353 - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} 354 cpu: [x64] 355 os: [linux] 356 357 - '@rollup/rollup-linux-x64-musl@4.24.0': 358 - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} 359 cpu: [x64] 360 os: [linux] 361 362 - '@rollup/rollup-win32-arm64-msvc@4.24.0': 363 - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} 364 cpu: [arm64] 365 os: [win32] 366 367 - '@rollup/rollup-win32-ia32-msvc@4.24.0': 368 - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} 369 cpu: [ia32] 370 os: [win32] 371 372 - '@rollup/rollup-win32-x64-msvc@4.24.0': 373 - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} 374 cpu: [x64] 375 os: [win32] 376 377 - '@sinclair/typebox@0.27.8': 378 - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 379 380 - '@tauri-apps/api@2.0.0-rc.0': 381 - resolution: {integrity: sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==} 382 - engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} 383 384 - '@tauri-apps/api@2.0.2': 385 - resolution: {integrity: sha512-3wSwmG+1kr6WrgAFKK5ijkNFPp8TT3FLj3YHUb5EwMO+3FxX4uWlfSWkeeBy+Kc1RsKzugtYLuuya+98Flj+3w==} 386 - 387 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 388 - resolution: {integrity: sha512-EoduJ5SeMfBKCe7I291JBH+lkrf2E0+mQF1rP+Jq4CjWPer11OeEcUSFtHURB3Z3ItzObQ7ALPulMGhMe6E9rg==} 389 engines: {node: '>= 10'} 390 cpu: [arm64] 391 os: [darwin] 392 393 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 394 - resolution: {integrity: sha512-GdphvNgQWAbVGoD6e2Z5auWFXBcmmbhiwf9UNoKpBQPLfFO6EEJHjXbACr/hAZsqT0nNpZLRoh/5v5HGTmU0XQ==} 395 engines: {node: '>= 10'} 396 cpu: [x64] 397 os: [darwin] 398 399 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 400 - resolution: {integrity: sha512-S47KwAfyRsO2qTqSoadHP4a1cjO9kfQi4QWkoaDjb0BEETdrhPM94qp43cnKP7QWW+msOToMTdlks9HYlhRUww==} 401 engines: {node: '>= 10'} 402 cpu: [arm] 403 os: [linux] 404 405 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 406 - resolution: {integrity: sha512-Ii9aP/24Rtlci5MaeSaqb6JOLt3cUBA4z4XmGz5VOLLZ+ntRxpfd3xNpLki04V2MOgbAu9BxLAp5UTzELc1/Rg==} 407 engines: {node: '>= 10'} 408 cpu: [arm64] 409 os: [linux] 410 411 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 412 - resolution: {integrity: sha512-noV2sDusI+DsEHl0uMOZ04sQmj65Jo9yjfSg2iv1fnfjBYVbwi6Qj/MaCqyApXESQrpv1XZB3kYI+CkyPnjj2Q==} 413 engines: {node: '>= 10'} 414 cpu: [arm64] 415 os: [linux] 416 417 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 418 - resolution: {integrity: sha512-iTe9gKO+qgFRjU1sxBvbI8bIRbkOedWvFm/yh8RFi1iJcFwbVnsHWQ8z7BwoNMJLnL2dseZgrGntmS5n9/xSSQ==} 419 engines: {node: '>= 10'} 420 cpu: [x64] 421 os: [linux] 422 423 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 424 - resolution: {integrity: sha512-R7EyfvfdMtRAKC3QxPn5jVGEH56R4g6hSnR5xXkFnEpioND7SNru5UMBGgseGJ22h/hdjFfqS2vc19291gkVsg==} 425 engines: {node: '>= 10'} 426 cpu: [x64] 427 os: [linux] 428 429 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 430 - resolution: {integrity: sha512-EE7CF//hMWsVZpu9IWXGLDDdMhAiNfHwfLnW4Na1INHKBBb/ynhOd4gKRC3Mi/kgcMfXJAq0nBJFw1mal1q7jg==} 431 engines: {node: '>= 10'} 432 cpu: [arm64] 433 os: [win32] 434 435 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 436 - resolution: {integrity: sha512-zJosPEw1X1H9nTNsrYVSypRLdMLOiLAY8hlBrgsmw7dmN61lOMLyItWsbiAezYeKIpaFeADurR+5qMHHwzbqeg==} 437 engines: {node: '>= 10'} 438 cpu: [ia32] 439 os: [win32] 440 441 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 442 - resolution: {integrity: sha512-PqxbL/e6GraazdwEKN1oX33gYCRf0ns6yuaxHafHM5+Zsv0MZpyPTPLDot/JLKvNBefk6QXZn5fKAIETVtQaGg==} 443 engines: {node: '>= 10'} 444 cpu: [x64] 445 os: [win32] 446 447 - '@tauri-apps/cli@2.0.0-rc.5': 448 - resolution: {integrity: sha512-JtFfJg8ZNOrj+S+8RKpcrNIcU5hw0X8JSNs2tUjQq0OZgqIGnRSILYjg7BaZDPEakQXUKsDEufbjbYVNJDIp8g==} 449 engines: {node: '>= 10'} 450 hasBin: true 451 452 - '@tauri-apps/plugin-http@2.0.0-rc.1': 453 - resolution: {integrity: sha512-j4WdTEKx0CFa6u8ubke0mo75pCrnu6XtrFtvjsh+zjuNYgMG/l0+A1woWXHm73f2Levskhs+KbKcLQA/nr8k2w==} 454 455 - '@tauri-apps/plugin-process@2.0.0-rc.0': 456 - resolution: {integrity: sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==} 457 458 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 459 - resolution: {integrity: sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==} 460 461 - '@types/animejs@3.1.12': 462 - resolution: {integrity: sha512-fpdH+ZtlO0kqjTOqRaBdsEmvpRNOayI8k4EVkEtitL5l6wducDOXk0rgQgfZqWf/ZX9DzXrHf257S5i9xTcISQ==} 463 464 '@types/babel__core@7.20.5': 465 resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 466 467 - '@types/babel__generator@7.6.8': 468 - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 469 470 '@types/babel__template@7.4.4': 471 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 472 473 - '@types/babel__traverse@7.20.6': 474 - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 475 476 - '@types/estree@1.0.6': 477 - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 478 479 - animejs@3.2.2: 480 - resolution: {integrity: sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ==} 481 482 - ansi-styles@3.2.1: 483 - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 484 - engines: {node: '>=4'} 485 - 486 - ansi-styles@4.3.0: 487 - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 488 - engines: {node: '>=8'} 489 - 490 - ansi-styles@5.2.0: 491 - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 492 - engines: {node: '>=10'} 493 - 494 - babel-plugin-jsx-dom-expressions@0.39.2: 495 - resolution: {integrity: sha512-rCkSYFuLl5/XD+BXjZk1XxFAsIBgNe9WZ7xBHjQV1dBliI64kO+EWktAD3b6Bj/SXk+LpVXFyMVydhnI35svWQ==} 496 peerDependencies: 497 '@babel/core': ^7.20.12 498 499 - babel-preset-solid@1.9.2: 500 - resolution: {integrity: sha512-rWx968GIDghgFStRDQaoqelGspEm9rgPci/yNzNPFlkzMqHaL2yob+t7BbzyqZw5b9/llkzjqUNIOybT9Z9mcg==} 501 peerDependencies: 502 '@babel/core': ^7.0.0 503 504 - browserslist@4.24.0: 505 - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} 506 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 507 hasBin: true 508 509 - caniuse-lite@1.0.30001669: 510 - resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} 511 512 - chalk@2.4.2: 513 - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 514 - engines: {node: '>=4'} 515 - 516 - chalk@4.1.2: 517 - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 518 - engines: {node: '>=10'} 519 - 520 - color-convert@1.9.3: 521 - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 522 - 523 - color-convert@2.0.1: 524 - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 525 - engines: {node: '>=7.0.0'} 526 - 527 - color-name@1.1.3: 528 - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 529 - 530 - color-name@1.1.4: 531 - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 532 533 convert-source-map@2.0.0: 534 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 536 csstype@3.1.3: 537 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 538 539 - debug@4.3.7: 540 - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 541 engines: {node: '>=6.0'} 542 peerDependencies: 543 supports-color: '*' ··· 545 supports-color: 546 optional: true 547 548 - diff-sequences@29.6.3: 549 - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 550 - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 551 552 - electron-to-chromium@1.5.39: 553 - resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==} 554 - 555 - entities@4.5.0: 556 - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 557 engines: {node: '>=0.12'} 558 559 - esbuild@0.21.5: 560 - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 561 - engines: {node: '>=12'} 562 hasBin: true 563 564 escalade@3.2.0: 565 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 566 engines: {node: '>=6'} 567 568 - escape-string-regexp@1.0.5: 569 - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 570 - engines: {node: '>=0.8.0'} 571 572 fsevents@2.3.3: 573 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 578 resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 579 engines: {node: '>=6.9.0'} 580 581 - globals@11.12.0: 582 - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 583 - engines: {node: '>=4'} 584 - 585 - has-flag@3.0.0: 586 - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 587 - engines: {node: '>=4'} 588 - 589 - has-flag@4.0.0: 590 - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 591 - engines: {node: '>=8'} 592 - 593 html-entities@2.3.3: 594 resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 595 ··· 597 resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 598 engines: {node: '>=12.13'} 599 600 - jest-diff@29.7.0: 601 - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 602 - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 603 - 604 - jest-get-type@29.6.3: 605 - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 606 - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 607 - 608 js-tokens@4.0.0: 609 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 610 611 - jsesc@3.0.2: 612 - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 613 engines: {node: '>=6'} 614 hasBin: true 615 ··· 628 ms@2.1.3: 629 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 630 631 - nanoid@3.3.7: 632 - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 633 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 634 hasBin: true 635 636 - node-releases@2.0.18: 637 - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 638 639 - parse5@7.2.0: 640 - resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} 641 642 - picocolors@1.1.0: 643 - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 644 645 - postcss@8.4.47: 646 - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 647 engines: {node: ^10 || ^12 || >=14} 648 649 - pretty-format@29.7.0: 650 - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 651 - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 652 - 653 - react-is@18.3.1: 654 - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 655 - 656 - rollup@4.24.0: 657 - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} 658 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 659 hasBin: true 660 ··· 662 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 663 hasBin: true 664 665 - seroval-plugins@1.1.1: 666 - resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} 667 engines: {node: '>=10'} 668 peerDependencies: 669 seroval: ^1.0 670 671 - seroval@1.1.1: 672 - resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} 673 engines: {node: '>=10'} 674 675 - solid-js@1.9.2: 676 - resolution: {integrity: sha512-fe/K03nV+kMFJYhAOE8AIQHcGxB4rMIEoEyrulbtmf217NffbbwBqJnJI4ovt16e+kaIt0czE2WA7mP/pYN9yg==} 677 678 solid-refresh@0.6.3: 679 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 684 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 685 engines: {node: '>=0.10.0'} 686 687 - supports-color@5.5.0: 688 - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 689 - engines: {node: '>=4'} 690 - 691 - supports-color@7.2.0: 692 - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 693 - engines: {node: '>=8'} 694 - 695 - to-fast-properties@2.0.0: 696 - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 697 - engines: {node: '>=4'} 698 699 - typescript@5.6.3: 700 - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 701 engines: {node: '>=14.17'} 702 hasBin: true 703 704 - update-browserslist-db@1.1.1: 705 - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 706 hasBin: true 707 peerDependencies: 708 browserslist: '>= 4.21.0' 709 710 - validate-html-nesting@1.2.2: 711 - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 712 - 713 - vite-plugin-solid@2.10.2: 714 - resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} 715 peerDependencies: 716 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 717 solid-js: ^1.7.2 718 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 719 peerDependenciesMeta: 720 '@testing-library/jest-dom': 721 optional: true 722 723 - vite@5.4.9: 724 - resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} 725 - engines: {node: ^18.0.0 || >=20.0.0} 726 hasBin: true 727 peerDependencies: 728 - '@types/node': ^18.0.0 || >=20.0.0 729 - less: '*' 730 lightningcss: ^1.21.0 731 - sass: '*' 732 - sass-embedded: '*' 733 - stylus: '*' 734 - sugarss: '*' 735 - terser: ^5.4.0 736 peerDependenciesMeta: 737 '@types/node': 738 optional: true 739 less: 740 optional: true ··· 750 optional: true 751 terser: 752 optional: true 753 754 - vitefu@0.2.5: 755 - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 756 peerDependencies: 757 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 758 peerDependenciesMeta: 759 vite: 760 optional: true ··· 764 765 snapshots: 766 767 - '@ampproject/remapping@2.3.0': 768 - dependencies: 769 - '@jridgewell/gen-mapping': 0.3.5 770 - '@jridgewell/trace-mapping': 0.3.25 771 - 772 - '@babel/code-frame@7.25.7': 773 dependencies: 774 - '@babel/highlight': 7.25.7 775 - picocolors: 1.1.0 776 777 - '@babel/compat-data@7.25.8': {} 778 779 - '@babel/core@7.25.8': 780 dependencies: 781 - '@ampproject/remapping': 2.3.0 782 - '@babel/code-frame': 7.25.7 783 - '@babel/generator': 7.25.7 784 - '@babel/helper-compilation-targets': 7.25.7 785 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) 786 - '@babel/helpers': 7.25.7 787 - '@babel/parser': 7.25.8 788 - '@babel/template': 7.25.7 789 - '@babel/traverse': 7.25.7 790 - '@babel/types': 7.25.8 791 convert-source-map: 2.0.0 792 - debug: 4.3.7 793 gensync: 1.0.0-beta.2 794 json5: 2.2.3 795 semver: 6.3.1 796 transitivePeerDependencies: 797 - supports-color 798 799 - '@babel/generator@7.25.7': 800 dependencies: 801 - '@babel/types': 7.25.8 802 - '@jridgewell/gen-mapping': 0.3.5 803 - '@jridgewell/trace-mapping': 0.3.25 804 - jsesc: 3.0.2 805 806 - '@babel/helper-compilation-targets@7.25.7': 807 dependencies: 808 - '@babel/compat-data': 7.25.8 809 - '@babel/helper-validator-option': 7.25.7 810 - browserslist: 4.24.0 811 lru-cache: 5.1.1 812 semver: 6.3.1 813 814 '@babel/helper-module-imports@7.18.6': 815 dependencies: 816 - '@babel/types': 7.25.8 817 818 - '@babel/helper-module-imports@7.25.7': 819 dependencies: 820 - '@babel/traverse': 7.25.7 821 - '@babel/types': 7.25.8 822 transitivePeerDependencies: 823 - supports-color 824 825 - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': 826 dependencies: 827 - '@babel/core': 7.25.8 828 - '@babel/helper-module-imports': 7.25.7 829 - '@babel/helper-simple-access': 7.25.7 830 - '@babel/helper-validator-identifier': 7.25.7 831 - '@babel/traverse': 7.25.7 832 transitivePeerDependencies: 833 - supports-color 834 835 - '@babel/helper-plugin-utils@7.25.7': {} 836 837 - '@babel/helper-simple-access@7.25.7': 838 - dependencies: 839 - '@babel/traverse': 7.25.7 840 - '@babel/types': 7.25.8 841 - transitivePeerDependencies: 842 - - supports-color 843 844 - '@babel/helper-string-parser@7.25.7': {} 845 - 846 - '@babel/helper-validator-identifier@7.25.7': {} 847 - 848 - '@babel/helper-validator-option@7.25.7': {} 849 850 - '@babel/helpers@7.25.7': 851 - dependencies: 852 - '@babel/template': 7.25.7 853 - '@babel/types': 7.25.8 854 855 - '@babel/highlight@7.25.7': 856 dependencies: 857 - '@babel/helper-validator-identifier': 7.25.7 858 - chalk: 2.4.2 859 - js-tokens: 4.0.0 860 - picocolors: 1.1.0 861 862 - '@babel/parser@7.25.8': 863 dependencies: 864 - '@babel/types': 7.25.8 865 866 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)': 867 dependencies: 868 - '@babel/core': 7.25.8 869 - '@babel/helper-plugin-utils': 7.25.7 870 871 - '@babel/template@7.25.7': 872 dependencies: 873 - '@babel/code-frame': 7.25.7 874 - '@babel/parser': 7.25.8 875 - '@babel/types': 7.25.8 876 877 - '@babel/traverse@7.25.7': 878 dependencies: 879 - '@babel/code-frame': 7.25.7 880 - '@babel/generator': 7.25.7 881 - '@babel/parser': 7.25.8 882 - '@babel/template': 7.25.7 883 - '@babel/types': 7.25.8 884 - debug: 4.3.7 885 - globals: 11.12.0 886 transitivePeerDependencies: 887 - supports-color 888 889 - '@babel/types@7.25.8': 890 dependencies: 891 - '@babel/helper-string-parser': 7.25.7 892 - '@babel/helper-validator-identifier': 7.25.7 893 - to-fast-properties: 2.0.0 894 895 - '@esbuild/aix-ppc64@0.21.5': 896 optional: true 897 898 - '@esbuild/android-arm64@0.21.5': 899 optional: true 900 901 - '@esbuild/android-arm@0.21.5': 902 optional: true 903 904 - '@esbuild/android-x64@0.21.5': 905 optional: true 906 907 - '@esbuild/darwin-arm64@0.21.5': 908 optional: true 909 910 - '@esbuild/darwin-x64@0.21.5': 911 optional: true 912 913 - '@esbuild/freebsd-arm64@0.21.5': 914 optional: true 915 916 - '@esbuild/freebsd-x64@0.21.5': 917 optional: true 918 919 - '@esbuild/linux-arm64@0.21.5': 920 optional: true 921 922 - '@esbuild/linux-arm@0.21.5': 923 optional: true 924 925 - '@esbuild/linux-ia32@0.21.5': 926 optional: true 927 928 - '@esbuild/linux-loong64@0.21.5': 929 optional: true 930 931 - '@esbuild/linux-mips64el@0.21.5': 932 optional: true 933 934 - '@esbuild/linux-ppc64@0.21.5': 935 optional: true 936 937 - '@esbuild/linux-riscv64@0.21.5': 938 optional: true 939 940 - '@esbuild/linux-s390x@0.21.5': 941 optional: true 942 943 - '@esbuild/linux-x64@0.21.5': 944 optional: true 945 946 - '@esbuild/netbsd-x64@0.21.5': 947 optional: true 948 949 - '@esbuild/openbsd-x64@0.21.5': 950 optional: true 951 952 - '@esbuild/sunos-x64@0.21.5': 953 optional: true 954 955 - '@esbuild/win32-arm64@0.21.5': 956 optional: true 957 958 - '@esbuild/win32-ia32@0.21.5': 959 optional: true 960 961 - '@esbuild/win32-x64@0.21.5': 962 optional: true 963 964 - '@jest/schemas@29.6.3': 965 dependencies: 966 - '@sinclair/typebox': 0.27.8 967 968 - '@jridgewell/gen-mapping@0.3.5': 969 dependencies: 970 - '@jridgewell/set-array': 1.2.1 971 - '@jridgewell/sourcemap-codec': 1.5.0 972 - '@jridgewell/trace-mapping': 0.3.25 973 974 '@jridgewell/resolve-uri@3.1.2': {} 975 976 - '@jridgewell/set-array@1.2.1': {} 977 - 978 - '@jridgewell/sourcemap-codec@1.5.0': {} 979 980 - '@jridgewell/trace-mapping@0.3.25': 981 dependencies: 982 '@jridgewell/resolve-uri': 3.1.2 983 - '@jridgewell/sourcemap-codec': 1.5.0 984 985 - '@rollup/rollup-android-arm-eabi@4.24.0': 986 optional: true 987 988 - '@rollup/rollup-android-arm64@4.24.0': 989 optional: true 990 991 - '@rollup/rollup-darwin-arm64@4.24.0': 992 optional: true 993 994 - '@rollup/rollup-darwin-x64@4.24.0': 995 optional: true 996 997 - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': 998 optional: true 999 1000 - '@rollup/rollup-linux-arm-musleabihf@4.24.0': 1001 optional: true 1002 1003 - '@rollup/rollup-linux-arm64-gnu@4.24.0': 1004 optional: true 1005 1006 - '@rollup/rollup-linux-arm64-musl@4.24.0': 1007 optional: true 1008 1009 - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': 1010 optional: true 1011 1012 - '@rollup/rollup-linux-riscv64-gnu@4.24.0': 1013 optional: true 1014 1015 - '@rollup/rollup-linux-s390x-gnu@4.24.0': 1016 optional: true 1017 1018 - '@rollup/rollup-linux-x64-gnu@4.24.0': 1019 optional: true 1020 1021 - '@rollup/rollup-linux-x64-musl@4.24.0': 1022 optional: true 1023 1024 - '@rollup/rollup-win32-arm64-msvc@4.24.0': 1025 optional: true 1026 1027 - '@rollup/rollup-win32-ia32-msvc@4.24.0': 1028 optional: true 1029 1030 - '@rollup/rollup-win32-x64-msvc@4.24.0': 1031 optional: true 1032 1033 - '@sinclair/typebox@0.27.8': {} 1034 1035 - '@tauri-apps/api@2.0.0-rc.0': {} 1036 1037 - '@tauri-apps/api@2.0.2': {} 1038 1039 - '@tauri-apps/cli-darwin-arm64@2.0.0-rc.5': 1040 optional: true 1041 1042 - '@tauri-apps/cli-darwin-x64@2.0.0-rc.5': 1043 optional: true 1044 1045 - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.5': 1046 optional: true 1047 1048 - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.5': 1049 optional: true 1050 1051 - '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.5': 1052 optional: true 1053 1054 - '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.5': 1055 optional: true 1056 1057 - '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.5': 1058 optional: true 1059 1060 - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.5': 1061 optional: true 1062 1063 - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.5': 1064 optional: true 1065 1066 - '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.5': 1067 optional: true 1068 1069 - '@tauri-apps/cli@2.0.0-rc.5': 1070 optionalDependencies: 1071 - '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.5 1072 - '@tauri-apps/cli-darwin-x64': 2.0.0-rc.5 1073 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.5 1074 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.5 1075 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.5 1076 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.5 1077 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.5 1078 - '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.5 1079 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.5 1080 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.5 1081 1082 - '@tauri-apps/plugin-http@2.0.0-rc.1': 1083 dependencies: 1084 - '@tauri-apps/api': 2.0.2 1085 1086 - '@tauri-apps/plugin-process@2.0.0-rc.0': 1087 dependencies: 1088 - '@tauri-apps/api': 2.0.0-rc.0 1089 1090 - '@tauri-apps/plugin-shell@2.0.0-rc.0': 1091 dependencies: 1092 - '@tauri-apps/api': 2.0.0-rc.0 1093 1094 - '@types/animejs@3.1.12': {} 1095 1096 '@types/babel__core@7.20.5': 1097 dependencies: 1098 - '@babel/parser': 7.25.8 1099 - '@babel/types': 7.25.8 1100 - '@types/babel__generator': 7.6.8 1101 '@types/babel__template': 7.4.4 1102 - '@types/babel__traverse': 7.20.6 1103 1104 - '@types/babel__generator@7.6.8': 1105 dependencies: 1106 - '@babel/types': 7.25.8 1107 1108 '@types/babel__template@7.4.4': 1109 dependencies: 1110 - '@babel/parser': 7.25.8 1111 - '@babel/types': 7.25.8 1112 1113 - '@types/babel__traverse@7.20.6': 1114 dependencies: 1115 - '@babel/types': 7.25.8 1116 1117 - '@types/estree@1.0.6': {} 1118 - 1119 - animejs@3.2.2: {} 1120 1121 - ansi-styles@3.2.1: 1122 - dependencies: 1123 - color-convert: 1.9.3 1124 1125 - ansi-styles@4.3.0: 1126 dependencies: 1127 - color-convert: 2.0.1 1128 - 1129 - ansi-styles@5.2.0: {} 1130 - 1131 - babel-plugin-jsx-dom-expressions@0.39.2(@babel/core@7.25.8): 1132 - dependencies: 1133 - '@babel/core': 7.25.8 1134 '@babel/helper-module-imports': 7.18.6 1135 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) 1136 - '@babel/types': 7.25.8 1137 html-entities: 2.3.3 1138 - jest-diff: 29.7.0 1139 - parse5: 7.2.0 1140 - validate-html-nesting: 1.2.2 1141 - 1142 - babel-preset-solid@1.9.2(@babel/core@7.25.8): 1143 - dependencies: 1144 - '@babel/core': 7.25.8 1145 - babel-plugin-jsx-dom-expressions: 0.39.2(@babel/core@7.25.8) 1146 - 1147 - browserslist@4.24.0: 1148 - dependencies: 1149 - caniuse-lite: 1.0.30001669 1150 - electron-to-chromium: 1.5.39 1151 - node-releases: 2.0.18 1152 - update-browserslist-db: 1.1.1(browserslist@4.24.0) 1153 - 1154 - caniuse-lite@1.0.30001669: {} 1155 1156 - chalk@2.4.2: 1157 dependencies: 1158 - ansi-styles: 3.2.1 1159 - escape-string-regexp: 1.0.5 1160 - supports-color: 5.5.0 1161 1162 - chalk@4.1.2: 1163 - dependencies: 1164 - ansi-styles: 4.3.0 1165 - supports-color: 7.2.0 1166 1167 - color-convert@1.9.3: 1168 dependencies: 1169 - color-name: 1.1.3 1170 1171 - color-convert@2.0.1: 1172 - dependencies: 1173 - color-name: 1.1.4 1174 - 1175 - color-name@1.1.3: {} 1176 - 1177 - color-name@1.1.4: {} 1178 1179 convert-source-map@2.0.0: {} 1180 1181 csstype@3.1.3: {} 1182 1183 - debug@4.3.7: 1184 dependencies: 1185 ms: 2.1.3 1186 1187 - diff-sequences@29.6.3: {} 1188 1189 - electron-to-chromium@1.5.39: {} 1190 - 1191 - entities@4.5.0: {} 1192 1193 - esbuild@0.21.5: 1194 optionalDependencies: 1195 - '@esbuild/aix-ppc64': 0.21.5 1196 - '@esbuild/android-arm': 0.21.5 1197 - '@esbuild/android-arm64': 0.21.5 1198 - '@esbuild/android-x64': 0.21.5 1199 - '@esbuild/darwin-arm64': 0.21.5 1200 - '@esbuild/darwin-x64': 0.21.5 1201 - '@esbuild/freebsd-arm64': 0.21.5 1202 - '@esbuild/freebsd-x64': 0.21.5 1203 - '@esbuild/linux-arm': 0.21.5 1204 - '@esbuild/linux-arm64': 0.21.5 1205 - '@esbuild/linux-ia32': 0.21.5 1206 - '@esbuild/linux-loong64': 0.21.5 1207 - '@esbuild/linux-mips64el': 0.21.5 1208 - '@esbuild/linux-ppc64': 0.21.5 1209 - '@esbuild/linux-riscv64': 0.21.5 1210 - '@esbuild/linux-s390x': 0.21.5 1211 - '@esbuild/linux-x64': 0.21.5 1212 - '@esbuild/netbsd-x64': 0.21.5 1213 - '@esbuild/openbsd-x64': 0.21.5 1214 - '@esbuild/sunos-x64': 0.21.5 1215 - '@esbuild/win32-arm64': 0.21.5 1216 - '@esbuild/win32-ia32': 0.21.5 1217 - '@esbuild/win32-x64': 0.21.5 1218 1219 escalade@3.2.0: {} 1220 1221 - escape-string-regexp@1.0.5: {} 1222 1223 fsevents@2.3.3: 1224 optional: true 1225 1226 gensync@1.0.0-beta.2: {} 1227 1228 - globals@11.12.0: {} 1229 - 1230 - has-flag@3.0.0: {} 1231 - 1232 - has-flag@4.0.0: {} 1233 - 1234 html-entities@2.3.3: {} 1235 1236 is-what@4.1.16: {} 1237 1238 - jest-diff@29.7.0: 1239 - dependencies: 1240 - chalk: 4.1.2 1241 - diff-sequences: 29.6.3 1242 - jest-get-type: 29.6.3 1243 - pretty-format: 29.7.0 1244 - 1245 - jest-get-type@29.6.3: {} 1246 - 1247 js-tokens@4.0.0: {} 1248 1249 - jsesc@3.0.2: {} 1250 1251 json5@2.2.3: {} 1252 ··· 1260 1261 ms@2.1.3: {} 1262 1263 - nanoid@3.3.7: {} 1264 1265 - node-releases@2.0.18: {} 1266 1267 - parse5@7.2.0: 1268 dependencies: 1269 - entities: 4.5.0 1270 1271 - picocolors@1.1.0: {} 1272 1273 - postcss@8.4.47: 1274 - dependencies: 1275 - nanoid: 3.3.7 1276 - picocolors: 1.1.0 1277 - source-map-js: 1.2.1 1278 1279 - pretty-format@29.7.0: 1280 dependencies: 1281 - '@jest/schemas': 29.6.3 1282 - ansi-styles: 5.2.0 1283 - react-is: 18.3.1 1284 - 1285 - react-is@18.3.1: {} 1286 1287 - rollup@4.24.0: 1288 dependencies: 1289 - '@types/estree': 1.0.6 1290 optionalDependencies: 1291 - '@rollup/rollup-android-arm-eabi': 4.24.0 1292 - '@rollup/rollup-android-arm64': 4.24.0 1293 - '@rollup/rollup-darwin-arm64': 4.24.0 1294 - '@rollup/rollup-darwin-x64': 4.24.0 1295 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 1296 - '@rollup/rollup-linux-arm-musleabihf': 4.24.0 1297 - '@rollup/rollup-linux-arm64-gnu': 4.24.0 1298 - '@rollup/rollup-linux-arm64-musl': 4.24.0 1299 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 1300 - '@rollup/rollup-linux-riscv64-gnu': 4.24.0 1301 - '@rollup/rollup-linux-s390x-gnu': 4.24.0 1302 - '@rollup/rollup-linux-x64-gnu': 4.24.0 1303 - '@rollup/rollup-linux-x64-musl': 4.24.0 1304 - '@rollup/rollup-win32-arm64-msvc': 4.24.0 1305 - '@rollup/rollup-win32-ia32-msvc': 4.24.0 1306 - '@rollup/rollup-win32-x64-msvc': 4.24.0 1307 fsevents: 2.3.3 1308 1309 semver@6.3.1: {} 1310 1311 - seroval-plugins@1.1.1(seroval@1.1.1): 1312 dependencies: 1313 - seroval: 1.1.1 1314 1315 - seroval@1.1.1: {} 1316 1317 - solid-js@1.9.2: 1318 dependencies: 1319 csstype: 3.1.3 1320 - seroval: 1.1.1 1321 - seroval-plugins: 1.1.1(seroval@1.1.1) 1322 1323 - solid-refresh@0.6.3(solid-js@1.9.2): 1324 dependencies: 1325 - '@babel/generator': 7.25.7 1326 - '@babel/helper-module-imports': 7.25.7 1327 - '@babel/types': 7.25.8 1328 - solid-js: 1.9.2 1329 transitivePeerDependencies: 1330 - supports-color 1331 1332 source-map-js@1.2.1: {} 1333 1334 - supports-color@5.5.0: 1335 dependencies: 1336 - has-flag: 3.0.0 1337 1338 - supports-color@7.2.0: 1339 - dependencies: 1340 - has-flag: 4.0.0 1341 1342 - to-fast-properties@2.0.0: {} 1343 - 1344 - typescript@5.6.3: {} 1345 - 1346 - update-browserslist-db@1.1.1(browserslist@4.24.0): 1347 dependencies: 1348 - browserslist: 4.24.0 1349 escalade: 3.2.0 1350 - picocolors: 1.1.0 1351 1352 - validate-html-nesting@1.2.2: {} 1353 - 1354 - vite-plugin-solid@2.10.2(solid-js@1.9.2)(vite@5.4.9): 1355 dependencies: 1356 - '@babel/core': 7.25.8 1357 '@types/babel__core': 7.20.5 1358 - babel-preset-solid: 1.9.2(@babel/core@7.25.8) 1359 merge-anything: 5.1.7 1360 - solid-js: 1.9.2 1361 - solid-refresh: 0.6.3(solid-js@1.9.2) 1362 - vite: 5.4.9 1363 - vitefu: 0.2.5(vite@5.4.9) 1364 transitivePeerDependencies: 1365 - supports-color 1366 1367 - vite@5.4.9: 1368 dependencies: 1369 - esbuild: 0.21.5 1370 - postcss: 8.4.47 1371 - rollup: 4.24.0 1372 optionalDependencies: 1373 fsevents: 2.3.3 1374 1375 - vitefu@0.2.5(vite@5.4.9): 1376 - dependencies: 1377 - vite: 5.4.9 1378 1379 yallist@3.1.1: {}
··· 9 .: 10 dependencies: 11 '@tauri-apps/api': 12 + specifier: 2.9.0 13 + version: 2.9.0 14 + '@tauri-apps/plugin-deep-link': 15 + specifier: ^2.4.5 16 + version: 2.4.5 17 '@tauri-apps/plugin-http': 18 + specifier: 2.5.4 19 + version: 2.5.4 20 '@tauri-apps/plugin-process': 21 + specifier: 2.3.1 22 + version: 2.3.1 23 '@tauri-apps/plugin-shell': 24 + specifier: 2.3.3 25 + version: 2.3.3 26 animejs: 27 + specifier: ^4.2.2 28 + version: 4.2.2 29 solid-js: 30 + specifier: ^1.9.10 31 + version: 1.9.10 32 devDependencies: 33 '@tauri-apps/cli': 34 + specifier: 2.9.3 35 + version: 2.9.3 36 + '@types/animejs': 37 + specifier: ^3.1.13 38 + version: 3.1.13 39 typescript: 40 + specifier: ^5.9.3 41 + version: 5.9.3 42 vite: 43 + specifier: ^7.2.2 44 + version: 7.2.2 45 vite-plugin-solid: 46 + specifier: ^2.11.10 47 + version: 2.11.10(solid-js@1.9.10)(vite@7.2.2) 48 49 packages: 50 51 + '@babel/code-frame@7.27.1': 52 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 53 + engines: {node: '>=6.9.0'} 54 55 + '@babel/compat-data@7.28.5': 56 + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} 57 engines: {node: '>=6.9.0'} 58 59 + '@babel/core@7.28.5': 60 + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} 61 engines: {node: '>=6.9.0'} 62 63 + '@babel/generator@7.28.5': 64 + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 65 engines: {node: '>=6.9.0'} 66 67 + '@babel/helper-compilation-targets@7.27.2': 68 + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 69 engines: {node: '>=6.9.0'} 70 71 + '@babel/helper-globals@7.28.0': 72 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 73 engines: {node: '>=6.9.0'} 74 75 '@babel/helper-module-imports@7.18.6': 76 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 77 engines: {node: '>=6.9.0'} 78 79 + '@babel/helper-module-imports@7.27.1': 80 + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 81 engines: {node: '>=6.9.0'} 82 83 + '@babel/helper-module-transforms@7.28.3': 84 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 85 engines: {node: '>=6.9.0'} 86 peerDependencies: 87 '@babel/core': ^7.0.0 88 89 + '@babel/helper-plugin-utils@7.27.1': 90 + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 91 engines: {node: '>=6.9.0'} 92 93 + '@babel/helper-string-parser@7.27.1': 94 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 95 engines: {node: '>=6.9.0'} 96 97 + '@babel/helper-validator-identifier@7.28.5': 98 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 99 engines: {node: '>=6.9.0'} 100 101 + '@babel/helper-validator-option@7.27.1': 102 + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 103 engines: {node: '>=6.9.0'} 104 105 + '@babel/helpers@7.28.4': 106 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 107 engines: {node: '>=6.9.0'} 108 109 + '@babel/parser@7.28.5': 110 + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 111 engines: {node: '>=6.0.0'} 112 hasBin: true 113 114 + '@babel/plugin-syntax-jsx@7.27.1': 115 + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 116 engines: {node: '>=6.9.0'} 117 peerDependencies: 118 '@babel/core': ^7.0.0-0 119 120 + '@babel/template@7.27.2': 121 + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 122 engines: {node: '>=6.9.0'} 123 124 + '@babel/traverse@7.28.5': 125 + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} 126 engines: {node: '>=6.9.0'} 127 128 + '@babel/types@7.28.5': 129 + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 130 engines: {node: '>=6.9.0'} 131 132 + '@esbuild/aix-ppc64@0.25.12': 133 + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 134 + engines: {node: '>=18'} 135 cpu: [ppc64] 136 os: [aix] 137 138 + '@esbuild/android-arm64@0.25.12': 139 + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 140 + engines: {node: '>=18'} 141 cpu: [arm64] 142 os: [android] 143 144 + '@esbuild/android-arm@0.25.12': 145 + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 146 + engines: {node: '>=18'} 147 cpu: [arm] 148 os: [android] 149 150 + '@esbuild/android-x64@0.25.12': 151 + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 152 + engines: {node: '>=18'} 153 cpu: [x64] 154 os: [android] 155 156 + '@esbuild/darwin-arm64@0.25.12': 157 + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 158 + engines: {node: '>=18'} 159 cpu: [arm64] 160 os: [darwin] 161 162 + '@esbuild/darwin-x64@0.25.12': 163 + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 164 + engines: {node: '>=18'} 165 cpu: [x64] 166 os: [darwin] 167 168 + '@esbuild/freebsd-arm64@0.25.12': 169 + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 170 + engines: {node: '>=18'} 171 cpu: [arm64] 172 os: [freebsd] 173 174 + '@esbuild/freebsd-x64@0.25.12': 175 + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 176 + engines: {node: '>=18'} 177 cpu: [x64] 178 os: [freebsd] 179 180 + '@esbuild/linux-arm64@0.25.12': 181 + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 182 + engines: {node: '>=18'} 183 cpu: [arm64] 184 os: [linux] 185 186 + '@esbuild/linux-arm@0.25.12': 187 + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 188 + engines: {node: '>=18'} 189 cpu: [arm] 190 os: [linux] 191 192 + '@esbuild/linux-ia32@0.25.12': 193 + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 194 + engines: {node: '>=18'} 195 cpu: [ia32] 196 os: [linux] 197 198 + '@esbuild/linux-loong64@0.25.12': 199 + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 200 + engines: {node: '>=18'} 201 cpu: [loong64] 202 os: [linux] 203 204 + '@esbuild/linux-mips64el@0.25.12': 205 + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 206 + engines: {node: '>=18'} 207 cpu: [mips64el] 208 os: [linux] 209 210 + '@esbuild/linux-ppc64@0.25.12': 211 + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 212 + engines: {node: '>=18'} 213 cpu: [ppc64] 214 os: [linux] 215 216 + '@esbuild/linux-riscv64@0.25.12': 217 + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 218 + engines: {node: '>=18'} 219 cpu: [riscv64] 220 os: [linux] 221 222 + '@esbuild/linux-s390x@0.25.12': 223 + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 224 + engines: {node: '>=18'} 225 cpu: [s390x] 226 os: [linux] 227 228 + '@esbuild/linux-x64@0.25.12': 229 + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 230 + engines: {node: '>=18'} 231 cpu: [x64] 232 os: [linux] 233 234 + '@esbuild/netbsd-arm64@0.25.12': 235 + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 236 + engines: {node: '>=18'} 237 + cpu: [arm64] 238 + os: [netbsd] 239 + 240 + '@esbuild/netbsd-x64@0.25.12': 241 + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 242 + engines: {node: '>=18'} 243 cpu: [x64] 244 os: [netbsd] 245 246 + '@esbuild/openbsd-arm64@0.25.12': 247 + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 248 + engines: {node: '>=18'} 249 + cpu: [arm64] 250 + os: [openbsd] 251 + 252 + '@esbuild/openbsd-x64@0.25.12': 253 + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 254 + engines: {node: '>=18'} 255 cpu: [x64] 256 os: [openbsd] 257 258 + '@esbuild/openharmony-arm64@0.25.12': 259 + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 260 + engines: {node: '>=18'} 261 + cpu: [arm64] 262 + os: [openharmony] 263 + 264 + '@esbuild/sunos-x64@0.25.12': 265 + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 266 + engines: {node: '>=18'} 267 cpu: [x64] 268 os: [sunos] 269 270 + '@esbuild/win32-arm64@0.25.12': 271 + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 272 + engines: {node: '>=18'} 273 cpu: [arm64] 274 os: [win32] 275 276 + '@esbuild/win32-ia32@0.25.12': 277 + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 278 + engines: {node: '>=18'} 279 cpu: [ia32] 280 os: [win32] 281 282 + '@esbuild/win32-x64@0.25.12': 283 + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 284 + engines: {node: '>=18'} 285 cpu: [x64] 286 os: [win32] 287 288 + '@jridgewell/gen-mapping@0.3.13': 289 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 290 291 + '@jridgewell/remapping@2.3.5': 292 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 293 294 '@jridgewell/resolve-uri@3.1.2': 295 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 296 engines: {node: '>=6.0.0'} 297 298 + '@jridgewell/sourcemap-codec@1.5.5': 299 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 300 301 + '@jridgewell/trace-mapping@0.3.31': 302 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 303 304 + '@rollup/rollup-android-arm-eabi@4.52.5': 305 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 306 cpu: [arm] 307 os: [android] 308 309 + '@rollup/rollup-android-arm64@4.52.5': 310 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 311 cpu: [arm64] 312 os: [android] 313 314 + '@rollup/rollup-darwin-arm64@4.52.5': 315 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 316 cpu: [arm64] 317 os: [darwin] 318 319 + '@rollup/rollup-darwin-x64@4.52.5': 320 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 321 cpu: [x64] 322 os: [darwin] 323 324 + '@rollup/rollup-freebsd-arm64@4.52.5': 325 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 326 + cpu: [arm64] 327 + os: [freebsd] 328 + 329 + '@rollup/rollup-freebsd-x64@4.52.5': 330 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 331 + cpu: [x64] 332 + os: [freebsd] 333 + 334 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 335 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 336 cpu: [arm] 337 os: [linux] 338 339 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 340 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 341 cpu: [arm] 342 os: [linux] 343 344 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 345 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 346 cpu: [arm64] 347 os: [linux] 348 349 + '@rollup/rollup-linux-arm64-musl@4.52.5': 350 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 351 cpu: [arm64] 352 os: [linux] 353 354 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 355 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 356 + cpu: [loong64] 357 + os: [linux] 358 + 359 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 360 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 361 cpu: [ppc64] 362 os: [linux] 363 364 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 365 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 366 + cpu: [riscv64] 367 + os: [linux] 368 + 369 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 370 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 371 cpu: [riscv64] 372 os: [linux] 373 374 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 375 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 376 cpu: [s390x] 377 os: [linux] 378 379 + '@rollup/rollup-linux-x64-gnu@4.52.5': 380 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 381 cpu: [x64] 382 os: [linux] 383 384 + '@rollup/rollup-linux-x64-musl@4.52.5': 385 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 386 cpu: [x64] 387 os: [linux] 388 389 + '@rollup/rollup-openharmony-arm64@4.52.5': 390 + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 391 + cpu: [arm64] 392 + os: [openharmony] 393 + 394 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 395 + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 396 cpu: [arm64] 397 os: [win32] 398 399 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 400 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 401 cpu: [ia32] 402 os: [win32] 403 404 + '@rollup/rollup-win32-x64-gnu@4.52.5': 405 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 406 cpu: [x64] 407 os: [win32] 408 409 + '@rollup/rollup-win32-x64-msvc@4.52.5': 410 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 411 + cpu: [x64] 412 + os: [win32] 413 414 + '@tauri-apps/api@2.9.0': 415 + resolution: {integrity: sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==} 416 417 + '@tauri-apps/cli-darwin-arm64@2.9.3': 418 + resolution: {integrity: sha512-W8FQXZXQmQ0Fmj9UJXNrm2mLdIaLLriKVY7o/FzmizyIKTPIvHjfZALTNybbpTQRbJvKoGHLrW1DNzAWVDWJYg==} 419 engines: {node: '>= 10'} 420 cpu: [arm64] 421 os: [darwin] 422 423 + '@tauri-apps/cli-darwin-x64@2.9.3': 424 + resolution: {integrity: sha512-zDwu40rlshijt3TU6aRvzPUyVpapsx1sNfOlreDMTaMelQLHl6YoQzSRpLHYwrHrhimxyX2uDqnKIiuGel0Lhg==} 425 engines: {node: '>= 10'} 426 cpu: [x64] 427 os: [darwin] 428 429 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 430 + resolution: {integrity: sha512-+Oc2OfcTRwYtW93VJqd/HOk77buORwC9IToj/qsEvM7bTMq6Kda4alpZprzwrCHYANSw+zD8PgjJdljTpe4p+g==} 431 engines: {node: '>= 10'} 432 cpu: [arm] 433 os: [linux] 434 435 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 436 + resolution: {integrity: sha512-59GqU/J1n9wFyAtleoQOaU0oVIo+kwQynEw4meFDoKRXszKGor6lTsbsS3r0QKLSPbc0o/yYGJhqqCtkYjb/eg==} 437 engines: {node: '>= 10'} 438 cpu: [arm64] 439 os: [linux] 440 441 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 442 + resolution: {integrity: sha512-fzvG+jEn5/iYGNH6Z2IRMheYFC4pJdXa19BR9fFm6Bdn2cuajRLDKdUcEME/DCtwqclphXtFZTrT4oezY5vI/A==} 443 engines: {node: '>= 10'} 444 cpu: [arm64] 445 os: [linux] 446 447 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 448 + resolution: {integrity: sha512-qV8DZXI/fZwawk6T3Th1g6smiNC2KeQTk7XFgKvqZ6btC01z3UTsQmNGvI602zwm3Ld1TBZb4+rEWu2QmQimmw==} 449 + engines: {node: '>= 10'} 450 + cpu: [riscv64] 451 + os: [linux] 452 + 453 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 454 + resolution: {integrity: sha512-tquyEONCNRfqEBWEe4eAHnxFN5yY5lFkCuD4w79XLIovUxVftQ684+xLp7zkhntkt4y20SMj2AgJa/+MOlx4Kg==} 455 engines: {node: '>= 10'} 456 cpu: [x64] 457 os: [linux] 458 459 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 460 + resolution: {integrity: sha512-v2cBIB/6ji8DL+aiL5QUykU3ZO8OoJGyx50/qv2HQVzkf85KdaYSis3D/oVRemN/pcDz+vyCnnL3XnzFnDl4JQ==} 461 engines: {node: '>= 10'} 462 cpu: [x64] 463 os: [linux] 464 465 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 466 + resolution: {integrity: sha512-ZGvBy7nvrHPbE0HeKp/ioaiw8bNgAHxWnb7JRZ4/G0A+oFj0SeSFxl9k5uU6FKnM7bHM23Gd1oeaDex9g5Fceg==} 467 engines: {node: '>= 10'} 468 cpu: [arm64] 469 os: [win32] 470 471 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 472 + resolution: {integrity: sha512-UsgIwOnpCoY9NK9/65QiwgmWVIE80LE7SwRYVblGtmlY9RYfsYvpbItwsovA/AcHMTiO+OCvS/q9yLeqS3m6Sg==} 473 engines: {node: '>= 10'} 474 cpu: [ia32] 475 os: [win32] 476 477 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 478 + resolution: {integrity: sha512-fmw7NrrHE5m49idCvJAx9T9bsupjdJ0a3p3DPCNCZRGANU6R1tA1L+KTlVuUtdAldX2NqU/9UPo2SCslYKgJHQ==} 479 engines: {node: '>= 10'} 480 cpu: [x64] 481 os: [win32] 482 483 + '@tauri-apps/cli@2.9.3': 484 + resolution: {integrity: sha512-BQ7iLUXTQcyG1PpzLWeVSmBCedYDpnA/6Cm/kRFGtqjTf/eVUlyYO5S2ee07tLum3nWwDBWTGFZeruO8yEukfA==} 485 engines: {node: '>= 10'} 486 hasBin: true 487 488 + '@tauri-apps/plugin-deep-link@2.4.5': 489 + resolution: {integrity: sha512-Zf2RTj1D9IQQ45/jqW8XTKvql24HqlPjcpv0mV/O2jHQkNe11HOTZBVj6IK37qs+MWV7xZzcmazx/QVZnhAwaQ==} 490 491 + '@tauri-apps/plugin-http@2.5.4': 492 + resolution: {integrity: sha512-/i4U/9za3mrytTgfRn5RHneKubZE/dwRmshYwyMvNRlkWjvu1m4Ma72kcbVJMZFGXpkbl+qLyWMGrihtWB76Zg==} 493 494 + '@tauri-apps/plugin-process@2.3.1': 495 + resolution: {integrity: sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==} 496 497 + '@tauri-apps/plugin-shell@2.3.3': 498 + resolution: {integrity: sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==} 499 + 500 + '@types/animejs@3.1.13': 501 + resolution: {integrity: sha512-yWg9l1z7CAv/TKpty4/vupEh24jDGUZXv4r26StRkpUPQm04ztJaftgpto8vwdFs8SiTq6XfaPKCSI+wjzNMvQ==} 502 503 '@types/babel__core@7.20.5': 504 resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 505 506 + '@types/babel__generator@7.27.0': 507 + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 508 509 '@types/babel__template@7.4.4': 510 resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 511 512 + '@types/babel__traverse@7.28.0': 513 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 514 515 + '@types/estree@1.0.8': 516 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 517 518 + animejs@4.2.2: 519 + resolution: {integrity: sha512-Ys3RuvLdAeI14fsdKCQy7ytu4057QX6Bb7m4jwmfd6iKmUmLquTwk1ut0e4NtRQgCeq/s2Lv5+oMBjz6c7ZuIg==} 520 521 + babel-plugin-jsx-dom-expressions@0.40.3: 522 + resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==} 523 peerDependencies: 524 '@babel/core': ^7.20.12 525 526 + babel-preset-solid@1.9.10: 527 + resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==} 528 peerDependencies: 529 '@babel/core': ^7.0.0 530 + solid-js: ^1.9.10 531 + peerDependenciesMeta: 532 + solid-js: 533 + optional: true 534 535 + baseline-browser-mapping@2.8.25: 536 + resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==} 537 hasBin: true 538 539 + browserslist@4.27.0: 540 + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} 541 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 542 + hasBin: true 543 544 + caniuse-lite@1.0.30001754: 545 + resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} 546 547 convert-source-map@2.0.0: 548 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} ··· 550 csstype@3.1.3: 551 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 552 553 + debug@4.4.3: 554 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 555 engines: {node: '>=6.0'} 556 peerDependencies: 557 supports-color: '*' ··· 559 supports-color: 560 optional: true 561 562 + electron-to-chromium@1.5.248: 563 + resolution: {integrity: sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==} 564 565 + entities@6.0.1: 566 + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 567 engines: {node: '>=0.12'} 568 569 + esbuild@0.25.12: 570 + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 571 + engines: {node: '>=18'} 572 hasBin: true 573 574 escalade@3.2.0: 575 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 576 engines: {node: '>=6'} 577 578 + fdir@6.5.0: 579 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 580 + engines: {node: '>=12.0.0'} 581 + peerDependencies: 582 + picomatch: ^3 || ^4 583 + peerDependenciesMeta: 584 + picomatch: 585 + optional: true 586 587 fsevents@2.3.3: 588 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} ··· 593 resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 594 engines: {node: '>=6.9.0'} 595 596 html-entities@2.3.3: 597 resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 598 ··· 600 resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 601 engines: {node: '>=12.13'} 602 603 js-tokens@4.0.0: 604 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 605 606 + jsesc@3.1.0: 607 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 608 engines: {node: '>=6'} 609 hasBin: true 610 ··· 623 ms@2.1.3: 624 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 625 626 + nanoid@3.3.11: 627 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 628 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 629 hasBin: true 630 631 + node-releases@2.0.27: 632 + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} 633 + 634 + parse5@7.3.0: 635 + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 636 637 + picocolors@1.1.1: 638 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 639 640 + picomatch@4.0.3: 641 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 642 + engines: {node: '>=12'} 643 644 + postcss@8.5.6: 645 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 646 engines: {node: ^10 || ^12 || >=14} 647 648 + rollup@4.52.5: 649 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 650 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 651 hasBin: true 652 ··· 654 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 655 hasBin: true 656 657 + seroval-plugins@1.3.3: 658 + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 659 engines: {node: '>=10'} 660 peerDependencies: 661 seroval: ^1.0 662 663 + seroval@1.3.2: 664 + resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 665 engines: {node: '>=10'} 666 667 + solid-js@1.9.10: 668 + resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} 669 670 solid-refresh@0.6.3: 671 resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} ··· 676 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 677 engines: {node: '>=0.10.0'} 678 679 + tinyglobby@0.2.15: 680 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 681 + engines: {node: '>=12.0.0'} 682 683 + typescript@5.9.3: 684 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 685 engines: {node: '>=14.17'} 686 hasBin: true 687 688 + update-browserslist-db@1.1.4: 689 + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} 690 hasBin: true 691 peerDependencies: 692 browserslist: '>= 4.21.0' 693 694 + vite-plugin-solid@2.11.10: 695 + resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==} 696 peerDependencies: 697 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 698 solid-js: ^1.7.2 699 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 700 peerDependenciesMeta: 701 '@testing-library/jest-dom': 702 optional: true 703 704 + vite@7.2.2: 705 + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} 706 + engines: {node: ^20.19.0 || >=22.12.0} 707 hasBin: true 708 peerDependencies: 709 + '@types/node': ^20.19.0 || >=22.12.0 710 + jiti: '>=1.21.0' 711 + less: ^4.0.0 712 lightningcss: ^1.21.0 713 + sass: ^1.70.0 714 + sass-embedded: ^1.70.0 715 + stylus: '>=0.54.8' 716 + sugarss: ^5.0.0 717 + terser: ^5.16.0 718 + tsx: ^4.8.1 719 + yaml: ^2.4.2 720 peerDependenciesMeta: 721 '@types/node': 722 + optional: true 723 + jiti: 724 optional: true 725 less: 726 optional: true ··· 736 optional: true 737 terser: 738 optional: true 739 + tsx: 740 + optional: true 741 + yaml: 742 + optional: true 743 744 + vitefu@1.1.1: 745 + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 746 peerDependencies: 747 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 748 peerDependenciesMeta: 749 vite: 750 optional: true ··· 754 755 snapshots: 756 757 + '@babel/code-frame@7.27.1': 758 dependencies: 759 + '@babel/helper-validator-identifier': 7.28.5 760 + js-tokens: 4.0.0 761 + picocolors: 1.1.1 762 763 + '@babel/compat-data@7.28.5': {} 764 765 + '@babel/core@7.28.5': 766 dependencies: 767 + '@babel/code-frame': 7.27.1 768 + '@babel/generator': 7.28.5 769 + '@babel/helper-compilation-targets': 7.27.2 770 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) 771 + '@babel/helpers': 7.28.4 772 + '@babel/parser': 7.28.5 773 + '@babel/template': 7.27.2 774 + '@babel/traverse': 7.28.5 775 + '@babel/types': 7.28.5 776 + '@jridgewell/remapping': 2.3.5 777 convert-source-map: 2.0.0 778 + debug: 4.4.3 779 gensync: 1.0.0-beta.2 780 json5: 2.2.3 781 semver: 6.3.1 782 transitivePeerDependencies: 783 - supports-color 784 785 + '@babel/generator@7.28.5': 786 dependencies: 787 + '@babel/parser': 7.28.5 788 + '@babel/types': 7.28.5 789 + '@jridgewell/gen-mapping': 0.3.13 790 + '@jridgewell/trace-mapping': 0.3.31 791 + jsesc: 3.1.0 792 793 + '@babel/helper-compilation-targets@7.27.2': 794 dependencies: 795 + '@babel/compat-data': 7.28.5 796 + '@babel/helper-validator-option': 7.27.1 797 + browserslist: 4.27.0 798 lru-cache: 5.1.1 799 semver: 6.3.1 800 801 + '@babel/helper-globals@7.28.0': {} 802 + 803 '@babel/helper-module-imports@7.18.6': 804 dependencies: 805 + '@babel/types': 7.28.5 806 807 + '@babel/helper-module-imports@7.27.1': 808 dependencies: 809 + '@babel/traverse': 7.28.5 810 + '@babel/types': 7.28.5 811 transitivePeerDependencies: 812 - supports-color 813 814 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': 815 dependencies: 816 + '@babel/core': 7.28.5 817 + '@babel/helper-module-imports': 7.27.1 818 + '@babel/helper-validator-identifier': 7.28.5 819 + '@babel/traverse': 7.28.5 820 transitivePeerDependencies: 821 - supports-color 822 823 + '@babel/helper-plugin-utils@7.27.1': {} 824 825 + '@babel/helper-string-parser@7.27.1': {} 826 827 + '@babel/helper-validator-identifier@7.28.5': {} 828 829 + '@babel/helper-validator-option@7.27.1': {} 830 831 + '@babel/helpers@7.28.4': 832 dependencies: 833 + '@babel/template': 7.27.2 834 + '@babel/types': 7.28.5 835 836 + '@babel/parser@7.28.5': 837 dependencies: 838 + '@babel/types': 7.28.5 839 840 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': 841 dependencies: 842 + '@babel/core': 7.28.5 843 + '@babel/helper-plugin-utils': 7.27.1 844 845 + '@babel/template@7.27.2': 846 dependencies: 847 + '@babel/code-frame': 7.27.1 848 + '@babel/parser': 7.28.5 849 + '@babel/types': 7.28.5 850 851 + '@babel/traverse@7.28.5': 852 dependencies: 853 + '@babel/code-frame': 7.27.1 854 + '@babel/generator': 7.28.5 855 + '@babel/helper-globals': 7.28.0 856 + '@babel/parser': 7.28.5 857 + '@babel/template': 7.27.2 858 + '@babel/types': 7.28.5 859 + debug: 4.4.3 860 transitivePeerDependencies: 861 - supports-color 862 863 + '@babel/types@7.28.5': 864 dependencies: 865 + '@babel/helper-string-parser': 7.27.1 866 + '@babel/helper-validator-identifier': 7.28.5 867 868 + '@esbuild/aix-ppc64@0.25.12': 869 optional: true 870 871 + '@esbuild/android-arm64@0.25.12': 872 optional: true 873 874 + '@esbuild/android-arm@0.25.12': 875 optional: true 876 877 + '@esbuild/android-x64@0.25.12': 878 optional: true 879 880 + '@esbuild/darwin-arm64@0.25.12': 881 optional: true 882 883 + '@esbuild/darwin-x64@0.25.12': 884 optional: true 885 886 + '@esbuild/freebsd-arm64@0.25.12': 887 optional: true 888 889 + '@esbuild/freebsd-x64@0.25.12': 890 optional: true 891 892 + '@esbuild/linux-arm64@0.25.12': 893 optional: true 894 895 + '@esbuild/linux-arm@0.25.12': 896 optional: true 897 898 + '@esbuild/linux-ia32@0.25.12': 899 optional: true 900 901 + '@esbuild/linux-loong64@0.25.12': 902 optional: true 903 904 + '@esbuild/linux-mips64el@0.25.12': 905 optional: true 906 907 + '@esbuild/linux-ppc64@0.25.12': 908 optional: true 909 910 + '@esbuild/linux-riscv64@0.25.12': 911 optional: true 912 913 + '@esbuild/linux-s390x@0.25.12': 914 optional: true 915 916 + '@esbuild/linux-x64@0.25.12': 917 optional: true 918 919 + '@esbuild/netbsd-arm64@0.25.12': 920 optional: true 921 922 + '@esbuild/netbsd-x64@0.25.12': 923 optional: true 924 925 + '@esbuild/openbsd-arm64@0.25.12': 926 optional: true 927 928 + '@esbuild/openbsd-x64@0.25.12': 929 optional: true 930 931 + '@esbuild/openharmony-arm64@0.25.12': 932 + optional: true 933 + 934 + '@esbuild/sunos-x64@0.25.12': 935 + optional: true 936 + 937 + '@esbuild/win32-arm64@0.25.12': 938 + optional: true 939 + 940 + '@esbuild/win32-ia32@0.25.12': 941 optional: true 942 943 + '@esbuild/win32-x64@0.25.12': 944 optional: true 945 946 + '@jridgewell/gen-mapping@0.3.13': 947 dependencies: 948 + '@jridgewell/sourcemap-codec': 1.5.5 949 + '@jridgewell/trace-mapping': 0.3.31 950 951 + '@jridgewell/remapping@2.3.5': 952 dependencies: 953 + '@jridgewell/gen-mapping': 0.3.13 954 + '@jridgewell/trace-mapping': 0.3.31 955 956 '@jridgewell/resolve-uri@3.1.2': {} 957 958 + '@jridgewell/sourcemap-codec@1.5.5': {} 959 960 + '@jridgewell/trace-mapping@0.3.31': 961 dependencies: 962 '@jridgewell/resolve-uri': 3.1.2 963 + '@jridgewell/sourcemap-codec': 1.5.5 964 965 + '@rollup/rollup-android-arm-eabi@4.52.5': 966 optional: true 967 968 + '@rollup/rollup-android-arm64@4.52.5': 969 optional: true 970 971 + '@rollup/rollup-darwin-arm64@4.52.5': 972 optional: true 973 974 + '@rollup/rollup-darwin-x64@4.52.5': 975 optional: true 976 977 + '@rollup/rollup-freebsd-arm64@4.52.5': 978 optional: true 979 980 + '@rollup/rollup-freebsd-x64@4.52.5': 981 optional: true 982 983 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 984 optional: true 985 986 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 987 optional: true 988 989 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 990 optional: true 991 992 + '@rollup/rollup-linux-arm64-musl@4.52.5': 993 optional: true 994 995 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 996 optional: true 997 998 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 999 optional: true 1000 1001 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 1002 optional: true 1003 1004 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 1005 optional: true 1006 1007 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 1008 optional: true 1009 1010 + '@rollup/rollup-linux-x64-gnu@4.52.5': 1011 optional: true 1012 1013 + '@rollup/rollup-linux-x64-musl@4.52.5': 1014 + optional: true 1015 1016 + '@rollup/rollup-openharmony-arm64@4.52.5': 1017 + optional: true 1018 1019 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 1020 + optional: true 1021 1022 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 1023 optional: true 1024 1025 + '@rollup/rollup-win32-x64-gnu@4.52.5': 1026 optional: true 1027 1028 + '@rollup/rollup-win32-x64-msvc@4.52.5': 1029 optional: true 1030 1031 + '@tauri-apps/api@2.9.0': {} 1032 + 1033 + '@tauri-apps/cli-darwin-arm64@2.9.3': 1034 optional: true 1035 1036 + '@tauri-apps/cli-darwin-x64@2.9.3': 1037 + optional: true 1038 + 1039 + '@tauri-apps/cli-linux-arm-gnueabihf@2.9.3': 1040 + optional: true 1041 + 1042 + '@tauri-apps/cli-linux-arm64-gnu@2.9.3': 1043 + optional: true 1044 + 1045 + '@tauri-apps/cli-linux-arm64-musl@2.9.3': 1046 + optional: true 1047 + 1048 + '@tauri-apps/cli-linux-riscv64-gnu@2.9.3': 1049 optional: true 1050 1051 + '@tauri-apps/cli-linux-x64-gnu@2.9.3': 1052 optional: true 1053 1054 + '@tauri-apps/cli-linux-x64-musl@2.9.3': 1055 optional: true 1056 1057 + '@tauri-apps/cli-win32-arm64-msvc@2.9.3': 1058 optional: true 1059 1060 + '@tauri-apps/cli-win32-ia32-msvc@2.9.3': 1061 optional: true 1062 1063 + '@tauri-apps/cli-win32-x64-msvc@2.9.3': 1064 optional: true 1065 1066 + '@tauri-apps/cli@2.9.3': 1067 optionalDependencies: 1068 + '@tauri-apps/cli-darwin-arm64': 2.9.3 1069 + '@tauri-apps/cli-darwin-x64': 2.9.3 1070 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.9.3 1071 + '@tauri-apps/cli-linux-arm64-gnu': 2.9.3 1072 + '@tauri-apps/cli-linux-arm64-musl': 2.9.3 1073 + '@tauri-apps/cli-linux-riscv64-gnu': 2.9.3 1074 + '@tauri-apps/cli-linux-x64-gnu': 2.9.3 1075 + '@tauri-apps/cli-linux-x64-musl': 2.9.3 1076 + '@tauri-apps/cli-win32-arm64-msvc': 2.9.3 1077 + '@tauri-apps/cli-win32-ia32-msvc': 2.9.3 1078 + '@tauri-apps/cli-win32-x64-msvc': 2.9.3 1079 + 1080 + '@tauri-apps/plugin-deep-link@2.4.5': 1081 + dependencies: 1082 + '@tauri-apps/api': 2.9.0 1083 1084 + '@tauri-apps/plugin-http@2.5.4': 1085 dependencies: 1086 + '@tauri-apps/api': 2.9.0 1087 1088 + '@tauri-apps/plugin-process@2.3.1': 1089 dependencies: 1090 + '@tauri-apps/api': 2.9.0 1091 1092 + '@tauri-apps/plugin-shell@2.3.3': 1093 dependencies: 1094 + '@tauri-apps/api': 2.9.0 1095 1096 + '@types/animejs@3.1.13': {} 1097 1098 '@types/babel__core@7.20.5': 1099 dependencies: 1100 + '@babel/parser': 7.28.5 1101 + '@babel/types': 7.28.5 1102 + '@types/babel__generator': 7.27.0 1103 '@types/babel__template': 7.4.4 1104 + '@types/babel__traverse': 7.28.0 1105 1106 + '@types/babel__generator@7.27.0': 1107 dependencies: 1108 + '@babel/types': 7.28.5 1109 1110 '@types/babel__template@7.4.4': 1111 dependencies: 1112 + '@babel/parser': 7.28.5 1113 + '@babel/types': 7.28.5 1114 1115 + '@types/babel__traverse@7.28.0': 1116 dependencies: 1117 + '@babel/types': 7.28.5 1118 1119 + '@types/estree@1.0.8': {} 1120 1121 + animejs@4.2.2: {} 1122 1123 + babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.28.5): 1124 dependencies: 1125 + '@babel/core': 7.28.5 1126 '@babel/helper-module-imports': 7.18.6 1127 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) 1128 + '@babel/types': 7.28.5 1129 html-entities: 2.3.3 1130 + parse5: 7.3.0 1131 1132 + babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10): 1133 dependencies: 1134 + '@babel/core': 7.28.5 1135 + babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.28.5) 1136 + optionalDependencies: 1137 + solid-js: 1.9.10 1138 1139 + baseline-browser-mapping@2.8.25: {} 1140 1141 + browserslist@4.27.0: 1142 dependencies: 1143 + baseline-browser-mapping: 2.8.25 1144 + caniuse-lite: 1.0.30001754 1145 + electron-to-chromium: 1.5.248 1146 + node-releases: 2.0.27 1147 + update-browserslist-db: 1.1.4(browserslist@4.27.0) 1148 1149 + caniuse-lite@1.0.30001754: {} 1150 1151 convert-source-map@2.0.0: {} 1152 1153 csstype@3.1.3: {} 1154 1155 + debug@4.4.3: 1156 dependencies: 1157 ms: 2.1.3 1158 1159 + electron-to-chromium@1.5.248: {} 1160 1161 + entities@6.0.1: {} 1162 1163 + esbuild@0.25.12: 1164 optionalDependencies: 1165 + '@esbuild/aix-ppc64': 0.25.12 1166 + '@esbuild/android-arm': 0.25.12 1167 + '@esbuild/android-arm64': 0.25.12 1168 + '@esbuild/android-x64': 0.25.12 1169 + '@esbuild/darwin-arm64': 0.25.12 1170 + '@esbuild/darwin-x64': 0.25.12 1171 + '@esbuild/freebsd-arm64': 0.25.12 1172 + '@esbuild/freebsd-x64': 0.25.12 1173 + '@esbuild/linux-arm': 0.25.12 1174 + '@esbuild/linux-arm64': 0.25.12 1175 + '@esbuild/linux-ia32': 0.25.12 1176 + '@esbuild/linux-loong64': 0.25.12 1177 + '@esbuild/linux-mips64el': 0.25.12 1178 + '@esbuild/linux-ppc64': 0.25.12 1179 + '@esbuild/linux-riscv64': 0.25.12 1180 + '@esbuild/linux-s390x': 0.25.12 1181 + '@esbuild/linux-x64': 0.25.12 1182 + '@esbuild/netbsd-arm64': 0.25.12 1183 + '@esbuild/netbsd-x64': 0.25.12 1184 + '@esbuild/openbsd-arm64': 0.25.12 1185 + '@esbuild/openbsd-x64': 0.25.12 1186 + '@esbuild/openharmony-arm64': 0.25.12 1187 + '@esbuild/sunos-x64': 0.25.12 1188 + '@esbuild/win32-arm64': 0.25.12 1189 + '@esbuild/win32-ia32': 0.25.12 1190 + '@esbuild/win32-x64': 0.25.12 1191 1192 escalade@3.2.0: {} 1193 1194 + fdir@6.5.0(picomatch@4.0.3): 1195 + optionalDependencies: 1196 + picomatch: 4.0.3 1197 1198 fsevents@2.3.3: 1199 optional: true 1200 1201 gensync@1.0.0-beta.2: {} 1202 1203 html-entities@2.3.3: {} 1204 1205 is-what@4.1.16: {} 1206 1207 js-tokens@4.0.0: {} 1208 1209 + jsesc@3.1.0: {} 1210 1211 json5@2.2.3: {} 1212 ··· 1220 1221 ms@2.1.3: {} 1222 1223 + nanoid@3.3.11: {} 1224 1225 + node-releases@2.0.27: {} 1226 1227 + parse5@7.3.0: 1228 dependencies: 1229 + entities: 6.0.1 1230 1231 + picocolors@1.1.1: {} 1232 1233 + picomatch@4.0.3: {} 1234 1235 + postcss@8.5.6: 1236 dependencies: 1237 + nanoid: 3.3.11 1238 + picocolors: 1.1.1 1239 + source-map-js: 1.2.1 1240 1241 + rollup@4.52.5: 1242 dependencies: 1243 + '@types/estree': 1.0.8 1244 optionalDependencies: 1245 + '@rollup/rollup-android-arm-eabi': 4.52.5 1246 + '@rollup/rollup-android-arm64': 4.52.5 1247 + '@rollup/rollup-darwin-arm64': 4.52.5 1248 + '@rollup/rollup-darwin-x64': 4.52.5 1249 + '@rollup/rollup-freebsd-arm64': 4.52.5 1250 + '@rollup/rollup-freebsd-x64': 4.52.5 1251 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 1252 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 1253 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 1254 + '@rollup/rollup-linux-arm64-musl': 4.52.5 1255 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 1256 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 1257 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 1258 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 1259 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 1260 + '@rollup/rollup-linux-x64-gnu': 4.52.5 1261 + '@rollup/rollup-linux-x64-musl': 4.52.5 1262 + '@rollup/rollup-openharmony-arm64': 4.52.5 1263 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 1264 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 1265 + '@rollup/rollup-win32-x64-gnu': 4.52.5 1266 + '@rollup/rollup-win32-x64-msvc': 4.52.5 1267 fsevents: 2.3.3 1268 1269 semver@6.3.1: {} 1270 1271 + seroval-plugins@1.3.3(seroval@1.3.2): 1272 dependencies: 1273 + seroval: 1.3.2 1274 1275 + seroval@1.3.2: {} 1276 1277 + solid-js@1.9.10: 1278 dependencies: 1279 csstype: 3.1.3 1280 + seroval: 1.3.2 1281 + seroval-plugins: 1.3.3(seroval@1.3.2) 1282 1283 + solid-refresh@0.6.3(solid-js@1.9.10): 1284 dependencies: 1285 + '@babel/generator': 7.28.5 1286 + '@babel/helper-module-imports': 7.27.1 1287 + '@babel/types': 7.28.5 1288 + solid-js: 1.9.10 1289 transitivePeerDependencies: 1290 - supports-color 1291 1292 source-map-js@1.2.1: {} 1293 1294 + tinyglobby@0.2.15: 1295 dependencies: 1296 + fdir: 6.5.0(picomatch@4.0.3) 1297 + picomatch: 4.0.3 1298 1299 + typescript@5.9.3: {} 1300 1301 + update-browserslist-db@1.1.4(browserslist@4.27.0): 1302 dependencies: 1303 + browserslist: 4.27.0 1304 escalade: 3.2.0 1305 + picocolors: 1.1.1 1306 1307 + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2): 1308 dependencies: 1309 + '@babel/core': 7.28.5 1310 '@types/babel__core': 7.20.5 1311 + babel-preset-solid: 1.9.10(@babel/core@7.28.5)(solid-js@1.9.10) 1312 merge-anything: 5.1.7 1313 + solid-js: 1.9.10 1314 + solid-refresh: 0.6.3(solid-js@1.9.10) 1315 + vite: 7.2.2 1316 + vitefu: 1.1.1(vite@7.2.2) 1317 transitivePeerDependencies: 1318 - supports-color 1319 1320 + vite@7.2.2: 1321 dependencies: 1322 + esbuild: 0.25.12 1323 + fdir: 6.5.0(picomatch@4.0.3) 1324 + picomatch: 4.0.3 1325 + postcss: 8.5.6 1326 + rollup: 4.52.5 1327 + tinyglobby: 0.2.15 1328 optionalDependencies: 1329 fsevents: 2.3.3 1330 1331 + vitefu@1.1.1(vite@7.2.2): 1332 + optionalDependencies: 1333 + vite: 7.2.2 1334 1335 yallist@3.1.1: {}
+1 -1
public/icon/angle-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"/></svg>
+1 -1
public/icon/angle-up-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"/></svg>
+1 -1
public/icon/arrow-left-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
+1 -1
public/icon/arrow-right-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/></svg>
+1 -1
public/icon/arrows-rotate-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg>
+1 -1
public/icon/caret-down-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"/></svg>
+1 -1
public/icon/check-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>
+1 -1
public/icon/clock-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg>
+1 -1
public/icon/copy-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"/></svg>
+1
public/icon/download-solid-full.svg
···
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M352 96C352 78.3 337.7 64 320 64C302.3 64 288 78.3 288 96L288 306.7L246.6 265.3C234.1 252.8 213.8 252.8 201.3 265.3C188.8 277.8 188.8 298.1 201.3 310.6L297.3 406.6C309.8 419.1 330.1 419.1 342.6 406.6L438.6 310.6C451.1 298.1 451.1 277.8 438.6 265.3C426.1 252.8 405.8 252.8 393.3 265.3L352 306.7L352 96zM160 384C124.7 384 96 412.7 96 448L96 480C96 515.3 124.7 544 160 544L480 544C515.3 544 544 515.3 544 480L544 448C544 412.7 515.3 384 480 384L433.1 384L376.5 440.6C345.3 471.8 294.6 471.8 263.4 440.6L206.9 384L160 384zM464 440C477.3 440 488 450.7 488 464C488 477.3 477.3 488 464 488C450.7 488 440 477.3 440 464C440 450.7 450.7 440 464 440z"/></svg>
+1
public/icon/gear-solid-full.svg
···
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M259.1 73.5C262.1 58.7 275.2 48 290.4 48L350.2 48C365.4 48 378.5 58.7 381.5 73.5L396 143.5C410.1 149.5 423.3 157.2 435.3 166.3L503.1 143.8C517.5 139 533.3 145 540.9 158.2L570.8 210C578.4 223.2 575.7 239.8 564.3 249.9L511 297.3C511.9 304.7 512.3 312.3 512.3 320C512.3 327.7 511.8 335.3 511 342.7L564.4 390.2C575.8 400.3 578.4 417 570.9 430.1L541 481.9C533.4 495 517.6 501.1 503.2 496.3L435.4 473.8C423.3 482.9 410.1 490.5 396.1 496.6L381.7 566.5C378.6 581.4 365.5 592 350.4 592L290.6 592C275.4 592 262.3 581.3 259.3 566.5L244.9 496.6C230.8 490.6 217.7 482.9 205.6 473.8L137.5 496.3C123.1 501.1 107.3 495.1 99.7 481.9L69.8 430.1C62.2 416.9 64.9 400.3 76.3 390.2L129.7 342.7C128.8 335.3 128.4 327.7 128.4 320C128.4 312.3 128.9 304.7 129.7 297.3L76.3 249.8C64.9 239.7 62.3 223 69.8 209.9L99.7 158.1C107.3 144.9 123.1 138.9 137.5 143.7L205.3 166.2C217.4 157.1 230.6 149.5 244.6 143.4L259.1 73.5zM320.3 400C364.5 399.8 400.2 363.9 400 319.7C399.8 275.5 363.9 239.8 319.7 240C275.5 240.2 239.8 276.1 240 320.3C240.2 364.5 276.1 400.2 320.3 400z"/></svg>
+1
public/icon/layer-group-solid-full.svg
···
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M296.5 69.2C311.4 62.3 328.6 62.3 343.5 69.2L562.1 170.2C570.6 174.1 576 182.6 576 192C576 201.4 570.6 209.9 562.1 213.8L343.5 314.8C328.6 321.7 311.4 321.7 296.5 314.8L77.9 213.8C69.4 209.8 64 201.3 64 192C64 182.7 69.4 174.1 77.9 170.2L296.5 69.2zM112.1 282.4L276.4 358.3C304.1 371.1 336 371.1 363.7 358.3L528 282.4L562.1 298.2C570.6 302.1 576 310.6 576 320C576 329.4 570.6 337.9 562.1 341.8L343.5 442.8C328.6 449.7 311.4 449.7 296.5 442.8L77.9 341.8C69.4 337.8 64 329.3 64 320C64 310.7 69.4 302.1 77.9 298.2L112 282.4zM77.9 426.2L112 410.4L276.3 486.3C304 499.1 335.9 499.1 363.6 486.3L527.9 410.4L562 426.2C570.5 430.1 575.9 438.6 575.9 448C575.9 457.4 570.5 465.9 562 469.8L343.4 570.8C328.5 577.7 311.3 577.7 296.4 570.8L77.9 469.8C69.4 465.8 64 457.3 64 448C64 438.7 69.4 430.1 77.9 426.2z"/></svg>
+1 -1
public/icon/minus-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"/></svg>
+1 -1
public/icon/sliders-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z"/></svg>
+1 -1
public/icon/square-regular.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg>
+1 -1
public/icon/trash-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>
+1
public/icon/user-solid.svg
···
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#fff" d="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg>
+1 -1
public/icon/x-solid.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg>
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path fill="#fff" d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/></svg>
+29 -205
src/Components/App.tsx
··· 1 - import { createSignal, createEffect, Switch, Match, onMount } from "solid-js"; 2 - import { listen } from '@tauri-apps/api/event'; 3 - import { fetch } from "@tauri-apps/plugin-http" 4 - import anime from "animejs"; 5 - import { invoke } from '@tauri-apps/api/core'; 6 7 - import NavBar from "./NavBar"; 8 import PhotoList from "./PhotoList"; 9 import PhotoViewer from "./PhotoViewer"; 10 import SettingsMenu from "./SettingsMenu"; 11 - 12 - // TODO: Clean up frontend files, split up into smaller files PLEASE 13 - 14 - function App() { 15 - invoke('get_config_value_string', { key: 'start-in-bg' }) 16 - .then(str => { 17 - if(str === "false")invoke('close_splashscreen') 18 - }) 19 - 20 - let [ loggedIn, setLoggedIn ] = createSignal({ loggedIn: false, username: '', avatar: '', id: '', serverVersion: '0.0' }); 21 - let [ storageInfo, setStorageInfo ] = createSignal({ storage: 0, used: 0, sync: false }); 22 - let [ loadingType, setLoadingType ] = createSignal('load'); 23 - let [ currentPhotoView, setCurrentPhotoView ] = createSignal<any>(null); 24 - let [ photoNavChoice, setPhotoNavChoice ] = createSignal<string>(''); 25 - 26 - let [ confirmationBoxText, setConfirmationBoxText ] = createSignal<string>(''); 27 - let confirmationBoxCallback = () => {} 28 - 29 - let [ photoCount, setPhotoCount ] = createSignal(0); 30 - let [ photoSize, setPhotoSize ] = createSignal(0); 31 - 32 - let [ requestPhotoReload, setRequestPhotoReload ] = createSignal(false); 33 - 34 - let [ isPhotosSyncing, setIsPhotosSyncing ] = createSignal(false); 35 - 36 - let setConfirmationBox = ( text: string, cb: () => void ) => { 37 - setConfirmationBoxText(text); 38 - confirmationBoxCallback = cb; 39 - } 40 - 41 - invoke('get_config_value_string', { key: 'token' }) 42 - .then(token => { 43 - if(token){ 44 - fetch('https://photos.phazed.xyz/api/v1/account?token='+token) 45 - .then(data => data.json()) 46 - .then(data => { 47 - if(!data.ok){ 48 - return console.error(data); 49 - } 50 - 51 - console.log(data.data); 52 - setLoggedIn({ loggedIn: true, username: data.user.username, avatar: data.user.avatar, id: data.user._id, serverVersion: data.user.serverVersion }); 53 - setStorageInfo({ storage: data.user.storage, used: data.user.used, sync: data.user.settings.enableSync }); 54 - 55 - if(!isPhotosSyncing() && data.user.settings.enableSync){ 56 - setIsPhotosSyncing(true); 57 - invoke('sync_photos', { token: token }); 58 - } 59 - }) 60 - .catch(e => { 61 - console.error(e); 62 - }) 63 - } 64 - }) 65 - 66 - setTimeout(() => { 67 - setLoadingType('none'); 68 - }, 500); 69 - 70 - let loadingBlackout: HTMLElement; 71 - let loadingShown = false; 72 - 73 - let confirmationBox: HTMLElement; 74 - 75 - createEffect(() => { 76 - if(confirmationBoxText() !== ''){ 77 - confirmationBox.style.display = 'block'; 78 - 79 - setTimeout(() => { 80 - confirmationBox.style.opacity = '1'; 81 - }, 1); 82 - } else{ 83 - confirmationBox.style.opacity = '0'; 84 - 85 - setTimeout(() => { 86 - confirmationBox.style.display = 'none'; 87 - }, 250); 88 - } 89 - }) 90 - 91 - createEffect(() => { 92 - let type = loadingType(); 93 - 94 - if(loadingShown != (type != 'none')){ 95 - loadingShown = (type != 'none'); 96 - 97 - if(loadingShown){ 98 - loadingBlackout.style.display = 'flex'; 99 - anime({ 100 - targets: loadingBlackout, 101 - opacity: 1, 102 - easing: 'easeInOutQuad', 103 - duration: 250 104 - }) 105 - } else{ 106 - anime({ 107 - targets: loadingBlackout, 108 - opacity: 0, 109 - easing: 'easeInOutQuad', 110 - duration: 250, 111 - complete: () => { 112 - loadingBlackout.style.display = 'none'; 113 - } 114 - }) 115 - } 116 - } 117 - }) 118 - 119 - listen('auth-callback', ( event: any ) => { 120 - let token = event.payload; 121 - 122 - fetch('https://photos.phazed.xyz/api/v1/account?token='+token) 123 - .then(data => data.json()) 124 - .then(data => { 125 - if(!data.ok){ 126 - console.error(data); 127 - return setLoadingType('none'); 128 - } 129 - 130 - console.log(data); 131 - invoke('set_config_value_string', { key: 'token', value: token }); 132 - 133 - setLoadingType('none'); 134 - setLoggedIn({ loggedIn: true, username: data.user.username, avatar: data.user.avatar, id: data.user._id, serverVersion: data.user.serverVersion }); 135 - setStorageInfo({ storage: data.user.storage, used: data.user.used, sync: data.user.settings.enableSync }); 136 137 - if(!isPhotosSyncing() && data.user.settings.enableSync){ 138 - setIsPhotosSyncing(true); 139 - invoke('sync_photos', { token: token }); 140 - } 141 - }) 142 - .catch(e => { 143 - setLoadingType('none'); 144 - console.error(e); 145 - }) 146 - }) 147 - 148 - listen('auth-denied', () => { 149 - setLoadingType('none'); 150 - console.warn('Authetication Denied'); 151 - }) 152 153 onMount(() => { 154 - anime.set('.settings', 155 { 156 display: 'none', 157 opacity: 0, 158 translateX: '500px' 159 }) 160 }) 161 162 return ( 163 <div class="container"> 164 - <NavBar 165 - setLoadingType={setLoadingType} 166 - loggedIn={loggedIn} 167 - setStorageInfo={setStorageInfo} 168 - setIsPhotosSyncing={setIsPhotosSyncing} /> 169 170 - <PhotoList 171 - storageInfo={storageInfo} 172 - isPhotosSyncing={isPhotosSyncing} 173 - setIsPhotosSyncing={setIsPhotosSyncing} 174 - setCurrentPhotoView={setCurrentPhotoView} 175 - currentPhotoView={currentPhotoView} 176 - photoNavChoice={photoNavChoice} 177 - setPhotoNavChoice={setPhotoNavChoice} 178 - setConfirmationBox={setConfirmationBox} 179 - loggedIn={loggedIn} 180 - setPhotoCount={setPhotoCount} 181 - setPhotoSize={setPhotoSize} 182 - requestPhotoReload={requestPhotoReload} 183 - setRequestPhotoReload={setRequestPhotoReload} /> 184 - 185 - <PhotoViewer 186 - setPhotoNavChoice={setPhotoNavChoice} 187 - currentPhotoView={currentPhotoView} 188 - setCurrentPhotoView={setCurrentPhotoView} 189 - storageInfo={storageInfo} 190 - loggedIn={loggedIn} 191 - setConfirmationBox={setConfirmationBox} /> 192 - 193 - <SettingsMenu 194 - setLoggedIn={setLoggedIn} 195 - setLoadingType={setLoadingType} 196 - photoCount={photoCount} 197 - photoSize={photoSize} 198 - setRequestPhotoReload={setRequestPhotoReload} 199 - loggedIn={loggedIn} 200 - storageInfo={storageInfo} 201 - setStorageInfo={setStorageInfo} 202 - setConfirmationBox={setConfirmationBox} /> 203 204 <div class="copy-notif">Image Copied!</div> 205 - 206 - <div class="loading" ref={( el ) => loadingBlackout = el}> 207 - <Switch> 208 - <Match when={loadingType() === 'auth'}> 209 - <p>Waiting for authentication in browser.</p> 210 - </Match> 211 - <Match when={loadingType() === 'load'}> 212 - <p>Loading App...</p> 213 - </Match> 214 - </Switch> 215 - </div> 216 - 217 - <div class="confirmation-box" ref={( el ) => confirmationBox = el}> 218 - <div class="confirmation-box-container"> 219 - { confirmationBoxText() }<br /><br /> 220 - 221 - <div class="button-danger" onClick={() => { confirmationBoxCallback(); setConfirmationBoxText('') }}>Confirm</div> 222 - <div class="button" onClick={() => setConfirmationBoxText('') }>Deny</div> 223 - </div> 224 - </div> 225 </div> 226 ); 227 }
··· 1 + import { createSignal, onMount } from "solid-js"; 2 3 import PhotoList from "./PhotoList"; 4 import PhotoViewer from "./PhotoViewer"; 5 import SettingsMenu from "./SettingsMenu"; 6 + import { animate, utils } from "animejs"; 7 + import { listen } from "@tauri-apps/api/event"; 8 9 + let App = () => { 10 + let [ errorText, setErrorText ] = createSignal(''); 11 12 onMount(() => { 13 + utils.set('.settings', 14 { 15 display: 'none', 16 opacity: 0, 17 translateX: '500px' 18 }) 19 + 20 + listen<string>('vrcpm-error', ( ev ) => { 21 + setErrorText(ev.payload); 22 + 23 + utils.set('.error-notif', { translateX: '-50%', translateY: '-100px' }); 24 + animate('.error-notif', { 25 + ease: 'outElastic', 26 + opacity: 1, 27 + translateY: '0px' 28 + }); 29 + 30 + setTimeout(() => { 31 + animate('.error-notif', { 32 + ease: 'outElastic', 33 + opacity: 0, 34 + translateY: '-100px' 35 + }); 36 + }, 2000); 37 + }); 38 }) 39 40 return ( 41 <div class="container"> 42 + <PhotoList /> 43 + <PhotoViewer /> 44 45 + <SettingsMenu /> 46 47 <div class="copy-notif">Image Copied!</div> 48 + <div class="error-notif">{ errorText() }</div> 49 </div> 50 ); 51 }
+10 -12
src/Components/FilterMenu.tsx
··· 1 - enum FilterType{ 2 - USER, WORLD 3 - } 4 5 - class FilterMenuProps{ 6 - setFilterType!: ( type: FilterType ) => void; 7 - setFilter!: ( filter: string ) => void; 8 - } 9 - 10 - let FilterMenu = ( props: FilterMenuProps ) => { 11 let selectionButtons: HTMLDivElement[] = []; 12 13 let select = ( index: number ) => { ··· 17 18 return ( 19 <> 20 <div class="filter-type-select"> 21 <div class="selected-filter" ref={( el ) => selectionButtons.push(el)} onClick={() => { 22 select(0); 23 - props.setFilterType(FilterType.USER); 24 }}>User</div> 25 <div ref={( el ) => selectionButtons.push(el)} onClick={() => { 26 select(1); 27 - props.setFilterType(FilterType.WORLD); 28 }}>World</div> 29 </div> 30 31 - <input class="filter-search" type="text" onInput={( el ) => props.setFilter(el.target.value)} placeholder="Enter Search Term..."></input> 32 </> 33 ) 34 }
··· 1 + import { Show } from "solid-js"; 2 + import { FilterType } from "./Structs/FilterType"; 3 4 + let FilterMenu = () => { 5 let selectionButtons: HTMLDivElement[] = []; 6 7 let select = ( index: number ) => { ··· 11 12 return ( 13 <> 14 + <Show when={!window.PhotoManager.HasBeenIndexed()}> 15 + <div>Your photos aren't indexed due to the large number, filters may take a while to load.</div> 16 + <div style={{ height: '8px' }}></div> 17 + </Show> 18 <div class="filter-type-select"> 19 <div class="selected-filter" ref={( el ) => selectionButtons.push(el)} onClick={() => { 20 select(0); 21 + window.PhotoManager.SetFilterType(FilterType.USER); 22 }}>User</div> 23 <div ref={( el ) => selectionButtons.push(el)} onClick={() => { 24 select(1); 25 + window.PhotoManager.SetFilterType(FilterType.WORLD); 26 }}>World</div> 27 </div> 28 29 + <input class="filter-search" type="text" onInput={( el ) => window.PhotoManager.SetFilter(el.target.value)} placeholder="Enter Search Term..."></input> 30 </> 31 ) 32 }
+43
src/Components/Managers/ConfirmationBoxManager.tsx
···
··· 1 + import { createEffect, createSignal, Setter } from "solid-js"; 2 + 3 + export class ConfirmationBoxManager{ 4 + private _confirmationBoxCallback = () => {}; 5 + private _setConfirmationBoxText: Setter<string> 6 + 7 + constructor(){ 8 + let [ confirmationBoxText, setConfirmationBoxText ] = createSignal(''); 9 + this._setConfirmationBoxText = setConfirmationBoxText; 10 + 11 + let confirmationBox: HTMLElement; 12 + 13 + document.body.appendChild(<div class="confirmation-box" ref={( el ) => confirmationBox = el}> 14 + <div class="confirmation-box-container"> 15 + { confirmationBoxText() }<br /><br /> 16 + 17 + <div class="button-danger" onClick={() => { this._confirmationBoxCallback(); setConfirmationBoxText('') }}>Confirm</div> 18 + <div class="button" onClick={() => setConfirmationBoxText('') }>Deny</div> 19 + </div> 20 + </div> as HTMLElement); 21 + 22 + createEffect(() => { 23 + if(confirmationBoxText() !== ''){ 24 + confirmationBox.style.display = 'block'; 25 + 26 + setTimeout(() => { 27 + confirmationBox.style.opacity = '1'; 28 + }, 1); 29 + } else{ 30 + confirmationBox.style.opacity = '0'; 31 + 32 + setTimeout(() => { 33 + confirmationBox.style.display = 'none'; 34 + }, 250); 35 + } 36 + }) 37 + } 38 + 39 + public SetConfirmationBox( text: string, cb: () => void ){ 40 + this._setConfirmationBoxText(text); 41 + this._confirmationBoxCallback = cb; 42 + } 43 + }
+18
src/Components/Managers/LoadingManager.tsx
···
··· 1 + import { createSignal, Setter, Show } from "solid-js"; 2 + 3 + export class LoadingManager{ 4 + public SetLoading: Setter<string>; 5 + 6 + constructor(){ 7 + let [ loading, setLoading ] = createSignal(""); 8 + this.SetLoading = setLoading; 9 + 10 + document.body.appendChild( 11 + <div><Show when={loading() !== ""}> 12 + <div class="loading"> 13 + <p>{ loading() }</p> 14 + </div> 15 + </Show></div> as HTMLElement 16 + ); 17 + } 18 + }
+178
src/Components/Managers/PhotoListRenderingManager.tsx
···
··· 1 + import { PhotoListPhoto } from "../Structs/PhotoListElements/PhotoListPhoto"; 2 + import { PhotoListText } from "../Structs/PhotoListElements/PhotoListText"; 3 + import { PhotoListElementType } from "../Structs/PhotoListElementType"; 4 + import { PhotoListRow } from "../Structs/PhotoListRow"; 5 + 6 + const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 7 + 8 + let multilayerIcon = new Image(); 9 + multilayerIcon.src = '/icon/layer-group-solid-full.svg'; 10 + 11 + export class PhotoListRenderingManager{ 12 + private _layout: PhotoListRow[] = []; 13 + private _canvas!: HTMLCanvasElement; 14 + 15 + private _isLoading = false; 16 + 17 + constructor(){} 18 + 19 + public SetCanvas( canvas: HTMLCanvasElement ){ 20 + this._canvas = canvas; 21 + } 22 + 23 + public ComputeLayout(){ 24 + this._layout = []; 25 + 26 + let lastDateString = null; 27 + let row = new PhotoListRow(); 28 + row.Height = 0; 29 + 30 + for (let i = 0; i < window.PhotoManager.FilteredPhotos.length; i++) { 31 + let photo = window.PhotoManager.FilteredPhotos[i]; 32 + 33 + // If date string has changed since the last photo, we should label the correct date above it 34 + if(lastDateString !== photo.dateString){ 35 + this._layout.push(row); 36 + row = new PhotoListRow(); 37 + 38 + row.Height = 50; 39 + 40 + let dateParts = photo.dateString.split('-'); 41 + lastDateString = photo.dateString; 42 + 43 + row.Elements = [ new PhotoListText(dateParts[2] + ' ' + MONTHS[parseInt(dateParts[1]) - 1] + ' ' + dateParts[0]) ]; 44 + 45 + this._layout.push(row); 46 + row = new PhotoListRow(); 47 + } 48 + 49 + // Check if the current row width plus another photo is too big to fit, push this row to the 50 + // layout and add the photo to the next row instead 51 + if(row.Width + photo.scaledWidth! + 10 > this._canvas.width - 100){ 52 + this._layout.push(row); 53 + row = new PhotoListRow(); 54 + } 55 + 56 + // We should now add this photo to the current row 57 + row.Elements.push(new PhotoListPhoto(photo)); 58 + row.Width += photo.scaledWidth! + 10; 59 + } 60 + 61 + this._layout.push(row); 62 + } 63 + 64 + public Render( ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement, scroll: number ){ 65 + let currentY = 0; 66 + 67 + // Loop through each row 68 + for (let i = 0; i < this._layout.length; i++) { 69 + let row = this._layout[i]; 70 + 71 + // Cull rows that are out of frame 72 + if(currentY - scroll > canvas.height){ 73 + // Reset frames for out of frame rows so they fade back in 74 + row.Elements.forEach(el => { 75 + if(el.Type === PhotoListElementType.PHOTO){ 76 + (el as PhotoListPhoto).Photo.frames = 0; 77 + (el as PhotoListPhoto).Photo.shown = false; 78 + } 79 + }); 80 + 81 + return; 82 + } 83 + 84 + if(currentY - scroll < -row.Height){ 85 + // Reset frames for out of frame rows so they fade back in 86 + row.Elements.forEach(el => { 87 + if(el.Type === PhotoListElementType.PHOTO){ 88 + (el as PhotoListPhoto).Photo.frames = 0; 89 + (el as PhotoListPhoto).Photo.shown = false; 90 + } 91 + }); 92 + 93 + currentY += row.Height + 10; 94 + continue; 95 + } 96 + 97 + // === DEBUG === 98 + // ctx.strokeStyle = '#f00'; 99 + // ctx.strokeRect((canvas.width / 2) - row.Width / 2, currentY - 5 - scroll, row.Width, row.Height + 10); 100 + 101 + // Loop through all elements in the row 102 + let rowXPos = 10; 103 + for (let j = 0; j < row.Elements.length; j++) { 104 + let el = row.Elements[j]; 105 + 106 + switch(el.Type){ 107 + case PhotoListElementType.TEXT: 108 + // If it is a text element we should centre the text in the middle of the canvas 109 + // and then render that text 110 + 111 + // === DEBUG === 112 + // ctx.strokeStyle = '#f00'; 113 + // ctx.strokeRect(0, currentY - scroll, canvas.width, row.Height); 114 + 115 + ctx.textAlign = 'center'; 116 + ctx.textBaseline = 'middle'; 117 + ctx.globalAlpha = 1; 118 + ctx.fillStyle = '#fff'; 119 + ctx.font = '30px Rubik'; 120 + 121 + ctx.fillText((el as PhotoListText).Text, canvas.width / 2, currentY - scroll + 25); 122 + break; 123 + case PhotoListElementType.PHOTO: 124 + let photo = (el as PhotoListPhoto).Photo; 125 + 126 + // === DEBUG === 127 + // ctx.strokeStyle = '#f00'; 128 + // ctx.strokeRect((rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, row.Height); 129 + 130 + if(photo.error){ 131 + ctx.fillStyle = '#fff'; 132 + ctx.textAlign = 'center'; 133 + ctx.textBaseline = 'middle'; 134 + 135 + photo.x = (rowXPos - row.Width / 2) + canvas.width / 2; 136 + photo.y = currentY - scroll; 137 + 138 + ctx.font = '18px Rubik' 139 + ctx.fillText('Error loading image.', photo.x + photo.scaledWidth! / 2, photo.y + photo.scaledHeight! / 2); 140 + } else if(!photo.loaded) 141 + // If the photo is not loaded, start a new task and load it in that task 142 + setTimeout(() => photo.loadImage(), 1); 143 + else{ 144 + photo.shown = true; 145 + 146 + photo.x = (rowXPos - row.Width / 2) + canvas.width / 2; 147 + photo.y = currentY - scroll; 148 + 149 + // Photo is already loaded so we should draw it on the application 150 + ctx.globalAlpha = photo.frames / 100; 151 + ctx.drawImage(photo.image!, (rowXPos - row.Width / 2) + canvas.width / 2, currentY - scroll, photo.scaledWidth!, photo.scaledHeight!); 152 + 153 + if(photo.isMultiLayer) 154 + ctx.drawImage(multilayerIcon, ((rowXPos - row.Width / 2) + canvas.width / 2) + 5, (currentY - scroll) + 5, 20, 20); 155 + 156 + if(photo.frames < 100) 157 + photo.frames += 10; 158 + } 159 + 160 + rowXPos += photo.scaledWidth! + 10; 161 + break; 162 + } 163 + } 164 + 165 + currentY += row.Height + 10; 166 + } 167 + 168 + if(!this._isLoading){ 169 + console.log('Loading more photos...'); 170 + this._isLoading = true; 171 + 172 + window.PhotoManager.LoadSomeAndReloadFilters() 173 + .then(() => { 174 + this._isLoading = false; 175 + }); 176 + } 177 + } 178 + }
+281
src/Components/Managers/PhotoManager.tsx
···
··· 1 + import { listen } from "@tauri-apps/api/event"; 2 + import { Accessor, createSignal } from "solid-js"; 3 + import { Photo } from "../Structs/Photo"; 4 + import { invoke } from "@tauri-apps/api/core"; 5 + import { PhotoMetadata } from "../Structs/PhotoMetadata"; 6 + import { Vars } from "../Structs/Vars"; 7 + import { FilterType } from "../FilterMenu"; 8 + import { MergeSort } from "../Utils/Sort"; 9 + 10 + export class PhotoManager{ 11 + public PhotoCount: Accessor<number>; 12 + public PhotoSize: Accessor<number>; 13 + 14 + public Photos: Photo[] = []; 15 + public FilteredPhotos: Photo[] = []; 16 + 17 + public HasFirstLoaded = false; 18 + 19 + private _amountLoaded = 0; 20 + private _finishedLoadingCallbacks: (() => void)[] = []; 21 + 22 + private _filterType: FilterType = FilterType.USER; 23 + private _filter: string = ""; 24 + 25 + private _lastLoaded: number = 0; 26 + private _onLoadedMeta: any = {}; 27 + private _hasBeenIndexed: Accessor<boolean>; 28 + 29 + constructor(){ 30 + let [ photoCount, setPhotoCount ] = createSignal(-1); 31 + let [ photoSize, setPhotoSize ] = createSignal(-1); 32 + 33 + this.PhotoCount = photoCount; 34 + this.PhotoSize = photoSize; 35 + 36 + let setHasBeenIndexed; 37 + [ this._hasBeenIndexed, setHasBeenIndexed ] = createSignal(false); 38 + 39 + listen('photos_loaded', ( event: any ) => { 40 + let photoPaths = event.payload.photos.reverse(); 41 + console.log(photoPaths); 42 + 43 + setPhotoCount(photoPaths.length); 44 + setPhotoSize(event.payload.size); 45 + 46 + if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 47 + setHasBeenIndexed(true); 48 + 49 + let photoLayers: Photo[] = []; 50 + 51 + photoPaths.forEach(( path: string, i: number ) => { 52 + let photo 53 + 54 + if(path.slice(0, 9) === "legacy://") 55 + photo = new Photo(path.slice(9), true, i); 56 + else 57 + photo = new Photo(path, false, i); 58 + 59 + if(!photo.legacy && photo.splitPath[4]){ 60 + photoLayers.push(photo); 61 + } else 62 + this.Photos.push(photo); 63 + 64 + if(photoPaths.length <= Vars.MAX_PHOTOS_BULK_LOAD) 65 + photo.loadMeta(); 66 + }) 67 + 68 + photoLayers.forEach(photo => { 69 + let type = photo.splitPath[4]; 70 + photo.splitPath.pop(); 71 + 72 + let mainPhotoPath = photo.splitPath.join('_') + '.png'; 73 + let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath); 74 + 75 + if(!mainPhoto) 76 + this.Photos.push(photo); 77 + else{ 78 + mainPhoto.isMultiLayer = true; 79 + 80 + switch(type){ 81 + case 'Player.png': 82 + mainPhoto.playerLayer = photo; 83 + break; 84 + case 'Environment.png': 85 + mainPhoto.environmentLayer = photo; 86 + break; 87 + } 88 + } 89 + }); 90 + 91 + this.Photos = MergeSort(this.Photos); 92 + console.log(this.Photos[0]); 93 + 94 + console.log(this.Photos.length + ' Photos found.'); 95 + 96 + if(this.Photos.length === 0 || photoPaths.length > Vars.MAX_PHOTOS_BULK_LOAD){ 97 + console.log('No photos found or over bulk load limit, Skipping loading stage.'); 98 + 99 + this.FilteredPhotos = this.Photos; 100 + this.HasFirstLoaded = true; 101 + 102 + this._finishedLoadingCallbacks.forEach(cb => cb()); 103 + } 104 + }); 105 + 106 + listen('photo_meta_loaded', ( event: any ) => { 107 + let data: PhotoMetadata = event.payload; 108 + 109 + let photo = this.Photos.find(x => x.path === data.path); 110 + if(!photo)return console.error('Cannot find photo.', data); 111 + // NOTE: this is triggered by multilayer photo layers loading their metadata 112 + // we don't need to store metadata of those photos as they inherit this 113 + // data from the main photo. 114 + 115 + photo.error = data.error; 116 + this._lastLoaded = photo.index; 117 + 118 + if(this._onLoadedMeta[photo.index]){ 119 + this._onLoadedMeta[photo.index](); 120 + delete this._onLoadedMeta[photo.index]; 121 + } 122 + 123 + photo.width = data.width; 124 + photo.height = data.height; 125 + 126 + let scale = Vars.PHOTO_HEIGHT / photo.height; 127 + 128 + photo.scaledWidth = photo.width * scale; 129 + photo.scaledHeight = Vars.PHOTO_HEIGHT; 130 + 131 + photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 132 + this._amountLoaded++; 133 + 134 + photo.loadingMeta = false; 135 + photo.metaLoaded = true; 136 + photo.onMetaLoaded(); 137 + 138 + window.PhotoListRenderingManager.ComputeLayout(); 139 + 140 + if(this._amountLoaded === this.Photos.length - 1 && !this.HasFirstLoaded){ 141 + this.FilteredPhotos = this.Photos; 142 + this.HasFirstLoaded = true; 143 + 144 + this._finishedLoadingCallbacks.forEach(cb => cb()); 145 + } 146 + }) 147 + 148 + listen('photo_create', async ( event: any ) => { 149 + let photo = new Photo(event.payload, false, 0); 150 + 151 + if(photo.splitPath[4]){ 152 + let type = photo.splitPath[4]; 153 + photo.splitPath.pop(); 154 + 155 + let mainPhotoPath = photo.splitPath.join('_') + '.png'; 156 + let mainPhoto = this.Photos.find(x => x.path === mainPhotoPath); 157 + 158 + if(!mainPhoto){ 159 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 160 + this.Photos.splice(0, 0, photo); 161 + } else{ 162 + mainPhoto.isMultiLayer = true; 163 + 164 + switch(type){ 165 + case 'Player.png': 166 + mainPhoto.playerLayer = photo; 167 + break; 168 + case 'Environment.png': 169 + mainPhoto.environmentLayer = photo; 170 + break; 171 + } 172 + } 173 + } else{ 174 + this.Photos.forEach(p => p.index++); // Probably a really dumb way of doing this 175 + this.Photos.splice(0, 0, photo); 176 + } 177 + 178 + photo.onMetaLoaded = () => this.ReloadFilters(); 179 + photo.loadMeta(); 180 + }) 181 + 182 + listen('photo_remove', ( event: any ) => { 183 + this.Photos = this.Photos.filter(x => x.path !== event.payload); 184 + 185 + if(event.payload === window.PhotoViewerManager.CurrentPhoto()?.path) 186 + window.PhotoViewerManager.Close() 187 + 188 + this.ReloadFilters(); 189 + }) 190 + } 191 + 192 + public SetFilterType( type: FilterType ){ 193 + this._filterType = type; 194 + this.ReloadFilters(); 195 + } 196 + 197 + public SetFilter( filter: string ){ 198 + this._filter = filter; 199 + this.ReloadFilters(); 200 + } 201 + 202 + public HasBeenIndexed(){ 203 + return this._hasBeenIndexed(); 204 + } 205 + 206 + public LoadPhotoMetaAndWait( photo: Photo ){ 207 + return new Promise(res => { 208 + photo.loadMeta(); 209 + this._onLoadedMeta[photo.index] = res; 210 + }) 211 + } 212 + 213 + public async LoadSomeAndReloadFilters(){ 214 + if(this.Photos.length < this._lastLoaded + 1)return; 215 + 216 + for (let i = 1; i < 10; i++) { 217 + if(!this.Photos[this._lastLoaded + 1])break; 218 + await this.LoadPhotoMetaAndWait(this.Photos[this._lastLoaded + 1]); 219 + } 220 + 221 + this.ReloadFilters(); 222 + } 223 + 224 + public ReloadFilters(){ 225 + this.FilteredPhotos = []; 226 + 227 + if(this._filter === ''){ 228 + this.FilteredPhotos = this.Photos; 229 + window.PhotoListRenderingManager.ComputeLayout(); 230 + 231 + return; 232 + } 233 + 234 + switch(this._filterType){ 235 + case FilterType.USER: 236 + this.Photos.map(p => { 237 + if(p.metadata){ 238 + try{ 239 + let meta = JSON.parse(p.metadata); 240 + let photo = meta.players.find(( y: any ) => 241 + y.displayName.toLowerCase().includes(this._filter) || 242 + y.id === this._filter 243 + ); 244 + 245 + if(photo)this.FilteredPhotos.push(p); 246 + } catch(e){} 247 + } 248 + }) 249 + break; 250 + case FilterType.WORLD: 251 + this.Photos.map(p => { 252 + if(p.metadata){ 253 + try{ 254 + let meta = JSON.parse(p.metadata); 255 + let photo = 256 + meta.world.name.toLowerCase().includes(this._filter) || 257 + meta.world.id === this._filter; 258 + 259 + if(photo)this.FilteredPhotos.push(p); 260 + } catch(e){} 261 + } 262 + }) 263 + break; 264 + } 265 + 266 + window.PhotoListRenderingManager.ComputeLayout(); 267 + } 268 + 269 + public Load(){ 270 + this.Photos = []; 271 + this.FilteredPhotos = []; 272 + 273 + this._amountLoaded = 0; 274 + 275 + invoke('load_photos'); 276 + } 277 + 278 + public OnLoadingFinished( cb: () => void ){ 279 + this._finishedLoadingCallbacks.push(cb); 280 + } 281 + }
+40
src/Components/Managers/PhotoViewerManager.tsx
···
··· 1 + import { Accessor, createSignal, Setter } from "solid-js"; 2 + import { Photo } from "../Structs/Photo"; 3 + import { ViewState } from "./ViewManager"; 4 + 5 + export class PhotoViewerManager{ 6 + public CurrentPhoto: Accessor<Photo | null>; 7 + private _setCurrentPhoto: Setter<Photo | null>; 8 + 9 + private _currentPhotoIndex = 0; 10 + 11 + constructor(){ 12 + [ this.CurrentPhoto, this._setCurrentPhoto ] = createSignal<Photo | null>(null); 13 + } 14 + 15 + public NextPhoto(){ 16 + if(!window.PhotoManager.FilteredPhotos[this._currentPhotoIndex + 1])return; 17 + this._currentPhotoIndex++; 18 + 19 + window.PhotoViewerManager.OpenPhoto(window.PhotoManager.FilteredPhotos[this._currentPhotoIndex]); 20 + } 21 + 22 + public PreviousPhoto(){ 23 + if(!window.PhotoManager.FilteredPhotos[this._currentPhotoIndex - 1])return; 24 + this._currentPhotoIndex--; 25 + 26 + window.PhotoViewerManager.OpenPhoto(window.PhotoManager.FilteredPhotos[this._currentPhotoIndex]); 27 + } 28 + 29 + public Close(){ 30 + window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 31 + this._setCurrentPhoto(null); 32 + } 33 + 34 + public OpenPhoto( photo: Photo ){ 35 + window.ViewManager.ChangeState(ViewState.PHOTO_VIEWER); 36 + 37 + this._setCurrentPhoto(photo); 38 + this._currentPhotoIndex = window.PhotoManager.FilteredPhotos.indexOf(photo); 39 + } 40 + }
+22
src/Components/Managers/ViewManager.tsx
···
··· 1 + export enum ViewState{ 2 + SETTINGS, 3 + PHOTO_LIST, 4 + PHOTO_VIEWER 5 + } 6 + 7 + export class ViewManager{ 8 + private _state: ViewState = ViewState.PHOTO_LIST; 9 + private _eventListeners: { from: ViewState, to: ViewState, cb: () => void }[] = []; 10 + 11 + public ChangeState( state: ViewState ){ 12 + console.log('From: ' + this._state + ' To: ' + state); 13 + this._eventListeners.filter(x => x.from === this._state && x.to === state).forEach(c => c.cb()); 14 + this._state = state; 15 + } 16 + 17 + public GetState(){ return this._state; } 18 + 19 + public OnStateTransition( from: ViewState, to: ViewState, cb: () => void ){ 20 + this._eventListeners.push({ from, to, cb }); 21 + } 22 + }
+61
src/Components/Managers/WorldCacheManager.tsx
···
··· 1 + import { invoke } from "@tauri-apps/api/core"; 2 + import { WorldCache } from "../Structs/WorldCache"; 3 + import { listen } from "@tauri-apps/api/event"; 4 + 5 + export class WorldCacheManager{ 6 + private _worldCache: WorldCache[] = []; 7 + private _resolveWorld: ( world: WorldCache | null ) => void = () => {}; 8 + 9 + constructor(){ 10 + invoke('get_config_value_string', { key: 'worldcache' }) 11 + .then((data: any) => { 12 + if(data)this._worldCache = JSON.parse(data); 13 + }) 14 + 15 + listen('world_data', ( event: any ) => { 16 + let worldData = { 17 + expiresOn: Date.now() + 1.2096E+09, 18 + worldData: { 19 + id: event.payload.id, 20 + name: event.payload.name, 21 + author: event.payload.author, 22 + authorId: event.payload.authorId, 23 + desc: event.payload.desc, 24 + img: event.payload.img, 25 + maxUsers: event.payload.maxUsers, 26 + visits: event.payload.visits, 27 + favourites: event.payload.favourites, 28 + tags: event.payload.tags, 29 + from: event.payload.from, 30 + fromSite: event.payload.fromSite, 31 + found: event.payload.found 32 + } 33 + } 34 + 35 + this._worldCache.push(worldData); 36 + invoke('set_config_value_string', { key: 'worldcache', value: JSON.stringify(this._worldCache) }); 37 + 38 + this._resolveWorld(worldData); 39 + }) 40 + } 41 + 42 + getWorldById( id: string ): Promise<WorldCache | null>{ 43 + let promise = new Promise<WorldCache | null>(( res ) => { this._resolveWorld = res }); 44 + let worldData = this._worldCache.find(x => x.worldData.id === id); 45 + 46 + if(!worldData){ 47 + console.log('Fetching new world data'); 48 + 49 + invoke('find_world_by_id', { worldId: id }); 50 + } else if(worldData.expiresOn < Date.now()){ 51 + console.log('Fetching new world data since cache has expired'); 52 + 53 + this._worldCache = this._worldCache.filter(x => x.worldData.id !== id); 54 + invoke('find_world_by_id', { worldId: id }); 55 + } else{ 56 + this._resolveWorld(worldData); 57 + } 58 + 59 + return promise; 60 + } 61 + }
-216
src/Components/NavBar.tsx
··· 1 - import { invoke } from '@tauri-apps/api/core'; 2 - import { emit, listen } from '@tauri-apps/api/event'; 3 - import { fetch } from "@tauri-apps/plugin-http"; 4 - import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow'; 5 - import anime from 'animejs'; 6 - import { Show, createSignal, onMount } from 'solid-js'; 7 - const appWindow = getCurrentWebviewWindow() 8 - 9 - class NavBarProps{ 10 - setLoadingType!: ( type: string ) => string; 11 - loggedIn!: () => { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string }; 12 - setStorageInfo!: ( info: { storage: number, used: number, sync: boolean } ) => { storage: number, used: number, sync: boolean }; 13 - setIsPhotosSyncing!: ( syncing: boolean ) => boolean; 14 - } 15 - 16 - let NavBar = ( props: NavBarProps ) => { 17 - let dropdownVisible = false; 18 - let inAnimation = false; 19 - let dropdown: HTMLElement; 20 - 21 - let [ isSyncing, setIsSyncing ] = createSignal(false); 22 - let [ syncPhotoTotal, setSyncPhotoTotal ] = createSignal(0); 23 - let [ syncPhotoUploading, setSyncPhotoUploading ] = createSignal(0); 24 - let [ syncError, setSyncError ] = createSignal(""); 25 - let [ syncType, setSyncType ] = createSignal("Upload"); 26 - 27 - onMount(() => { 28 - anime.set(dropdown, { opacity: 0, translateX: -10 }); 29 - dropdown.style.display = 'none'; 30 - }) 31 - 32 - listen('photos-upload-meta', ( e: any ) => { 33 - setIsSyncing(true); 34 - setSyncPhotoTotal(e.payload.photos_total); 35 - setSyncPhotoUploading(e.payload.photos_total - e.payload.photos_uploading); 36 - setSyncType('Upload'); 37 - 38 - console.log(e.payload) 39 - }) 40 - 41 - listen('photos-download-meta', ( e: any ) => { 42 - setIsSyncing(true); 43 - setSyncPhotoTotal(e.payload.photos_total); 44 - setSyncPhotoUploading(e.payload.photos_total - e.payload.photos_uploading); 45 - setSyncType('Download'); 46 - 47 - console.log(e.payload) 48 - }) 49 - 50 - listen('sync-finished', () => { 51 - props.setIsPhotosSyncing(false); 52 - setIsSyncing(false); 53 - }) 54 - 55 - let setDropdownVisibility = ( visible: boolean ) => { 56 - if(inAnimation)return; 57 - 58 - if(dropdownVisible !== visible){ 59 - dropdownVisible = visible; 60 - inAnimation = true; 61 - 62 - if(visible){ 63 - dropdown.style.display = 'block'; 64 - 65 - anime({ 66 - targets: dropdown, 67 - opacity: 1, 68 - translateX: 0, 69 - easing: 'easeInOutQuad', 70 - duration: 250, 71 - complete: () => { 72 - inAnimation = false; 73 - } 74 - }) 75 - } else{ 76 - anime({ 77 - targets: dropdown, 78 - opacity: 0, 79 - translateX: -10, 80 - easing: 'easeInOutQuad', 81 - duration: 250, 82 - complete: () => { 83 - inAnimation = false; 84 - dropdown.style.display = 'none'; 85 - } 86 - }) 87 - } 88 - } 89 - } 90 - 91 - 92 - listen('sync-failed', ( e: any ) => { 93 - setSyncError(e.payload); 94 - }) 95 - 96 - window.CloseAllPopups.push(() => setDropdownVisibility(false)); 97 - 98 - return ( 99 - <> 100 - <div class="navbar" data-tauri-drag-region> 101 - <div class="tabs" data-tauri-drag-region > 102 - <div class="nav-tab" onClick={() => { 103 - anime( 104 - { 105 - targets: '.settings', 106 - opacity: 0, 107 - translateX: '500px', 108 - easing: 'easeInOutQuad', 109 - duration: 250, 110 - complete: () => { 111 - anime.set('.settings', { display: 'none' }); 112 - } 113 - }) 114 - }}>Photos</div> 115 - </div> 116 - <div class="nav-tab" style={{ width: '200px', "text-align": 'center', background: 'transparent' }} data-tauri-drag-region> 117 - <Show when={isSyncing()}> 118 - <Show when={ syncError() == "" } fallback={ "Error: " + syncError() }> 119 - <div style={{ width: '100%', "text-align": 'center', 'font-size': '14px' }}> 120 - { syncType() }ing: { syncPhotoUploading() } / { syncPhotoTotal() }<br /> 121 - <div style={{ width: '80%', height: '2px', margin: 'auto', "margin-top": '5px', background: '#111' }}> 122 - <div style={{ height: '2px', width: (syncPhotoUploading() / syncPhotoTotal()) * 100 + '%', background: '#00ccff' }}></div> 123 - </div> 124 - </div> 125 - </Show> 126 - </Show> 127 - </div> 128 - <div class="account" onClick={() => setDropdownVisibility(!dropdownVisible)}> 129 - <Show when={props.loggedIn().loggedIn}> 130 - <div class="user-pfp" style={{ background: `url('https://cdn.phazed.xyz/id/avatars/${props.loggedIn().id}/${props.loggedIn().avatar}.png')` }}></div> 131 - </Show> 132 - <div class="icon"> 133 - <img draggable="false" width="24" height="24" src="/icon/caret-down-solid.svg"></img> 134 - </div> 135 - </div> 136 - <div class="control-lights"> 137 - <div class="light" onClick={() => appWindow.minimize()}> 138 - <img draggable="false" width="24" height="24" src="/icon/minus-solid.svg"></img> 139 - </div> 140 - <div class="light" onClick={() => appWindow.toggleMaximize()}> 141 - <img draggable="false" width="24" height="24" src="/icon/square-regular.svg"></img> 142 - </div> 143 - <div class="light" onClick={() => { appWindow.hide(); emit('hide-window'); } }> 144 - <img draggable="false" width="24" height="24" src="/icon/x-solid.svg"></img> 145 - </div> 146 - </div> 147 - </div> 148 - 149 - <div class="dropdown" ref={( el ) => dropdown = el}> 150 - <div class="dropdown-button" onClick={async () => { 151 - anime.set('.settings', { display: 'block' }); 152 - anime({ 153 - targets: '.settings', 154 - opacity: 1, 155 - translateX: '0px', 156 - easing: 'easeInOutQuad', 157 - duration: 250 158 - }) 159 - 160 - fetch('https://photos.phazed.xyz/api/v1/account?token='+ (await invoke('get_config_value_string', { key: 'token' }))!) 161 - .then(data => data.json()) 162 - .then(data => { 163 - if(!data.ok){ 164 - console.error(data); 165 - return; 166 - } 167 - 168 - console.log(data); 169 - props.setStorageInfo({ storage: data.user.storage, used: data.user.used, sync: data.user.settings.enableSync }); 170 - }) 171 - .catch(e => { 172 - console.error(e); 173 - }) 174 - 175 - setDropdownVisibility(false); 176 - }}>Settings</div> 177 - 178 - <Show when={props.loggedIn().loggedIn == false} fallback={ 179 - <div class="dropdown-button" onClick={async () => { 180 - fetch('https://photos.phazed.xyz/api/v1/deauth?token='+(await invoke('get_config_value_string', { key: 'token' }))!) 181 - .then(data => data.json()) 182 - .then(data => { 183 - console.log(data); 184 - 185 - invoke('set_config_value_string', { key: 'token', value: '' }); 186 - window.location.reload(); 187 - 188 - setDropdownVisibility(false); 189 - }) 190 - .catch(e => { 191 - console.error(e); 192 - 193 - invoke('set_config_value_string', { key: 'token', value: '' }); 194 - window.location.reload(); 195 - 196 - setDropdownVisibility(false); 197 - }) 198 - }}>Sign Out</div> 199 - }> 200 - <div class="dropdown-button" onClick={() => { 201 - props.setLoadingType('auth'); 202 - 203 - setTimeout(() => { 204 - props.setLoadingType('none'); 205 - }, 5000); 206 - 207 - invoke('start_user_auth'); 208 - setDropdownVisibility(false); 209 - }}>Sign In</div> 210 - </Show> 211 - </div> 212 - </> 213 - ) 214 - } 215 - 216 - export default NavBar;
···
+296 -629
src/Components/PhotoList.tsx
··· 1 - import { createEffect, onCleanup, onMount } from "solid-js"; 2 - import { invoke } from '@tauri-apps/api/core'; 3 - import { listen } from '@tauri-apps/api/event'; 4 - 5 - import anime from "animejs"; 6 - import FilterMenu, { FilterType } from "./FilterMenu"; 7 - 8 - const PHOTO_HEIGHT = 200; 9 - const MAX_IMAGE_LOAD = 10; 10 - 11 - let months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 12 - 13 - class PhotoListProps{ 14 - setCurrentPhotoView!: ( view: any ) => any; 15 - setPhotoCount!: ( value: any ) => any; 16 - setPhotoSize!: ( value: any ) => any; 17 - currentPhotoView!: () => any; 18 - photoNavChoice!: () => string; 19 - setPhotoNavChoice!: ( view: any ) => any; 20 - setConfirmationBox!: ( text: string, cb: () => void ) => void; 21 - requestPhotoReload!: () => boolean; 22 - setRequestPhotoReload!: ( val: boolean ) => boolean; 23 - storageInfo!: () => { storage: number, used: number, sync: boolean }; 24 - loggedIn!: () => { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string }; 25 - isPhotosSyncing!: () => boolean; 26 - setIsPhotosSyncing!: ( syncing: boolean ) => boolean; 27 - } 28 - 29 - enum ListPopup{ 30 - FILTERS, 31 - NONE 32 - } 33 - 34 - let PhotoList = ( props: PhotoListProps ) => { 35 - let amountLoaded = 0; 36 - let imagesLoading = 0; 37 - 38 - let hasFirstLoaded = false; 39 - 40 - let photoTreeLoadingContainer: HTMLElement; 41 - 42 - let scrollToTop: HTMLElement; 43 - let scrollToTopActive = false; 44 - 45 - let photoContainer: HTMLCanvasElement; 46 - let photoContainerBG: HTMLCanvasElement; 47 - 48 - let filterContainer: HTMLDivElement; 49 - 50 - let ctx: CanvasRenderingContext2D; 51 - let ctxBG: CanvasRenderingContext2D; 52 - 53 - let photos: Photo[] = []; 54 - let currentPhotoIndex: number = -1; 55 - 56 - let scroll: number = 0; 57 - let targetScroll: number = 0; 58 - 59 - let quitRender: boolean = false; 60 - let photoPath: string; 61 - 62 - let currentPopup = ListPopup.NONE; 63 - 64 - let filterType: FilterType = FilterType.USER; 65 - let filter = ''; 66 - 67 - let filteredPhotos: Photo[] = []; 68 - 69 - let closeWithKey = ( e: KeyboardEvent ) => { 70 - if(e.key === 'Escape'){ 71 - closeCurrentPopup(); 72 - } 73 - } 74 - 75 - let closeCurrentPopup = () => { 76 - switch(currentPopup){ 77 - case ListPopup.FILTERS: 78 - anime({ 79 - targets: filterContainer, 80 - opacity: 0, 81 - easing: 'easeInOutQuad', 82 - duration: 100, 83 - complete: () => { 84 - filterContainer.style.display = 'none'; 85 - currentPopup = ListPopup.NONE; 86 - } 87 - }); 88 - 89 - break; 90 - } 91 - } 92 - 93 - createEffect(() => { 94 - if(props.requestPhotoReload()){ 95 - props.setRequestPhotoReload(false); 96 - reloadPhotos(); 97 - } 98 - }) 99 - 100 - class PhotoMetadata{ 101 - width!: number; 102 - height!: number; 103 - metadata!: string; 104 - path!: string; 105 - } 106 - 107 - class Photo{ 108 - path: string; 109 - loaded: boolean = false; 110 - loading: boolean = false; 111 - metaLoaded: boolean = false; 112 - image?: HTMLCanvasElement; 113 - imageEl?: HTMLImageElement; 114 - width?: number; 115 - height?: number; 116 - loadingRotate: number = 0; 117 - metadata: any; 118 - 119 - frames: number = 0; 120 - shown: boolean = false; 121 - 122 - x: number = 0; 123 - y: number = 0; 124 - scaledWidth?: number; 125 - scaledHeight?: number; 126 - 127 - dateString: string; 128 - date: Date; 129 - 130 - legacy: boolean = false; 131 - 132 - public onMetaLoaded: () => void = () => {}; 133 - 134 - constructor( path: string, isLegacy: boolean = false ){ 135 - this.path = path; 136 - this.legacy = isLegacy; 137 - 138 - if(this.legacy) 139 - this.dateString = this.path.split('_')[2]; 140 - else 141 - this.dateString = this.path.split('_')[1]; 142 - 143 - let splitDateString = this.dateString.split('-'); 144 - 145 - this.date = new Date(); 146 - 147 - this.date.setFullYear(parseInt(splitDateString[0])); 148 - this.date.setMonth(parseInt(splitDateString[1])); 149 - this.date.setDate(parseInt(splitDateString[2])); 150 - } 151 - 152 - loadMeta(){ 153 - invoke('load_photo_meta', { photo: this.path }); 154 - } 155 - 156 - loadImage(){ 157 - if(this.loading || this.loaded || imagesLoading >= MAX_IMAGE_LOAD)return; 158 - 159 - this.loadMeta(); 160 - if(!this.metaLoaded)return; 161 - 162 - this.loading = true; 163 - 164 - imagesLoading++; 165 - 166 - this.image = document.createElement('canvas'); 167 - 168 - this.imageEl = document.createElement('img'); 169 - this.imageEl.crossOrigin = 'anonymous'; 170 - 171 - this.imageEl.src = "http://photo.localhost/" + photoPath + this.path + "?downscale"; 172 - 173 - this.imageEl.onload = () => { 174 - this.image!.width = this.scaledWidth!; 175 - this.image!.height = this.scaledHeight!; 176 - 177 - this.image!.getContext('2d')!.drawImage(this.imageEl!, 0, 0, this.scaledWidth!, this.scaledHeight!); 178 - 179 - this.loaded = true; 180 - this.loading = false; 181 - 182 - imagesLoading--; 183 - } 184 - } 185 - } 186 - 187 - createEffect(() => { 188 - let action = props.photoNavChoice(); 189 - 190 - switch(action){ 191 - case 'prev': 192 - if(!filteredPhotos[currentPhotoIndex - 1])break; 193 - props.setCurrentPhotoView(filteredPhotos[currentPhotoIndex - 1]); 194 - 195 - currentPhotoIndex--; 196 - break; 197 - case 'next': 198 - if(!filteredPhotos[currentPhotoIndex + 1])break; 199 - props.setCurrentPhotoView(filteredPhotos[currentPhotoIndex + 1]); 200 - 201 - currentPhotoIndex++; 202 - break; 203 - } 204 - 205 - props.setPhotoNavChoice(''); 206 - }) 207 - 208 - let render = () => { 209 - if(!quitRender) 210 - requestAnimationFrame(render); 211 - else 212 - return quitRender = false; 213 - 214 - if(!scrollToTopActive && scroll > photoContainer.height){ 215 - scrollToTop.style.display = 'flex'; 216 - anime({ targets: scrollToTop, opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 217 - 218 - scrollToTopActive = true; 219 - } else if(scrollToTopActive && scroll < photoContainer.height){ 220 - anime({ targets: scrollToTop, opacity: 0, translateY: '-10px', complete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 221 - scrollToTopActive = false; 222 - } 223 - 224 - if(!ctx || !ctxBG)return; 225 - ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 226 - ctxBG.clearRect(0, 0, photoContainerBG.width, photoContainerBG.height); 227 - 228 - let currentRow: Photo[] = []; 229 - let currentRowWidth = 0; 230 - let currentRowIndex = -1; 231 - 232 - scroll = scroll + (targetScroll - scroll) * 0.2; 233 - 234 - let lastPhoto; 235 - for (let i = 0; i < filteredPhotos.length; i++) { 236 - let p = filteredPhotos[i]; 237 - 238 - if(currentRowIndex * 210 - scroll > photoContainer.height){ 239 - p.shown = false; 240 - continue; 241 - } 242 - 243 - if(!lastPhoto || (lastPhoto.dateString !== p.dateString)){ 244 - currentRowWidth -= 10; 245 - 246 - let rowXPos = 0; 247 - currentRow.forEach(photo => { 248 - if(60 + currentRowIndex * 210 - scroll < -200)return photo.shown = false; 249 - 250 - if(!photo.loaded) 251 - setTimeout(() => photo.loadImage(), 1); 252 - else{ 253 - if(!photo.shown){ 254 - photo.frames = 0; 255 - photo.shown = true; 256 - } 257 - 258 - ctx.globalAlpha = photo.frames / 100; 259 - ctx.drawImage(photo.image!, (rowXPos - currentRowWidth / 2) + photoContainer.width / 2, 60 + currentRowIndex * 210 - scroll, photo.scaledWidth!, 200); 260 - 261 - photo.x = (rowXPos - currentRowWidth / 2) + photoContainer.width / 2; 262 - photo.y = 60 + currentRowIndex * 210 - scroll; 263 - 264 - if(photo.frames < 100) 265 - photo.frames += 10; 266 - } 267 - 268 - rowXPos += photo.scaledWidth! + 10; 269 - }) 270 - 271 - ctx.textAlign = 'center'; 272 - ctx.textBaseline = 'middle'; 273 - ctx.globalAlpha = 1; 274 - ctx.fillStyle = '#fff'; 275 - ctx.font = '30px Rubik'; 276 - 277 - let dateParts = p.dateString.split('-'); 278 - ctx.fillText(dateParts[2] + ' ' + months[parseInt(dateParts[1]) - 1] + ' ' + dateParts[0], photoContainer.width / 2, 60 + (currentRowIndex + 1.2) * 210 - scroll); 279 - 280 - currentRowWidth = 0; 281 - currentRow = []; 282 - currentRowIndex += 1.4; 283 - } 284 - 285 - if(currentRowWidth + p.scaledWidth! + 10 < photoContainer.width - 100){ 286 - currentRowWidth += p.scaledWidth! + 10; 287 - currentRow.push(p); 288 - } else{ 289 - currentRowWidth -= 10; 290 - 291 - let rowXPos = 0; 292 - currentRow.forEach(photo => { 293 - if(60 + currentRowIndex * 210 - scroll < -200)return photo.shown = false; 294 - 295 - if(!photo.loaded) 296 - setTimeout(() => photo.loadImage(), 1); 297 - else{ 298 - if(!photo.shown){ 299 - photo.frames = 0; 300 - photo.shown = true; 301 - } 302 - 303 - ctx.globalAlpha = photo.frames / 100; 304 - ctx.drawImage(photo.image!, (rowXPos - currentRowWidth / 2) + photoContainer.width / 2, 60 + currentRowIndex * 210 - scroll, photo.scaledWidth!, 200); 305 - 306 - photo.x = (rowXPos - currentRowWidth / 2) + photoContainer.width / 2; 307 - photo.y = 60 + currentRowIndex * 210 - scroll; 308 - 309 - if(photo.frames < 100) 310 - photo.frames += 10; 311 - } 312 - 313 - rowXPos += photo.scaledWidth! + 10; 314 - }) 315 - 316 - currentRowWidth = 0; 317 - currentRow = []; 318 - currentRowIndex++; 319 - 320 - currentRowWidth += p.scaledWidth! + 10; 321 - currentRow.push(p); 322 - } 323 - 324 - lastPhoto = p; 325 - } 326 - 327 - if(currentRow.length > 0){ 328 - currentRowWidth -= 10; 329 - 330 - let rowXPos = 0; 331 - currentRow.forEach(photo => { 332 - if(60 + currentRowIndex * 210 - scroll < -200)return photo.shown = false; 333 - 334 - if(!photo.loaded) 335 - setTimeout(() => photo.loadImage(), 1); 336 - else{ 337 - if(!photo.shown){ 338 - photo.frames = 0; 339 - photo.shown = true; 340 - } 341 - 342 - ctx.globalAlpha = photo.frames / 100; 343 - ctx.drawImage(photo.image!, (rowXPos - currentRowWidth / 2) + photoContainer.width / 2, 60 + currentRowIndex * 210 - scroll, photo.scaledWidth!, 200); 344 - 345 - photo.x = (rowXPos - currentRowWidth / 2) + photoContainer.width / 2; 346 - photo.y = 60 + currentRowIndex * 210 - scroll; 347 - 348 - if(photo.frames < 100) 349 - photo.frames += 10; 350 - } 351 - 352 - rowXPos += photo.scaledWidth! + 10; 353 - }) 354 - } 355 - 356 - if(filteredPhotos.length == 0){ 357 - ctx.textAlign = 'center'; 358 - ctx.textBaseline = 'middle'; 359 - ctx.globalAlpha = 1; 360 - ctx.fillStyle = '#fff'; 361 - ctx.font = '40px Rubik'; 362 - 363 - ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 364 - } 365 - 366 - ctxBG.filter = 'blur(100px)'; 367 - ctxBG.drawImage(photoContainer, 0, 0); 368 - } 369 - 370 - listen('hide-window', () => { 371 - quitRender = true; 372 - }) 373 - 374 - listen('show-window', () => { 375 - requestAnimationFrame(render); 376 - }) 377 - 378 - listen('photo_meta_loaded', ( event: any ) => { 379 - let data: PhotoMetadata = event.payload; 380 - 381 - let photo = photos.find(x => x.path === data.path); 382 - if(!photo)return; 383 - 384 - photo.width = data.width; 385 - photo.height = data.height; 386 - 387 - let scale = PHOTO_HEIGHT / photo.height; 388 - 389 - photo.scaledWidth = photo.width * scale; 390 - photo.scaledHeight = PHOTO_HEIGHT; 391 - 392 - photo.metadata = data.metadata.split('\u0000').filter(x => x !== '')[1]; 393 - amountLoaded++; 394 - 395 - photo.metaLoaded = true; 396 - photo.onMetaLoaded(); 397 - 398 - reloadFilters(); 399 - 400 - if(amountLoaded === photos.length && !hasFirstLoaded){ 401 - filteredPhotos = photos; 402 - hasFirstLoaded = true; 403 - 404 - anime({ 405 - targets: photoTreeLoadingContainer, 406 - height: 0, 407 - easing: 'easeInOutQuad', 408 - duration: 500, 409 - opacity: 0, 410 - complete: () => { 411 - photoTreeLoadingContainer.style.display = 'none'; 412 - } 413 - }) 414 - 415 - anime({ 416 - targets: '.reload-photos', 417 - opacity: 1, 418 - duration: 150, 419 - easing: 'easeInOutQuad' 420 - }) 421 - 422 - render(); 423 - } 424 - }) 425 - 426 - listen('photo_create', async ( event: any ) => { 427 - let photo = new Photo(event.payload); 428 - 429 - photos.splice(0, 0, photo); 430 - photo.loadMeta(); 431 - 432 - if(!props.isPhotosSyncing() && props.storageInfo().sync){ 433 - props.setIsPhotosSyncing(true); 434 - invoke('sync_photos', { token: (await invoke('get_config_value_string', { key: 'token' })) }); 435 - } 436 - }) 437 - 438 - listen('photo_remove', ( event: any ) => { 439 - photos = photos.filter(x => x.path !== event.payload); 440 - filteredPhotos = filteredPhotos.filter(x => x.path !== event.payload); 441 - 442 - if(event.payload === props.currentPhotoView().path){ 443 - currentPhotoIndex = -1; 444 - props.setCurrentPhotoView(null); 445 - } 446 - }) 447 - 448 - let reloadPhotos = async () => { 449 - photoPath = await invoke('get_user_photos_path') + '/'; 450 - 451 - photoTreeLoadingContainer.style.opacity = '1'; 452 - photoTreeLoadingContainer.style.height = '100%'; 453 - photoTreeLoadingContainer.style.display = 'flex'; 454 - 455 - quitRender = true; 456 - amountLoaded = 0; 457 - scroll = 0; 458 - 459 - photos = []; 460 - filteredPhotos = []; 461 - 462 - anime({ 463 - targets: '.reload-photos', 464 - opacity: 0, 465 - duration: 150, 466 - easing: 'easeInOutQuad' 467 - }) 468 - 469 - invoke('load_photos'); 470 - } 471 - 472 - let loadPhotos = async () => { 473 - photoPath = await invoke('get_user_photos_path') + '/'; 474 - invoke('load_photos') 475 - 476 - listen('photos_loaded', ( event: any ) => { 477 - let photoPaths = event.payload.photos.reverse(); 478 - console.log(photoPaths); 479 - 480 - props.setPhotoCount(photoPaths.length); 481 - props.setPhotoSize(event.payload.size); 482 - 483 - let doesHaveLegacy = false; 484 - 485 - photoPaths.forEach(( path: string ) => { 486 - let photo 487 - 488 - if(path.slice(0, 9) === "legacy://"){ 489 - photo = new Photo(path.slice(9), true); 490 - doesHaveLegacy = true; 491 - } else 492 - photo = new Photo(path, false); 493 - 494 - photos.push(photo); 495 - photo.loadMeta(); 496 - }) 497 - 498 - if(doesHaveLegacy){ 499 - photos = photos.sort(( a, b ) => b.date.valueOf() - a.date.valueOf()); 500 - } 501 - }) 502 - } 503 - 504 - onMount(() => { 505 - ctx = photoContainer.getContext('2d')!; 506 - ctxBG = photoContainerBG.getContext('2d')!; 507 - loadPhotos(); 508 - 509 - anime.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 510 - 511 - photoContainer.addEventListener('wheel', ( e: WheelEvent ) => { 512 - targetScroll += e.deltaY; 513 - 514 - if(targetScroll < 0) 515 - targetScroll = 0; 516 - }); 517 - 518 - window.addEventListener('keyup', closeWithKey); 519 - 520 - photoContainer.width = window.innerWidth; 521 - photoContainer.height = window.innerHeight; 522 - 523 - photoContainerBG.width = window.innerWidth; 524 - photoContainerBG.height = window.innerHeight; 525 - 526 - window.addEventListener('resize', () => { 527 - photoContainer.width = window.innerWidth; 528 - photoContainer.height = window.innerHeight; 529 - 530 - photoContainerBG.width = window.innerWidth; 531 - photoContainerBG.height = window.innerHeight; 532 - }) 533 - 534 - photoContainer.addEventListener('click', ( e: MouseEvent ) => { 535 - let photo = filteredPhotos.find(x => 536 - e.clientX > x.x && 537 - e.clientY > x.y && 538 - e.clientX < x.x + x.scaledWidth! && 539 - e.clientY < x.y + x.scaledHeight! && 540 - x.shown 541 - ); 542 - 543 - if(photo){ 544 - props.setCurrentPhotoView(photo); 545 - currentPhotoIndex = filteredPhotos.indexOf(photo); 546 - } else 547 - currentPhotoIndex = -1; 548 - }) 549 - }) 550 - 551 - onCleanup(() => { 552 - window.removeEventListener('keyup', closeWithKey); 553 - }) 554 - 555 - let reloadFilters = () => { 556 - filteredPhotos = []; 557 - 558 - switch(filterType){ 559 - case FilterType.USER: 560 - photos.map(p => { 561 - if(p.metadata){ 562 - let meta = JSON.parse(p.metadata); 563 - let photo = meta.players.find(( y: any ) => y.displayName.toLowerCase().includes(filter) || y.id === filter); 564 - 565 - if(photo)filteredPhotos.push(p); 566 - } 567 - }) 568 - break; 569 - case FilterType.WORLD: 570 - photos.map(p => { 571 - if(p.metadata){ 572 - let meta = JSON.parse(p.metadata); 573 - let photo = meta.world.name.toLowerCase().includes(filter) || meta.world.id === filter; 574 - 575 - if(photo)filteredPhotos.push(p); 576 - } 577 - }) 578 - break; 579 - } 580 - } 581 - 582 - return ( 583 - <div class="photo-list"> 584 - <div ref={filterContainer!} class="filter-container"> 585 - <FilterMenu 586 - setFilter={( f ) => { filter = f.toLowerCase(); reloadFilters(); }} 587 - setFilterType={( t ) => { filterType = t; reloadFilters(); }} /> 588 - </div> 589 - 590 - <div class="photo-tree-loading" ref={( el ) => photoTreeLoadingContainer = el}>Scanning Photo Tree...</div> 591 - 592 - <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 593 - <div class="icon"> 594 - <img draggable="false" src="/icon/angle-up-solid.svg"></img> 595 - </div> 596 - </div> 597 - <div class="reload-photos" onClick={() => props.setConfirmationBox("Are you sure you want to reload all photos? This can cause the application to slow down while it is loading...", () => window.location.reload())}> 598 - <div class="icon" style={{ width: '17px' }}> 599 - <img draggable="false" width="24" height="24" src="/icon/arrows-rotate-solid.svg"></img> 600 - </div> 601 - </div> 602 - 603 - <div class="filter-options"> 604 - <div> 605 - <div onClick={() => { 606 - if(currentPopup != ListPopup.NONE)return closeCurrentPopup(); 607 - currentPopup = ListPopup.FILTERS; 608 - 609 - filterContainer.style.display = 'block'; 610 - 611 - anime({ 612 - targets: filterContainer, 613 - opacity: 1, 614 - easing: 'easeInOutQuad', 615 - duration: 100 616 - }); 617 - }} class="icon" style={{ width: '20px', height: '5px', padding: '20px' }}> 618 - <img draggable="false" width="24" height="24" src="/icon/sliders-solid.svg"></img> 619 - </div> 620 - <div class="icon-label">Filters</div> 621 - </div> 622 - </div> 623 - 624 - <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 625 - <canvas class="photo-container-bg" ref={( el ) => photoContainerBG = el}></canvas> 626 - </div> 627 - ) 628 - } 629 - 630 export default PhotoList;
··· 1 + import { createSignal, onCleanup, onMount, Show } from "solid-js"; 2 + import { listen } from '@tauri-apps/api/event'; 3 + import { Window } from "@tauri-apps/api/window"; 4 + 5 + import FilterMenu from "./FilterMenu"; 6 + import { ViewState } from "./Managers/ViewManager"; 7 + import { invoke } from "@tauri-apps/api/core"; 8 + import { animate, utils } from "animejs"; 9 + 10 + enum ListPopup{ 11 + FILTERS, 12 + NONE 13 + } 14 + 15 + let PhotoList = () => { 16 + let scrollToTop: HTMLElement; 17 + let scrollToTopActive = false; 18 + 19 + let photoContainer: HTMLCanvasElement; 20 + 21 + let filterContainer: HTMLDivElement; 22 + 23 + let ctx: CanvasRenderingContext2D; 24 + 25 + let scroll: number = 0; 26 + let targetScroll: number = 0; 27 + 28 + let quitRender: boolean = true; 29 + 30 + let currentPopup = ListPopup.NONE; 31 + 32 + let [ updateAvailable, setUpdateAvailable ] = createSignal(false); 33 + 34 + Window.getCurrent().isVisible().then(visible => { 35 + quitRender = !visible; 36 + }) 37 + 38 + 39 + window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.SETTINGS, () => { 40 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 41 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 42 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 43 + }); 44 + 45 + window.ViewManager.OnStateTransition(ViewState.SETTINGS, ViewState.PHOTO_LIST, () => { 46 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 47 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 48 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 49 + }); 50 + 51 + 52 + window.ViewManager.OnStateTransition(ViewState.PHOTO_LIST, ViewState.PHOTO_VIEWER, () => { 53 + animate(photoContainer, { opacity: 0.5, filter: 'blur(10px)', easing: 'easeInOutQuad', duration: 100 }); 54 + animate('.filter-options', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 55 + animate('.scroll-to-top', { opacity: 0, easing: 'easeInOutQuad', duration: 100 }); 56 + }); 57 + 58 + window.ViewManager.OnStateTransition(ViewState.PHOTO_VIEWER, ViewState.PHOTO_LIST, () => { 59 + animate(photoContainer, { opacity: 1, filter: 'blur(0px)', easing: 'easeInOutQuad', duration: 100, onComplete: () => photoContainer.style.filter = '' }); 60 + animate('.filter-options', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 61 + animate('.scroll-to-top', { opacity: 1, easing: 'easeInOutQuad', duration: 100 }); 62 + }); 63 + 64 + 65 + let closeWithKey = ( e: KeyboardEvent ) => { 66 + if(e.key === 'Escape'){ 67 + closeCurrentPopup(); 68 + } 69 + } 70 + 71 + let onResize = () => { 72 + photoContainer.width = window.innerWidth; 73 + photoContainer.height = window.innerHeight; 74 + 75 + window.PhotoListRenderingManager.ComputeLayout(); 76 + } 77 + 78 + let closeCurrentPopup = () => { 79 + switch(currentPopup){ 80 + case ListPopup.FILTERS: 81 + animate(filterContainer!, { 82 + opacity: 0, 83 + translateY: '10px', 84 + easing: 'easeInOutQuad', 85 + duration: 100, 86 + onComplete: () => { 87 + filterContainer!.style.display = 'none'; 88 + currentPopup = ListPopup.NONE; 89 + } 90 + }); 91 + 92 + break; 93 + } 94 + } 95 + 96 + let render = () => { 97 + if(!quitRender) 98 + requestAnimationFrame(render); 99 + else 100 + return quitRender = false; 101 + 102 + if(!scrollToTopActive && scroll > photoContainer.height){ 103 + scrollToTop.style.display = 'flex'; 104 + animate(scrollToTop, { opacity: 1, translateY: '0px', easing: 'easeInOutQuad', duration: 100 }); 105 + 106 + scrollToTopActive = true; 107 + } else if(scrollToTopActive && scroll < photoContainer.height){ 108 + animate(scrollToTop, { opacity: 0, translateY: '-10px', onComplete: () => scrollToTop.style.display = 'none', easing: 'easeInOutQuad', duration: 100 }); 109 + 110 + scrollToTopActive = false; 111 + } 112 + 113 + if(!ctx)return; 114 + ctx.clearRect(0, 0, photoContainer.width, photoContainer.height); 115 + 116 + scroll = scroll + (targetScroll - scroll) * 0.1; 117 + 118 + window.PhotoListRenderingManager.Render(ctx, photoContainer!, scroll); 119 + 120 + if(window.PhotoManager.FilteredPhotos.length == 0){ 121 + ctx.textAlign = 'center'; 122 + ctx.textBaseline = 'middle'; 123 + ctx.globalAlpha = 1; 124 + ctx.fillStyle = '#fff'; 125 + ctx.font = '40px Rubik'; 126 + 127 + ctx.fillText("It's looking empty in here! You have no photos :O", photoContainer.width / 2, photoContainer.height / 2); 128 + } 129 + } 130 + 131 + listen('hide-window', () => { 132 + quitRender = true; 133 + console.log('Hide Window'); 134 + }) 135 + 136 + listen('show-window', () => { 137 + if(quitRender)quitRender = false; 138 + console.log('Shown Window'); 139 + 140 + photoContainer.width = window.innerWidth; 141 + photoContainer.height = window.innerHeight; 142 + 143 + if(window.PhotoManager.HasFirstLoaded){ 144 + requestAnimationFrame(render); 145 + window.PhotoManager.HasFirstLoaded = false; 146 + } 147 + }) 148 + 149 + window.PhotoManager.OnLoadingFinished(() => { 150 + invoke('close_splashscreen'); 151 + 152 + animate('.reload-photos', { 153 + opacity: 1, 154 + duration: 150, 155 + easing: 'easeInOutQuad' 156 + }) 157 + 158 + window.PhotoListRenderingManager.SetCanvas(photoContainer!); 159 + render(); 160 + }); 161 + 162 + onMount(() => { 163 + // Update Stuff 164 + fetch('https://api.github.com/repos/phaze-the-dumb/VRChat-Photo-Manager/releases/latest') 165 + .then(data => { 166 + if(data.status !== 200)return; 167 + 168 + data.json().then(async data => { 169 + let currentVersion = await invoke('get_version'); 170 + setUpdateAvailable(data.tag_name !== currentVersion); 171 + }) 172 + }) 173 + .catch(e => { 174 + console.error(e); 175 + setUpdateAvailable(false); 176 + }) 177 + 178 + // Other Stuff 179 + ctx = photoContainer.getContext('2d')!; 180 + 181 + window.PhotoManager.Load(); 182 + 183 + utils.set(scrollToTop, { opacity: 0, translateY: '-10px', display: 'none' }); 184 + 185 + photoContainer.onwheel = ( e: WheelEvent ) => { 186 + targetScroll += e.deltaY * 2; 187 + 188 + if(targetScroll < 0) 189 + targetScroll = 0; 190 + }; 191 + 192 + window.addEventListener('keyup', closeWithKey); 193 + window.addEventListener('resize', onResize); 194 + 195 + photoContainer.width = window.innerWidth; 196 + photoContainer.height = window.innerHeight; 197 + 198 + photoContainer.onclick = ( e: MouseEvent ) => { 199 + let photo = window.PhotoManager.FilteredPhotos.find(x => 200 + e.clientX > x.x && 201 + e.clientY > x.y && 202 + e.clientX < x.x + x.scaledWidth! && 203 + e.clientY < x.y + x.scaledHeight! && 204 + x.shown 205 + ); 206 + 207 + if(photo) 208 + window.PhotoViewerManager.OpenPhoto(photo); 209 + // else 210 + // currentPhotoIndex = -1; 211 + } 212 + }) 213 + 214 + onCleanup(() => { 215 + photoContainer.onwheel = () => {}; 216 + photoContainer.onclick = () => {}; 217 + 218 + window.removeEventListener('keyup', closeWithKey); 219 + window.removeEventListener('resize', onResize); 220 + }) 221 + 222 + return ( 223 + <div class="photo-list"> 224 + <div ref={filterContainer!} class="filter-container"> 225 + <FilterMenu /> 226 + </div> 227 + 228 + <div class="scroll-to-top" ref={( el ) => scrollToTop = el} onClick={() => targetScroll = 0}> 229 + <div class="icon"> 230 + <img draggable="false" src="/icon/angle-up-solid.svg"></img> 231 + </div> 232 + </div> 233 + 234 + <div class="filter-options"> 235 + <div> 236 + <div onClick={() => { 237 + if(currentPopup != ListPopup.NONE)return closeCurrentPopup(); 238 + currentPopup = ListPopup.FILTERS; 239 + 240 + filterContainer!.style.display = 'block'; 241 + 242 + animate(filterContainer!, { 243 + opacity: 1, 244 + translateY: 0, 245 + easing: 'easeInOutQuad', 246 + duration: 100 247 + }); 248 + }} class="icon"> 249 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/sliders-solid.svg"></img> 250 + </div> 251 + <div class="icon-label">Filters</div> 252 + </div> 253 + 254 + <div> 255 + <div onClick={() => { 256 + window.location.reload(); 257 + }} class="icon"> 258 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/arrows-rotate-solid.svg"></img> 259 + </div> 260 + <div class="icon-label">Reload Photos</div> 261 + </div> 262 + 263 + <div> 264 + <div onClick={() => { 265 + utils.set('.settings', { display: 'block' }); 266 + animate('.settings', { 267 + opacity: 1, 268 + translateX: '0px', 269 + easing: 'easeInOutQuad', 270 + duration: 250 271 + }) 272 + 273 + window.ViewManager.ChangeState(ViewState.SETTINGS); 274 + }} class="icon"> 275 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/gear-solid-full.svg"></img> 276 + </div> 277 + <div class="icon-label">Settings</div> 278 + </div> 279 + 280 + <Show when={updateAvailable()}> 281 + <div> 282 + <div onClick={() => { 283 + invoke('open_url', { url: 'https://github.com/phaze-the-dumb/VRChat-Photo-Manager/releases/latest' }); 284 + }} class="icon"> 285 + <img draggable="false" style={{ width: "20px", height: "20px" }} src="/icon/download-solid-full.svg"></img> 286 + </div> 287 + <div class="icon-label">Update Available</div> 288 + </div> 289 + </Show> 290 + </div> 291 + 292 + <canvas class="photo-container" ref={( el ) => photoContainer = el}></canvas> 293 + </div> 294 + ) 295 + } 296 + 297 export default PhotoList;
+304 -265
src/Components/PhotoViewer.tsx
··· 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 import { invoke } from '@tauri-apps/api/core'; 3 - import { listen } from '@tauri-apps/api/event'; 4 - import anime from 'animejs'; 5 - 6 - class PhotoViewerProps{ 7 - currentPhotoView!: () => any; 8 - setCurrentPhotoView!: ( view: any ) => any; 9 - setPhotoNavChoice!: ( view: any ) => any; 10 - setConfirmationBox!: ( text: string, cb: () => void ) => void; 11 - storageInfo!: () => { storage: number, used: number, sync: boolean }; 12 - loggedIn!: () => { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string }; 13 - } 14 - 15 - class WorldCache{ 16 - expiresOn!: number; 17 - worldData!: { 18 - id: string, 19 - name: string, 20 - author: string, 21 - authorId: string, 22 - desc: string, 23 - img: string, 24 - maxUsers: number, 25 - visits: number, 26 - favourites: number, 27 - tags: any, 28 - from: string, 29 - fromSite: string, 30 - found: boolean 31 - } 32 - } 33 - 34 - let worldCache: WorldCache[] = []; 35 - 36 - invoke('get_config_value_string', { key: 'worldcache' }) 37 - .then((data: any) => { 38 - if(data)worldCache = JSON.parse(data); 39 - }) 40 41 - let PhotoViewer = ( props: PhotoViewerProps ) => { 42 let viewer: HTMLElement; 43 let imageViewer: HTMLImageElement; 44 let isOpen = false; ··· 51 let photoTrayCloseBtn: HTMLElement; 52 53 let worldInfoContainer: HTMLElement; 54 - let photoPath: string; 55 56 let viewerContextMenu: HTMLElement; 57 let viewerContextMenuButtons: HTMLElement[] = []; 58 59 let allowedToOpenTray = false; 60 - let trayInAnimation = false; 61 62 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 63 switch(e.key){ 64 case 'Escape': 65 - props.setCurrentPhotoView(null); 66 67 break; 68 case 'ArrowUp': ··· 75 break; 76 case 'ArrowLeft': 77 window.CloseAllPopups.forEach(p => p()); 78 - props.setPhotoNavChoice('prev'); 79 80 break; 81 case 'ArrowRight': 82 window.CloseAllPopups.forEach(p => p()); 83 - props.setPhotoNavChoice('next'); 84 85 break; 86 } 87 } 88 89 - let openTray = () => { 90 - if(trayOpen || trayInAnimation)return; 91 92 trayOpen = true; 93 - trayInAnimation = true; 94 95 window.CloseAllPopups.forEach(p => p()); 96 - anime({ targets: photoTray, bottom: '0px', duration: 500 }); 97 98 - anime({ 99 - targets: photoControls, 100 bottom: '160px', 101 scale: '0.75', 102 opacity: 0, 103 duration: 500, 104 - complete: () => { 105 photoControls.style.display = 'none'; 106 - trayInAnimation = false; 107 } 108 }); 109 110 photoTrayCloseBtn.style.display = 'flex'; 111 - anime({ 112 - targets: photoTrayCloseBtn, 113 bottom: '160px', 114 opacity: 1, 115 scale: 1, 116 duration: 500 117 }) 118 } 119 120 let closeTray = () => { 121 - if(!trayOpen || trayInAnimation)return; 122 - trayInAnimation = true; 123 124 window.CloseAllPopups.forEach(p => p()); 125 - anime({ targets: photoTray, bottom: '-150px', duration: 500 }); 126 127 - anime({ 128 - targets: photoTrayCloseBtn, 129 bottom: '10px', 130 scale: '0.75', 131 opacity: 0, 132 duration: 500, 133 - complete: () => { 134 photoTrayCloseBtn.style.display = 'none'; 135 - trayOpen = false; 136 - trayInAnimation = false; 137 } 138 }); 139 140 photoControls.style.display = 'flex'; 141 - anime({ 142 - targets: photoControls, 143 bottom: '10px', 144 opacity: 1, 145 scale: 1, 146 duration: 500, 147 }) 148 } 149 150 onMount(() => { 151 - anime.set(photoControls, { translateX: '-50%' }); 152 - anime.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 153 154 window.addEventListener('keyup', switchPhotoWithKey); 155 156 let contextMenuOpen = false; 157 window.CloseAllPopups.push(() => { 158 contextMenuOpen = false; 159 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 160 161 - anime({ 162 - targets: viewerContextMenu, 163 opacity: 0, 164 easing: 'easeInOutQuad', 165 rotate: '30deg', 166 duration: 100, 167 - complete: () => { 168 viewerContextMenu.style.display = 'none'; 169 } 170 }) 171 }); 172 173 viewerContextMenuButtons[0].onclick = async () => { 174 window.CloseAllPopups.forEach(p => p()); 175 // Context Menu -> Open file location 176 177 - let path = await invoke('get_user_photos_path') + '\\' + props.currentPhotoView().path; 178 invoke('open_folder', { url: path }); 179 } 180 181 viewerContextMenuButtons[1].onclick = () => { 182 window.CloseAllPopups.forEach(p => p()); 183 // Context Menu -> Copy image 184 - 185 - let canvas = document.createElement('canvas'); 186 - let ctx = canvas.getContext('2d')!; 187 - 188 - canvas.width = props.currentPhotoView().width; 189 - canvas.height = props.currentPhotoView().height; 190 - 191 - ctx.drawImage(imageViewer, 0, 0); 192 - 193 - canvas.toBlob(( blob ) => { 194 - navigator.clipboard.write([ 195 - new ClipboardItem({ 196 - 'image/png': blob! 197 - }) 198 - ]); 199 - 200 - canvas.remove(); 201 - 202 - anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 203 - anime({ 204 - targets: '.copy-notif', 205 - opacity: 1, 206 - translateY: '0px' 207 - }); 208 - 209 - setTimeout(() => { 210 - anime({ 211 - targets: '.copy-notif', 212 - opacity: 0, 213 - translateY: '-100px' 214 - }); 215 - }, 2000); 216 - }); 217 } 218 219 imageViewer.oncontextmenu = ( e ) => { 220 if(contextMenuOpen){ 221 contextMenuOpen = false; 222 223 - anime.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 224 225 - anime({ 226 - targets: viewerContextMenu, 227 opacity: 0, 228 rotate: '30deg', 229 easing: 'easeInOutQuad', 230 duration: 100, 231 - complete: () => { 232 viewerContextMenu.style.display = 'none'; 233 } 234 }) ··· 239 viewerContextMenu.style.left = e.clientX + 'px'; 240 viewerContextMenu.style.display = 'block'; 241 242 - anime.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 243 244 - anime({ 245 - targets: viewerContextMenu, 246 opacity: 1, 247 rotate: '0deg', 248 easing: 'easeInOutQuad', ··· 252 } 253 254 createEffect(() => { 255 - let photo = props.currentPhotoView(); 256 allowedToOpenTray = false; 257 258 imageViewer.style.opacity = '0'; 259 260 if(photo){ 261 - (async () => { 262 - if(!photoPath) 263 - photoPath = await invoke('get_user_photos_path') + '/'; 264 265 - imageViewer.src = 'http://photo.localhost/' + (photoPath + props.currentPhotoView().path).split('\\').join('/') + "?full"; 266 - imageViewer.crossOrigin = 'anonymous'; 267 - })(); 268 269 - anime({ 270 - targets: imageViewer, 271 opacity: 1, 272 delay: 50, 273 duration: 150, ··· 275 }) 276 277 let handleMetaDataLoaded = () => { 278 if(photo.metadata){ 279 photo.onMetaLoaded = () => {} 280 281 - let meta = JSON.parse(photo.metadata); 282 - let worldData = worldCache.find(x => x.worldData.id === meta.world.id); 283 284 - allowedToOpenTray = true; 285 - trayButton.style.display = 'flex'; 286 - 287 - photoTray.innerHTML = ''; 288 - photoTray.appendChild( 289 - <div class="photo-tray-columns"> 290 - <div class="photo-tray-column" style={{ width: '20%' }}><br /> 291 - <div class="tray-heading">People</div> 292 - 293 - <For each={meta.players}> 294 - {( item ) => 295 - <div> 296 - { item.displayName } 297 - <Show when={item.id}> 298 - <img width="15" src="/icon/up-right-from-square-solid.svg" onClick={() => invoke('open_url', { url: 'https://vrchat.com/home/user/' + item.id })} style={{ "margin-left": '10px', "font-size": '12px', 'color': '#bbb', cursor: 'pointer' }} /> 299 - </Show> 300 - </div> 301 - } 302 - </For><br /> 303 - </div> 304 - <div class="photo-tray-column"><br /> 305 - <div class="tray-heading">World</div> 306 - 307 - <div ref={( el ) => worldInfoContainer = el}>Loading World Data...</div> 308 - </div> 309 - </div> as Node 310 - ); 311 312 - if(!worldData){ 313 - console.log('Fetching new world data'); 314 - 315 - invoke('find_world_by_id', { worldId: meta.world.id }); 316 - } else if(worldData.expiresOn < Date.now()){ 317 - console.log('Fetching new world data since cache has expired'); 318 - 319 - worldCache = worldCache.filter(x => x.worldData.id !== meta.world.id) 320 - invoke('find_world_by_id', { worldId: meta.world.id }); 321 - } else 322 - loadWorldData(worldData); 323 } else{ 324 trayButton.style.display = 'none'; 325 closeTray(); 326 } 327 } 328 329 - photo.onMetaLoaded = () => handleMetaDataLoaded(); 330 handleMetaDataLoaded(); 331 - 332 - photo.loadImage(); 333 } 334 335 if(photo && !isOpen){ 336 viewer.style.display = 'flex'; 337 338 - anime({ 339 - targets: viewer, 340 opacity: 1, 341 easing: 'easeInOutQuad', 342 duration: 150 343 }); 344 - 345 - anime({ 346 - targets: '.navbar', 347 - top: '-50px' 348 - }) 349 350 - anime.set('.prev-button', { left: '-50px', top: '50%' }); 351 - anime.set('.next-button', { right: '-50px', top: '50%' }); 352 353 - anime({ targets: '.prev-button', left: '0', easing: 'easeInOutQuad', duration: 100 }); 354 - anime({ targets: '.next-button', right: '0', easing: 'easeInOutQuad', duration: 100 }); 355 356 window.CloseAllPopups.forEach(p => p()); 357 } else if(!photo && isOpen){ 358 - anime({ 359 - targets: viewer, 360 opacity: 0, 361 easing: 'easeInOutQuad', 362 duration: 150, 363 - complete: () => { 364 viewer.style.display = 'none'; 365 } 366 }); 367 - 368 - anime({ 369 - targets: '.navbar', 370 - top: '0px' 371 - }) 372 373 window.CloseAllPopups.forEach(p => p()); 374 375 - anime({ targets: '.prev-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 376 - anime({ targets: '.next-button', top: '75%', easing: 'easeInOutQuad', duration: 100 }); 377 } 378 379 isOpen = photo != null; ··· 385 }) 386 387 let loadWorldData = ( data: WorldCache ) => { 388 - let meta = props.currentPhotoView().metadata; 389 if(!meta)return; 390 391 worldInfoContainer.innerHTML = ''; ··· 403 404 <br /> 405 <div class="world-tags"> 406 - <For each={JSON.parse(data.worldData.tags.split('\\\\').join("").split('\\').join("").slice(1, -1))}> 407 {( tag ) => 408 <div>{ tag.replace("author_tag_", "").replace("system_", "") }</div> 409 } ··· 414 ) 415 } 416 417 - listen('world_data', ( event: any ) => { 418 - let worldData = { 419 - expiresOn: Date.now() + 1.2096E+09, 420 - worldData: { 421 - id: event.payload.id, 422 - name: event.payload.name.split('\\').join('').slice(1, -1), 423 - author: event.payload.author.split('\\').join('').slice(1, -1), 424 - authorId: event.payload.authorId.split('\\').join('').slice(1, -1), 425 - desc: event.payload.desc.split('\\').join('').slice(1, -1), 426 - img: event.payload.img.split('\\').join('').slice(1, -1), 427 - maxUsers: event.payload.maxUsers, 428 - visits: event.payload.visits, 429 - favourites: event.payload.favourites, 430 - tags: event.payload.tags, 431 - from: event.payload.from, 432 - fromSite: event.payload.fromSite, 433 - found: event.payload.found 434 - } 435 - } 436 437 - worldCache.push(worldData); 438 - invoke('set_config_value_string', { key: 'worldcache', value: worldCache }); 439 440 - loadWorldData(worldData); 441 - }) 442 443 return ( 444 <div class="photo-viewer" ref={( el ) => viewer = el}> 445 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 446 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 447 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 448 </div> 449 450 - <div class="viewer-close viewer-button" onClick={() => props.setCurrentPhotoView(null)}> 451 - <div class="icon" style={{ width: '10px', margin: '0' }}> 452 <img draggable="false" src="/icon/x-solid.svg"></img> 453 </div> 454 </div> 455 - <img class="image-container" ref={( el ) => imageViewer = el} /> 456 457 <div class="prev-button" onClick={() => { 458 window.CloseAllPopups.forEach(p => p()); 459 - props.setPhotoNavChoice('prev'); 460 }}> 461 - <div class="icon" style={{ width: '15px', margin: '0' }}> 462 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 463 </div> 464 </div> 465 466 <div class="next-button" onClick={() => { 467 window.CloseAllPopups.forEach(p => p()); 468 - props.setPhotoNavChoice('next'); 469 }}> 470 - <div class="icon" style={{ width: '15px', margin: '0' }}> 471 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 472 </div> 473 </div> ··· 478 onClick={() => closeTray()} 479 ref={( el ) => photoTrayCloseBtn = el} 480 > 481 - <div class="icon" style={{ width: '12px', margin: '0' }}> 482 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 483 </div> 484 </div> 485 486 <div class="control-buttons" ref={( el ) => photoControls = el}> 487 <div class="viewer-button" 488 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 489 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 490 - onClick={() => { 491 - let canvas = document.createElement('canvas'); 492 - let ctx = canvas.getContext('2d')!; 493 - 494 - canvas.width = props.currentPhotoView().width; 495 - canvas.height = props.currentPhotoView().height; 496 - 497 - ctx.drawImage(imageViewer, 0, 0); 498 - 499 - canvas.toBlob(( blob ) => { 500 - navigator.clipboard.write([ 501 - new ClipboardItem({ 502 - 'image/png': blob! 503 - }) 504 - ]); 505 - 506 - canvas.remove(); 507 - 508 - anime.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 509 - anime({ 510 - targets: '.copy-notif', 511 - opacity: 1, 512 - translateY: '0px' 513 - }); 514 - 515 - setTimeout(() => { 516 - anime({ 517 - targets: '.copy-notif', 518 - opacity: 0, 519 - translateY: '-100px' 520 - }); 521 - }, 2000); 522 - }); 523 - }} 524 - > 525 - <div class="icon" style={{ width: '12px', margin: '0' }}> 526 <img draggable="false" src="/icon/copy-solid.svg"></img> 527 </div> 528 </div> 529 <div class="viewer-button" style={{ width: '50px' }} 530 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 531 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 532 ref={( el ) => trayButton = el} 533 onClick={() => openTray()} 534 > 535 - <div class="icon" style={{ width: '12px', margin: '0' }}> 536 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 537 </div> 538 </div> 539 <div class="viewer-button" 540 - onMouseOver={( el ) => anime({ targets: el.currentTarget, width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 541 - onMouseLeave={( el ) => anime({ targets: el.currentTarget, width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 542 - onClick={() => props.setConfirmationBox("Are you sure you want to delete this photo?", async () => { invoke("delete_photo", { 543 - path: props.currentPhotoView().path, 544 - token: (await invoke('get_config_value_string', { key: 'token' })) || "none", 545 - isSyncing: props.loggedIn().loggedIn ? props.storageInfo().sync : false 546 - }); 547 })}> 548 - <div class="icon" style={{ width: '12px', margin: '0' }}> 549 <img draggable="false" src="/icon/trash-solid.svg"></img> 550 </div> 551 </div>
··· 1 import { For, Show, createEffect, onCleanup, onMount } from "solid-js"; 2 import { invoke } from '@tauri-apps/api/core'; 3 + import { WorldCache } from "./Structs/WorldCache"; 4 + import { animate, JSAnimation, utils } from "animejs"; 5 6 + let PhotoViewer = () => { 7 let viewer: HTMLElement; 8 let imageViewer: HTMLImageElement; 9 let isOpen = false; ··· 16 let photoTrayCloseBtn: HTMLElement; 17 18 let worldInfoContainer: HTMLElement; 19 20 let viewerContextMenu: HTMLElement; 21 let viewerContextMenuButtons: HTMLElement[] = []; 22 23 let allowedToOpenTray = false; 24 + 25 + let authorProfileButton: HTMLDivElement; 26 + 27 + let photoLayerManager!: HTMLDivElement; 28 29 let switchPhotoWithKey = ( e: KeyboardEvent ) => { 30 switch(e.key){ 31 case 'Escape': 32 + window.PhotoViewerManager.Close(); 33 34 break; 35 case 'ArrowUp': ··· 42 break; 43 case 'ArrowLeft': 44 window.CloseAllPopups.forEach(p => p()); 45 + window.PhotoViewerManager.PreviousPhoto(); 46 47 break; 48 case 'ArrowRight': 49 window.CloseAllPopups.forEach(p => p()); 50 + window.PhotoViewerManager.NextPhoto(); 51 52 break; 53 } 54 } 55 56 + let trayAnimation: JSAnimation[] = []; 57 58 + let openTray = () => { 59 + if(trayOpen)return; 60 trayOpen = true; 61 + 62 + trayAnimation.forEach(anim => anim.cancel()); 63 64 window.CloseAllPopups.forEach(p => p()); 65 + trayAnimation[0] = animate(photoTray, { bottom: '-150px', duration: 500, ease: 'outElastic' }); 66 67 + trayAnimation[1] = animate(photoControls, { 68 bottom: '160px', 69 + ease: 'outElastic', 70 scale: '0.75', 71 opacity: 0, 72 duration: 500, 73 + onComplete: () => { 74 photoControls.style.display = 'none'; 75 } 76 }); 77 78 photoTrayCloseBtn.style.display = 'flex'; 79 + trayAnimation[2] = animate(photoTrayCloseBtn, { 80 bottom: '160px', 81 + ease: 'outElastic', 82 opacity: 1, 83 scale: 1, 84 duration: 500 85 }) 86 } 87 88 + let copyImage = () => { 89 + let path; 90 + let photo = window.PhotoViewerManager.CurrentPhoto()!; 91 + 92 + switch(layerManagerViewing){ 93 + case LayerManagerView.DEFAULT: 94 + path = photo.path; 95 + break; 96 + case LayerManagerView.ENVIRONMENT: 97 + path = photo.environmentLayer!.path; 98 + break; 99 + case LayerManagerView.PLAYER: 100 + path = photo.playerLayer!.path; 101 + break; 102 + } 103 + 104 + invoke('copy_image', { path }) 105 + .then(() => { 106 + utils.set('.copy-notif', { translateX: '-50%', translateY: '-100px' }); 107 + animate('.copy-notif', { 108 + ease: 'outElastic', 109 + opacity: 1, 110 + translateY: '0px' 111 + }); 112 + 113 + setTimeout(() => { 114 + animate('.copy-notif', { 115 + ease: 'outElastic', 116 + opacity: 0, 117 + translateY: '-100px' 118 + }); 119 + }, 2000); 120 + }) 121 + } 122 + 123 let closeTray = () => { 124 + if(!trayOpen)return; 125 + trayOpen = false; 126 + 127 + trayAnimation.forEach(anim => anim.cancel()); 128 129 window.CloseAllPopups.forEach(p => p()); 130 + trayAnimation[0] = animate(photoTray, { bottom: '-300px', duration: 500, ease: 'outElastic' }); 131 132 + trayAnimation[2] = animate(photoTrayCloseBtn, { 133 bottom: '10px', 134 scale: '0.75', 135 + ease: 'outElastic', 136 opacity: 0, 137 duration: 500, 138 + onComplete: () => { 139 photoTrayCloseBtn.style.display = 'none'; 140 } 141 }); 142 143 photoControls.style.display = 'flex'; 144 + trayAnimation[1] = animate(photoControls, { 145 bottom: '10px', 146 + ease: 'outElastic', 147 opacity: 1, 148 scale: 1, 149 duration: 500, 150 }) 151 } 152 153 + let resizeImage = () => { 154 + let dstWidth; 155 + let dstHeight; 156 + 157 + let imgHeight = imageViewer.naturalHeight; 158 + let imgWidth = imageViewer.naturalWidth; 159 + 160 + if( 161 + imgWidth / window.innerWidth < 162 + imgHeight / window.innerHeight 163 + ) { 164 + dstWidth = imgWidth * (window.innerHeight / imgHeight); 165 + dstHeight = window.innerHeight; 166 + } else{ 167 + dstWidth = window.innerWidth; 168 + dstHeight = imgHeight * (window.innerWidth / imgWidth); 169 + } 170 + 171 + imageViewer.style.width = dstWidth + 'px'; 172 + imageViewer.style.height = dstHeight + 'px'; 173 + } 174 + 175 onMount(() => { 176 + utils.set(photoControls, { translateX: '-50%' }); 177 + utils.set(photoTrayCloseBtn, { translateX: '-50%', opacity: 0, scale: '0.75', bottom: '10px' }); 178 + utils.set(photoLayerManager, { translateY: '20px', opacity: 0, display: 'none' }); 179 180 window.addEventListener('keyup', switchPhotoWithKey); 181 + window.addEventListener('resize', () => resizeImage()); 182 183 let contextMenuOpen = false; 184 window.CloseAllPopups.push(() => { 185 contextMenuOpen = false; 186 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 187 188 + animate(viewerContextMenu, { 189 opacity: 0, 190 easing: 'easeInOutQuad', 191 rotate: '30deg', 192 duration: 100, 193 + onComplete: () => { 194 viewerContextMenu.style.display = 'none'; 195 } 196 }) 197 }); 198 199 + window.CloseAllPopups.push(() => { 200 + layerManagerOpen = false; 201 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 202 + 203 + layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) }); 204 + }); 205 + 206 viewerContextMenuButtons[0].onclick = async () => { 207 window.CloseAllPopups.forEach(p => p()); 208 // Context Menu -> Open file location 209 210 + let path = await invoke('get_user_photos_path') + '\\' + window.PhotoViewerManager.CurrentPhoto()?.path; 211 invoke('open_folder', { url: path }); 212 } 213 214 viewerContextMenuButtons[1].onclick = () => { 215 window.CloseAllPopups.forEach(p => p()); 216 // Context Menu -> Copy image 217 + copyImage(); 218 } 219 220 imageViewer.oncontextmenu = ( e ) => { 221 if(contextMenuOpen){ 222 contextMenuOpen = false; 223 224 + utils.set(viewerContextMenu, { opacity: 1, rotate: '0deg' }); 225 226 + animate(viewerContextMenu, { 227 opacity: 0, 228 rotate: '30deg', 229 easing: 'easeInOutQuad', 230 duration: 100, 231 + onComplete: () => { 232 viewerContextMenu.style.display = 'none'; 233 } 234 }) ··· 239 viewerContextMenu.style.left = e.clientX + 'px'; 240 viewerContextMenu.style.display = 'block'; 241 242 + utils.set(viewerContextMenu, { opacity: 0, rotate: '-30deg' }); 243 244 + animate(viewerContextMenu, { 245 opacity: 1, 246 rotate: '0deg', 247 easing: 'easeInOutQuad', ··· 251 } 252 253 createEffect(() => { 254 + let photo = window.PhotoViewerManager.CurrentPhoto(); 255 allowedToOpenTray = false; 256 257 imageViewer.style.opacity = '0'; 258 259 if(photo){ 260 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + window.PhotoViewerManager.CurrentPhoto()?.path.split('\\').join('/') + "?full"; 261 + imageViewer.crossOrigin = 'anonymous'; 262 263 + imageViewer.onload = () => { resizeImage(); } 264 265 + animate(imageViewer, { 266 opacity: 1, 267 delay: 50, 268 duration: 150, ··· 270 }) 271 272 let handleMetaDataLoaded = () => { 273 + console.log(photo.metadata); 274 if(photo.metadata){ 275 photo.onMetaLoaded = () => {} 276 277 + try{ 278 + // Try JSON format ( VRCX ) 279 + let meta = JSON.parse(photo.metadata); 280 + 281 + allowedToOpenTray = true; 282 + trayButton.style.display = 'flex'; 283 + 284 + authorProfileButton!.style.display = 'none'; 285 + 286 + photoTray.innerHTML = ''; 287 + photoTray.appendChild( 288 + <div class="photo-tray-columns"> 289 + <div class="photo-tray-column" style={{ width: '20%' }}><br /> 290 + <div class="tray-heading">People</div> 291 + 292 + <For each={meta.players}> 293 + {( item ) => 294 + <div> 295 + { item.displayName } 296 + <Show when={item.id}> 297 + <img width="15" src="/icon/up-right-from-square-solid.svg" onClick={() => invoke('open_url', { url: 'https://vrchat.com/home/user/' + item.id })} style={{ "margin-left": '10px', "font-size": '12px', 'color': '#bbb', cursor: 'pointer' }} /> 298 + </Show> 299 + </div> 300 + } 301 + </For><br /> 302 + </div> 303 + <div class="photo-tray-column"><br /> 304 + <div class="tray-heading">World</div> 305 + 306 + <div ref={( el ) => worldInfoContainer = el}>Loading World Data...</div> 307 + </div> 308 + </div> as Node 309 + ); 310 + 311 + window.WorldCacheManager.getWorldById(meta.world.id) 312 + .then(worldData => { 313 + if(worldData) 314 + loadWorldData(worldData); 315 + }); 316 + } catch(e){ 317 + try{ 318 + // Not json lets try XML (vrc prints) 319 + let parser = new DOMParser(); 320 + let doc = parser.parseFromString(photo.metadata, "text/xml"); 321 + 322 + let id = doc.getElementsByTagName('xmp:Author')[0]!.innerHTML; 323 + 324 + authorProfileButton!.style.display = 'flex'; 325 + authorProfileButton!.onclick = () => { 326 + console.log(id); 327 + invoke('open_url', { url: 'https://vrchat.com/home/user/' + id }); 328 + } 329 + } catch(e){ 330 + console.error(e); 331 + console.log('Couldn\'t decode metadata') 332 333 + authorProfileButton!.style.display = 'none'; 334 + } 335 336 + trayButton.style.display = 'none'; 337 + closeTray(); 338 + } 339 } else{ 340 trayButton.style.display = 'none'; 341 + authorProfileButton!.style.display = 'none'; 342 + 343 closeTray(); 344 } 345 } 346 347 handleMetaDataLoaded(); 348 } 349 350 if(photo && !isOpen){ 351 viewer.style.display = 'flex'; 352 353 + animate(viewer, { 354 opacity: 1, 355 easing: 'easeInOutQuad', 356 duration: 150 357 }); 358 359 + utils.set('.prev-button', { left: '-50px', top: '50%' }); 360 + utils.set('.next-button', { right: '-50px', top: '50%' }); 361 362 + animate('.prev-button', { left: '0', easing: 'easeInOutQuad', duration: 100 }); 363 + animate('.next-button', { right: '0', easing: 'easeInOutQuad', duration: 100 }); 364 365 window.CloseAllPopups.forEach(p => p()); 366 } else if(!photo && isOpen){ 367 + animate(viewer, { 368 opacity: 0, 369 easing: 'easeInOutQuad', 370 duration: 150, 371 + onComplete: () => { 372 viewer.style.display = 'none'; 373 } 374 }); 375 376 window.CloseAllPopups.forEach(p => p()); 377 378 + animate('.prev-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 379 + animate('.next-button', { top: '75%', easing: 'easeInOutQuad', duration: 100 }); 380 } 381 382 isOpen = photo != null; ··· 388 }) 389 390 let loadWorldData = ( data: WorldCache ) => { 391 + let meta = window.PhotoViewerManager.CurrentPhoto()?.metadata; 392 if(!meta)return; 393 394 worldInfoContainer.innerHTML = ''; ··· 406 407 <br /> 408 <div class="world-tags"> 409 + <For each={data.worldData.tags}> 410 {( tag ) => 411 <div>{ tag.replace("author_tag_", "").replace("system_", "") }</div> 412 } ··· 417 ) 418 } 419 420 + enum LayerManagerView{ 421 + DEFAULT, 422 + PLAYER, 423 + ENVIRONMENT 424 + } 425 + 426 + let layerManagerOpen = false; 427 + let layerManagerAnimation: null | JSAnimation = null; 428 + let layerManagerViewing = LayerManagerView.DEFAULT; 429 + 430 + let toggleLayerManager = () => { 431 + if(layerManagerOpen){ 432 + // Close 433 + layerManagerOpen = false; 434 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 435 436 + layerManagerAnimation = animate(photoLayerManager, { translateY: '20px', opacity: 0, duration: 100, onComplete: () => utils.set(photoLayerManager, { display: 'none' }) }); 437 + } else{ 438 + // Open 439 + layerManagerOpen = true; 440 + if(layerManagerAnimation)layerManagerAnimation.cancel(); 441 442 + utils.set(photoLayerManager, { display: 'block' }); 443 + layerManagerAnimation = animate(photoLayerManager, { translateY: '0px', opacity: 1, duration: 100 }); 444 + } 445 + } 446 447 return ( 448 <div class="photo-viewer" ref={( el ) => viewer = el}> 449 + <div class="photo-layer-manager" ref={photoLayerManager}> 450 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.playerLayer}> 451 + <div class="photo-layer-manager-layer" onClick={() => { 452 + let photo = window.PhotoViewerManager.CurrentPhoto()?.playerLayer; 453 + if(!photo)return; 454 + 455 + layerManagerViewing = LayerManagerView.PLAYER; 456 + 457 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 458 + imageViewer.crossOrigin = 'anonymous'; 459 + }}>Player Layer</div> 460 + </Show> 461 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.environmentLayer}> 462 + <div class="photo-layer-manager-layer" onClick={() => { 463 + let photo = window.PhotoViewerManager.CurrentPhoto()?.environmentLayer; 464 + if(!photo)return; 465 + 466 + layerManagerViewing = LayerManagerView.ENVIRONMENT; 467 + 468 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 469 + imageViewer.crossOrigin = 'anonymous'; 470 + }}>Environment Layer</div> 471 + </Show> 472 + <div class="photo-layer-manager-layer" onClick={() => { 473 + let photo = window.PhotoViewerManager.CurrentPhoto(); 474 + if(!photo)return; 475 + 476 + layerManagerViewing = LayerManagerView.DEFAULT; 477 + 478 + imageViewer.src = (window.OS === "windows" ? "http://photo.localhost/" : 'photo://localhost/') + photo.path.split('\\').join('/') + "?full"; 479 + imageViewer.crossOrigin = 'anonymous'; 480 + }}>Default Layer</div> 481 + </div> 482 + 483 <div class="photo-context-menu" ref={( el ) => viewerContextMenu = el}> 484 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Open file location</div> 485 <div ref={( el ) => viewerContextMenuButtons.push(el)}>Copy image</div> 486 </div> 487 488 + <div class="viewer-close viewer-button" onClick={() => window.PhotoViewerManager.Close()}> 489 + <div class="icon-small" style={{ width: '10px', margin: '0' }}> 490 <img draggable="false" src="/icon/x-solid.svg"></img> 491 </div> 492 </div> 493 + 494 + <div style={{ 495 + width: '100%', 496 + height: '100%', 497 + display: 'flex', 498 + "justify-content": 'center', 499 + 'align-items': 'center' 500 + }}> 501 + <img class="image-container" ref={( el ) => imageViewer = el} /> 502 + </div> 503 504 <div class="prev-button" onClick={() => { 505 window.CloseAllPopups.forEach(p => p()); 506 + window.PhotoViewerManager.PreviousPhoto(); 507 }}> 508 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 509 <img draggable="false" src="/icon/arrow-left-solid.svg"></img> 510 </div> 511 </div> 512 513 <div class="next-button" onClick={() => { 514 window.CloseAllPopups.forEach(p => p()); 515 + window.PhotoViewerManager.NextPhoto(); 516 }}> 517 + <div class="icon-small" style={{ width: '15px', margin: '0' }}> 518 <img draggable="false" src="/icon/arrow-right-solid.svg"></img> 519 </div> 520 </div> ··· 525 onClick={() => closeTray()} 526 ref={( el ) => photoTrayCloseBtn = el} 527 > 528 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 529 <img draggable="false" src="/icon/angle-down-solid.svg"></img> 530 </div> 531 </div> 532 533 <div class="control-buttons" ref={( el ) => photoControls = el}> 534 <div class="viewer-button" 535 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 536 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 537 + onClick={() => { copyImage(); }}> 538 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 539 <img draggable="false" src="/icon/copy-solid.svg"></img> 540 </div> 541 </div> 542 <div class="viewer-button" style={{ width: '50px' }} 543 + onMouseOver={( el ) => animate(el.currentTarget, { width: '70px', height: '30px', 'margin-left': '10px', 'margin-right': '10px' })} 544 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '50px', height: '30px', 'margin-left': '20px', 'margin-right': '20px' })} 545 ref={( el ) => trayButton = el} 546 onClick={() => openTray()} 547 > 548 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 549 <img draggable="false" src="/icon/angle-up-solid.svg"></img> 550 </div> 551 </div> 552 + 553 <div class="viewer-button" 554 + ref={authorProfileButton!} 555 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 556 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 557 + > 558 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 559 + <img draggable="false" src="/icon/user-solid.svg"></img> 560 + </div> 561 + </div> 562 + 563 + <Show when={window.PhotoViewerManager.CurrentPhoto()?.isMultiLayer}> 564 + <div class="viewer-button" 565 + onClick={toggleLayerManager} 566 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 567 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 568 + > 569 + <div class="icon-small" style={{ width: '17px', margin: '0' }}> 570 + <img draggable="false" src="/icon/layer-group-solid-full.svg"></img> 571 + </div> 572 + </div> 573 + </Show> 574 + 575 + <div class="viewer-button" 576 + onMouseOver={( el ) => animate(el.currentTarget, { width: '40px', height: '40px', 'margin-left': '15px', 'margin-right': '15px', 'margin-top': '-10px' })} 577 + onMouseLeave={( el ) => animate(el.currentTarget, { width: '30px', height: '30px', 'margin-left': '20px', 'margin-right': '20px', 'margin-top': '0px' })} 578 + onClick={() => window.ConfirmationBoxManager.SetConfirmationBox("Are you sure you want to delete this photo?", async () => { 579 + let photo = window.PhotoViewerManager.CurrentPhoto(); 580 + if(!photo)return; 581 + 582 + invoke("delete_photo", { path: photo.path }); 583 + 584 + if(photo.playerLayer)invoke("delete_photo", { path: photo.playerLayer.path }); 585 + if(photo.environmentLayer)invoke("delete_photo", { path: photo.environmentLayer.path }); 586 })}> 587 + <div class="icon-small" style={{ width: '12px', margin: '0' }}> 588 <img draggable="false" src="/icon/trash-solid.svg"></img> 589 </div> 590 </div>
+196 -248
src/Components/SettingsMenu.tsx
··· 1 - import { createSignal, onCleanup, onMount, Show } from "solid-js"; 2 import { bytesToFormatted } from "../utils"; 3 import { invoke } from '@tauri-apps/api/core'; 4 - import anime from "animejs"; 5 - import { fetch } from "@tauri-apps/plugin-http" 6 - 7 - class SettingsMenuProps{ 8 - setLoadingType!: ( type: string ) => string; 9 - photoCount!: () => number; 10 - photoSize!: () => number; 11 - setRequestPhotoReload!: ( val: boolean ) => boolean; 12 - loggedIn!: () => { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string }; 13 - storageInfo!: () => { storage: number, used: number, sync: boolean }; 14 - setStorageInfo!: ( info: { storage: number, used: number, sync: boolean } ) => { storage: number, used: number, sync: boolean }; 15 - setConfirmationBox!: ( text: string, cb: () => void ) => void; 16 - setLoggedIn!: ( val: { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string } ) => { loggedIn: boolean, username: string, avatar: string, id: string, serverVersion: string }; 17 - } 18 19 - let SettingsMenu = ( props: SettingsMenuProps ) => { 20 - let sliderBar: HTMLElement; 21 - let settingsContainer: HTMLElement; 22 - let currentButton = 0; 23 - let lastClickedButton = -1; 24 let finalPathConfirm: HTMLElement; 25 let finalPathInput: HTMLElement; 26 let finalPathData: string; 27 let finalPathPreviousData: string; 28 29 - let [ deletingPhotos, setDeletingPhotos ] = createSignal(false); 30 - 31 let closeWithKey = ( e: KeyboardEvent ) => { 32 if(e.key === 'Escape'){ 33 - anime({ 34 - targets: '.settings', 35 opacity: 0, 36 translateX: '500px', 37 easing: 'easeInOutQuad', 38 duration: 250, 39 - complete: () => { 40 - anime.set('.settings', { display: 'none' }); 41 } 42 }) 43 } ··· 47 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 48 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 49 50 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 51 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 52 } else{ 53 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 54 55 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 56 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 57 } 58 59 - let sliderMouseDown = false; 60 - let mouseStartX = 0; 61 62 - let width = window.innerWidth; 63 - let buttons = [ 370, 680 ]; 64 65 - let sliderPos = width / 2 - buttons[currentButton]; 66 - let sliderScale = width / (buttons[1] - buttons[0]); 67 68 - let render = () => { 69 - requestAnimationFrame(render); 70 71 - if(!sliderMouseDown){ 72 - sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 73 - anime.set(sliderBar, { translateX: sliderPos }); 74 75 - settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 76 - } 77 - } 78 79 - render(); 80 - anime.set(sliderBar, { translateX: sliderPos }); 81 82 - sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 83 - sliderMouseDown = true; 84 - mouseStartX = e.touches[0].clientX; 85 - }) 86 87 - window.addEventListener('touchmove', ( e: TouchEvent ) => { 88 - if(sliderMouseDown){ 89 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 90 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 91 - } 92 - }) 93 94 window.addEventListener('keyup', closeWithKey); 95 96 - window.addEventListener('touchend', ( e: TouchEvent ) => { 97 - if(sliderMouseDown){ 98 - sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 99 100 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 101 - sliderMouseDown = false; 102 103 - if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 104 - let shortestDistance = 0; 105 - let selectedButton = -1; 106 107 - buttons.forEach(( pos, indx ) => { 108 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 109 110 - if(selectedButton === -1){ 111 - shortestDistance = dis; 112 - selectedButton = indx; 113 - } else if(shortestDistance > dis){ 114 - shortestDistance = dis; 115 - selectedButton = indx; 116 - } 117 - }) 118 119 - currentButton = selectedButton; 120 - } else if(lastClickedButton != -1){ 121 - currentButton = lastClickedButton; 122 - lastClickedButton = -1 123 - } 124 - } 125 - }) 126 127 - sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 128 - sliderMouseDown = true; 129 - mouseStartX = e.clientX; 130 - }); 131 132 - window.addEventListener('mousemove', ( e: MouseEvent ) => { 133 - if(sliderMouseDown){ 134 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 135 - settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 136 - settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 137 - } 138 - }) 139 140 - window.addEventListener('mouseup', ( e: MouseEvent ) => { 141 - if(sliderMouseDown){ 142 - sliderPos = sliderPos - (mouseStartX - e.clientX); 143 144 - anime.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 145 - sliderMouseDown = false; 146 147 - if(Math.abs(mouseStartX - e.clientX) > 50){ 148 - let shortestDistance = 0; 149 - let selectedButton = -1; 150 151 - buttons.forEach(( pos, indx ) => { 152 - let dis = Math.abs(sliderPos - (width / 2 - pos)); 153 154 - if(selectedButton === -1){ 155 - shortestDistance = dis; 156 - selectedButton = indx; 157 - } else if(shortestDistance > dis){ 158 - shortestDistance = dis; 159 - selectedButton = indx; 160 - } 161 - }) 162 163 - currentButton = selectedButton; 164 - } else if(lastClickedButton != -1){ 165 - currentButton = lastClickedButton; 166 - lastClickedButton = -1 167 - } 168 - } 169 - }) 170 171 - window.addEventListener('resize', () => { 172 - width = window.innerWidth; 173 - sliderPos = width / 2 - buttons[currentButton]; 174 - sliderScale = width / (buttons[1] - buttons[0]); 175 176 - anime.set(sliderBar, { translateX: sliderPos }); 177 - }) 178 179 - sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 180 - if(e.deltaY > 0){ 181 - if(buttons[currentButton + 1]) 182 - currentButton++; 183 - } else{ 184 - if(buttons[currentButton - 1]) 185 - currentButton--; 186 - } 187 - }) 188 }) 189 190 onCleanup(() => { 191 window.removeEventListener('keyup', closeWithKey); 192 }) 193 194 - let refreshAccount = async () => { 195 - fetch('https://photos.phazed.xyz/api/v1/account?token='+(await invoke('get_config_value_string', { key: 'token' }))!) 196 - .then(data => data.json()) 197 - .then(data => { 198 - if(!data.ok){ 199 - console.error(data); 200 - return; 201 - } 202 - 203 - console.log(data); 204 - props.setLoggedIn({ loggedIn: true, username: data.user.username, avatar: data.user.avatar, id: data.user._id, serverVersion: data.user.serverVersion }); 205 - props.setStorageInfo({ storage: data.user.storage, used: data.user.used, sync: data.user.settings.enableSync }); 206 - }) 207 - .catch(e => { 208 - console.error(e); 209 - }) 210 - } 211 - 212 return ( 213 <div class="settings"> 214 - <div class="settings-container" ref={( el ) => settingsContainer = el}> 215 <div class="settings-block"> 216 <h1>Storage Settings</h1> 217 - <p>{ props.photoCount() } Photos ({ bytesToFormatted(props.photoSize(), 0) })</p> 218 219 <div class="selector"> 220 <input type="checkbox" id="start-in-bg-check" ref={async ( el ) => { ··· 230 231 <label for="start-in-bg-check"> 232 <div class="selection-box"> 233 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 234 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 235 </div> 236 </div> ··· 238 </div> 239 240 <div class="selector"> 241 - <input type="checkbox" id="start-with-win-check" ref={async ( el ) => { 242 - el.checked = await invoke('get_config_value_string', { key: 'start-with-win' }) === "true" ? true : false; 243 }} onChange={( el ) => { 244 if(el.target.checked){ 245 - invoke('set_config_value_string', { key: 'start-with-win', value: 'true' }); 246 - invoke("start_with_win", { start: true }); 247 } else{ 248 - invoke('set_config_value_string', { key: 'start-with-win', value: 'false' }); 249 - invoke("start_with_win", { start: false }); 250 } 251 }} /> 252 - Start with windows 253 254 - <label for="start-with-win-check"> 255 <div class="selection-box"> 256 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 257 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 258 </div> 259 </div> 260 </label> 261 </div> 262 263 <div class="selector"> 264 <input type="checkbox" id="transparent-check" ref={async ( el ) => { ··· 267 if(el.target.checked){ 268 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 269 270 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 271 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 272 } else{ 273 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 274 275 - anime({ targets: document.body, background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 276 - anime({ targets: '.settings', background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 277 } 278 }} /> 279 Window Transparency 280 281 <label for="transparent-check"> 282 <div class="selection-box"> 283 - <div class="icon" style={{ width: '10px', margin: '0', display: 'inline-flex' }}> 284 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 285 </div> 286 </div> ··· 305 </span> 306 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 307 <span class="path" style={{ color: 'green' }} onClick={async () => { 308 - finalPathPreviousData = finalPathData; 309 - finalPathConfirm.style.display = 'none'; 310 311 - await invoke('change_final_path', { newPath: finalPathData }); 312 - await invoke('relaunch'); 313 314 - anime({ 315 - targets: '.settings', 316 - opacity: 0, 317 - translateX: '500px', 318 - easing: 'easeInOutQuad', 319 - duration: 250, 320 - complete: () => { 321 - anime.set('.settings', { display: 'none' }); 322 - } 323 - }) 324 325 - props.setRequestPhotoReload(true); 326 }}> 327 Save 328 </span> ··· 345 <br /> 346 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 347 </div> 348 - <div class="settings-block"> 349 - <h1>Account Settings</h1> 350 - 351 - <Show when={props.loggedIn().loggedIn} fallback={ 352 - <div> 353 - You aren't logged in. To enable cloud sync and sharing features you need to login to your PhazeID.<br /><br /> 354 - <div class="button" onClick={() => { 355 - props.setLoadingType('auth'); 356 - 357 - setTimeout(() => { 358 - props.setLoadingType('none'); 359 - }, 5000); 360 - 361 - invoke('start_user_auth'); 362 - }}>Login</div> 363 - </div> 364 - }> 365 - <div class="account-profile"> 366 - <div class="account-pfp" style={{ background: `url('https://cdn.phazed.xyz/id/avatars/${props.loggedIn().id}/${props.loggedIn().avatar}.png')` }}></div> 367 - <div class="account-desc"> 368 - <div class="reload-photos" onClick={() => refreshAccount()} style={{ opacity: 1 }}> 369 - <div class="icon" style={{ width: '17px' }}> 370 - <img draggable="false" width="17" height="17" src="/icon/arrows-rotate-solid.svg"></img> 371 - </div> 372 - </div> 373 - <h2>{ props.loggedIn().username }</h2> 374 - 375 - <Show when={props.storageInfo().sync}> 376 - <div class="storage-bar"> 377 - <div class="storage-bar-inner" style={{ width: ((props.storageInfo().used / props.storageInfo().storage) * 100) + '%' }}></div> 378 - </div> 379 - 380 - <div> 381 - { bytesToFormatted(props.storageInfo().used, 0) } / { bytesToFormatted(props.storageInfo().storage, 0) }<br /><br /> 382 - 383 - <span style={{ 'font-size': '10px' }}>Server Version: { props.loggedIn().serverVersion }</span> 384 - </div> 385 - </Show> 386 - </div> 387 - </div> 388 - 389 - <div class="account-notice">To enable cloud storage or get more storage please contact "_phaz" on discord</div> 390 - 391 - <div class="account-notice" style={{ display: 'flex' }}> 392 - <Show when={!deletingPhotos()} fallback={ "We are deleting your photos, please leave this window open while we delete them." }> 393 - <div class="button-danger" onClick={() => props.setConfirmationBox("You are about to delete all your photos from the cloud, and disable syncing. This will NOT delete any local files.", async () => { 394 - props.setStorageInfo({ used: 0, storage: 0, sync: false }); 395 - setDeletingPhotos(true); 396 - 397 - fetch('https://photos-cdn.phazed.xyz/api/v1/allphotos', { 398 - method: 'DELETE', 399 - headers: { auth: (await invoke('get_config_value_string', { key: 'token' }))! } 400 - }) 401 - .then(data => data.json()) 402 - .then(data => { 403 - console.log(data); 404 - setDeletingPhotos(false); 405 - }) 406 - })}>Delete All Photos.</div> <div>This deletes all photos stored in the cloud and disables syncing.</div> 407 - </Show> 408 - </div> 409 - </Show> 410 - </div> 411 </div> 412 413 - <div class="slide-bar-tri"></div> 414 <div class="slide-bar"> 415 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 416 <div class="slider-dot"></div> ··· 421 <div class="slider-text" onMouseDown={() => lastClickedButton = 0}>Program Settings</div> 422 <div class="slider-dot"></div> 423 <div class="slider-dot"></div> 424 - <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Account Settings</div> 425 <div class="slider-dot"></div> 426 <div class="slider-dot"></div> 427 <div class="slider-dot"></div> 428 <div class="slider-dot"></div> 429 <div class="slider-dot"></div> 430 </div> 431 - </div> 432 </div> 433 ) 434 }
··· 1 + import { onCleanup, onMount, Show } from "solid-js"; 2 import { bytesToFormatted } from "../utils"; 3 import { invoke } from '@tauri-apps/api/core'; 4 + import { ViewState } from "./Managers/ViewManager"; 5 + import { animate, utils } from "animejs"; 6 7 + let SettingsMenu = () => { 8 + // let sliderBar: HTMLElement; 9 + // let settingsContainer: HTMLElement; 10 + // let currentButton = 0; 11 + // let lastClickedButton = -1; 12 let finalPathConfirm: HTMLElement; 13 let finalPathInput: HTMLElement; 14 let finalPathData: string; 15 let finalPathPreviousData: string; 16 17 let closeWithKey = ( e: KeyboardEvent ) => { 18 if(e.key === 'Escape'){ 19 + window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 20 + console.log('h'); 21 + animate('.settings',{ 22 opacity: 0, 23 translateX: '500px', 24 easing: 'easeInOutQuad', 25 duration: 250, 26 + onComplete: () => { 27 + console.log('h'); 28 + utils.set('.settings', { display: 'none' }); 29 } 30 }) 31 } ··· 35 if(await invoke('get_config_value_string', { key: 'transparent' }) === "true"){ 36 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 37 38 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 39 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 40 } else{ 41 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 42 43 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 44 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 45 } 46 47 + // let sliderMouseDown = false; 48 + // let mouseStartX = 0; 49 50 + // let width = window.innerWidth; 51 + // let buttons = [ 370, 680 ]; 52 53 + // let sliderPos = width / 2 - buttons[currentButton]; 54 + // let sliderScale = width / (buttons[1] - buttons[0]); 55 56 + // let render = () => { 57 + // requestAnimationFrame(render); 58 59 + // if(!sliderMouseDown){ 60 + // sliderPos = sliderPos + (width / 2 - buttons[currentButton] - sliderPos) * 0.25; 61 + // utils.set(sliderBar, { translateX: sliderPos }); 62 63 + // settingsContainer.style.left = (sliderPos - (width / 2 - buttons[0])) * sliderScale + 'px'; 64 + // } 65 + // } 66 67 + // render(); 68 + // utils.set(sliderBar, { translateX: sliderPos }); 69 70 + // sliderBar.addEventListener('touchstart', ( e: TouchEvent ) => { 71 + // sliderMouseDown = true; 72 + // mouseStartX = e.touches[0].clientX; 73 + // }) 74 75 + // window.addEventListener('touchmove', ( e: TouchEvent ) => { 76 + // if(sliderMouseDown){ 77 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 78 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.touches[0].clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 79 + // } 80 + // }) 81 82 window.addEventListener('keyup', closeWithKey); 83 84 + // window.addEventListener('touchend', ( e: TouchEvent ) => { 85 + // if(sliderMouseDown){ 86 + // sliderPos = sliderPos - (mouseStartX - e.touches[0].clientX); 87 88 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.touches[0].clientX) }); 89 + // sliderMouseDown = false; 90 91 + // if(Math.abs(mouseStartX - e.touches[0].clientX) > 50){ 92 + // let shortestDistance = 0; 93 + // let selectedButton = -1; 94 95 + // buttons.forEach(( pos, indx ) => { 96 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 97 98 + // if(selectedButton === -1){ 99 + // shortestDistance = dis; 100 + // selectedButton = indx; 101 + // } else if(shortestDistance > dis){ 102 + // shortestDistance = dis; 103 + // selectedButton = indx; 104 + // } 105 + // }) 106 107 + // currentButton = selectedButton; 108 + // } else if(lastClickedButton != -1){ 109 + // currentButton = lastClickedButton; 110 + // lastClickedButton = -1 111 + // } 112 + // } 113 + // }) 114 115 + // sliderBar.addEventListener('mousedown', ( e: MouseEvent ) => { 116 + // sliderMouseDown = true; 117 + // mouseStartX = e.clientX; 118 + // }); 119 120 + // window.addEventListener('mousemove', ( e: MouseEvent ) => { 121 + // if(sliderMouseDown){ 122 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 123 + // settingsContainer.style.left = sliderPos - (mouseStartX - e.clientX) + 'px'; 124 + // settingsContainer.style.left = (sliderPos - (mouseStartX - e.clientX) - (width / 2 - buttons[0])) * sliderScale + 'px'; 125 + // } 126 + // }) 127 128 + // window.addEventListener('mouseup', ( e: MouseEvent ) => { 129 + // if(sliderMouseDown){ 130 + // sliderPos = sliderPos - (mouseStartX - e.clientX); 131 132 + // utils.set(sliderBar, { translateX: sliderPos - (mouseStartX - e.clientX) }); 133 + // sliderMouseDown = false; 134 135 + // if(Math.abs(mouseStartX - e.clientX) > 50){ 136 + // let shortestDistance = 0; 137 + // let selectedButton = -1; 138 139 + // buttons.forEach(( pos, indx ) => { 140 + // let dis = Math.abs(sliderPos - (width / 2 - pos)); 141 142 + // if(selectedButton === -1){ 143 + // shortestDistance = dis; 144 + // selectedButton = indx; 145 + // } else if(shortestDistance > dis){ 146 + // shortestDistance = dis; 147 + // selectedButton = indx; 148 + // } 149 + // }) 150 151 + // currentButton = selectedButton; 152 + // } else if(lastClickedButton != -1){ 153 + // currentButton = lastClickedButton; 154 + // lastClickedButton = -1 155 + // } 156 + // } 157 + // }) 158 159 + // window.addEventListener('resize', () => { 160 + // width = window.innerWidth; 161 + // sliderPos = width / 2 - buttons[currentButton]; 162 + // sliderScale = width / (buttons[1] - buttons[0]); 163 164 + // utils.set(sliderBar, { translateX: sliderPos }); 165 + // }) 166 167 + // sliderBar.addEventListener('wheel', ( e: WheelEvent ) => { 168 + // if(e.deltaY > 0){ 169 + // if(buttons[currentButton + 1]) 170 + // currentButton++; 171 + // } else{ 172 + // if(buttons[currentButton - 1]) 173 + // currentButton--; 174 + // } 175 + // }) 176 }) 177 178 onCleanup(() => { 179 window.removeEventListener('keyup', closeWithKey); 180 }) 181 182 return ( 183 <div class="settings"> 184 + <div class="settings-close" onClick={() => { 185 + window.ViewManager.ChangeState(ViewState.PHOTO_LIST); 186 + animate('.settings', 187 + { 188 + opacity: 0, 189 + translateX: '500px', 190 + easing: 'easeInOutQuad', 191 + duration: 250, 192 + onComplete: () => { 193 + utils.set('.settings', { display: 'none' }); 194 + } 195 + }) 196 + }}> 197 + <div class="icon"><img draggable="false" src="/icon/x-solid.svg"></img></div> 198 + </div> 199 + {/* <div class="settings-container" ref={( el ) => settingsContainer = el}> */} 200 + <div class="settings-container"> 201 <div class="settings-block"> 202 <h1>Storage Settings</h1> 203 + <p>{ window.PhotoManager.PhotoCount() } Photos ({ bytesToFormatted(window.PhotoManager.PhotoSize(), 0) })</p> 204 205 <div class="selector"> 206 <input type="checkbox" id="start-in-bg-check" ref={async ( el ) => { ··· 216 217 <label for="start-in-bg-check"> 218 <div class="selection-box"> 219 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 220 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 221 </div> 222 </div> ··· 224 </div> 225 226 <div class="selector"> 227 + <input type="checkbox" id="close-to-tray-check" ref={async ( el ) => { 228 + el.checked = await invoke('get_config_value_string', { key: 'close-to-tray' }) === "true" ? true : false; 229 }} onChange={( el ) => { 230 if(el.target.checked){ 231 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'true' }); 232 } else{ 233 + invoke('set_config_value_string', { key: 'close-to-tray', value: 'false' }); 234 } 235 }} /> 236 + Close to tray 237 238 + <label for="close-to-tray-check"> 239 <div class="selection-box"> 240 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 241 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 242 </div> 243 </div> 244 </label> 245 </div> 246 + 247 + <Show when={window.OS === 'windows'}> 248 + <div class="selector"> 249 + <input type="checkbox" id="start-with-win-check" ref={async ( el ) => { 250 + el.checked = await invoke('get_config_value_string', { key: 'start-with-win' }) === "true" ? true : false; 251 + }} onChange={( el ) => { 252 + if(el.target.checked){ 253 + invoke('set_config_value_string', { key: 'start-with-win', value: 'true' }); 254 + invoke("start_with_win", { start: true }); 255 + } else{ 256 + invoke('set_config_value_string', { key: 'start-with-win', value: 'false' }); 257 + invoke("start_with_win", { start: false }); 258 + } 259 + }} /> 260 + Start with windows 261 + 262 + <label for="start-with-win-check"> 263 + <div class="selection-box"> 264 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 265 + <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 266 + </div> 267 + </div> 268 + </label> 269 + </div> 270 + </Show> 271 272 <div class="selector"> 273 <input type="checkbox" id="transparent-check" ref={async ( el ) => { ··· 276 if(el.target.checked){ 277 invoke('set_config_value_string', { key: 'transparent', value: 'true' }); 278 279 + animate(document.body, { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 280 + animate('.settings', { background: 'rgba(0, 0, 0, 0.5)', easing: 'linear', duration: 100 }); 281 } else{ 282 invoke('set_config_value_string', { key: 'transparent', value: 'false' }); 283 284 + animate(document.body, { background: 'rgba(0, 0, 0, 1)', easing: 'linear', duration: 100 }); 285 + animate('.settings', { background: 'rgba(0, 0, 0, 0)', easing: 'linear', duration: 100 }); 286 } 287 }} /> 288 Window Transparency 289 290 <label for="transparent-check"> 291 <div class="selection-box"> 292 + <div class="icon-small" style={{ margin: '0', display: 'inline-flex' }}> 293 <img draggable="false" width="10" height="10" src="/icon/check-solid.svg"></img> 294 </div> 295 </div> ··· 314 </span> 315 <span style={{ display: 'none' }} ref={( el ) => finalPathConfirm = el}> 316 <span class="path" style={{ color: 'green' }} onClick={async () => { 317 + let changed = await invoke('change_final_path', { newPath: finalPathData }); 318 319 + if(changed){ 320 + finalPathPreviousData = finalPathData; 321 + finalPathConfirm.style.display = 'none'; 322 323 + window.location.reload(); 324 325 + animate('.settings', { 326 + opacity: 0, 327 + translateX: '500px', 328 + easing: 'easeInOutQuad', 329 + duration: 250, 330 + onComplete: () => { 331 + utils.set('.settings', { display: 'none' }); 332 + } 333 + }) 334 + 335 + window.location.reload(); 336 + } 337 }}> 338 Save 339 </span> ··· 356 <br /> 357 <p>VRChat Photo Manager supports photos with extra metadata provided by VRCX.</p> 358 </div> 359 </div> 360 361 + {/* <div class="slide-bar-tri"></div> 362 <div class="slide-bar"> 363 <div class="inner-slide-bar" ref={( el ) => sliderBar = el}> 364 <div class="slider-dot"></div> ··· 369 <div class="slider-text" onMouseDown={() => lastClickedButton = 0}>Program Settings</div> 370 <div class="slider-dot"></div> 371 <div class="slider-dot"></div> 372 + <div class="slider-text" onMouseDown={() => lastClickedButton = 1}>Sync Settings</div> 373 <div class="slider-dot"></div> 374 <div class="slider-dot"></div> 375 <div class="slider-dot"></div> 376 <div class="slider-dot"></div> 377 <div class="slider-dot"></div> 378 </div> 379 + </div> */} 380 </div> 381 ) 382 }
+3
src/Components/Structs/FilterType.ts
···
··· 1 + export enum FilterType{ 2 + USER, WORLD 3 + }
+130
src/Components/Structs/Photo.ts
···
··· 1 + import { invoke } from "@tauri-apps/api/core"; 2 + import { Vars } from "./Vars"; 3 + 4 + let imagesLoading = 0; 5 + 6 + export class Photo{ 7 + path: string; 8 + loaded: boolean = false; 9 + loadingMeta: boolean = false; 10 + loading: boolean = false; 11 + metaLoaded: boolean = false; 12 + image?: HTMLCanvasElement; 13 + imageEl?: HTMLImageElement; 14 + width?: number; 15 + height?: number; 16 + loadingRotate: number = 0; 17 + metadata: any; 18 + 19 + error: boolean = false; 20 + 21 + frames: number = 0; 22 + shown: boolean = false; 23 + 24 + x: number = 0; 25 + y: number = 0; 26 + scaledWidth?: number; 27 + scaledHeight?: number; 28 + 29 + dateString: string; 30 + date: Date; 31 + 32 + legacy: boolean = false; 33 + index: number = 0; 34 + 35 + splitPath: string[]; 36 + 37 + playerLayer: Photo | null = null; 38 + environmentLayer: Photo | null = null; 39 + isMultiLayer = false; 40 + 41 + public onMetaLoaded: () => void = () => {}; 42 + 43 + constructor( path: string, isLegacy: boolean = false, i: number ){ 44 + this.path = path; 45 + this.legacy = isLegacy; 46 + this.index = i; 47 + 48 + let split = this.path.split('_'); 49 + this.splitPath = split; 50 + 51 + if(this.legacy) 52 + this.dateString = split[2]; 53 + else 54 + this.dateString = split[1]; 55 + 56 + let timeString; 57 + if(this.legacy) 58 + timeString = split[3]; 59 + else 60 + timeString = split[2]; 61 + 62 + let splitDateString = this.dateString.split('-'); 63 + let splitTimeString = timeString.split('-'); 64 + 65 + this.date = new Date(); 66 + 67 + this.date.setFullYear(parseInt(splitDateString[0])); 68 + this.date.setMonth(parseInt(splitDateString[1])); 69 + this.date.setDate(parseInt(splitDateString[2])); 70 + 71 + this.date.setHours(parseInt(splitTimeString[0])); 72 + this.date.setMinutes(parseInt(splitTimeString[1])); 73 + this.date.setSeconds(parseInt(splitTimeString[2])); 74 + 75 + let resSplit; 76 + if(this.legacy) 77 + resSplit = split[0].split('x') 78 + else 79 + resSplit = split[3].split('x') 80 + 81 + // let width = parseInt(resSplit[0]); 82 + // let height = parseInt(resSplit[1]); 83 + 84 + // if(!isNaN(width) || !isNaN(height)){ 85 + // this.width = width; 86 + // this.height = height; 87 + 88 + // let scale = Vars.PHOTO_HEIGHT / this.height; 89 + 90 + // this.scaledWidth = this.width * scale; 91 + // this.scaledHeight = Vars.PHOTO_HEIGHT; 92 + // } 93 + } 94 + 95 + loadMeta(){ 96 + this.loadingMeta = true; 97 + invoke('load_photo_meta', { photo: this.path }); 98 + } 99 + 100 + loadImage(){ 101 + if(this.loadingMeta || this.loading || this.loaded || imagesLoading >= Vars.MAX_IMAGE_LOAD)return; 102 + if(!this.metaLoaded)return this.loadMeta(); 103 + 104 + this.loading = true; 105 + imagesLoading++; 106 + 107 + this.image = document.createElement('canvas'); 108 + 109 + this.imageEl = document.createElement('img'); 110 + this.imageEl.crossOrigin = 'anonymous'; 111 + 112 + this.imageEl.src = (window.OS === "windows" ? "http://photo.localhost/" : "photo://localhost/") + this.path + "?downscale"; 113 + 114 + this.imageEl.onload = () => { 115 + this.image!.width = this.scaledWidth!; 116 + this.image!.height = this.scaledHeight!; 117 + 118 + this.image!.getContext('2d')!.drawImage(this.imageEl!, 0, 0, this.scaledWidth!, this.scaledHeight!); 119 + 120 + this.loaded = true; 121 + this.loading = false; 122 + 123 + imagesLoading--; 124 + } 125 + 126 + this.imageEl.onerror = () => { 127 + console.log('Cannot load image'); 128 + } 129 + } 130 + }
+5
src/Components/Structs/PhotoListElement.ts
···
··· 1 + import { PhotoListElementType } from "./PhotoListElementType"; 2 + 3 + export class PhotoListElement{ 4 + public Type!: PhotoListElementType; 5 + }
+3
src/Components/Structs/PhotoListElementType.ts
···
··· 1 + export enum PhotoListElementType{ 2 + TEXT, PHOTO 3 + }
+13
src/Components/Structs/PhotoListElements/PhotoListPhoto.ts
···
··· 1 + import { Photo } from "../Photo"; 2 + import { PhotoListElement } from "../PhotoListElement"; 3 + import { PhotoListElementType } from "../PhotoListElementType"; 4 + 5 + export class PhotoListPhoto extends PhotoListElement{ 6 + public Photo!: Photo; 7 + 8 + constructor( photo: Photo ){ 9 + super(); 10 + this.Type = PhotoListElementType.PHOTO; 11 + this.Photo = photo; 12 + } 13 + }
+12
src/Components/Structs/PhotoListElements/PhotoListText.ts
···
··· 1 + import { PhotoListElement } from "../PhotoListElement"; 2 + import { PhotoListElementType } from "../PhotoListElementType"; 3 + 4 + export class PhotoListText extends PhotoListElement{ 5 + public Text!: string; 6 + 7 + constructor( text: string ){ 8 + super(); 9 + this.Type = PhotoListElementType.TEXT; 10 + this.Text = text; 11 + } 12 + }
+8
src/Components/Structs/PhotoListRow.ts
···
··· 1 + import { PhotoListElement } from "./PhotoListElement"; 2 + import { Vars } from "./Vars"; 3 + 4 + export class PhotoListRow{ 5 + public Elements: PhotoListElement[] = []; 6 + public Height: number = Vars.PHOTO_HEIGHT; 7 + public Width: number = 10; 8 + }
+7
src/Components/Structs/PhotoMetadata.ts
···
··· 1 + export class PhotoMetadata{ 2 + width!: number; 3 + height!: number; 4 + metadata!: string; 5 + path!: string; 6 + error!: boolean; 7 + }
+6
src/Components/Structs/ProfileData.ts
···
··· 1 + export class ProfileData{ 2 + id!: string; 3 + username!: string; 4 + avatar!: string; 5 + serverVersion!: number; 6 + }
+5
src/Components/Structs/StorageData.ts
···
··· 1 + export class StorageData{ 2 + used!: number; 3 + total!: number; 4 + isSyncing!: boolean; 5 + }
+6
src/Components/Structs/Vars.ts
···
··· 1 + export class Vars{ 2 + static MAX_IMAGE_LOAD = 10; 3 + static PHOTO_HEIGHT = 200; 4 + 5 + static MAX_PHOTOS_BULK_LOAD = 100; 6 + }
+18
src/Components/Structs/WorldCache.ts
···
··· 1 + export class WorldCache{ 2 + expiresOn!: number; 3 + worldData!: { 4 + id: string, 5 + name: string, 6 + author: string, 7 + authorId: string, 8 + desc: string, 9 + img: string, 10 + maxUsers: number, 11 + visits: number, 12 + favourites: number, 13 + tags: string[], 14 + from: string, 15 + fromSite: string, 16 + found: boolean 17 + } 18 + }
+31
src/Components/Utils/Sort.ts
···
··· 1 + import { Photo } from "../Structs/Photo"; 2 + 3 + // https://www.geeksforgeeks.org/typescript/how-to-use-merge-sort-with-typescript/ 4 + export let MergeSort = ( array: Photo[] ): Photo[] => { 5 + if (array.length <= 1) { 6 + return array; 7 + } 8 + const middle = Math.floor(array.length / 2); 9 + const leftHalf = array.slice(0, middle); 10 + const rightHalf = array.slice(middle); 11 + return Merge(MergeSort(leftHalf), MergeSort(rightHalf)); 12 + } 13 + 14 + let Merge = ( left: Photo[], right: Photo[] ): Photo[] => { 15 + let result: Photo[] = []; 16 + let leftIndex = 0; 17 + let rightIndex = 0; 18 + 19 + while (leftIndex < left.length && 20 + rightIndex < right.length) { 21 + if (left[leftIndex].date > right[rightIndex].date) { 22 + result.push(left[leftIndex]); 23 + leftIndex++; 24 + } else { 25 + result.push(right[rightIndex]); 26 + rightIndex++; 27 + } 28 + } 29 + 30 + return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex)); 31 + }
+72
src/css/filters.css
···
··· 1 + 2 + .filter-options{ 3 + position: fixed; 4 + top: 10px; 5 + left: 10px; 6 + } 7 + 8 + .filter-container{ 9 + display: none; 10 + position: fixed; 11 + bottom: 0; 12 + left: 0; 13 + width: 100vw; 14 + padding: 10px 200px; 15 + background: rgba(85, 85, 85, 0.904); 16 + transform: translateY(10px); 17 + color: #fff; 18 + text-align: center; 19 + box-shadow: #0005 0 0 10px; 20 + opacity: 0; 21 + z-index: 150; 22 + } 23 + 24 + .filter-container > .filter-title{ 25 + font-size: 30px; 26 + } 27 + 28 + .filter-type-select{ 29 + display: flex; 30 + justify-content: center; 31 + align-items: center; 32 + width: 75%; 33 + margin: auto; 34 + } 35 + 36 + .filter-type-select > div{ 37 + width: 100%; 38 + border: #fff 4px solid; 39 + border-left: #fff 2px solid; 40 + border-right: #fff 2px solid; 41 + padding: 5px 0; 42 + cursor: pointer; 43 + user-select: none; 44 + -webkit-user-select: none; 45 + } 46 + 47 + .filter-type-select > div:first-child{ 48 + border-left: #fff 4px solid; 49 + border-radius: 10px 0 0 10px; 50 + } 51 + 52 + .filter-type-select > div:last-child{ 53 + border-right: #fff 4px solid; 54 + border-radius: 0 10px 10px 0; 55 + } 56 + 57 + .filter-type-select > .selected-filter{ 58 + background: #00ccff55; 59 + } 60 + 61 + .filter-search{ 62 + margin-top: 10px; 63 + padding: 5px; 64 + border: #fff 4px solid; 65 + border-radius: 10px; 66 + background: #0008; 67 + outline: none; 68 + color: white; 69 + font-size: 15px; 70 + font-family: 'Rubik'; 71 + width: calc(75% - 18px); 72 + }
+38
src/css/icons.css
···
··· 1 + .icon{ 2 + width: 40px; 3 + height: 40px; 4 + padding: 10px; 5 + display: flex; 6 + align-items: center; 7 + justify-content: center; 8 + height: 100%; 9 + cursor: pointer; 10 + user-select: none; 11 + -webkit-user-select: none; 12 + } 13 + 14 + .icon-small{ 15 + display: flex; 16 + align-items: center; 17 + justify-content: center; 18 + height: 100%; 19 + } 20 + 21 + .icon-label{ 22 + margin-top: -20px; 23 + margin-right: -200px; 24 + width: 200px; 25 + color: white; 26 + pointer-events: none; 27 + transform: translate(20px, -9px); 28 + opacity: 0; 29 + transition: 0.25s; 30 + user-select: none; 31 + -webkit-user-select: none; 32 + } 33 + 34 + .icon:hover ~ .icon-label{ 35 + opacity: 1; 36 + transform: translate(40px, -9px); 37 + } 38 +
+24
src/css/list.css
···
··· 1 + .photo-list{ 2 + width: 100%; 3 + height: 100%; 4 + position: fixed; 5 + top: 0; 6 + left: 0; 7 + overflow: hidden; 8 + } 9 + 10 + .scroll-to-top{ 11 + position: fixed; 12 + bottom: 10px; 13 + right: 10px; 14 + color: white; 15 + width: 40px; 16 + height: 40px; 17 + cursor: pointer; 18 + border-radius: 50%; 19 + border: 2px solid white; 20 + display: flex; 21 + justify-content: center; 22 + align-items: center; 23 + z-index: 100; 24 + }
+84
src/css/settings.css
···
··· 1 + .settings{ 2 + position: fixed; 3 + top: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 100%; 7 + background: rgba(0, 0, 0, 0.4); 8 + } 9 + 10 + .settings-container{ 11 + position: fixed; 12 + top: 50px; 13 + left: 0px; 14 + width: 200%; 15 + height: calc(100% - 100px); 16 + display: flex; 17 + } 18 + 19 + .settings-close{ 20 + position: absolute; 21 + top: 10px; 22 + left: 10px; 23 + z-index: 100; 24 + cursor: pointer; 25 + user-select: none; 26 + width: 40px; 27 + height: 40px; 28 + } 29 + 30 + .settings-block{ 31 + width: 50%; 32 + height: 100%; 33 + color: white; 34 + text-align: center; 35 + } 36 + 37 + .selector{ 38 + padding: 10px 20px; 39 + border-radius: 10px; 40 + background: #000a; 41 + display: inline-block; 42 + margin: 10px; 43 + } 44 + 45 + .selector .selection-box{ 46 + height: 20px; 47 + background: #777a; 48 + margin: 5px -10px 0 -10px; 49 + border-radius: 8px; 50 + user-select: none; 51 + -webkit-user-select: none; 52 + cursor: pointer; 53 + transition: 0.25s; 54 + color: #fff1; 55 + } 56 + 57 + .selector .selection-box:hover{ 58 + height: 20px; 59 + background: #777a; 60 + margin: 5px -10px 0 -10px; 61 + border-radius: 8px; 62 + user-select: none; 63 + -webkit-user-select: none; 64 + cursor: pointer; 65 + transition: 0.25s; 66 + color: #fff5; 67 + } 68 + 69 + .selector input{ 70 + display: none; 71 + } 72 + 73 + .selector input:checked ~ label .selection-box{ 74 + background: rgba(0, 146, 204, 0.705); 75 + color: #fff; 76 + } 77 + 78 + .path{ 79 + padding: 5px 10px; 80 + background: #000a; 81 + border-radius: 5px; 82 + margin-left: 5px; 83 + cursor: pointer; 84 + }
+55
src/css/slide-bar.css
···
··· 1 + .slide-bar{ 2 + position: fixed; 3 + bottom: 0; 4 + left: 0; 5 + width: 100%; 6 + height: 50px; 7 + border-top: #aaa 1px solid; 8 + mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 9 + background: #aaa2; 10 + box-shadow: #000 0 0 10px; 11 + overflow: hidden; 12 + } 13 + 14 + .inner-slide-bar{ 15 + display: flex; 16 + height: 50px; 17 + width: 200%; 18 + color: white; 19 + align-items: center; 20 + cursor: pointer; 21 + user-select: none; 22 + -webkit-user-select: none; 23 + } 24 + 25 + .slider-dot{ 26 + width: 5px; 27 + height: 5px; 28 + border-radius: 5px; 29 + background: #aaa; 30 + margin: auto 25px; 31 + } 32 + 33 + .slider-text{ 34 + width: 200px; 35 + text-align: center; 36 + height: 50px; 37 + display: flex; 38 + justify-content: center; 39 + align-items: center; 40 + color: #aaa; 41 + transition: 0.25s; 42 + } 43 + 44 + .slider-text:hover{ 45 + color: #fff; 46 + } 47 + 48 + .slide-bar-tri{ 49 + position: fixed; 50 + bottom: 40px; 51 + left: 50%; 52 + transform: translateX(-50%); 53 + border: transparent solid 5px; 54 + border-top: #fff solid 5px; 55 + }
+82
src/css/tray.css
···
··· 1 + .photo-tray{ 2 + position: fixed; 3 + bottom: -300px; 4 + left: 0; 5 + width: 100%; 6 + height: 300px; 7 + background: rgba(43, 43, 43, 0.76); 8 + backdrop-filter: blur(10px); 9 + -webkit-backdrop-filter: blur(10px); 10 + box-shadow: #0008 0 0 10px; 11 + padding-bottom: 150px; 12 + } 13 + 14 + .photo-tray-close{ 15 + position: fixed; 16 + bottom: 160px; 17 + left: 50%; 18 + transform: translate(-50%); 19 + color: white; 20 + background: rgba(43, 43, 43, 0.76); 21 + backdrop-filter: blur(10px); 22 + -webkit-backdrop-filter: blur(10px); 23 + box-shadow: #0008 0 0 10px; 24 + display: flex; 25 + justify-content: center; 26 + align-items: center; 27 + height: 30px; 28 + width: 50px; 29 + border-radius: 50px; 30 + cursor: pointer; 31 + font-size: 12px; 32 + user-select: none; 33 + -webkit-user-select: none; 34 + transition: 0.25s width; 35 + } 36 + 37 + .photo-tray-close:hover{ 38 + width: 70px; 39 + } 40 + 41 + .photo-tray-columns{ 42 + width: 100%; 43 + height: 100%; 44 + display: flex; 45 + color: white; 46 + text-align: center; 47 + } 48 + 49 + .photo-tray-column{ 50 + height: 100%; 51 + width: 100%; 52 + scrollbar-width: thin; 53 + overflow-y: auto; 54 + overflow-x: hidden; 55 + mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 56 + } 57 + 58 + .tray-heading{ 59 + font-weight: bold; 60 + font-size: 20px; 61 + } 62 + 63 + .world-tags{ 64 + display: flex; 65 + width: 100%; 66 + justify-content: center; 67 + align-items: center; 68 + } 69 + 70 + .world-tags div{ 71 + padding: 0 10px; 72 + color: #bbb; 73 + transition: 0.25s; 74 + } 75 + 76 + .world-tags div:hover{ 77 + color: #ddd; 78 + } 79 + 80 + .world-name{ 81 + font-size: 17px; 82 + }
+193
src/css/viewer.css
···
··· 1 + 2 + .photo-container{ 3 + width: 100%; 4 + height: 100%; 5 + } 6 + 7 + .photo-container-bg{ 8 + width: 100%; 9 + height: 100%; 10 + position: fixed; 11 + top: 0; 12 + left: 0; 13 + z-index: -1; 14 + /* filter: blur(100px); */ 15 + } 16 + 17 + .single-photo-container{ 18 + margin: 10px; 19 + display: inline-block; 20 + } 21 + 22 + .photo-viewer{ 23 + justify-content: center; 24 + width: 100%; 25 + height: 100%; 26 + position: fixed; 27 + top: 0; 28 + left: 0; 29 + z-index: 5; 30 + background: #0009; 31 + opacity: 0; 32 + display: none; 33 + } 34 + 35 + .photo-context-menu{ 36 + position: fixed; 37 + top: 0; 38 + left: 0; 39 + padding: 10px; 40 + border-radius: 5px; 41 + background: rgba(43, 43, 43, 0.76); 42 + color: #aaa; 43 + box-shadow: #0005 0 0 10px; 44 + opacity: 0; 45 + } 46 + 47 + .photo-context-menu > div{ 48 + padding: 2px 10px; 49 + width: 100; 50 + text-align: center; 51 + transition: 0.1s; 52 + } 53 + 54 + .photo-context-menu > div:hover{ 55 + color: #fff; 56 + cursor: pointer; 57 + user-select: none; 58 + -webkit-user-select: none; 59 + } 60 + 61 + .image-container{ 62 + max-width: none; 63 + max-height: none; 64 + background-size: contain !important; 65 + background-repeat: no-repeat !important; 66 + background-position: center !important; 67 + opacity: 0; 68 + } 69 + 70 + .viewer-button{ 71 + color: white; 72 + width: 30px; 73 + height: 30px; 74 + display: flex; 75 + justify-content: center; 76 + align-items: center; 77 + border-radius: 50px; 78 + font-size: 12px; 79 + background: #8885; 80 + user-select: none; 81 + -webkit-user-select: none; 82 + cursor: pointer; 83 + z-index: 7; 84 + background: rgba(43, 43, 43, 0.76); 85 + } 86 + 87 + .viewer-close{ 88 + position: fixed; 89 + top: 10px; 90 + right: 10px; 91 + width: 35px; 92 + height: 35px; 93 + } 94 + 95 + .prev-button{ 96 + transition: 0.25s; 97 + position: fixed; 98 + top: 50%; 99 + left: 0; 100 + color: white; 101 + width: 50px; 102 + height: 150px; 103 + display: flex; 104 + justify-content: center; 105 + align-items: center; 106 + transform: translateY(-50%); 107 + background: rgba(255, 255, 255, 0.144); 108 + border-radius: 0 15px 15px 0; 109 + cursor: pointer; 110 + user-select: none; 111 + -webkit-user-select: none; 112 + box-shadow: #000 0 0 10px; 113 + } 114 + 115 + .prev-button:hover{ 116 + background: rgba(255, 255, 255, 0.349); 117 + } 118 + 119 + .next-button{ 120 + transition: 0.25s; 121 + position: fixed; 122 + top: 50%; 123 + right: 0; 124 + color: white; 125 + width: 50px; 126 + height: 150px; 127 + display: flex; 128 + justify-content: center; 129 + align-items: center; 130 + transform: translateY(-50%); 131 + background: rgba(255, 255, 255, 0.144); 132 + border-radius: 15px 0 0 15px; 133 + cursor: pointer; 134 + user-select: none; 135 + -webkit-user-select: none; 136 + box-shadow: #000 0 0 10px; 137 + } 138 + 139 + .next-button:hover{ 140 + background: rgba(255, 255, 255, 0.349); 141 + } 142 + 143 + .control-buttons{ 144 + position: fixed; 145 + bottom: 10px; 146 + left: 50%; 147 + transform: translateX(-50%); 148 + display: flex; 149 + } 150 + 151 + .control-buttons div{ 152 + margin: 0 20px; 153 + } 154 + 155 + .copy-notif{ 156 + position: fixed; 157 + top: 40px; 158 + left: 50%; 159 + color: white; 160 + transform: translateX(-50%) translateY(-100px); 161 + background: rgba(43, 43, 43, 0.76); 162 + padding: 10px 40px; 163 + backdrop-filter: blur(10px); 164 + -webkit-backdrop-filter: blur(10px); 165 + border-radius: 50px; 166 + box-shadow: #000 0 0 10px; 167 + z-index: 12; 168 + opacity: 0; 169 + pointer-events: none; 170 + } 171 + 172 + .photo-layer-manager{ 173 + background: rgba(43, 43, 43, 0.76); 174 + color: #fff; 175 + padding: 10px; 176 + backdrop-filter: blur(10px); 177 + position: fixed; 178 + bottom: 10px; 179 + left: 10px; 180 + border-radius: 10px; 181 + } 182 + 183 + .photo-layer-manager-layer{ 184 + cursor: pointer; 185 + -webkit-user-select: none; 186 + user-select: none; 187 + padding: 5px 20px; 188 + transition: 0.1s; 189 + } 190 + 191 + .photo-layer-manager-layer:hover{ 192 + color: #bbb; 193 + }
+63 -23
src/index.tsx
··· 1 - /* @refresh reload */ 2 - import { render } from "solid-js/web"; 3 - 4 - declare global{ 5 - interface Window { 6 - CloseAllPopups: (() => void)[] 7 - } 8 - } 9 - 10 - window.CloseAllPopups = []; 11 - 12 - window.oncontextmenu = ( e ) => e.preventDefault(); 13 - 14 - import "./styles.css"; 15 - import App from "./Components/App"; 16 - 17 - render(() => <App />, document.getElementById("root") as HTMLElement); 18 - 19 - let f = new FontFace('Rubik', 'url(https://cdn.phaz.uk/fonts/rubik/Rubik-VariableFont_wght.ttf)'); 20 - 21 - f.load().then((font) => { 22 - document.fonts.add(font); 23 - });
··· 1 + /* @refresh reload */ 2 + import { render } from "solid-js/web"; 3 + 4 + declare global{ 5 + interface Window { 6 + LoadingManager: LoadingManager; 7 + PhotoManager: PhotoManager; 8 + ConfirmationBoxManager: ConfirmationBoxManager; 9 + PhotoViewerManager: PhotoViewerManager; 10 + WorldCacheManager: WorldCacheManager; 11 + PhotoListRenderingManager: PhotoListRenderingManager; 12 + ViewManager: ViewManager; 13 + 14 + CloseAllPopups: (() => void)[]; 15 + OS: string; 16 + 17 + } 18 + } 19 + 20 + window.CloseAllPopups = []; 21 + 22 + window.oncontextmenu = ( e ) => e.preventDefault(); 23 + 24 + import './css/icons.css'; 25 + import './css/tray.css'; 26 + import './css/settings.css'; 27 + import './css/slide-bar.css'; 28 + import './css/viewer.css'; 29 + import './css/filters.css'; 30 + import './css/list.css'; 31 + 32 + import "./styles.css"; 33 + 34 + import App from "./Components/App"; 35 + import { invoke } from "@tauri-apps/api/core"; 36 + 37 + import { LoadingManager } from "./Components/Managers/LoadingManager"; 38 + import { PhotoManager } from "./Components/Managers/PhotoManager"; 39 + import { ConfirmationBoxManager } from "./Components/Managers/ConfirmationBoxManager"; 40 + import { PhotoViewerManager } from "./Components/Managers/PhotoViewerManager"; 41 + import { WorldCacheManager } from "./Components/Managers/WorldCacheManager"; 42 + import { PhotoListRenderingManager } from "./Components/Managers/PhotoListRenderingManager"; 43 + import { ViewManager } from "./Components/Managers/ViewManager"; 44 + 45 + window.LoadingManager = new LoadingManager(); 46 + window.PhotoManager = new PhotoManager(); 47 + window.ConfirmationBoxManager = new ConfirmationBoxManager(); 48 + window.PhotoViewerManager = new PhotoViewerManager(); 49 + window.WorldCacheManager = new WorldCacheManager(); 50 + window.PhotoListRenderingManager = new PhotoListRenderingManager(); 51 + window.ViewManager = new ViewManager(); 52 + 53 + (async () => { 54 + window.OS = await invoke('get_os'); 55 + 56 + render(() => <App />, document.getElementById("root") as HTMLElement); 57 + 58 + let f = new FontFace('Rubik', 'url(https://cdn.phaz.uk/fonts/rubik/Rubik-VariableFont_wght.ttf)'); 59 + 60 + f.load().then((font) => { 61 + document.fonts.add(font); 62 + }); 63 + })();
+119 -832
src/styles.css
··· 1 - @font-face { 2 - font-family: Rubik; 3 - src: url(https://cdn.phazed.xyz/fonts/rubik/Rubik-VariableFont_wght.ttf); 4 - } 5 - 6 - body{ 7 - background: #000; 8 - margin: 0; 9 - font-family: Rubik, 'Courier New'; 10 - } 11 - 12 - .loading{ 13 - position: fixed; 14 - z-index: 10000; 15 - top: 0; 16 - left: 0; 17 - width: 100%; 18 - height: 100%; 19 - background: black; 20 - display: flex; 21 - opacity: 1; 22 - color: white; 23 - justify-content: center; 24 - align-items: center; 25 - } 26 - 27 - .navbar{ 28 - background: #555a; 29 - position: fixed; 30 - top: 0; 31 - left: 0; 32 - width: 100%; 33 - margin-top: -50px; 34 - padding-top: 50px; 35 - height: 50px; 36 - display: flex; 37 - backdrop-filter: blur(10px); 38 - z-index: 10; 39 - box-shadow: #000 0 0 10px; 40 - } 41 - 42 - .navbar .tabs{ 43 - width: calc(100% - 450px); 44 - height: 100%; 45 - display: flex; 46 - } 47 - 48 - .navbar .account{ 49 - width: 100px; 50 - height: 100%; 51 - display: flex; 52 - justify-content: center; 53 - align-items: center; 54 - transition: 0.1s; 55 - cursor: pointer; 56 - user-select: none; 57 - } 58 - 59 - .navbar .account:hover{ 60 - background: #0005; 61 - } 62 - 63 - .navbar .control-lights{ 64 - width: 150px; 65 - height: 50px; 66 - display: flex; 67 - justify-content: center; 68 - align-items: center; 69 - } 70 - 71 - .control-lights .light{ 72 - user-select: none; 73 - font-size: 20px; 74 - text-align: center; 75 - color: white; 76 - width: 100%; 77 - cursor: pointer; 78 - display: flex; 79 - justify-content: center; 80 - align-items: center; 81 - height: 50px; 82 - filter: invert(100%); 83 - } 84 - 85 - .control-lights .light:hover{ 86 - background: #fff5; 87 - } 88 - 89 - .control-lights .light img{ 90 - width: 25%; 91 - } 92 - 93 - .icon{ 94 - width: 15px; 95 - filter: invert(100%); 96 - display: flex; 97 - align-items: center; 98 - justify-content: center; 99 - height: 100%; 100 - } 101 - 102 - .icon-label{ 103 - margin-top: -20px; 104 - margin-right: -200px; 105 - width: 200px; 106 - color: white; 107 - pointer-events: none; 108 - transform: translate(40px, -12px); 109 - opacity: 0; 110 - transition: 0.25s; 111 - user-select: none; 112 - } 113 - 114 - .icon:hover ~ .icon-label{ 115 - opacity: 1; 116 - transform: translate(60px, -12px); 117 - } 118 - 119 - .user-pfp{ 120 - width: 35px; 121 - height: 35px; 122 - background-size: cover !important; 123 - background-position: center !important; 124 - border-radius: 50%; 125 - margin-right: 10px; 126 - } 127 - 128 - .account-dropdown{ 129 - font-size: 20px; 130 - color: white; 131 - } 132 - 133 - .nav-tab{ 134 - color: white; 135 - width: 150px; 136 - height: 100%; 137 - transition: 0.1s; 138 - cursor: pointer; 139 - user-select: none; 140 - justify-content: center; 141 - align-items: center; 142 - display: flex; 143 - } 144 - 145 - .nav-tab:hover{ 146 - background: #0005; 147 - } 148 - 149 - .dropdown{ 150 - position: fixed; 151 - right: 125px; 152 - top: 60px; 153 - background: #555a; 154 - height: 60px; 155 - width: 150px; 156 - border-radius: 5px; 157 - backdrop-filter: blur(5px); 158 - z-index: 10; 159 - } 160 - 161 - .dropdown-button{ 162 - width: 100%; 163 - text-align: center; 164 - padding: 5.5px 0; 165 - color: #aaa; 166 - cursor: pointer; 167 - user-select: none; 168 - transition: 0.1s; 169 - } 170 - 171 - .dropdown-button:hover{ 172 - color: #fff; 173 - } 174 - 175 - .photo-list{ 176 - width: 100%; 177 - height: 100%; 178 - position: fixed; 179 - top: 0; 180 - left: 0; 181 - overflow: hidden; 182 - } 183 - 184 - .filter-options{ 185 - position: fixed; 186 - top: 55px; 187 - left: 5px; 188 - width: 40px; 189 - height: 50px; 190 - } 191 - 192 - .filter-options img{ 193 - cursor: pointer; 194 - user-select: none; 195 - } 196 - 197 - .filter-container{ 198 - display: none; 199 - position: fixed; 200 - bottom: 0; 201 - left: 50%; 202 - width: 600px; 203 - height: 83px; 204 - transform: translate(-50%); 205 - padding: 10px; 206 - border-radius: 5px 5px 0 0; 207 - backdrop-filter: blur(5px); 208 - background: #555a; 209 - color: #fff; 210 - text-align: center; 211 - box-shadow: #0005 0 0 10px; 212 - opacity: 0; 213 - } 214 - 215 - .filter-container > .filter-title{ 216 - font-size: 30px; 217 - } 218 - 219 - .filter-type-select{ 220 - display: flex; 221 - justify-content: center; 222 - align-items: center; 223 - width: 75%; 224 - margin: auto; 225 - } 226 - 227 - .filter-type-select > div{ 228 - width: 100%; 229 - border: #fff 4px solid; 230 - border-left: #fff 2px solid; 231 - border-right: #fff 2px solid; 232 - padding: 5px 0; 233 - cursor: pointer; 234 - user-select: none; 235 - } 236 - 237 - .filter-type-select > div:first-child{ 238 - border-left: #fff 4px solid; 239 - border-radius: 10px 0 0 10px; 240 - } 241 - 242 - .filter-type-select > div:last-child{ 243 - border-right: #fff 4px solid; 244 - border-radius: 0 10px 10px 0; 245 - } 246 - 247 - .filter-type-select > .selected-filter{ 248 - background: #00ccff55; 249 - } 250 - 251 - .filter-search{ 252 - margin-top: 10px; 253 - padding: 5px; 254 - border: #fff 4px solid; 255 - border-radius: 10px; 256 - background: #0008; 257 - outline: none; 258 - color: white; 259 - font-size: 15px; 260 - font-family: 'Rubik'; 261 - width: calc(75% - 18px); 262 - } 263 - 264 - .date-list{ 265 - mask-image: linear-gradient(to bottom, #0000, #000, #0000); 266 - overflow: auto; 267 - scrollbar-width: thin; 268 - height: calc(100% - 100px); 269 - padding: 50px 0; 270 - } 271 - 272 - .date-list-date{ 273 - padding: 10px; 274 - user-select: none; 275 - cursor: pointer; 276 - transition: 0.1s; 277 - border-radius: 10px; 278 - } 279 - 280 - .date-list-date:hover{ 281 - background: #0005; 282 - box-shadow: inset #0005 0 0 10px; 283 - } 284 - 285 - .photo-tree-loading{ 286 - width: 100%; 287 - height: 100%; 288 - display: flex; 289 - justify-content: center; 290 - align-items: center; 291 - color: white; 292 - font-size: 20px; 293 - } 294 - 295 - .loading-bar{ 296 - width: 500px; 297 - height: 8px; 298 - border-radius: 12px; 299 - background: #333; 300 - margin-top: 10px; 301 - padding: 2px; 302 - } 303 - 304 - .loading-bar-inner{ 305 - width: 0%; 306 - height: 8px; 307 - border-radius: 18px; 308 - background: #00ccff; 309 - } 310 - 311 - .photo-container{ 312 - width: 100%; 313 - height: 100%; 314 - } 315 - 316 - .photo-container-bg{ 317 - width: 100%; 318 - height: 100%; 319 - position: fixed; 320 - top: 0; 321 - left: 0; 322 - z-index: -1; 323 - } 324 - 325 - .single-photo-container{ 326 - margin: 10px; 327 - display: inline-block; 328 - } 329 - 330 - .photo-viewer{ 331 - justify-content: center; 332 - width: 100%; 333 - height: 100%; 334 - position: fixed; 335 - top: 0; 336 - left: 0; 337 - z-index: 5; 338 - background: #0009; 339 - backdrop-filter: blur(75px); 340 - opacity: 0; 341 - display: none; 342 - } 343 - 344 - .photo-context-menu{ 345 - position: fixed; 346 - top: 0; 347 - left: 0; 348 - padding: 10px; 349 - border-radius: 5px; 350 - backdrop-filter: blur(5px); 351 - background: #555a; 352 - color: #aaa; 353 - box-shadow: #0005 0 0 10px; 354 - opacity: 0; 355 - } 356 - 357 - .photo-context-menu > div{ 358 - padding: 2px 10px; 359 - width: calc(100% - 10px); 360 - text-align: center; 361 - transition: 0.1s; 362 - } 363 - 364 - .photo-context-menu > div:hover{ 365 - color: #fff; 366 - cursor: pointer; 367 - user-select: none; 368 - } 369 - 370 - .image-container{ 371 - height: 100%; 372 - background-size: contain !important; 373 - background-repeat: no-repeat !important; 374 - background-position: center !important; 375 - opacity: 0; 376 - } 377 - 378 - .viewer-button{ 379 - color: white; 380 - width: 30px; 381 - height: 30px; 382 - display: flex; 383 - justify-content: center; 384 - align-items: center; 385 - border-radius: 50px; 386 - font-size: 12px; 387 - background: #8885; 388 - backdrop-filter: blur(10px); 389 - user-select: none; 390 - cursor: pointer; 391 - z-index: 7; 392 - box-shadow: #0008 0 0 10px; 393 - } 394 - 395 - .viewer-close{ 396 - position: fixed; 397 - top: 10px; 398 - right: 10px; 399 - width: 35px; 400 - height: 35px; 401 - } 402 - 403 - .prev-button{ 404 - transition: 0.25s; 405 - position: fixed; 406 - top: 50%; 407 - left: 0; 408 - color: white; 409 - width: 50px; 410 - height: 150px; 411 - display: flex; 412 - justify-content: center; 413 - align-items: center; 414 - transform: translateY(-50%); 415 - background: rgba(255, 255, 255, 0.144); 416 - backdrop-filter: blur(50px); 417 - border-radius: 0 15px 15px 0; 418 - cursor: pointer; 419 - user-select: none; 420 - box-shadow: #000 0 0 10px; 421 - } 422 - 423 - .prev-button:hover{ 424 - background: rgba(255, 255, 255, 0.349); 425 - } 426 - 427 - .next-button{ 428 - transition: 0.25s; 429 - position: fixed; 430 - top: 50%; 431 - right: 0; 432 - color: white; 433 - width: 50px; 434 - height: 150px; 435 - display: flex; 436 - justify-content: center; 437 - align-items: center; 438 - transform: translateY(-50%); 439 - background: rgba(255, 255, 255, 0.144); 440 - backdrop-filter: blur(50px); 441 - border-radius: 15px 0 0 15px; 442 - cursor: pointer; 443 - user-select: none; 444 - box-shadow: #000 0 0 10px; 445 - } 446 - 447 - .next-button:hover{ 448 - background: rgba(255, 255, 255, 0.349); 449 - } 450 - 451 - .reload-photos{ 452 - position: fixed; 453 - top: 70px; 454 - right: 20px; 455 - color: white; 456 - user-select: none; 457 - cursor: pointer; 458 - opacity: 0; 459 - } 460 - 461 - .confirmation-box{ 462 - position: fixed; 463 - top: 0; 464 - left: 0; 465 - width: 100%; 466 - height: 100%; 467 - z-index: 15; 468 - background: #0005; 469 - transition: 0.25s; 470 - backdrop-filter: blur(10px); 471 - } 472 - 473 - .confirmation-box-container{ 474 - position: fixed; 475 - top: 50%; 476 - left: 50%; 477 - transform: translate(-50%, -50%); 478 - color: white; 479 - text-align: center; 480 - background: #9995; 481 - padding: 10px; 482 - width: 60%; 483 - border-radius: 10px; 484 - box-shadow: #000 0 0 10px; 485 - font-size: 18px; 486 - backdrop-filter: blur(10px); 487 - } 488 - 489 - .button-danger{ 490 - display: inline-block; 491 - backdrop-filter: blur(10px); 492 - padding: 10px; 493 - background: rgba(255, 0, 0, 0.333); 494 - box-shadow: #0005 inset 0 0 10px; 495 - border-radius: 50px; 496 - margin: 0 10px; 497 - cursor: pointer; 498 - user-select: none; 499 - width: 200px; 500 - transition: 0.25s; 501 - } 502 - 503 - .button{ 504 - display: inline-block; 505 - padding: 10px; 506 - backdrop-filter: blur(10px); 507 - background: #9995; 508 - box-shadow: #0005 inset 0 0 10px; 509 - border-radius: 50px; 510 - margin: 0 10px; 511 - cursor: pointer; 512 - user-select: none; 513 - width: 200px; 514 - transition: 0.25s; 515 - } 516 - 517 - .button:hover{ 518 - box-shadow: #000a inset 0 0 10px; 519 - } 520 - 521 - .button-danger:hover{ 522 - box-shadow: #000a inset 0 0 10px; 523 - } 524 - 525 - .control-buttons{ 526 - position: fixed; 527 - bottom: 10px; 528 - left: 50%; 529 - transform: translateX(-50%); 530 - display: flex; 531 - } 532 - 533 - .control-buttons div{ 534 - margin: 0 20px; 535 - } 536 - 537 - .copy-notif{ 538 - position: fixed; 539 - top: 40px; 540 - left: 50%; 541 - color: white; 542 - transform: translateX(-50%) translateY(-100px); 543 - background: #8885; 544 - padding: 10px 40px; 545 - backdrop-filter: blur(10px); 546 - border-radius: 50px; 547 - box-shadow: #000 0 0 10px; 548 - z-index: 12; 549 - opacity: 0; 550 - pointer-events: none; 551 - } 552 - 553 - .photo-tray{ 554 - position: fixed; 555 - bottom: -150px; 556 - left: 0; 557 - width: 100%; 558 - height: 150px; 559 - background: #7778; 560 - backdrop-filter: blur(10px); 561 - box-shadow: #0008 0 0 10px; 562 - padding-bottom: 150px; 563 - margin-bottom: -150px; 564 - } 565 - 566 - .photo-tray-close{ 567 - position: fixed; 568 - bottom: 160px; 569 - left: 50%; 570 - transform: translate(-50%); 571 - color: white; 572 - background: #8885; 573 - backdrop-filter: blur(10px); 574 - box-shadow: #0008 0 0 10px; 575 - display: flex; 576 - justify-content: center; 577 - align-items: center; 578 - height: 30px; 579 - width: 50px; 580 - border-radius: 50px; 581 - cursor: pointer; 582 - font-size: 12px; 583 - user-select: none; 584 - transition: 0.25s width; 585 - } 586 - 587 - .photo-tray-close:hover{ 588 - width: 70px; 589 - } 590 - 591 - .photo-tray-columns{ 592 - width: 100%; 593 - height: 100%; 594 - display: flex; 595 - color: white; 596 - text-align: center; 597 - } 598 - 599 - .photo-tray-column{ 600 - height: 100%; 601 - width: 100%; 602 - scrollbar-width: thin; 603 - overflow-y: auto; 604 - overflow-x: hidden; 605 - mask-image: linear-gradient(to bottom, #0000 0%, #000 10%, #000 90%, #0000 100%); 606 - } 607 - 608 - .tray-heading{ 609 - font-weight: bold; 610 - font-size: 20px; 611 - } 612 - 613 - .world-tags{ 614 - display: flex; 615 - width: 100%; 616 - justify-content: center; 617 - align-items: center; 618 - } 619 - 620 - .world-tags div{ 621 - padding: 0 10px; 622 - color: #bbb; 623 - transition: 0.25s; 624 - } 625 - 626 - .world-tags div:hover{ 627 - color: #ddd; 628 - } 629 - 630 - .world-name{ 631 - font-size: 17px; 632 - } 633 - 634 - .settings{ 635 - position: fixed; 636 - top: 0; 637 - left: 0; 638 - width: 100%; 639 - height: 100%; 640 - background: rgba(0, 0, 0, 0.4); 641 - backdrop-filter: blur(100px); 642 - } 643 - 644 - .slide-bar{ 645 - position: fixed; 646 - bottom: 0; 647 - left: 0; 648 - width: 100%; 649 - height: 50px; 650 - border-top: #aaa 1px solid; 651 - overflow-x: hidden; 652 - mask-image: linear-gradient(to left, #0000 0%, #000 20%, #000 80%, #0000 100%); 653 - background: #aaa2; 654 - box-shadow: #000 0 0 10px; 655 - } 656 - 657 - .inner-slide-bar{ 658 - display: flex; 659 - height: 50px; 660 - width: 200%; 661 - color: white; 662 - align-items: center; 663 - cursor: pointer; 664 - user-select: none; 665 - } 666 - 667 - .slider-dot{ 668 - width: 5px; 669 - height: 5px; 670 - border-radius: 5px; 671 - background: #aaa; 672 - margin: auto 25px; 673 - } 674 - 675 - .slider-text{ 676 - width: 200px; 677 - text-align: center; 678 - height: 50px; 679 - display: flex; 680 - justify-content: center; 681 - align-items: center; 682 - color: #aaa; 683 - transition: 0.25s; 684 - } 685 - 686 - .slider-text:hover{ 687 - color: #fff; 688 - } 689 - 690 - .slide-bar-tri{ 691 - position: fixed; 692 - bottom: 40px; 693 - left: 50%; 694 - transform: translateX(-50%); 695 - border: transparent solid 5px; 696 - border-top: #fff solid 5px; 697 - } 698 - 699 - .settings-container{ 700 - position: fixed; 701 - top: 50px; 702 - left: 0px; 703 - width: 200%; 704 - height: calc(100% - 100px); 705 - display: flex; 706 - } 707 - 708 - .settings-block{ 709 - width: 50%; 710 - height: 100%; 711 - color: white; 712 - text-align: center; 713 - } 714 - 715 - .selector{ 716 - padding: 10px 20px; 717 - border-radius: 10px; 718 - background: #000a; 719 - display: inline-block; 720 - margin: 10px; 721 - } 722 - 723 - .selector .selection-box{ 724 - height: 20px; 725 - background: #777a; 726 - margin: 5px -10px 0 -10px; 727 - border-radius: 8px; 728 - user-select: none; 729 - cursor: pointer; 730 - transition: 0.25s; 731 - color: #fff1; 732 - } 733 - 734 - .selector .selection-box:hover{ 735 - height: 20px; 736 - background: #777a; 737 - margin: 5px -10px 0 -10px; 738 - border-radius: 8px; 739 - user-select: none; 740 - cursor: pointer; 741 - transition: 0.25s; 742 - color: #fff5; 743 - } 744 - 745 - .selector input{ 746 - display: none; 747 - } 748 - 749 - .selector input:checked ~ label .selection-box{ 750 - background: rgba(0, 146, 204, 0.705); 751 - color: #fff; 752 - } 753 - 754 - .path{ 755 - padding: 5px 10px; 756 - background: #000a; 757 - border-radius: 5px; 758 - margin-left: 5px; 759 - cursor: pointer; 760 - } 761 - 762 - .scroll-to-top{ 763 - position: fixed; 764 - bottom: 10px; 765 - right: 10px; 766 - color: white; 767 - width: 40px; 768 - height: 40px; 769 - cursor: pointer; 770 - border-radius: 50%; 771 - border: 2px solid white; 772 - display: flex; 773 - justify-content: center; 774 - align-items: center; 775 - } 776 - 777 - .account-profile{ 778 - margin: auto; 779 - width: 50%; 780 - height: 200px; 781 - display: flex; 782 - } 783 - 784 - .account-pfp{ 785 - width: 200px; 786 - height: 200px; 787 - background-position: center !important; 788 - background-size: cover !important; 789 - border-radius: 50%; 790 - box-shadow: #0005 0 0 10px; 791 - position: relative; 792 - z-index: 10; 793 - } 794 - 795 - .account-desc{ 796 - width: calc(100% - 200px); 797 - padding-left: 100px; 798 - height: 150px; 799 - margin: 25px 0; 800 - margin-left: -100px; 801 - background: #0009; 802 - border-radius: 10px; 803 - box-shadow: #0005 0 0 10px; 804 - } 805 - 806 - .storage-bar{ 807 - width: calc(100% - 20px); 808 - height: 10px; 809 - margin-left: 10px; 810 - background: #555; 811 - border-radius: 10px; 812 - display: flex; 813 - justify-content: left; 814 - align-items: center; 815 - margin-bottom: 2px; 816 - } 817 - 818 - .storage-bar-inner{ 819 - margin: 2px; 820 - height: 6px; 821 - background: #00ccff; 822 - border-radius: 10px; 823 - } 824 - 825 - .account-notice{ 826 - background: #0007; 827 - border-radius: 5px; 828 - box-shadow: #0005 0 0 10px; 829 - padding: 10px; 830 - margin: auto; 831 - width: calc(50% - 20px); 832 - margin-top: 25px; 833 }
··· 1 + @font-face { 2 + font-family: Rubik; 3 + src: url(https://cdn.phazed.xyz/fonts/rubik/Rubik-VariableFont_wght.ttf); 4 + } 5 + 6 + body{ 7 + background: #000; 8 + margin: 0; 9 + font-family: Rubik, 'Courier New'; 10 + overflow: hidden; 11 + } 12 + 13 + * { 14 + box-sizing: border-box; 15 + } 16 + 17 + .loading{ 18 + position: fixed; 19 + z-index: 10000; 20 + top: 0; 21 + left: 0; 22 + width: 100%; 23 + height: 100%; 24 + background: black; 25 + display: flex; 26 + opacity: 1; 27 + color: white; 28 + justify-content: center; 29 + align-items: center; 30 + } 31 + 32 + .confirmation-box{ 33 + position: fixed; 34 + top: 0; 35 + left: 0; 36 + width: 100%; 37 + height: 100%; 38 + z-index: 15; 39 + background: rgba(0, 0, 0, 0.76); 40 + transition: 0.25s; 41 + } 42 + 43 + .confirmation-box-container{ 44 + position: fixed; 45 + top: 50%; 46 + left: 50%; 47 + transform: translate(-50%, -50%); 48 + color: white; 49 + text-align: center; 50 + background: #9995; 51 + padding: 10px; 52 + width: 60%; 53 + border-radius: 10px; 54 + box-shadow: #000 0 0 10px; 55 + font-size: 18px; 56 + -webkit-backdrop-filter: blur(10px); 57 + backdrop-filter: blur(10px); 58 + } 59 + 60 + .button-danger{ 61 + display: inline-block; 62 + -webkit-backdrop-filter: blur(10px); 63 + backdrop-filter: blur(10px); 64 + padding: 10px; 65 + background: rgba(255, 0, 0, 0.333); 66 + box-shadow: #0005 inset 0 0 10px; 67 + border-radius: 50px; 68 + margin: 0 10px; 69 + cursor: pointer; 70 + user-select: none; 71 + -webkit-user-select: none; 72 + width: 200px; 73 + transition: 0.25s; 74 + } 75 + 76 + .button{ 77 + display: inline-block; 78 + padding: 10px; 79 + backdrop-filter: blur(10px); 80 + -webkit-backdrop-filter: blur(10px); 81 + background: #9995; 82 + box-shadow: #0005 inset 0 0 10px; 83 + border-radius: 50px; 84 + margin: 0 10px; 85 + cursor: pointer; 86 + user-select: none; 87 + -webkit-user-select: none; 88 + width: 200px; 89 + transition: 0.25s; 90 + } 91 + 92 + .button:hover{ 93 + box-shadow: #000a inset 0 0 10px; 94 + } 95 + 96 + .button-danger:hover{ 97 + box-shadow: #000a inset 0 0 10px; 98 + } 99 + 100 + img{ 101 + max-width: 100%; 102 + max-height: 100%; 103 + } 104 + 105 + .error-notif{ 106 + position: fixed; 107 + top: 40px; 108 + left: 50%; 109 + color: white; 110 + transform: translateX(-50%) translateY(-100px); 111 + background: rgba(43, 43, 43, 0.76); 112 + padding: 10px 40px; 113 + backdrop-filter: blur(10px); 114 + -webkit-backdrop-filter: blur(10px); 115 + border-radius: 50px; 116 + box-shadow: #000 0 0 10px; 117 + z-index: 12; 118 + opacity: 0; 119 + pointer-events: none; 120 }
+2313 -1260
src-tauri/Cargo.lock
··· 1 # This file is automatically @generated by Cargo. 2 # It is not intended for manual editing. 3 - version = 3 4 5 [[package]] 6 - name = "addr2line" 7 - version = "0.24.2" 8 - source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 dependencies = [ 11 - "gimli", 12 ] 13 14 [[package]] 15 - name = "adler" 16 - version = "1.0.2" 17 - source = "registry+https://github.com/rust-lang/crates.io-index" 18 - checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 - 20 - [[package]] 21 name = "adler2" 22 - version = "2.0.0" 23 source = "registry+https://github.com/rust-lang/crates.io-index" 24 - checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 25 26 [[package]] 27 name = "aho-corasick" 28 - version = "1.1.3" 29 source = "registry+https://github.com/rust-lang/crates.io-index" 30 - checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 31 dependencies = [ 32 "memchr", 33 ] 34 35 [[package]] 36 name = "aligned-vec" 37 - version = "0.5.0" 38 source = "registry+https://github.com/rust-lang/crates.io-index" 39 - checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" 40 41 [[package]] 42 name = "alloc-no-stdlib" ··· 54 ] 55 56 [[package]] 57 - name = "android-tzdata" 58 - version = "0.1.1" 59 - source = "registry+https://github.com/rust-lang/crates.io-index" 60 - checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 61 - 62 - [[package]] 63 name = "android_system_properties" 64 version = "0.1.5" 65 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 70 71 [[package]] 72 name = "anyhow" 73 - version = "1.0.89" 74 source = "registry+https://github.com/rust-lang/crates.io-index" 75 - checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" 76 77 [[package]] 78 name = "arbitrary" 79 - version = "1.3.2" 80 source = "registry+https://github.com/rust-lang/crates.io-index" 81 - checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" 82 83 [[package]] 84 name = "arg_enum_proc_macro" ··· 88 dependencies = [ 89 "proc-macro2", 90 "quote", 91 - "syn 2.0.79", 92 ] 93 94 [[package]] ··· 98 checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 99 100 [[package]] 101 name = "atk" 102 - version = "0.18.0" 103 source = "registry+https://github.com/rust-lang/crates.io-index" 104 - checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" 105 dependencies = [ 106 "atk-sys", 107 "glib", ··· 110 111 [[package]] 112 name = "atk-sys" 113 - version = "0.18.0" 114 source = "registry+https://github.com/rust-lang/crates.io-index" 115 - checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" 116 dependencies = [ 117 "glib-sys", 118 "gobject-sys", ··· 128 129 [[package]] 130 name = "autocfg" 131 - version = "1.4.0" 132 source = "registry+https://github.com/rust-lang/crates.io-index" 133 - checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 134 135 [[package]] 136 name = "av1-grain" 137 - version = "0.2.3" 138 source = "registry+https://github.com/rust-lang/crates.io-index" 139 - checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" 140 dependencies = [ 141 "anyhow", 142 "arrayvec", ··· 148 149 [[package]] 150 name = "avif-serialize" 151 - version = "0.8.2" 152 source = "registry+https://github.com/rust-lang/crates.io-index" 153 - checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" 154 dependencies = [ 155 "arrayvec", 156 ] 157 158 [[package]] 159 - name = "backtrace" 160 - version = "0.3.74" 161 - source = "registry+https://github.com/rust-lang/crates.io-index" 162 - checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 163 - dependencies = [ 164 - "addr2line", 165 - "cfg-if", 166 - "libc", 167 - "miniz_oxide 0.8.0", 168 - "object", 169 - "rustc-demangle", 170 - "windows-targets 0.52.6", 171 - ] 172 - 173 - [[package]] 174 name = "base64" 175 version = "0.21.7" 176 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 184 185 [[package]] 186 name = "bit_field" 187 - version = "0.10.2" 188 source = "registry+https://github.com/rust-lang/crates.io-index" 189 - checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 190 191 [[package]] 192 name = "bitflags" ··· 196 197 [[package]] 198 name = "bitflags" 199 - version = "2.6.0" 200 source = "registry+https://github.com/rust-lang/crates.io-index" 201 - checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 202 dependencies = [ 203 - "serde", 204 ] 205 206 [[package]] 207 name = "bitstream-io" 208 - version = "2.5.3" 209 - source = "registry+https://github.com/rust-lang/crates.io-index" 210 - checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" 211 - 212 - [[package]] 213 - name = "block" 214 - version = "0.1.6" 215 source = "registry+https://github.com/rust-lang/crates.io-index" 216 - checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 217 218 [[package]] 219 name = "block-buffer" ··· 234 ] 235 236 [[package]] 237 name = "brotli" 238 - version = "6.0.0" 239 source = "registry+https://github.com/rust-lang/crates.io-index" 240 - checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" 241 dependencies = [ 242 "alloc-no-stdlib", 243 "alloc-stdlib", ··· 246 247 [[package]] 248 name = "brotli-decompressor" 249 - version = "4.0.1" 250 source = "registry+https://github.com/rust-lang/crates.io-index" 251 - checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" 252 dependencies = [ 253 "alloc-no-stdlib", 254 "alloc-stdlib", ··· 256 257 [[package]] 258 name = "built" 259 - version = "0.7.4" 260 source = "registry+https://github.com/rust-lang/crates.io-index" 261 - checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" 262 263 [[package]] 264 name = "bumpalo" 265 - version = "3.16.0" 266 source = "registry+https://github.com/rust-lang/crates.io-index" 267 - checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 268 269 [[package]] 270 name = "bytemuck" 271 - version = "1.19.0" 272 source = "registry+https://github.com/rust-lang/crates.io-index" 273 - checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" 274 275 [[package]] 276 name = "byteorder" ··· 286 287 [[package]] 288 name = "bytes" 289 - version = "1.7.2" 290 source = "registry+https://github.com/rust-lang/crates.io-index" 291 - checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" 292 dependencies = [ 293 "serde", 294 ] ··· 299 source = "registry+https://github.com/rust-lang/crates.io-index" 300 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 301 dependencies = [ 302 - "bitflags 2.6.0", 303 "cairo-sys-rs", 304 "glib", 305 "libc", 306 "once_cell", 307 - "thiserror", 308 ] 309 310 [[package]] ··· 320 321 [[package]] 322 name = "camino" 323 - version = "1.1.9" 324 source = "registry+https://github.com/rust-lang/crates.io-index" 325 - checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 326 dependencies = [ 327 - "serde", 328 ] 329 330 [[package]] 331 name = "cargo-platform" 332 - version = "0.1.8" 333 source = "registry+https://github.com/rust-lang/crates.io-index" 334 - checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" 335 dependencies = [ 336 "serde", 337 ] 338 339 [[package]] 340 name = "cargo_metadata" 341 - version = "0.18.1" 342 source = "registry+https://github.com/rust-lang/crates.io-index" 343 - checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" 344 dependencies = [ 345 "camino", 346 "cargo-platform", 347 "semver", 348 "serde", 349 "serde_json", 350 - "thiserror", 351 ] 352 353 [[package]] 354 name = "cargo_toml" 355 - version = "0.17.2" 356 source = "registry+https://github.com/rust-lang/crates.io-index" 357 - checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" 358 dependencies = [ 359 "serde", 360 - "toml 0.8.2", 361 ] 362 363 [[package]] 364 name = "cc" 365 - version = "1.1.30" 366 source = "registry+https://github.com/rust-lang/crates.io-index" 367 - checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" 368 dependencies = [ 369 "jobserver", 370 "libc", 371 "shlex", ··· 400 401 [[package]] 402 name = "cfg-if" 403 - version = "1.0.0" 404 source = "registry+https://github.com/rust-lang/crates.io-index" 405 - checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 406 407 [[package]] 408 name = "cfg_aliases" ··· 412 413 [[package]] 414 name = "chrono" 415 - version = "0.4.38" 416 source = "registry+https://github.com/rust-lang/crates.io-index" 417 - checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 418 dependencies = [ 419 - "android-tzdata", 420 "iana-time-zone", 421 "num-traits", 422 "serde", 423 - "windows-targets 0.52.6", 424 - ] 425 - 426 - [[package]] 427 - name = "cocoa" 428 - version = "0.26.0" 429 - source = "registry+https://github.com/rust-lang/crates.io-index" 430 - checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" 431 - dependencies = [ 432 - "bitflags 2.6.0", 433 - "block", 434 - "cocoa-foundation", 435 - "core-foundation 0.10.0", 436 - "core-graphics", 437 - "foreign-types 0.5.0", 438 - "libc", 439 - "objc", 440 ] 441 442 [[package]] 443 - name = "cocoa-foundation" 444 - version = "0.2.0" 445 source = "registry+https://github.com/rust-lang/crates.io-index" 446 - checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" 447 dependencies = [ 448 - "bitflags 2.6.0", 449 - "block", 450 - "core-foundation 0.10.0", 451 - "core-graphics-types", 452 - "libc", 453 - "objc", 454 ] 455 456 [[package]] ··· 470 ] 471 472 [[package]] 473 name = "convert_case" 474 version = "0.4.0" 475 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 488 489 [[package]] 490 name = "cookie_store" 491 - version = "0.21.0" 492 source = "registry+https://github.com/rust-lang/crates.io-index" 493 - checksum = "4934e6b7e8419148b6ef56950d277af8561060b56afd59e2aadf98b59fce6baa" 494 dependencies = [ 495 "cookie", 496 - "idna 0.5.0", 497 "log", 498 "publicsuffix", 499 "serde", ··· 515 516 [[package]] 517 name = "core-foundation" 518 - version = "0.10.0" 519 source = "registry+https://github.com/rust-lang/crates.io-index" 520 - checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" 521 dependencies = [ 522 "core-foundation-sys", 523 "libc", ··· 535 source = "registry+https://github.com/rust-lang/crates.io-index" 536 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 537 dependencies = [ 538 - "bitflags 2.6.0", 539 - "core-foundation 0.10.0", 540 "core-graphics-types", 541 "foreign-types 0.5.0", 542 "libc", ··· 548 source = "registry+https://github.com/rust-lang/crates.io-index" 549 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 550 dependencies = [ 551 - "bitflags 2.6.0", 552 - "core-foundation 0.10.0", 553 "libc", 554 ] 555 556 [[package]] 557 name = "cpufeatures" 558 - version = "0.2.14" 559 source = "registry+https://github.com/rust-lang/crates.io-index" 560 - checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" 561 dependencies = [ 562 "libc", 563 ] 564 565 [[package]] 566 name = "crc32fast" 567 - version = "1.4.2" 568 source = "registry+https://github.com/rust-lang/crates.io-index" 569 - checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 570 dependencies = [ 571 "cfg-if", 572 ] 573 574 [[package]] 575 name = "crossbeam-channel" 576 - version = "0.5.13" 577 source = "registry+https://github.com/rust-lang/crates.io-index" 578 - checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 579 dependencies = [ 580 "crossbeam-utils", 581 ] 582 583 [[package]] 584 name = "crossbeam-deque" 585 - version = "0.8.5" 586 source = "registry+https://github.com/rust-lang/crates.io-index" 587 - checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 588 dependencies = [ 589 "crossbeam-epoch", 590 "crossbeam-utils", ··· 601 602 [[package]] 603 name = "crossbeam-utils" 604 - version = "0.8.20" 605 source = "registry+https://github.com/rust-lang/crates.io-index" 606 - checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 607 608 [[package]] 609 name = "crunchy" 610 - version = "0.2.2" 611 source = "registry+https://github.com/rust-lang/crates.io-index" 612 - checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 613 614 [[package]] 615 name = "crypto-common" ··· 623 624 [[package]] 625 name = "cssparser" 626 - version = "0.27.2" 627 source = "registry+https://github.com/rust-lang/crates.io-index" 628 - checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 629 dependencies = [ 630 "cssparser-macros", 631 "dtoa-short", 632 - "itoa 0.4.8", 633 "matches", 634 - "phf 0.8.0", 635 "proc-macro2", 636 "quote", 637 "smallvec", ··· 645 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 646 dependencies = [ 647 "quote", 648 - "syn 2.0.79", 649 ] 650 651 [[package]] 652 name = "ctor" 653 - version = "0.2.8" 654 source = "registry+https://github.com/rust-lang/crates.io-index" 655 - checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" 656 dependencies = [ 657 "quote", 658 - "syn 2.0.79", 659 ] 660 661 [[package]] 662 name = "darling" 663 - version = "0.20.10" 664 source = "registry+https://github.com/rust-lang/crates.io-index" 665 - checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 666 dependencies = [ 667 "darling_core", 668 "darling_macro", ··· 670 671 [[package]] 672 name = "darling_core" 673 - version = "0.20.10" 674 source = "registry+https://github.com/rust-lang/crates.io-index" 675 - checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 676 dependencies = [ 677 "fnv", 678 "ident_case", 679 "proc-macro2", 680 "quote", 681 "strsim", 682 - "syn 2.0.79", 683 ] 684 685 [[package]] 686 name = "darling_macro" 687 - version = "0.20.10" 688 source = "registry+https://github.com/rust-lang/crates.io-index" 689 - checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 690 dependencies = [ 691 "darling_core", 692 "quote", 693 - "syn 2.0.79", 694 ] 695 696 [[package]] 697 name = "data-url" 698 - version = "0.3.1" 699 source = "registry+https://github.com/rust-lang/crates.io-index" 700 - checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 701 702 [[package]] 703 name = "deranged" 704 - version = "0.3.11" 705 source = "registry+https://github.com/rust-lang/crates.io-index" 706 - checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 707 dependencies = [ 708 "powerfmt", 709 - "serde", 710 ] 711 712 [[package]] 713 name = "derive_more" 714 - version = "0.99.18" 715 source = "registry+https://github.com/rust-lang/crates.io-index" 716 - checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 717 dependencies = [ 718 "convert_case", 719 "proc-macro2", 720 "quote", 721 "rustc_version", 722 - "syn 2.0.79", 723 ] 724 725 [[package]] ··· 734 735 [[package]] 736 name = "dirs" 737 - version = "5.0.1" 738 source = "registry+https://github.com/rust-lang/crates.io-index" 739 - checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 740 dependencies = [ 741 "dirs-sys", 742 ] 743 744 [[package]] 745 name = "dirs-sys" 746 - version = "0.4.1" 747 source = "registry+https://github.com/rust-lang/crates.io-index" 748 - checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 749 dependencies = [ 750 "libc", 751 "option-ext", 752 "redox_users", 753 - "windows-sys 0.48.0", 754 ] 755 756 [[package]] ··· 760 checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 761 762 [[package]] 763 name = "dlopen2" 764 - version = "0.7.0" 765 source = "registry+https://github.com/rust-lang/crates.io-index" 766 - checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" 767 dependencies = [ 768 "dlopen2_derive", 769 "libc", ··· 773 774 [[package]] 775 name = "dlopen2_derive" 776 - version = "0.4.0" 777 source = "registry+https://github.com/rust-lang/crates.io-index" 778 - checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" 779 dependencies = [ 780 "proc-macro2", 781 "quote", 782 - "syn 2.0.79", 783 ] 784 785 [[package]] 786 name = "document-features" 787 - version = "0.2.10" 788 source = "registry+https://github.com/rust-lang/crates.io-index" 789 - checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" 790 dependencies = [ 791 "litrs", 792 ] 793 794 [[package]] 795 name = "dpi" 796 - version = "0.1.1" 797 source = "registry+https://github.com/rust-lang/crates.io-index" 798 - checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" 799 dependencies = [ 800 "serde", 801 ] 802 803 [[package]] 804 name = "dtoa" 805 - version = "1.0.9" 806 source = "registry+https://github.com/rust-lang/crates.io-index" 807 - checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" 808 809 [[package]] 810 name = "dtoa-short" ··· 823 824 [[package]] 825 name = "dyn-clone" 826 - version = "1.0.17" 827 source = "registry+https://github.com/rust-lang/crates.io-index" 828 - checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 829 830 [[package]] 831 name = "either" 832 - version = "1.13.0" 833 source = "registry+https://github.com/rust-lang/crates.io-index" 834 - checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 835 836 [[package]] 837 name = "embed-resource" 838 - version = "2.5.0" 839 source = "registry+https://github.com/rust-lang/crates.io-index" 840 - checksum = "f4e24052d7be71f0efb50c201557f6fe7d237cfd5a64fd5bcd7fd8fe32dbbffa" 841 dependencies = [ 842 "cc", 843 "memchr", 844 "rustc_version", 845 - "toml 0.8.2", 846 "vswhom", 847 - "winreg 0.52.0", 848 ] 849 850 [[package]] ··· 855 856 [[package]] 857 name = "encoding_rs" 858 - version = "0.8.34" 859 source = "registry+https://github.com/rust-lang/crates.io-index" 860 - checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 861 dependencies = [ 862 "cfg-if", 863 ] 864 865 [[package]] 866 name = "equivalent" 867 - version = "1.0.1" 868 source = "registry+https://github.com/rust-lang/crates.io-index" 869 - checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 870 871 [[package]] 872 name = "erased-serde" 873 - version = "0.4.5" 874 source = "registry+https://github.com/rust-lang/crates.io-index" 875 - checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" 876 dependencies = [ 877 "serde", 878 "typeid", 879 ] 880 881 [[package]] 882 name = "errno" 883 - version = "0.3.9" 884 source = "registry+https://github.com/rust-lang/crates.io-index" 885 - checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 886 dependencies = [ 887 "libc", 888 - "windows-sys 0.52.0", 889 ] 890 891 [[package]] 892 name = "exr" 893 - version = "1.72.0" 894 source = "registry+https://github.com/rust-lang/crates.io-index" 895 - checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" 896 dependencies = [ 897 "bit_field", 898 - "flume", 899 "half", 900 "lebe", 901 - "miniz_oxide 0.7.4", 902 "rayon-core", 903 "smallvec", 904 "zune-inflate", ··· 906 907 [[package]] 908 name = "fast_image_resize" 909 - version = "4.2.1" 910 source = "registry+https://github.com/rust-lang/crates.io-index" 911 - checksum = "2ca4b58827213977eabab8ee8d8258db8441338f3a1832a1c0f2de3372175531" 912 dependencies = [ 913 "bytemuck", 914 "cfg-if", 915 "document-features", 916 "image", 917 "num-traits", 918 - "thiserror", 919 ] 920 921 [[package]] 922 name = "fastrand" 923 - version = "2.1.1" 924 source = "registry+https://github.com/rust-lang/crates.io-index" 925 - checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 926 927 [[package]] 928 - name = "fdeflate" 929 - version = "0.3.5" 930 source = "registry+https://github.com/rust-lang/crates.io-index" 931 - checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" 932 dependencies = [ 933 - "simd-adler32", 934 ] 935 936 [[package]] 937 - name = "field-offset" 938 - version = "0.3.6" 939 source = "registry+https://github.com/rust-lang/crates.io-index" 940 - checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" 941 dependencies = [ 942 - "memoffset", 943 - "rustc_version", 944 ] 945 946 [[package]] 947 - name = "filetime" 948 - version = "0.2.25" 949 source = "registry+https://github.com/rust-lang/crates.io-index" 950 - checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 951 dependencies = [ 952 - "cfg-if", 953 - "libc", 954 - "libredox", 955 - "windows-sys 0.59.0", 956 ] 957 958 [[package]] 959 - name = "flate2" 960 - version = "1.0.34" 961 source = "registry+https://github.com/rust-lang/crates.io-index" 962 - checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" 963 dependencies = [ 964 - "crc32fast", 965 - "miniz_oxide 0.8.0", 966 ] 967 968 [[package]] 969 - name = "fluent-uri" 970 version = "0.1.4" 971 source = "registry+https://github.com/rust-lang/crates.io-index" 972 - checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" 973 - dependencies = [ 974 - "bitflags 1.3.2", 975 - ] 976 977 [[package]] 978 - name = "flume" 979 - version = "0.11.0" 980 source = "registry+https://github.com/rust-lang/crates.io-index" 981 - checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" 982 dependencies = [ 983 - "spin", 984 ] 985 986 [[package]] ··· 1016 dependencies = [ 1017 "proc-macro2", 1018 "quote", 1019 - "syn 2.0.79", 1020 ] 1021 1022 [[package]] ··· 1033 1034 [[package]] 1035 name = "form_urlencoded" 1036 - version = "1.2.1" 1037 source = "registry+https://github.com/rust-lang/crates.io-index" 1038 - checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1039 dependencies = [ 1040 "percent-encoding", 1041 ] ··· 1091 version = "0.3.31" 1092 source = "registry+https://github.com/rust-lang/crates.io-index" 1093 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1094 1095 [[package]] 1096 name = "futures-macro" ··· 1100 dependencies = [ 1101 "proc-macro2", 1102 "quote", 1103 - "syn 2.0.79", 1104 ] 1105 1106 [[package]] ··· 1143 1144 [[package]] 1145 name = "gdk" 1146 - version = "0.18.0" 1147 source = "registry+https://github.com/rust-lang/crates.io-index" 1148 - checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" 1149 dependencies = [ 1150 "cairo-rs", 1151 "gdk-pixbuf", ··· 1184 1185 [[package]] 1186 name = "gdk-sys" 1187 - version = "0.18.0" 1188 source = "registry+https://github.com/rust-lang/crates.io-index" 1189 - checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" 1190 dependencies = [ 1191 "cairo-sys-rs", 1192 "gdk-pixbuf-sys", ··· 1201 1202 [[package]] 1203 name = "gdkwayland-sys" 1204 - version = "0.18.0" 1205 source = "registry+https://github.com/rust-lang/crates.io-index" 1206 - checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" 1207 dependencies = [ 1208 "gdk-sys", 1209 "glib-sys", ··· 1215 1216 [[package]] 1217 name = "gdkx11" 1218 - version = "0.18.0" 1219 source = "registry+https://github.com/rust-lang/crates.io-index" 1220 - checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" 1221 dependencies = [ 1222 "gdk", 1223 "gdkx11-sys", ··· 1229 1230 [[package]] 1231 name = "gdkx11-sys" 1232 - version = "0.18.0" 1233 source = "registry+https://github.com/rust-lang/crates.io-index" 1234 - checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" 1235 dependencies = [ 1236 "gdk-sys", 1237 "glib-sys", ··· 1242 1243 [[package]] 1244 name = "generic-array" 1245 - version = "0.14.7" 1246 source = "registry+https://github.com/rust-lang/crates.io-index" 1247 - checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1248 dependencies = [ 1249 "typenum", 1250 "version_check", 1251 ] 1252 1253 [[package]] 1254 name = "getrandom" 1255 version = "0.1.16" 1256 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1263 1264 [[package]] 1265 name = "getrandom" 1266 - version = "0.2.15" 1267 source = "registry+https://github.com/rust-lang/crates.io-index" 1268 - checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1269 dependencies = [ 1270 "cfg-if", 1271 "libc", 1272 - "wasi 0.11.0+wasi-snapshot-preview1", 1273 ] 1274 1275 [[package]] 1276 - name = "gif" 1277 - version = "0.13.1" 1278 source = "registry+https://github.com/rust-lang/crates.io-index" 1279 - checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" 1280 dependencies = [ 1281 - "color_quant", 1282 - "weezl", 1283 ] 1284 1285 [[package]] 1286 - name = "gimli" 1287 - version = "0.31.1" 1288 source = "registry+https://github.com/rust-lang/crates.io-index" 1289 - checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1290 1291 [[package]] 1292 name = "gio" ··· 1304 "once_cell", 1305 "pin-project-lite", 1306 "smallvec", 1307 - "thiserror", 1308 ] 1309 1310 [[package]] ··· 1326 source = "registry+https://github.com/rust-lang/crates.io-index" 1327 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1328 dependencies = [ 1329 - "bitflags 2.6.0", 1330 "futures-channel", 1331 "futures-core", 1332 "futures-executor", ··· 1340 "memchr", 1341 "once_cell", 1342 "smallvec", 1343 - "thiserror", 1344 ] 1345 1346 [[package]] ··· 1354 "proc-macro-error", 1355 "proc-macro2", 1356 "quote", 1357 - "syn 2.0.79", 1358 ] 1359 1360 [[package]] ··· 1369 1370 [[package]] 1371 name = "glob" 1372 - version = "0.3.1" 1373 source = "registry+https://github.com/rust-lang/crates.io-index" 1374 - checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 1375 1376 [[package]] 1377 name = "gobject-sys" ··· 1386 1387 [[package]] 1388 name = "gtk" 1389 - version = "0.18.1" 1390 source = "registry+https://github.com/rust-lang/crates.io-index" 1391 - checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" 1392 dependencies = [ 1393 "atk", 1394 "cairo-rs", ··· 1407 1408 [[package]] 1409 name = "gtk-sys" 1410 - version = "0.18.0" 1411 source = "registry+https://github.com/rust-lang/crates.io-index" 1412 - checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" 1413 dependencies = [ 1414 "atk-sys", 1415 "cairo-sys-rs", ··· 1425 1426 [[package]] 1427 name = "gtk3-macros" 1428 - version = "0.18.0" 1429 source = "registry+https://github.com/rust-lang/crates.io-index" 1430 - checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" 1431 dependencies = [ 1432 "proc-macro-crate 1.3.1", 1433 "proc-macro-error", 1434 "proc-macro2", 1435 "quote", 1436 - "syn 2.0.79", 1437 ] 1438 1439 [[package]] 1440 name = "h2" 1441 - version = "0.4.6" 1442 source = "registry+https://github.com/rust-lang/crates.io-index" 1443 - checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" 1444 dependencies = [ 1445 "atomic-waker", 1446 "bytes", ··· 1448 "futures-core", 1449 "futures-sink", 1450 "http", 1451 - "indexmap 2.6.0", 1452 "slab", 1453 "tokio", 1454 "tokio-util", ··· 1457 1458 [[package]] 1459 name = "half" 1460 - version = "2.4.1" 1461 source = "registry+https://github.com/rust-lang/crates.io-index" 1462 - checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" 1463 dependencies = [ 1464 "cfg-if", 1465 "crunchy", 1466 ] 1467 1468 [[package]] ··· 1473 1474 [[package]] 1475 name = "hashbrown" 1476 - version = "0.15.0" 1477 source = "registry+https://github.com/rust-lang/crates.io-index" 1478 - checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" 1479 1480 [[package]] 1481 name = "heck" ··· 1491 1492 [[package]] 1493 name = "hermit-abi" 1494 - version = "0.3.9" 1495 source = "registry+https://github.com/rust-lang/crates.io-index" 1496 - checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 1497 1498 [[package]] 1499 name = "hex" ··· 1503 1504 [[package]] 1505 name = "html5ever" 1506 - version = "0.26.0" 1507 source = "registry+https://github.com/rust-lang/crates.io-index" 1508 - checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" 1509 dependencies = [ 1510 "log", 1511 "mac", 1512 "markup5ever", 1513 - "proc-macro2", 1514 - "quote", 1515 - "syn 1.0.109", 1516 ] 1517 1518 [[package]] 1519 name = "http" 1520 - version = "1.1.0" 1521 source = "registry+https://github.com/rust-lang/crates.io-index" 1522 - checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 1523 dependencies = [ 1524 "bytes", 1525 "fnv", 1526 - "itoa 1.0.11", 1527 ] 1528 1529 [[package]] ··· 1538 1539 [[package]] 1540 name = "http-body-util" 1541 - version = "0.1.2" 1542 source = "registry+https://github.com/rust-lang/crates.io-index" 1543 - checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 1544 dependencies = [ 1545 "bytes", 1546 - "futures-util", 1547 "http", 1548 "http-body", 1549 "pin-project-lite", ··· 1551 1552 [[package]] 1553 name = "httparse" 1554 - version = "1.9.5" 1555 source = "registry+https://github.com/rust-lang/crates.io-index" 1556 - checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 1557 1558 [[package]] 1559 name = "hyper" 1560 - version = "1.5.0" 1561 source = "registry+https://github.com/rust-lang/crates.io-index" 1562 - checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" 1563 dependencies = [ 1564 "bytes", 1565 "futures-channel", 1566 - "futures-util", 1567 "h2", 1568 "http", 1569 "http-body", 1570 "httparse", 1571 - "itoa 1.0.11", 1572 "pin-project-lite", 1573 "smallvec", 1574 "tokio", 1575 "want", ··· 1577 1578 [[package]] 1579 name = "hyper-rustls" 1580 - version = "0.27.3" 1581 source = "registry+https://github.com/rust-lang/crates.io-index" 1582 - checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" 1583 dependencies = [ 1584 - "futures-util", 1585 "http", 1586 "hyper", 1587 "hyper-util", ··· 1611 1612 [[package]] 1613 name = "hyper-util" 1614 - version = "0.1.9" 1615 source = "registry+https://github.com/rust-lang/crates.io-index" 1616 - checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" 1617 dependencies = [ 1618 "bytes", 1619 "futures-channel", 1620 "futures-util", 1621 "http", 1622 "http-body", 1623 "hyper", 1624 "pin-project-lite", 1625 "socket2", 1626 "tokio", 1627 "tower-service", 1628 "tracing", 1629 ] 1630 1631 [[package]] 1632 name = "iana-time-zone" 1633 - version = "0.1.61" 1634 source = "registry+https://github.com/rust-lang/crates.io-index" 1635 - checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1636 dependencies = [ 1637 "android_system_properties", 1638 "core-foundation-sys", 1639 "iana-time-zone-haiku", 1640 "js-sys", 1641 "wasm-bindgen", 1642 - "windows-core 0.52.0", 1643 ] 1644 1645 [[package]] ··· 1653 1654 [[package]] 1655 name = "ico" 1656 - version = "0.3.0" 1657 source = "registry+https://github.com/rust-lang/crates.io-index" 1658 - checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" 1659 dependencies = [ 1660 "byteorder", 1661 - "png", 1662 ] 1663 1664 [[package]] ··· 1669 1670 [[package]] 1671 name = "idna" 1672 - version = "0.3.0" 1673 source = "registry+https://github.com/rust-lang/crates.io-index" 1674 - checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 1675 dependencies = [ 1676 - "unicode-bidi", 1677 - "unicode-normalization", 1678 ] 1679 1680 [[package]] 1681 - name = "idna" 1682 - version = "0.5.0" 1683 source = "registry+https://github.com/rust-lang/crates.io-index" 1684 - checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1685 dependencies = [ 1686 - "unicode-bidi", 1687 - "unicode-normalization", 1688 ] 1689 1690 [[package]] 1691 name = "image" 1692 - version = "0.25.3" 1693 source = "registry+https://github.com/rust-lang/crates.io-index" 1694 - checksum = "d97eb9a8e0cd5b76afea91d7eecd5cf8338cd44ced04256cf1f800474b227c52" 1695 dependencies = [ 1696 "bytemuck", 1697 "byteorder-lite", ··· 1699 "exr", 1700 "gif", 1701 "image-webp", 1702 "num-traits", 1703 - "png", 1704 "qoi", 1705 "ravif", 1706 "rayon", ··· 1712 1713 [[package]] 1714 name = "image-webp" 1715 - version = "0.2.0" 1716 source = "registry+https://github.com/rust-lang/crates.io-index" 1717 - checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" 1718 dependencies = [ 1719 "byteorder-lite", 1720 "quick-error", ··· 1722 1723 [[package]] 1724 name = "imgref" 1725 - version = "1.11.0" 1726 source = "registry+https://github.com/rust-lang/crates.io-index" 1727 - checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 1728 1729 [[package]] 1730 name = "indexmap" ··· 1739 1740 [[package]] 1741 name = "indexmap" 1742 - version = "2.6.0" 1743 source = "registry+https://github.com/rust-lang/crates.io-index" 1744 - checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" 1745 dependencies = [ 1746 "equivalent", 1747 - "hashbrown 0.15.0", 1748 "serde", 1749 - ] 1750 - 1751 - [[package]] 1752 - name = "infer" 1753 - version = "0.13.0" 1754 - source = "registry+https://github.com/rust-lang/crates.io-index" 1755 - checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" 1756 - dependencies = [ 1757 - "cfb", 1758 ] 1759 1760 [[package]] 1761 name = "infer" 1762 - version = "0.16.0" 1763 source = "registry+https://github.com/rust-lang/crates.io-index" 1764 - checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" 1765 dependencies = [ 1766 "cfb", 1767 ] 1768 1769 [[package]] 1770 name = "inotify" 1771 - version = "0.9.6" 1772 source = "registry+https://github.com/rust-lang/crates.io-index" 1773 - checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" 1774 dependencies = [ 1775 - "bitflags 1.3.2", 1776 "inotify-sys", 1777 "libc", 1778 ] ··· 1787 ] 1788 1789 [[package]] 1790 - name = "instant" 1791 - version = "0.1.13" 1792 - source = "registry+https://github.com/rust-lang/crates.io-index" 1793 - checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1794 - dependencies = [ 1795 - "cfg-if", 1796 - ] 1797 - 1798 - [[package]] 1799 name = "interpolate_name" 1800 version = "0.2.4" 1801 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1803 dependencies = [ 1804 "proc-macro2", 1805 "quote", 1806 - "syn 2.0.79", 1807 ] 1808 1809 [[package]] 1810 - name = "interprocess" 1811 - version = "1.2.1" 1812 source = "registry+https://github.com/rust-lang/crates.io-index" 1813 - checksum = "81f2533f3be42fffe3b5e63b71aeca416c1c3bc33e4e27be018521e76b1f38fb" 1814 - dependencies = [ 1815 - "cfg-if", 1816 - "libc", 1817 - "rustc_version", 1818 - "to_method", 1819 - "winapi", 1820 - ] 1821 1822 [[package]] 1823 - name = "ipnet" 1824 - version = "2.10.1" 1825 source = "registry+https://github.com/rust-lang/crates.io-index" 1826 - checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" 1827 1828 [[package]] 1829 name = "is-docker" ··· 1855 1856 [[package]] 1857 name = "itoa" 1858 - version = "0.4.8" 1859 - source = "registry+https://github.com/rust-lang/crates.io-index" 1860 - checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 1861 - 1862 - [[package]] 1863 - name = "itoa" 1864 - version = "1.0.11" 1865 source = "registry+https://github.com/rust-lang/crates.io-index" 1866 - checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1867 1868 [[package]] 1869 name = "javascriptcore-rs" ··· 1899 "combine", 1900 "jni-sys", 1901 "log", 1902 - "thiserror", 1903 "walkdir", 1904 "windows-sys 0.45.0", 1905 ] ··· 1912 1913 [[package]] 1914 name = "jobserver" 1915 - version = "0.1.32" 1916 source = "registry+https://github.com/rust-lang/crates.io-index" 1917 - checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1918 dependencies = [ 1919 "libc", 1920 ] 1921 1922 [[package]] 1923 - name = "jpeg-decoder" 1924 - version = "0.3.1" 1925 - source = "registry+https://github.com/rust-lang/crates.io-index" 1926 - checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" 1927 - 1928 - [[package]] 1929 name = "js-sys" 1930 - version = "0.3.72" 1931 source = "registry+https://github.com/rust-lang/crates.io-index" 1932 - checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" 1933 dependencies = [ 1934 "wasm-bindgen", 1935 ] 1936 1937 [[package]] 1938 name = "json-patch" 1939 - version = "2.0.0" 1940 source = "registry+https://github.com/rust-lang/crates.io-index" 1941 - checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" 1942 dependencies = [ 1943 "jsonptr", 1944 "serde", 1945 "serde_json", 1946 - "thiserror", 1947 ] 1948 1949 [[package]] 1950 name = "jsonptr" 1951 - version = "0.4.7" 1952 source = "registry+https://github.com/rust-lang/crates.io-index" 1953 - checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" 1954 dependencies = [ 1955 - "fluent-uri", 1956 "serde", 1957 "serde_json", 1958 ] ··· 1963 source = "registry+https://github.com/rust-lang/crates.io-index" 1964 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 1965 dependencies = [ 1966 - "bitflags 2.6.0", 1967 "serde", 1968 "unicode-segmentation", 1969 ] 1970 1971 [[package]] 1972 name = "kqueue" 1973 - version = "1.0.8" 1974 source = "registry+https://github.com/rust-lang/crates.io-index" 1975 - checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" 1976 dependencies = [ 1977 "kqueue-sys", 1978 "libc", ··· 1990 1991 [[package]] 1992 name = "kuchikiki" 1993 - version = "0.8.2" 1994 source = "registry+https://github.com/rust-lang/crates.io-index" 1995 - checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" 1996 dependencies = [ 1997 "cssparser", 1998 "html5ever", 1999 - "indexmap 1.9.3", 2000 - "matches", 2001 "selectors", 2002 ] 2003 ··· 2009 2010 [[package]] 2011 name = "lebe" 2012 - version = "0.5.2" 2013 source = "registry+https://github.com/rust-lang/crates.io-index" 2014 - checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 2015 2016 [[package]] 2017 name = "libappindicator" ··· 2039 2040 [[package]] 2041 name = "libc" 2042 - version = "0.2.159" 2043 source = "registry+https://github.com/rust-lang/crates.io-index" 2044 - checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" 2045 2046 [[package]] 2047 name = "libfuzzer-sys" 2048 - version = "0.4.7" 2049 source = "registry+https://github.com/rust-lang/crates.io-index" 2050 - checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" 2051 dependencies = [ 2052 "arbitrary", 2053 "cc", 2054 - "once_cell", 2055 ] 2056 2057 [[package]] ··· 2066 2067 [[package]] 2068 name = "libredox" 2069 - version = "0.1.3" 2070 source = "registry+https://github.com/rust-lang/crates.io-index" 2071 - checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 2072 dependencies = [ 2073 - "bitflags 2.6.0", 2074 "libc", 2075 - "redox_syscall", 2076 ] 2077 2078 [[package]] 2079 name = "linux-raw-sys" 2080 - version = "0.4.14" 2081 source = "registry+https://github.com/rust-lang/crates.io-index" 2082 - checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 2083 2084 [[package]] 2085 name = "litrs" 2086 - version = "0.4.1" 2087 source = "registry+https://github.com/rust-lang/crates.io-index" 2088 - checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 2089 2090 [[package]] 2091 name = "lock_api" 2092 - version = "0.4.12" 2093 source = "registry+https://github.com/rust-lang/crates.io-index" 2094 - checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 2095 dependencies = [ 2096 - "autocfg", 2097 "scopeguard", 2098 ] 2099 2100 [[package]] 2101 name = "log" 2102 - version = "0.4.22" 2103 source = "registry+https://github.com/rust-lang/crates.io-index" 2104 - checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 2105 2106 [[package]] 2107 name = "loop9" ··· 2113 ] 2114 2115 [[package]] 2116 name = "mac" 2117 version = "0.1.1" 2118 source = "registry+https://github.com/rust-lang/crates.io-index" 2119 checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2120 2121 [[package]] 2122 - name = "malloc_buf" 2123 - version = "0.0.6" 2124 source = "registry+https://github.com/rust-lang/crates.io-index" 2125 - checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2126 dependencies = [ 2127 - "libc", 2128 ] 2129 2130 [[package]] 2131 - name = "markup5ever" 2132 - version = "0.11.0" 2133 source = "registry+https://github.com/rust-lang/crates.io-index" 2134 - checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" 2135 dependencies = [ 2136 - "log", 2137 - "phf 0.10.1", 2138 - "phf_codegen 0.10.0", 2139 - "string_cache", 2140 - "string_cache_codegen", 2141 - "tendril", 2142 ] 2143 2144 [[package]] ··· 2154 checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 2155 dependencies = [ 2156 "cfg-if", 2157 ] 2158 2159 [[package]] 2160 name = "memchr" 2161 - version = "2.7.4" 2162 source = "registry+https://github.com/rust-lang/crates.io-index" 2163 - checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 2164 2165 [[package]] 2166 name = "memoffset" ··· 2178 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2179 2180 [[package]] 2181 - name = "minimal-lexical" 2182 - version = "0.2.1" 2183 - source = "registry+https://github.com/rust-lang/crates.io-index" 2184 - checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2185 - 2186 - [[package]] 2187 name = "miniz_oxide" 2188 - version = "0.7.4" 2189 - source = "registry+https://github.com/rust-lang/crates.io-index" 2190 - checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 2191 - dependencies = [ 2192 - "adler", 2193 - ] 2194 - 2195 - [[package]] 2196 - name = "miniz_oxide" 2197 - version = "0.8.0" 2198 source = "registry+https://github.com/rust-lang/crates.io-index" 2199 - checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 2200 dependencies = [ 2201 "adler2", 2202 "simd-adler32", ··· 2204 2205 [[package]] 2206 name = "mio" 2207 - version = "0.8.11" 2208 source = "registry+https://github.com/rust-lang/crates.io-index" 2209 - checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 2210 dependencies = [ 2211 "libc", 2212 "log", 2213 - "wasi 0.11.0+wasi-snapshot-preview1", 2214 - "windows-sys 0.48.0", 2215 ] 2216 2217 [[package]] 2218 - name = "mio" 2219 - version = "1.0.2" 2220 source = "registry+https://github.com/rust-lang/crates.io-index" 2221 - checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 2222 dependencies = [ 2223 - "hermit-abi", 2224 - "libc", 2225 - "wasi 0.11.0+wasi-snapshot-preview1", 2226 - "windows-sys 0.52.0", 2227 ] 2228 2229 [[package]] ··· 2239 2240 [[package]] 2241 name = "muda" 2242 - version = "0.15.1" 2243 source = "registry+https://github.com/rust-lang/crates.io-index" 2244 - checksum = "b8123dfd4996055ac9b15a60ad263b44b01e539007523ad7a4a533a3d93b0591" 2245 dependencies = [ 2246 "crossbeam-channel", 2247 "dpi", 2248 "gtk", 2249 "keyboard-types", 2250 - "objc2 0.5.2", 2251 "objc2-app-kit", 2252 - "objc2-foundation", 2253 "once_cell", 2254 - "png", 2255 "serde", 2256 - "thiserror", 2257 - "windows-sys 0.59.0", 2258 ] 2259 2260 [[package]] 2261 name = "native-tls" 2262 - version = "0.2.12" 2263 source = "registry+https://github.com/rust-lang/crates.io-index" 2264 - checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 2265 dependencies = [ 2266 "libc", 2267 "log", ··· 2280 source = "registry+https://github.com/rust-lang/crates.io-index" 2281 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2282 dependencies = [ 2283 - "bitflags 2.6.0", 2284 "jni-sys", 2285 "log", 2286 "ndk-sys", 2287 "num_enum", 2288 "raw-window-handle", 2289 - "thiserror", 2290 ] 2291 2292 [[package]] ··· 2311 checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2312 2313 [[package]] 2314 name = "nodrop" 2315 version = "0.1.14" 2316 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2318 2319 [[package]] 2320 name = "nom" 2321 - version = "7.1.3" 2322 source = "registry+https://github.com/rust-lang/crates.io-index" 2323 - checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2324 dependencies = [ 2325 "memchr", 2326 - "minimal-lexical", 2327 ] 2328 2329 [[package]] ··· 2334 2335 [[package]] 2336 name = "notify" 2337 - version = "6.1.1" 2338 source = "registry+https://github.com/rust-lang/crates.io-index" 2339 - checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" 2340 dependencies = [ 2341 - "bitflags 2.6.0", 2342 - "crossbeam-channel", 2343 - "filetime", 2344 "fsevent-sys", 2345 "inotify", 2346 "kqueue", 2347 "libc", 2348 "log", 2349 - "mio 0.8.11", 2350 "walkdir", 2351 - "windows-sys 0.48.0", 2352 ] 2353 2354 [[package]] 2355 name = "num-bigint" 2356 version = "0.4.6" 2357 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2375 dependencies = [ 2376 "proc-macro2", 2377 "quote", 2378 - "syn 2.0.79", 2379 ] 2380 2381 [[package]] ··· 2409 2410 [[package]] 2411 name = "num_enum" 2412 - version = "0.7.3" 2413 source = "registry+https://github.com/rust-lang/crates.io-index" 2414 - checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 2415 dependencies = [ 2416 "num_enum_derive", 2417 ] 2418 2419 [[package]] 2420 name = "num_enum_derive" 2421 - version = "0.7.3" 2422 source = "registry+https://github.com/rust-lang/crates.io-index" 2423 - checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 2424 dependencies = [ 2425 - "proc-macro-crate 2.0.2", 2426 "proc-macro2", 2427 "quote", 2428 - "syn 2.0.79", 2429 - ] 2430 - 2431 - [[package]] 2432 - name = "objc" 2433 - version = "0.2.7" 2434 - source = "registry+https://github.com/rust-lang/crates.io-index" 2435 - checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2436 - dependencies = [ 2437 - "malloc_buf", 2438 ] 2439 2440 [[package]] ··· 2442 version = "0.3.5" 2443 source = "registry+https://github.com/rust-lang/crates.io-index" 2444 checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 2445 - dependencies = [ 2446 - "cc", 2447 - ] 2448 2449 [[package]] 2450 name = "objc2" 2451 - version = "0.4.1" 2452 source = "registry+https://github.com/rust-lang/crates.io-index" 2453 - checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" 2454 dependencies = [ 2455 "objc-sys", 2456 - "objc2-encode 3.0.0", 2457 ] 2458 2459 [[package]] 2460 name = "objc2" 2461 - version = "0.5.2" 2462 source = "registry+https://github.com/rust-lang/crates.io-index" 2463 - checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 2464 dependencies = [ 2465 - "objc-sys", 2466 - "objc2-encode 4.0.3", 2467 ] 2468 2469 [[package]] 2470 name = "objc2-app-kit" 2471 - version = "0.2.2" 2472 source = "registry+https://github.com/rust-lang/crates.io-index" 2473 - checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 2474 dependencies = [ 2475 - "bitflags 2.6.0", 2476 - "block2", 2477 "libc", 2478 - "objc2 0.5.2", 2479 "objc2-core-data", 2480 "objc2-core-image", 2481 - "objc2-foundation", 2482 - "objc2-quartz-core", 2483 ] 2484 2485 [[package]] 2486 name = "objc2-cloud-kit" 2487 - version = "0.2.2" 2488 source = "registry+https://github.com/rust-lang/crates.io-index" 2489 - checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 2490 dependencies = [ 2491 - "bitflags 2.6.0", 2492 - "block2", 2493 - "objc2 0.5.2", 2494 - "objc2-core-location", 2495 - "objc2-foundation", 2496 ] 2497 2498 [[package]] 2499 - name = "objc2-contacts" 2500 - version = "0.2.2" 2501 source = "registry+https://github.com/rust-lang/crates.io-index" 2502 - checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 2503 dependencies = [ 2504 - "block2", 2505 - "objc2 0.5.2", 2506 - "objc2-foundation", 2507 ] 2508 2509 [[package]] 2510 - name = "objc2-core-data" 2511 - version = "0.2.2" 2512 source = "registry+https://github.com/rust-lang/crates.io-index" 2513 - checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 2514 dependencies = [ 2515 - "bitflags 2.6.0", 2516 - "block2", 2517 - "objc2 0.5.2", 2518 - "objc2-foundation", 2519 ] 2520 2521 [[package]] 2522 name = "objc2-core-image" 2523 - version = "0.2.2" 2524 source = "registry+https://github.com/rust-lang/crates.io-index" 2525 - checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 2526 dependencies = [ 2527 - "block2", 2528 - "objc2 0.5.2", 2529 - "objc2-foundation", 2530 - "objc2-metal", 2531 ] 2532 2533 [[package]] 2534 - name = "objc2-core-location" 2535 - version = "0.2.2" 2536 source = "registry+https://github.com/rust-lang/crates.io-index" 2537 - checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 2538 dependencies = [ 2539 - "block2", 2540 - "objc2 0.5.2", 2541 - "objc2-contacts", 2542 - "objc2-foundation", 2543 ] 2544 2545 [[package]] 2546 name = "objc2-encode" 2547 - version = "3.0.0" 2548 source = "registry+https://github.com/rust-lang/crates.io-index" 2549 - checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" 2550 2551 [[package]] 2552 - name = "objc2-encode" 2553 - version = "4.0.3" 2554 source = "registry+https://github.com/rust-lang/crates.io-index" 2555 - checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" 2556 2557 [[package]] 2558 name = "objc2-foundation" ··· 2560 source = "registry+https://github.com/rust-lang/crates.io-index" 2561 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2562 dependencies = [ 2563 - "bitflags 2.6.0", 2564 - "block2", 2565 "libc", 2566 "objc2 0.5.2", 2567 ] 2568 2569 [[package]] 2570 - name = "objc2-link-presentation" 2571 - version = "0.2.2" 2572 source = "registry+https://github.com/rust-lang/crates.io-index" 2573 - checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 2574 dependencies = [ 2575 - "block2", 2576 - "objc2 0.5.2", 2577 - "objc2-app-kit", 2578 - "objc2-foundation", 2579 ] 2580 2581 [[package]] 2582 - name = "objc2-metal" 2583 - version = "0.2.2" 2584 source = "registry+https://github.com/rust-lang/crates.io-index" 2585 - checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2586 dependencies = [ 2587 - "bitflags 2.6.0", 2588 - "block2", 2589 - "objc2 0.5.2", 2590 - "objc2-foundation", 2591 ] 2592 2593 [[package]] 2594 - name = "objc2-quartz-core" 2595 - version = "0.2.2" 2596 source = "registry+https://github.com/rust-lang/crates.io-index" 2597 - checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2598 dependencies = [ 2599 - "bitflags 2.6.0", 2600 - "block2", 2601 - "objc2 0.5.2", 2602 - "objc2-foundation", 2603 - "objc2-metal", 2604 ] 2605 2606 [[package]] 2607 - name = "objc2-symbols" 2608 version = "0.2.2" 2609 source = "registry+https://github.com/rust-lang/crates.io-index" 2610 - checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2611 dependencies = [ 2612 "objc2 0.5.2", 2613 - "objc2-foundation", 2614 ] 2615 2616 [[package]] 2617 - name = "objc2-ui-kit" 2618 version = "0.2.2" 2619 source = "registry+https://github.com/rust-lang/crates.io-index" 2620 - checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2621 dependencies = [ 2622 - "bitflags 2.6.0", 2623 - "block2", 2624 "objc2 0.5.2", 2625 - "objc2-cloud-kit", 2626 - "objc2-core-data", 2627 - "objc2-core-image", 2628 - "objc2-core-location", 2629 - "objc2-foundation", 2630 - "objc2-link-presentation", 2631 - "objc2-quartz-core", 2632 - "objc2-symbols", 2633 - "objc2-uniform-type-identifiers", 2634 - "objc2-user-notifications", 2635 ] 2636 2637 [[package]] 2638 - name = "objc2-uniform-type-identifiers" 2639 - version = "0.2.2" 2640 source = "registry+https://github.com/rust-lang/crates.io-index" 2641 - checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2642 dependencies = [ 2643 - "block2", 2644 - "objc2 0.5.2", 2645 - "objc2-foundation", 2646 ] 2647 2648 [[package]] 2649 - name = "objc2-user-notifications" 2650 - version = "0.2.2" 2651 source = "registry+https://github.com/rust-lang/crates.io-index" 2652 - checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2653 dependencies = [ 2654 - "bitflags 2.6.0", 2655 - "block2", 2656 - "objc2 0.5.2", 2657 - "objc2-core-location", 2658 - "objc2-foundation", 2659 ] 2660 2661 [[package]] 2662 - name = "objc2-web-kit" 2663 - version = "0.2.2" 2664 source = "registry+https://github.com/rust-lang/crates.io-index" 2665 - checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" 2666 dependencies = [ 2667 - "bitflags 2.6.0", 2668 - "block2", 2669 - "objc2 0.5.2", 2670 - "objc2-app-kit", 2671 - "objc2-foundation", 2672 ] 2673 2674 [[package]] 2675 - name = "object" 2676 - version = "0.36.5" 2677 source = "registry+https://github.com/rust-lang/crates.io-index" 2678 - checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 2679 dependencies = [ 2680 - "memchr", 2681 ] 2682 2683 [[package]] 2684 name = "once_cell" 2685 - version = "1.20.2" 2686 source = "registry+https://github.com/rust-lang/crates.io-index" 2687 - checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 2688 2689 [[package]] 2690 name = "open" 2691 - version = "5.3.0" 2692 source = "registry+https://github.com/rust-lang/crates.io-index" 2693 - checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" 2694 dependencies = [ 2695 "is-wsl", 2696 "libc", 2697 "pathdiff", ··· 2699 2700 [[package]] 2701 name = "openssl" 2702 - version = "0.10.67" 2703 source = "registry+https://github.com/rust-lang/crates.io-index" 2704 - checksum = "7b8cefcf97f41316955f9294cd61f639bdcfa9f2f230faac6cb896aa8ab64704" 2705 dependencies = [ 2706 - "bitflags 2.6.0", 2707 "cfg-if", 2708 "foreign-types 0.3.2", 2709 "libc", ··· 2720 dependencies = [ 2721 "proc-macro2", 2722 "quote", 2723 - "syn 2.0.79", 2724 ] 2725 2726 [[package]] 2727 name = "openssl-probe" 2728 - version = "0.1.5" 2729 source = "registry+https://github.com/rust-lang/crates.io-index" 2730 - checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2731 2732 [[package]] 2733 name = "openssl-sys" 2734 - version = "0.9.104" 2735 source = "registry+https://github.com/rust-lang/crates.io-index" 2736 - checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" 2737 dependencies = [ 2738 "cc", 2739 "libc", ··· 2748 checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2749 2750 [[package]] 2751 name = "os_pipe" 2752 - version = "1.2.1" 2753 source = "registry+https://github.com/rust-lang/crates.io-index" 2754 - checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" 2755 dependencies = [ 2756 "libc", 2757 - "windows-sys 0.59.0", 2758 ] 2759 2760 [[package]] ··· 2783 ] 2784 2785 [[package]] 2786 name = "parking_lot" 2787 - version = "0.12.3" 2788 source = "registry+https://github.com/rust-lang/crates.io-index" 2789 - checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2790 dependencies = [ 2791 "lock_api", 2792 "parking_lot_core", ··· 2794 2795 [[package]] 2796 name = "parking_lot_core" 2797 - version = "0.9.10" 2798 source = "registry+https://github.com/rust-lang/crates.io-index" 2799 - checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2800 dependencies = [ 2801 "cfg-if", 2802 "libc", 2803 "redox_syscall", 2804 "smallvec", 2805 - "windows-targets 0.52.6", 2806 ] 2807 2808 [[package]] ··· 2813 2814 [[package]] 2815 name = "pathdiff" 2816 - version = "0.2.2" 2817 source = "registry+https://github.com/rust-lang/crates.io-index" 2818 - checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" 2819 2820 [[package]] 2821 name = "percent-encoding" 2822 - version = "2.3.1" 2823 source = "registry+https://github.com/rust-lang/crates.io-index" 2824 - checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2825 2826 [[package]] 2827 name = "phf" ··· 2829 source = "registry+https://github.com/rust-lang/crates.io-index" 2830 checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 2831 dependencies = [ 2832 - "phf_macros 0.8.0", 2833 "phf_shared 0.8.0", 2834 - "proc-macro-hack", 2835 ] 2836 2837 [[package]] ··· 2840 source = "registry+https://github.com/rust-lang/crates.io-index" 2841 checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" 2842 dependencies = [ 2843 "phf_shared 0.10.0", 2844 ] 2845 2846 [[package]] 2847 name = "phf" 2848 - version = "0.11.2" 2849 source = "registry+https://github.com/rust-lang/crates.io-index" 2850 - checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 2851 dependencies = [ 2852 - "phf_macros 0.11.2", 2853 - "phf_shared 0.11.2", 2854 ] 2855 2856 [[package]] ··· 2865 2866 [[package]] 2867 name = "phf_codegen" 2868 - version = "0.10.0" 2869 source = "registry+https://github.com/rust-lang/crates.io-index" 2870 - checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" 2871 dependencies = [ 2872 - "phf_generator 0.10.0", 2873 - "phf_shared 0.10.0", 2874 ] 2875 2876 [[package]] ··· 2895 2896 [[package]] 2897 name = "phf_generator" 2898 - version = "0.11.2" 2899 source = "registry+https://github.com/rust-lang/crates.io-index" 2900 - checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 2901 dependencies = [ 2902 - "phf_shared 0.11.2", 2903 "rand 0.8.5", 2904 ] 2905 2906 [[package]] 2907 name = "phf_macros" 2908 - version = "0.8.0" 2909 source = "registry+https://github.com/rust-lang/crates.io-index" 2910 - checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 2911 dependencies = [ 2912 - "phf_generator 0.8.0", 2913 - "phf_shared 0.8.0", 2914 "proc-macro-hack", 2915 "proc-macro2", 2916 "quote", ··· 2919 2920 [[package]] 2921 name = "phf_macros" 2922 - version = "0.11.2" 2923 source = "registry+https://github.com/rust-lang/crates.io-index" 2924 - checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" 2925 dependencies = [ 2926 - "phf_generator 0.11.2", 2927 - "phf_shared 0.11.2", 2928 "proc-macro2", 2929 "quote", 2930 - "syn 2.0.79", 2931 ] 2932 2933 [[package]] ··· 2936 source = "registry+https://github.com/rust-lang/crates.io-index" 2937 checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 2938 dependencies = [ 2939 - "siphasher", 2940 ] 2941 2942 [[package]] ··· 2945 source = "registry+https://github.com/rust-lang/crates.io-index" 2946 checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 2947 dependencies = [ 2948 - "siphasher", 2949 ] 2950 2951 [[package]] 2952 name = "phf_shared" 2953 - version = "0.11.2" 2954 source = "registry+https://github.com/rust-lang/crates.io-index" 2955 - checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 2956 dependencies = [ 2957 - "siphasher", 2958 ] 2959 2960 [[package]] 2961 name = "pin-project-lite" 2962 - version = "0.2.14" 2963 source = "registry+https://github.com/rust-lang/crates.io-index" 2964 - checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 2965 2966 [[package]] 2967 name = "pin-utils" ··· 2970 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2971 2972 [[package]] 2973 name = "pkg-config" 2974 - version = "0.3.31" 2975 source = "registry+https://github.com/rust-lang/crates.io-index" 2976 - checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 2977 2978 [[package]] 2979 name = "plist" 2980 - version = "1.7.0" 2981 source = "registry+https://github.com/rust-lang/crates.io-index" 2982 - checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" 2983 dependencies = [ 2984 "base64 0.22.1", 2985 - "indexmap 2.6.0", 2986 "quick-xml", 2987 "serde", 2988 "time", ··· 2990 2991 [[package]] 2992 name = "png" 2993 - version = "0.17.14" 2994 source = "registry+https://github.com/rust-lang/crates.io-index" 2995 - checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" 2996 dependencies = [ 2997 "bitflags 1.3.2", 2998 "crc32fast", 2999 "fdeflate", 3000 "flate2", 3001 - "miniz_oxide 0.8.0", 3002 ] 3003 3004 [[package]] ··· 3009 3010 [[package]] 3011 name = "ppv-lite86" 3012 - version = "0.2.20" 3013 source = "registry+https://github.com/rust-lang/crates.io-index" 3014 - checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 3015 dependencies = [ 3016 "zerocopy", 3017 ] ··· 3038 source = "registry+https://github.com/rust-lang/crates.io-index" 3039 checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" 3040 dependencies = [ 3041 - "toml_datetime", 3042 "toml_edit 0.20.2", 3043 ] 3044 3045 [[package]] 3046 name = "proc-macro-error" 3047 version = "1.0.4" 3048 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3074 3075 [[package]] 3076 name = "proc-macro2" 3077 - version = "1.0.88" 3078 source = "registry+https://github.com/rust-lang/crates.io-index" 3079 - checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" 3080 dependencies = [ 3081 "unicode-ident", 3082 ] 3083 3084 [[package]] 3085 name = "profiling" 3086 - version = "1.0.16" 3087 source = "registry+https://github.com/rust-lang/crates.io-index" 3088 - checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" 3089 dependencies = [ 3090 "profiling-procmacros", 3091 ] 3092 3093 [[package]] 3094 name = "profiling-procmacros" 3095 - version = "1.0.16" 3096 source = "registry+https://github.com/rust-lang/crates.io-index" 3097 - checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" 3098 dependencies = [ 3099 "quote", 3100 - "syn 2.0.79", 3101 ] 3102 3103 [[package]] ··· 3108 3109 [[package]] 3110 name = "publicsuffix" 3111 - version = "2.2.3" 3112 source = "registry+https://github.com/rust-lang/crates.io-index" 3113 - checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" 3114 dependencies = [ 3115 - "idna 0.3.0", 3116 "psl-types", 3117 ] 3118 3119 [[package]] 3120 name = "qoi" 3121 version = "0.4.1" 3122 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3133 3134 [[package]] 3135 name = "quick-xml" 3136 - version = "0.32.0" 3137 source = "registry+https://github.com/rust-lang/crates.io-index" 3138 - checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" 3139 dependencies = [ 3140 "memchr", 3141 ] 3142 3143 [[package]] 3144 name = "quinn" 3145 - version = "0.11.5" 3146 source = "registry+https://github.com/rust-lang/crates.io-index" 3147 - checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" 3148 dependencies = [ 3149 "bytes", 3150 "pin-project-lite", 3151 "quinn-proto", 3152 "quinn-udp", 3153 "rustc-hash", 3154 "rustls", 3155 "socket2", 3156 - "thiserror", 3157 "tokio", 3158 "tracing", 3159 ] 3160 3161 [[package]] 3162 name = "quinn-proto" 3163 - version = "0.11.8" 3164 source = "registry+https://github.com/rust-lang/crates.io-index" 3165 - checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" 3166 dependencies = [ 3167 "bytes", 3168 - "rand 0.8.5", 3169 "ring", 3170 "rustc-hash", 3171 "rustls", 3172 "slab", 3173 - "thiserror", 3174 "tinyvec", 3175 "tracing", 3176 ] 3177 3178 [[package]] 3179 name = "quinn-udp" 3180 - version = "0.5.5" 3181 source = "registry+https://github.com/rust-lang/crates.io-index" 3182 - checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" 3183 dependencies = [ 3184 "libc", 3185 "once_cell", 3186 "socket2", 3187 "tracing", 3188 - "windows-sys 0.59.0", 3189 ] 3190 3191 [[package]] 3192 name = "quote" 3193 - version = "1.0.37" 3194 source = "registry+https://github.com/rust-lang/crates.io-index" 3195 - checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 3196 dependencies = [ 3197 "proc-macro2", 3198 ] 3199 3200 [[package]] 3201 name = "rand" 3202 version = "0.7.3" 3203 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3223 ] 3224 3225 [[package]] 3226 name = "rand_chacha" 3227 version = "0.2.2" 3228 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3243 ] 3244 3245 [[package]] 3246 name = "rand_core" 3247 version = "0.5.1" 3248 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3257 source = "registry+https://github.com/rust-lang/crates.io-index" 3258 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 3259 dependencies = [ 3260 - "getrandom 0.2.15", 3261 ] 3262 3263 [[package]] ··· 3308 "rand_chacha 0.3.1", 3309 "simd_helpers", 3310 "system-deps", 3311 - "thiserror", 3312 "v_frame", 3313 "wasm-bindgen", 3314 ] 3315 3316 [[package]] 3317 name = "ravif" 3318 - version = "0.11.10" 3319 source = "registry+https://github.com/rust-lang/crates.io-index" 3320 - checksum = "a8f0bfd976333248de2078d350bfdf182ff96e168a24d23d2436cef320dd4bdd" 3321 dependencies = [ 3322 "avif-serialize", 3323 "imgref", 3324 "loop9", 3325 "quick-error", 3326 "rav1e", 3327 "rgb", 3328 ] 3329 ··· 3335 3336 [[package]] 3337 name = "rayon" 3338 - version = "1.10.0" 3339 source = "registry+https://github.com/rust-lang/crates.io-index" 3340 - checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 3341 dependencies = [ 3342 "either", 3343 "rayon-core", ··· 3345 3346 [[package]] 3347 name = "rayon-core" 3348 - version = "1.12.1" 3349 source = "registry+https://github.com/rust-lang/crates.io-index" 3350 - checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 3351 dependencies = [ 3352 "crossbeam-deque", 3353 "crossbeam-utils", ··· 3355 3356 [[package]] 3357 name = "redox_syscall" 3358 - version = "0.5.7" 3359 source = "registry+https://github.com/rust-lang/crates.io-index" 3360 - checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" 3361 dependencies = [ 3362 - "bitflags 2.6.0", 3363 ] 3364 3365 [[package]] 3366 name = "redox_users" 3367 - version = "0.4.6" 3368 source = "registry+https://github.com/rust-lang/crates.io-index" 3369 - checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 3370 dependencies = [ 3371 - "getrandom 0.2.15", 3372 "libredox", 3373 - "thiserror", 3374 ] 3375 3376 [[package]] 3377 name = "regex" 3378 - version = "1.11.0" 3379 source = "registry+https://github.com/rust-lang/crates.io-index" 3380 - checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" 3381 dependencies = [ 3382 "aho-corasick", 3383 "memchr", ··· 3387 3388 [[package]] 3389 name = "regex-automata" 3390 - version = "0.4.8" 3391 source = "registry+https://github.com/rust-lang/crates.io-index" 3392 - checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" 3393 dependencies = [ 3394 "aho-corasick", 3395 "memchr", ··· 3398 3399 [[package]] 3400 name = "regex-syntax" 3401 - version = "0.8.5" 3402 source = "registry+https://github.com/rust-lang/crates.io-index" 3403 - checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 3404 3405 [[package]] 3406 name = "reqwest" 3407 - version = "0.12.8" 3408 source = "registry+https://github.com/rust-lang/crates.io-index" 3409 - checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" 3410 dependencies = [ 3411 "base64 0.22.1", 3412 "bytes", ··· 3424 "hyper-rustls", 3425 "hyper-tls", 3426 "hyper-util", 3427 - "ipnet", 3428 "js-sys", 3429 "log", 3430 "mime", 3431 "native-tls", 3432 - "once_cell", 3433 "percent-encoding", 3434 "pin-project-lite", 3435 "quinn", 3436 "rustls", 3437 - "rustls-pemfile", 3438 "rustls-pki-types", 3439 "serde", 3440 "serde_json", 3441 "serde_urlencoded", 3442 "sync_wrapper", 3443 - "system-configuration", 3444 "tokio", 3445 "tokio-native-tls", 3446 "tokio-rustls", 3447 "tokio-util", 3448 "tower-service", 3449 "url", 3450 "wasm-bindgen", ··· 3452 "wasm-streams", 3453 "web-sys", 3454 "webpki-roots", 3455 - "windows-registry", 3456 ] 3457 3458 [[package]] 3459 name = "rgb" 3460 - version = "0.8.50" 3461 source = "registry+https://github.com/rust-lang/crates.io-index" 3462 - checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" 3463 3464 [[package]] 3465 name = "ring" 3466 - version = "0.17.8" 3467 source = "registry+https://github.com/rust-lang/crates.io-index" 3468 - checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 3469 dependencies = [ 3470 "cc", 3471 "cfg-if", 3472 - "getrandom 0.2.15", 3473 "libc", 3474 - "spin", 3475 "untrusted", 3476 "windows-sys 0.52.0", 3477 ] 3478 3479 [[package]] 3480 - name = "rustc-demangle" 3481 - version = "0.1.24" 3482 source = "registry+https://github.com/rust-lang/crates.io-index" 3483 - checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 3484 3485 [[package]] 3486 name = "rustc-hash" 3487 - version = "2.0.0" 3488 source = "registry+https://github.com/rust-lang/crates.io-index" 3489 - checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" 3490 3491 [[package]] 3492 name = "rustc_version" ··· 3499 3500 [[package]] 3501 name = "rustix" 3502 - version = "0.38.37" 3503 source = "registry+https://github.com/rust-lang/crates.io-index" 3504 - checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" 3505 dependencies = [ 3506 - "bitflags 2.6.0", 3507 "errno", 3508 "libc", 3509 "linux-raw-sys", 3510 - "windows-sys 0.52.0", 3511 ] 3512 3513 [[package]] 3514 name = "rustls" 3515 - version = "0.23.15" 3516 source = "registry+https://github.com/rust-lang/crates.io-index" 3517 - checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" 3518 dependencies = [ 3519 "once_cell", 3520 "ring", ··· 3525 ] 3526 3527 [[package]] 3528 - name = "rustls-pemfile" 3529 - version = "2.2.0" 3530 source = "registry+https://github.com/rust-lang/crates.io-index" 3531 - checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 3532 dependencies = [ 3533 - "rustls-pki-types", 3534 ] 3535 3536 [[package]] 3537 - name = "rustls-pki-types" 3538 - version = "1.10.0" 3539 - source = "registry+https://github.com/rust-lang/crates.io-index" 3540 - checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" 3541 - 3542 - [[package]] 3543 name = "rustls-webpki" 3544 - version = "0.102.8" 3545 source = "registry+https://github.com/rust-lang/crates.io-index" 3546 - checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 3547 dependencies = [ 3548 "ring", 3549 "rustls-pki-types", ··· 3551 ] 3552 3553 [[package]] 3554 name = "ryu" 3555 - version = "1.0.18" 3556 source = "registry+https://github.com/rust-lang/crates.io-index" 3557 - checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 3558 3559 [[package]] 3560 name = "same-file" ··· 3567 3568 [[package]] 3569 name = "schannel" 3570 - version = "0.1.26" 3571 source = "registry+https://github.com/rust-lang/crates.io-index" 3572 - checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" 3573 dependencies = [ 3574 - "windows-sys 0.59.0", 3575 ] 3576 3577 [[package]] 3578 name = "schemars" 3579 - version = "0.8.21" 3580 source = "registry+https://github.com/rust-lang/crates.io-index" 3581 - checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" 3582 dependencies = [ 3583 "dyn-clone", 3584 "indexmap 1.9.3", ··· 3590 ] 3591 3592 [[package]] 3593 name = "schemars_derive" 3594 - version = "0.8.21" 3595 source = "registry+https://github.com/rust-lang/crates.io-index" 3596 - checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" 3597 dependencies = [ 3598 "proc-macro2", 3599 "quote", 3600 "serde_derive_internals", 3601 - "syn 2.0.79", 3602 ] 3603 3604 [[package]] ··· 3613 source = "registry+https://github.com/rust-lang/crates.io-index" 3614 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 3615 dependencies = [ 3616 - "bitflags 2.6.0", 3617 "core-foundation 0.9.4", 3618 "core-foundation-sys", 3619 "libc", ··· 3622 3623 [[package]] 3624 name = "security-framework-sys" 3625 - version = "2.12.0" 3626 source = "registry+https://github.com/rust-lang/crates.io-index" 3627 - checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" 3628 dependencies = [ 3629 "core-foundation-sys", 3630 "libc", ··· 3632 3633 [[package]] 3634 name = "selectors" 3635 - version = "0.22.0" 3636 source = "registry+https://github.com/rust-lang/crates.io-index" 3637 - checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 3638 dependencies = [ 3639 "bitflags 1.3.2", 3640 "cssparser", 3641 "derive_more", 3642 "fxhash", 3643 "log", 3644 - "matches", 3645 "phf 0.8.0", 3646 "phf_codegen 0.8.0", 3647 "precomputed-hash", 3648 "servo_arc", 3649 "smallvec", 3650 - "thin-slice", 3651 ] 3652 3653 [[package]] 3654 name = "semver" 3655 - version = "1.0.23" 3656 source = "registry+https://github.com/rust-lang/crates.io-index" 3657 - checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 3658 dependencies = [ 3659 "serde", 3660 ] 3661 3662 [[package]] 3663 name = "serde" 3664 - version = "1.0.210" 3665 source = "registry+https://github.com/rust-lang/crates.io-index" 3666 - checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" 3667 dependencies = [ 3668 "serde_derive", 3669 ] 3670 3671 [[package]] 3672 name = "serde-untagged" 3673 - version = "0.1.6" 3674 source = "registry+https://github.com/rust-lang/crates.io-index" 3675 - checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" 3676 dependencies = [ 3677 "erased-serde", 3678 "serde", 3679 "typeid", 3680 ] 3681 3682 [[package]] 3683 name = "serde_derive" 3684 - version = "1.0.210" 3685 source = "registry+https://github.com/rust-lang/crates.io-index" 3686 - checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" 3687 dependencies = [ 3688 "proc-macro2", 3689 "quote", 3690 - "syn 2.0.79", 3691 ] 3692 3693 [[package]] ··· 3698 dependencies = [ 3699 "proc-macro2", 3700 "quote", 3701 - "syn 2.0.79", 3702 ] 3703 3704 [[package]] 3705 name = "serde_json" 3706 - version = "1.0.128" 3707 source = "registry+https://github.com/rust-lang/crates.io-index" 3708 - checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" 3709 dependencies = [ 3710 - "itoa 1.0.11", 3711 "memchr", 3712 "ryu", 3713 "serde", 3714 ] 3715 3716 [[package]] 3717 name = "serde_repr" 3718 - version = "0.1.19" 3719 source = "registry+https://github.com/rust-lang/crates.io-index" 3720 - checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" 3721 dependencies = [ 3722 "proc-macro2", 3723 "quote", 3724 - "syn 2.0.79", 3725 ] 3726 3727 [[package]] 3728 name = "serde_spanned" 3729 - version = "0.6.8" 3730 source = "registry+https://github.com/rust-lang/crates.io-index" 3731 - checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 3732 dependencies = [ 3733 "serde", 3734 ] 3735 3736 [[package]] 3737 name = "serde_urlencoded" 3738 version = "0.7.1" 3739 source = "registry+https://github.com/rust-lang/crates.io-index" 3740 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3741 dependencies = [ 3742 "form_urlencoded", 3743 - "itoa 1.0.11", 3744 "ryu", 3745 "serde", 3746 ] 3747 3748 [[package]] 3749 name = "serde_with" 3750 - version = "3.11.0" 3751 source = "registry+https://github.com/rust-lang/crates.io-index" 3752 - checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" 3753 dependencies = [ 3754 "base64 0.22.1", 3755 "chrono", 3756 "hex", 3757 "indexmap 1.9.3", 3758 - "indexmap 2.6.0", 3759 - "serde", 3760 - "serde_derive", 3761 "serde_json", 3762 "serde_with_macros", 3763 "time", ··· 3765 3766 [[package]] 3767 name = "serde_with_macros" 3768 - version = "3.11.0" 3769 source = "registry+https://github.com/rust-lang/crates.io-index" 3770 - checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" 3771 dependencies = [ 3772 "darling", 3773 "proc-macro2", 3774 "quote", 3775 - "syn 2.0.79", 3776 ] 3777 3778 [[package]] 3779 name = "serialize-to-javascript" 3780 - version = "0.1.1" 3781 source = "registry+https://github.com/rust-lang/crates.io-index" 3782 - checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" 3783 dependencies = [ 3784 "serde", 3785 "serde_json", ··· 3788 3789 [[package]] 3790 name = "serialize-to-javascript-impl" 3791 - version = "0.1.1" 3792 source = "registry+https://github.com/rust-lang/crates.io-index" 3793 - checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" 3794 dependencies = [ 3795 "proc-macro2", 3796 "quote", 3797 - "syn 1.0.109", 3798 ] 3799 3800 [[package]] 3801 name = "servo_arc" 3802 - version = "0.1.1" 3803 source = "registry+https://github.com/rust-lang/crates.io-index" 3804 - checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 3805 dependencies = [ 3806 "nodrop", 3807 "stable_deref_trait", ··· 3809 3810 [[package]] 3811 name = "sha2" 3812 - version = "0.10.8" 3813 source = "registry+https://github.com/rust-lang/crates.io-index" 3814 - checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 3815 dependencies = [ 3816 "cfg-if", 3817 "cpufeatures", ··· 3820 3821 [[package]] 3822 name = "shared_child" 3823 - version = "1.0.1" 3824 source = "registry+https://github.com/rust-lang/crates.io-index" 3825 - checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" 3826 dependencies = [ 3827 "libc", 3828 - "windows-sys 0.59.0", 3829 ] 3830 3831 [[package]] ··· 3835 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3836 3837 [[package]] 3838 name = "simd-adler32" 3839 version = "0.3.7" 3840 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3856 checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 3857 3858 [[package]] 3859 name = "slab" 3860 - version = "0.4.9" 3861 source = "registry+https://github.com/rust-lang/crates.io-index" 3862 - checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 3863 - dependencies = [ 3864 - "autocfg", 3865 - ] 3866 3867 [[package]] 3868 name = "smallvec" 3869 - version = "1.13.2" 3870 source = "registry+https://github.com/rust-lang/crates.io-index" 3871 - checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 3872 3873 [[package]] 3874 name = "socket2" 3875 - version = "0.5.7" 3876 source = "registry+https://github.com/rust-lang/crates.io-index" 3877 - checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 3878 dependencies = [ 3879 "libc", 3880 - "windows-sys 0.52.0", 3881 ] 3882 3883 [[package]] ··· 3893 "js-sys", 3894 "log", 3895 "objc2 0.5.2", 3896 - "objc2-foundation", 3897 - "objc2-quartz-core", 3898 "raw-window-handle", 3899 "redox_syscall", 3900 "wasm-bindgen", ··· 3929 ] 3930 3931 [[package]] 3932 - name = "spin" 3933 - version = "0.9.8" 3934 source = "registry+https://github.com/rust-lang/crates.io-index" 3935 - checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3936 - dependencies = [ 3937 - "lock_api", 3938 - ] 3939 3940 [[package]] 3941 - name = "stable_deref_trait" 3942 - version = "1.2.0" 3943 source = "registry+https://github.com/rust-lang/crates.io-index" 3944 - checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3945 3946 [[package]] 3947 name = "string_cache" 3948 - version = "0.8.7" 3949 source = "registry+https://github.com/rust-lang/crates.io-index" 3950 - checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 3951 dependencies = [ 3952 "new_debug_unreachable", 3953 - "once_cell", 3954 "parking_lot", 3955 - "phf_shared 0.10.0", 3956 "precomputed-hash", 3957 "serde", 3958 ] 3959 3960 [[package]] 3961 name = "string_cache_codegen" 3962 - version = "0.5.2" 3963 source = "registry+https://github.com/rust-lang/crates.io-index" 3964 - checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" 3965 dependencies = [ 3966 - "phf_generator 0.10.0", 3967 - "phf_shared 0.10.0", 3968 "proc-macro2", 3969 "quote", 3970 ] ··· 4005 4006 [[package]] 4007 name = "syn" 4008 - version = "2.0.79" 4009 source = "registry+https://github.com/rust-lang/crates.io-index" 4010 - checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" 4011 dependencies = [ 4012 "proc-macro2", 4013 "quote", ··· 4016 4017 [[package]] 4018 name = "sync_wrapper" 4019 - version = "1.0.1" 4020 source = "registry+https://github.com/rust-lang/crates.io-index" 4021 - checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" 4022 dependencies = [ 4023 "futures-core", 4024 ] 4025 4026 [[package]] 4027 name = "system-configuration" 4028 version = "0.6.1" 4029 source = "registry+https://github.com/rust-lang/crates.io-index" 4030 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4031 dependencies = [ 4032 - "bitflags 2.6.0", 4033 "core-foundation 0.9.4", 4034 "system-configuration-sys", 4035 ] ··· 4059 4060 [[package]] 4061 name = "tao" 4062 - version = "0.30.3" 4063 source = "registry+https://github.com/rust-lang/crates.io-index" 4064 - checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751" 4065 dependencies = [ 4066 - "bitflags 2.6.0", 4067 - "cocoa", 4068 - "core-foundation 0.10.0", 4069 "core-graphics", 4070 "crossbeam-channel", 4071 "dispatch", ··· 4074 "gdkwayland-sys", 4075 "gdkx11-sys", 4076 "gtk", 4077 - "instant", 4078 "jni", 4079 "lazy_static", 4080 "libc", ··· 4082 "ndk", 4083 "ndk-context", 4084 "ndk-sys", 4085 - "objc", 4086 "once_cell", 4087 "parking_lot", 4088 "raw-window-handle", ··· 4091 "unicode-segmentation", 4092 "url", 4093 "windows", 4094 - "windows-core 0.58.0", 4095 "windows-version", 4096 "x11-dl", 4097 ] ··· 4104 dependencies = [ 4105 "proc-macro2", 4106 "quote", 4107 - "syn 2.0.79", 4108 ] 4109 4110 [[package]] ··· 4115 4116 [[package]] 4117 name = "tauri" 4118 - version = "2.0.4" 4119 source = "registry+https://github.com/rust-lang/crates.io-index" 4120 - checksum = "44438500b50708bfc1e6083844e135d1b516325aae58710dcd8fb67e050ae87c" 4121 dependencies = [ 4122 "anyhow", 4123 "bytes", 4124 "dirs", 4125 "dunce", 4126 "embed_plist", 4127 - "futures-util", 4128 - "getrandom 0.2.15", 4129 "glob", 4130 "gtk", 4131 "heck 0.5.0", ··· 4136 "log", 4137 "mime", 4138 "muda", 4139 - "objc2 0.5.2", 4140 "objc2-app-kit", 4141 - "objc2-foundation", 4142 "percent-encoding", 4143 "plist", 4144 "raw-window-handle", ··· 4152 "tauri-macros", 4153 "tauri-runtime", 4154 "tauri-runtime-wry", 4155 - "tauri-utils 2.0.1", 4156 - "thiserror", 4157 "tokio", 4158 "tray-icon", 4159 "url", 4160 - "urlpattern", 4161 "webkit2gtk", 4162 "webview2-com", 4163 "window-vibrancy", ··· 4166 4167 [[package]] 4168 name = "tauri-build" 4169 - version = "2.0.1" 4170 source = "registry+https://github.com/rust-lang/crates.io-index" 4171 - checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7" 4172 dependencies = [ 4173 "anyhow", 4174 "cargo_toml", ··· 4176 "glob", 4177 "heck 0.5.0", 4178 "json-patch", 4179 - "schemars", 4180 "semver", 4181 "serde", 4182 "serde_json", 4183 - "tauri-utils 2.0.1", 4184 "tauri-winres", 4185 - "toml 0.8.2", 4186 "walkdir", 4187 ] 4188 4189 [[package]] 4190 name = "tauri-codegen" 4191 - version = "2.0.1" 4192 source = "registry+https://github.com/rust-lang/crates.io-index" 4193 - checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e" 4194 dependencies = [ 4195 "base64 0.22.1", 4196 "brotli", 4197 "ico", 4198 "json-patch", 4199 "plist", 4200 - "png", 4201 "proc-macro2", 4202 "quote", 4203 "semver", 4204 "serde", 4205 "serde_json", 4206 "sha2", 4207 - "syn 2.0.79", 4208 - "tauri-utils 2.0.1", 4209 - "thiserror", 4210 "time", 4211 "url", 4212 "uuid", ··· 4215 4216 [[package]] 4217 name = "tauri-macros" 4218 - version = "2.0.1" 4219 source = "registry+https://github.com/rust-lang/crates.io-index" 4220 - checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f" 4221 dependencies = [ 4222 "heck 0.5.0", 4223 "proc-macro2", 4224 "quote", 4225 - "syn 2.0.79", 4226 "tauri-codegen", 4227 - "tauri-utils 2.0.1", 4228 ] 4229 4230 [[package]] 4231 name = "tauri-plugin" 4232 - version = "2.0.1" 4233 source = "registry+https://github.com/rust-lang/crates.io-index" 4234 - checksum = "b2e6660a409963e4d57b9bfab4addd141eeff41bd3a7fb14e13004a832cf7ef6" 4235 dependencies = [ 4236 "anyhow", 4237 "glob", 4238 "plist", 4239 - "schemars", 4240 "serde", 4241 "serde_json", 4242 - "tauri-utils 2.0.1", 4243 - "toml 0.8.2", 4244 "walkdir", 4245 ] 4246 4247 [[package]] 4248 name = "tauri-plugin-deep-link" 4249 - version = "0.1.2" 4250 source = "registry+https://github.com/rust-lang/crates.io-index" 4251 - checksum = "4536f5f6602e8fdfaa7b3b185076c2a0704f8eb7015f4e58461eb483ec3ed1f8" 4252 dependencies = [ 4253 - "dirs", 4254 - "interprocess", 4255 - "log", 4256 - "objc2 0.4.1", 4257 - "once_cell", 4258 - "tauri-utils 1.6.1", 4259 - "windows-sys 0.48.0", 4260 - "winreg 0.50.0", 4261 ] 4262 4263 [[package]] 4264 name = "tauri-plugin-fs" 4265 - version = "2.0.1" 4266 source = "registry+https://github.com/rust-lang/crates.io-index" 4267 - checksum = "ab300488ebec3487ca5f56289692e7e45feb07eea8d5e1dba497f7dc9dd9c407" 4268 dependencies = [ 4269 "anyhow", 4270 "dunce", 4271 "glob", 4272 "percent-encoding", 4273 - "schemars", 4274 "serde", 4275 "serde_json", 4276 "serde_repr", 4277 "tauri", 4278 "tauri-plugin", 4279 - "thiserror", 4280 "url", 4281 - "uuid", 4282 ] 4283 4284 [[package]] 4285 name = "tauri-plugin-http" 4286 - version = "2.0.1" 4287 source = "registry+https://github.com/rust-lang/crates.io-index" 4288 - checksum = "784333f1632d96c94346e8145bfe52970923a38a0e6eacd3dccaa12289275acf" 4289 dependencies = [ 4290 "data-url", 4291 "http", 4292 "regex", 4293 "reqwest", 4294 - "schemars", 4295 "serde", 4296 "serde_json", 4297 "tauri", 4298 "tauri-plugin", 4299 "tauri-plugin-fs", 4300 - "thiserror", 4301 "tokio", 4302 "url", 4303 "urlpattern", ··· 4305 4306 [[package]] 4307 name = "tauri-plugin-process" 4308 - version = "2.0.1" 4309 source = "registry+https://github.com/rust-lang/crates.io-index" 4310 - checksum = "ae06a00087c148962a52814a2d7265b1a0505bced5ffb74f8c284a5f96a4d03d" 4311 dependencies = [ 4312 "tauri", 4313 "tauri-plugin", ··· 4315 4316 [[package]] 4317 name = "tauri-plugin-shell" 4318 - version = "2.0.1" 4319 source = "registry+https://github.com/rust-lang/crates.io-index" 4320 - checksum = "371fb9aca2823990a2d0db7970573be5fdf07881fcaa2b835b29631feb84aec1" 4321 dependencies = [ 4322 "encoding_rs", 4323 "log", 4324 "open", 4325 "os_pipe", 4326 "regex", 4327 - "schemars", 4328 "serde", 4329 "serde_json", 4330 "shared_child", 4331 "tauri", 4332 "tauri-plugin", 4333 - "thiserror", 4334 "tokio", 4335 ] 4336 4337 [[package]] 4338 name = "tauri-runtime" 4339 - version = "2.1.0" 4340 source = "registry+https://github.com/rust-lang/crates.io-index" 4341 - checksum = "c8f437293d6f5e5dce829250f4dbdce4e0b52905e297a6689cc2963eb53ac728" 4342 dependencies = [ 4343 "dpi", 4344 "gtk", 4345 "http", 4346 "jni", 4347 "raw-window-handle", 4348 "serde", 4349 "serde_json", 4350 - "tauri-utils 2.0.1", 4351 - "thiserror", 4352 "url", 4353 "windows", 4354 ] 4355 4356 [[package]] 4357 name = "tauri-runtime-wry" 4358 - version = "2.1.1" 4359 source = "registry+https://github.com/rust-lang/crates.io-index" 4360 - checksum = "1431602bcc71f2f840ad623915c9842ecc32999b867c4a787d975a17a9625cc6" 4361 dependencies = [ 4362 "gtk", 4363 "http", 4364 "jni", 4365 "log", 4366 - "objc2 0.5.2", 4367 "objc2-app-kit", 4368 - "objc2-foundation", 4369 "percent-encoding", 4370 "raw-window-handle", 4371 "softbuffer", 4372 "tao", 4373 "tauri-runtime", 4374 - "tauri-utils 2.0.1", 4375 "url", 4376 "webkit2gtk", 4377 "webview2-com", ··· 4381 4382 [[package]] 4383 name = "tauri-utils" 4384 - version = "1.6.1" 4385 - source = "registry+https://github.com/rust-lang/crates.io-index" 4386 - checksum = "83a0c939e88d82903a0a7dfb28388b12a3c03504d6bd6086550edaa3b6d8beaa" 4387 - dependencies = [ 4388 - "ctor", 4389 - "dunce", 4390 - "heck 0.5.0", 4391 - "html5ever", 4392 - "infer 0.13.0", 4393 - "json-patch", 4394 - "kuchikiki", 4395 - "log", 4396 - "memchr", 4397 - "phf 0.11.2", 4398 - "semver", 4399 - "serde", 4400 - "serde_json", 4401 - "serde_with", 4402 - "thiserror", 4403 - "url", 4404 - "windows-version", 4405 - ] 4406 - 4407 - [[package]] 4408 - name = "tauri-utils" 4409 - version = "2.0.1" 4410 source = "registry+https://github.com/rust-lang/crates.io-index" 4411 - checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045" 4412 dependencies = [ 4413 "brotli", 4414 "cargo_metadata", 4415 "ctor", 4416 "dunce", 4417 "glob", 4418 "html5ever", 4419 - "infer 0.16.0", 4420 "json-patch", 4421 "kuchikiki", 4422 "log", 4423 "memchr", 4424 - "phf 0.11.2", 4425 "proc-macro2", 4426 "quote", 4427 "regex", 4428 - "schemars", 4429 "semver", 4430 "serde", 4431 "serde-untagged", 4432 "serde_json", 4433 "serde_with", 4434 "swift-rs", 4435 - "thiserror", 4436 - "toml 0.8.2", 4437 "url", 4438 "urlpattern", 4439 "uuid", ··· 4442 4443 [[package]] 4444 name = "tauri-winres" 4445 - version = "0.1.1" 4446 source = "registry+https://github.com/rust-lang/crates.io-index" 4447 - checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" 4448 dependencies = [ 4449 "embed-resource", 4450 - "toml 0.7.8", 4451 ] 4452 4453 [[package]] 4454 name = "tempfile" 4455 - version = "3.13.0" 4456 source = "registry+https://github.com/rust-lang/crates.io-index" 4457 - checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" 4458 dependencies = [ 4459 - "cfg-if", 4460 "fastrand", 4461 "once_cell", 4462 "rustix", 4463 - "windows-sys 0.59.0", 4464 ] 4465 4466 [[package]] ··· 4475 ] 4476 4477 [[package]] 4478 - name = "thin-slice" 4479 - version = "0.1.1" 4480 source = "registry+https://github.com/rust-lang/crates.io-index" 4481 - checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 4482 4483 [[package]] 4484 name = "thiserror" 4485 - version = "1.0.64" 4486 source = "registry+https://github.com/rust-lang/crates.io-index" 4487 - checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" 4488 dependencies = [ 4489 - "thiserror-impl", 4490 ] 4491 4492 [[package]] 4493 name = "thiserror-impl" 4494 - version = "1.0.64" 4495 source = "registry+https://github.com/rust-lang/crates.io-index" 4496 - checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" 4497 dependencies = [ 4498 "proc-macro2", 4499 "quote", 4500 - "syn 2.0.79", 4501 ] 4502 4503 [[package]] 4504 name = "tiff" 4505 - version = "0.9.1" 4506 source = "registry+https://github.com/rust-lang/crates.io-index" 4507 - checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 4508 dependencies = [ 4509 "flate2", 4510 - "jpeg-decoder", 4511 "weezl", 4512 ] 4513 4514 [[package]] 4515 name = "time" 4516 - version = "0.3.36" 4517 source = "registry+https://github.com/rust-lang/crates.io-index" 4518 - checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 4519 dependencies = [ 4520 "deranged", 4521 - "itoa 1.0.11", 4522 "num-conv", 4523 "powerfmt", 4524 "serde", ··· 4528 4529 [[package]] 4530 name = "time-core" 4531 - version = "0.1.2" 4532 source = "registry+https://github.com/rust-lang/crates.io-index" 4533 - checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 4534 4535 [[package]] 4536 name = "time-macros" 4537 - version = "0.2.18" 4538 source = "registry+https://github.com/rust-lang/crates.io-index" 4539 - checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 4540 dependencies = [ 4541 "num-conv", 4542 "time-core", 4543 ] 4544 4545 [[package]] 4546 name = "tinyvec" 4547 - version = "1.8.0" 4548 source = "registry+https://github.com/rust-lang/crates.io-index" 4549 - checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 4550 dependencies = [ 4551 "tinyvec_macros", 4552 ] ··· 4558 checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 4559 4560 [[package]] 4561 - name = "to_method" 4562 - version = "1.1.0" 4563 - source = "registry+https://github.com/rust-lang/crates.io-index" 4564 - checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" 4565 - 4566 - [[package]] 4567 name = "tokio" 4568 - version = "1.40.0" 4569 source = "registry+https://github.com/rust-lang/crates.io-index" 4570 - checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" 4571 dependencies = [ 4572 - "backtrace", 4573 "bytes", 4574 "libc", 4575 - "mio 1.0.2", 4576 "pin-project-lite", 4577 "socket2", 4578 "tokio-macros", 4579 - "windows-sys 0.52.0", 4580 ] 4581 4582 [[package]] 4583 name = "tokio-macros" 4584 - version = "2.4.0" 4585 source = "registry+https://github.com/rust-lang/crates.io-index" 4586 - checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 4587 dependencies = [ 4588 "proc-macro2", 4589 "quote", 4590 - "syn 2.0.79", 4591 ] 4592 4593 [[package]] ··· 4602 4603 [[package]] 4604 name = "tokio-rustls" 4605 - version = "0.26.0" 4606 source = "registry+https://github.com/rust-lang/crates.io-index" 4607 - checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" 4608 dependencies = [ 4609 "rustls", 4610 - "rustls-pki-types", 4611 "tokio", 4612 ] 4613 4614 [[package]] 4615 name = "tokio-util" 4616 - version = "0.7.12" 4617 source = "registry+https://github.com/rust-lang/crates.io-index" 4618 - checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" 4619 dependencies = [ 4620 "bytes", 4621 "futures-core", ··· 4626 4627 [[package]] 4628 name = "toml" 4629 - version = "0.7.8" 4630 source = "registry+https://github.com/rust-lang/crates.io-index" 4631 - checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" 4632 dependencies = [ 4633 "serde", 4634 - "serde_spanned", 4635 - "toml_datetime", 4636 - "toml_edit 0.19.15", 4637 ] 4638 4639 [[package]] 4640 name = "toml" 4641 - version = "0.8.2" 4642 source = "registry+https://github.com/rust-lang/crates.io-index" 4643 - checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" 4644 dependencies = [ 4645 - "serde", 4646 - "serde_spanned", 4647 - "toml_datetime", 4648 - "toml_edit 0.20.2", 4649 ] 4650 4651 [[package]] ··· 4658 ] 4659 4660 [[package]] 4661 name = "toml_edit" 4662 version = "0.19.15" 4663 source = "registry+https://github.com/rust-lang/crates.io-index" 4664 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 4665 dependencies = [ 4666 - "indexmap 2.6.0", 4667 - "serde", 4668 - "serde_spanned", 4669 - "toml_datetime", 4670 - "winnow", 4671 ] 4672 4673 [[package]] ··· 4676 source = "registry+https://github.com/rust-lang/crates.io-index" 4677 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 4678 dependencies = [ 4679 - "indexmap 2.6.0", 4680 "serde", 4681 - "serde_spanned", 4682 - "toml_datetime", 4683 - "winnow", 4684 ] 4685 4686 [[package]] 4687 name = "tower-service" 4688 version = "0.3.3" 4689 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4691 4692 [[package]] 4693 name = "tracing" 4694 - version = "0.1.40" 4695 source = "registry+https://github.com/rust-lang/crates.io-index" 4696 - checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 4697 dependencies = [ 4698 "pin-project-lite", 4699 "tracing-core", 4700 ] 4701 4702 [[package]] 4703 name = "tracing-core" 4704 - version = "0.1.32" 4705 source = "registry+https://github.com/rust-lang/crates.io-index" 4706 - checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 4707 dependencies = [ 4708 "once_cell", 4709 ] 4710 4711 [[package]] 4712 name = "tray-icon" 4713 - version = "0.19.1" 4714 source = "registry+https://github.com/rust-lang/crates.io-index" 4715 - checksum = "7c92af36a182b46206723bdf8a7942e20838cde1cf062e5b97854d57eb01763b" 4716 dependencies = [ 4717 - "core-graphics", 4718 "crossbeam-channel", 4719 "dirs", 4720 "libappindicator", 4721 "muda", 4722 - "objc2 0.5.2", 4723 "objc2-app-kit", 4724 - "objc2-foundation", 4725 "once_cell", 4726 - "png", 4727 "serde", 4728 - "thiserror", 4729 - "windows-sys 0.59.0", 4730 ] 4731 4732 [[package]] ··· 4737 4738 [[package]] 4739 name = "typeid" 4740 - version = "1.0.2" 4741 source = "registry+https://github.com/rust-lang/crates.io-index" 4742 - checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" 4743 4744 [[package]] 4745 name = "typenum" 4746 - version = "1.17.0" 4747 source = "registry+https://github.com/rust-lang/crates.io-index" 4748 - checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 4749 4750 [[package]] 4751 name = "unic-char-property" ··· 4789 ] 4790 4791 [[package]] 4792 - name = "unicode-bidi" 4793 - version = "0.3.17" 4794 - source = "registry+https://github.com/rust-lang/crates.io-index" 4795 - checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" 4796 - 4797 - [[package]] 4798 name = "unicode-ident" 4799 - version = "1.0.13" 4800 - source = "registry+https://github.com/rust-lang/crates.io-index" 4801 - checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 4802 - 4803 - [[package]] 4804 - name = "unicode-normalization" 4805 - version = "0.1.24" 4806 source = "registry+https://github.com/rust-lang/crates.io-index" 4807 - checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 4808 - dependencies = [ 4809 - "tinyvec", 4810 - ] 4811 4812 [[package]] 4813 name = "unicode-segmentation" ··· 4823 4824 [[package]] 4825 name = "url" 4826 - version = "2.5.2" 4827 source = "registry+https://github.com/rust-lang/crates.io-index" 4828 - checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 4829 dependencies = [ 4830 "form_urlencoded", 4831 - "idna 0.5.0", 4832 "percent-encoding", 4833 "serde", 4834 ] ··· 4852 checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 4853 4854 [[package]] 4855 name = "uuid" 4856 - version = "1.11.0" 4857 source = "registry+https://github.com/rust-lang/crates.io-index" 4858 - checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" 4859 dependencies = [ 4860 - "getrandom 0.2.15", 4861 "serde", 4862 ] 4863 4864 [[package]] 4865 name = "v_frame" 4866 - version = "0.3.8" 4867 source = "registry+https://github.com/rust-lang/crates.io-index" 4868 - checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" 4869 dependencies = [ 4870 "aligned-vec", 4871 "num-traits", ··· 4880 4881 [[package]] 4882 name = "version-compare" 4883 - version = "0.2.0" 4884 source = "registry+https://github.com/rust-lang/crates.io-index" 4885 - checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 4886 4887 [[package]] 4888 name = "version_check" ··· 4891 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 4892 4893 [[package]] 4894 - name = "vrcpm-rs" 4895 - version = "0.2.1" 4896 - dependencies = [ 4897 - "dirs", 4898 - "fast_image_resize", 4899 - "image", 4900 - "mslnk", 4901 - "notify", 4902 - "open", 4903 - "regex", 4904 - "reqwest", 4905 - "serde", 4906 - "serde_json", 4907 - "tauri", 4908 - "tauri-build", 4909 - "tauri-plugin-deep-link", 4910 - "tauri-plugin-http", 4911 - "tauri-plugin-process", 4912 - "tauri-plugin-shell", 4913 - ] 4914 - 4915 - [[package]] 4916 name = "vswhom" 4917 version = "0.1.0" 4918 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4924 4925 [[package]] 4926 name = "vswhom-sys" 4927 - version = "0.1.2" 4928 source = "registry+https://github.com/rust-lang/crates.io-index" 4929 - checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" 4930 dependencies = [ 4931 "cc", 4932 "libc", ··· 4959 4960 [[package]] 4961 name = "wasi" 4962 - version = "0.11.0+wasi-snapshot-preview1" 4963 source = "registry+https://github.com/rust-lang/crates.io-index" 4964 - checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 4965 4966 [[package]] 4967 - name = "wasm-bindgen" 4968 - version = "0.2.95" 4969 source = "registry+https://github.com/rust-lang/crates.io-index" 4970 - checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" 4971 dependencies = [ 4972 - "cfg-if", 4973 - "once_cell", 4974 - "wasm-bindgen-macro", 4975 ] 4976 4977 [[package]] 4978 - name = "wasm-bindgen-backend" 4979 - version = "0.2.95" 4980 source = "registry+https://github.com/rust-lang/crates.io-index" 4981 - checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" 4982 dependencies = [ 4983 - "bumpalo", 4984 - "log", 4985 "once_cell", 4986 - "proc-macro2", 4987 - "quote", 4988 - "syn 2.0.79", 4989 "wasm-bindgen-shared", 4990 ] 4991 4992 [[package]] 4993 name = "wasm-bindgen-futures" 4994 - version = "0.4.45" 4995 source = "registry+https://github.com/rust-lang/crates.io-index" 4996 - checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" 4997 dependencies = [ 4998 "cfg-if", 4999 "js-sys", 5000 "wasm-bindgen", 5001 "web-sys", 5002 ] 5003 5004 [[package]] 5005 name = "wasm-bindgen-macro" 5006 - version = "0.2.95" 5007 source = "registry+https://github.com/rust-lang/crates.io-index" 5008 - checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" 5009 dependencies = [ 5010 "quote", 5011 "wasm-bindgen-macro-support", ··· 5013 5014 [[package]] 5015 name = "wasm-bindgen-macro-support" 5016 - version = "0.2.95" 5017 source = "registry+https://github.com/rust-lang/crates.io-index" 5018 - checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" 5019 dependencies = [ 5020 "proc-macro2", 5021 "quote", 5022 - "syn 2.0.79", 5023 - "wasm-bindgen-backend", 5024 "wasm-bindgen-shared", 5025 ] 5026 5027 [[package]] 5028 name = "wasm-bindgen-shared" 5029 - version = "0.2.95" 5030 source = "registry+https://github.com/rust-lang/crates.io-index" 5031 - checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" 5032 5033 [[package]] 5034 name = "wasm-streams" 5035 - version = "0.4.1" 5036 source = "registry+https://github.com/rust-lang/crates.io-index" 5037 - checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" 5038 dependencies = [ 5039 "futures-util", 5040 "js-sys", ··· 5045 5046 [[package]] 5047 name = "web-sys" 5048 - version = "0.3.72" 5049 source = "registry+https://github.com/rust-lang/crates.io-index" 5050 - checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" 5051 dependencies = [ 5052 "js-sys", 5053 "wasm-bindgen", ··· 5099 5100 [[package]] 5101 name = "webpki-roots" 5102 - version = "0.26.6" 5103 source = "registry+https://github.com/rust-lang/crates.io-index" 5104 - checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" 5105 dependencies = [ 5106 "rustls-pki-types", 5107 ] 5108 5109 [[package]] 5110 name = "webview2-com" 5111 - version = "0.33.0" 5112 source = "registry+https://github.com/rust-lang/crates.io-index" 5113 - checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" 5114 dependencies = [ 5115 "webview2-com-macros", 5116 "webview2-com-sys", 5117 "windows", 5118 - "windows-core 0.58.0", 5119 "windows-implement", 5120 "windows-interface", 5121 ] ··· 5128 dependencies = [ 5129 "proc-macro2", 5130 "quote", 5131 - "syn 2.0.79", 5132 ] 5133 5134 [[package]] 5135 name = "webview2-com-sys" 5136 - version = "0.33.0" 5137 source = "registry+https://github.com/rust-lang/crates.io-index" 5138 - checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" 5139 dependencies = [ 5140 - "thiserror", 5141 "windows", 5142 - "windows-core 0.58.0", 5143 ] 5144 5145 [[package]] 5146 name = "weezl" 5147 - version = "0.1.8" 5148 source = "registry+https://github.com/rust-lang/crates.io-index" 5149 - checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" 5150 5151 [[package]] 5152 name = "winapi" ··· 5166 5167 [[package]] 5168 name = "winapi-util" 5169 - version = "0.1.9" 5170 source = "registry+https://github.com/rust-lang/crates.io-index" 5171 - checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 5172 dependencies = [ 5173 - "windows-sys 0.59.0", 5174 ] 5175 5176 [[package]] ··· 5181 5182 [[package]] 5183 name = "window-vibrancy" 5184 - version = "0.5.2" 5185 source = "registry+https://github.com/rust-lang/crates.io-index" 5186 - checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" 5187 dependencies = [ 5188 - "objc2 0.5.2", 5189 "objc2-app-kit", 5190 - "objc2-foundation", 5191 "raw-window-handle", 5192 "windows-sys 0.59.0", 5193 "windows-version", ··· 5195 5196 [[package]] 5197 name = "windows" 5198 - version = "0.58.0" 5199 source = "registry+https://github.com/rust-lang/crates.io-index" 5200 - checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 5201 dependencies = [ 5202 - "windows-core 0.58.0", 5203 - "windows-targets 0.52.6", 5204 ] 5205 5206 [[package]] 5207 name = "windows-core" 5208 - version = "0.52.0" 5209 source = "registry+https://github.com/rust-lang/crates.io-index" 5210 - checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 5211 dependencies = [ 5212 - "windows-targets 0.52.6", 5213 ] 5214 5215 [[package]] 5216 name = "windows-core" 5217 - version = "0.58.0" 5218 source = "registry+https://github.com/rust-lang/crates.io-index" 5219 - checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 5220 dependencies = [ 5221 "windows-implement", 5222 "windows-interface", 5223 - "windows-result", 5224 - "windows-strings", 5225 - "windows-targets 0.52.6", 5226 ] 5227 5228 [[package]] 5229 name = "windows-implement" 5230 - version = "0.58.0" 5231 source = "registry+https://github.com/rust-lang/crates.io-index" 5232 - checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 5233 dependencies = [ 5234 "proc-macro2", 5235 "quote", 5236 - "syn 2.0.79", 5237 ] 5238 5239 [[package]] 5240 name = "windows-interface" 5241 - version = "0.58.0" 5242 source = "registry+https://github.com/rust-lang/crates.io-index" 5243 - checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 5244 dependencies = [ 5245 "proc-macro2", 5246 "quote", 5247 - "syn 2.0.79", 5248 ] 5249 5250 [[package]] 5251 name = "windows-registry" 5252 - version = "0.2.0" 5253 source = "registry+https://github.com/rust-lang/crates.io-index" 5254 - checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 5255 dependencies = [ 5256 - "windows-result", 5257 - "windows-strings", 5258 - "windows-targets 0.52.6", 5259 ] 5260 5261 [[package]] 5262 name = "windows-result" 5263 - version = "0.2.0" 5264 source = "registry+https://github.com/rust-lang/crates.io-index" 5265 - checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 5266 dependencies = [ 5267 - "windows-targets 0.52.6", 5268 ] 5269 5270 [[package]] 5271 name = "windows-strings" 5272 - version = "0.1.0" 5273 source = "registry+https://github.com/rust-lang/crates.io-index" 5274 - checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 5275 dependencies = [ 5276 - "windows-result", 5277 - "windows-targets 0.52.6", 5278 ] 5279 5280 [[package]] 5281 - name = "windows-sys" 5282 - version = "0.45.0" 5283 source = "registry+https://github.com/rust-lang/crates.io-index" 5284 - checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 5285 dependencies = [ 5286 - "windows-targets 0.42.2", 5287 ] 5288 5289 [[package]] 5290 name = "windows-sys" 5291 - version = "0.48.0" 5292 source = "registry+https://github.com/rust-lang/crates.io-index" 5293 - checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 5294 dependencies = [ 5295 - "windows-targets 0.48.5", 5296 ] 5297 5298 [[package]] ··· 5314 ] 5315 5316 [[package]] 5317 name = "windows-targets" 5318 version = "0.42.2" 5319 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5330 5331 [[package]] 5332 name = "windows-targets" 5333 - version = "0.48.5" 5334 - source = "registry+https://github.com/rust-lang/crates.io-index" 5335 - checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 5336 - dependencies = [ 5337 - "windows_aarch64_gnullvm 0.48.5", 5338 - "windows_aarch64_msvc 0.48.5", 5339 - "windows_i686_gnu 0.48.5", 5340 - "windows_i686_msvc 0.48.5", 5341 - "windows_x86_64_gnu 0.48.5", 5342 - "windows_x86_64_gnullvm 0.48.5", 5343 - "windows_x86_64_msvc 0.48.5", 5344 - ] 5345 - 5346 - [[package]] 5347 - name = "windows-targets" 5348 version = "0.52.6" 5349 source = "registry+https://github.com/rust-lang/crates.io-index" 5350 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 5352 "windows_aarch64_gnullvm 0.52.6", 5353 "windows_aarch64_msvc 0.52.6", 5354 "windows_i686_gnu 0.52.6", 5355 - "windows_i686_gnullvm", 5356 "windows_i686_msvc 0.52.6", 5357 "windows_x86_64_gnu 0.52.6", 5358 "windows_x86_64_gnullvm 0.52.6", ··· 5360 ] 5361 5362 [[package]] 5363 name = "windows-version" 5364 - version = "0.1.1" 5365 source = "registry+https://github.com/rust-lang/crates.io-index" 5366 - checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" 5367 dependencies = [ 5368 - "windows-targets 0.52.6", 5369 ] 5370 5371 [[package]] ··· 5376 5377 [[package]] 5378 name = "windows_aarch64_gnullvm" 5379 - version = "0.48.5" 5380 source = "registry+https://github.com/rust-lang/crates.io-index" 5381 - checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 5382 5383 [[package]] 5384 name = "windows_aarch64_gnullvm" 5385 - version = "0.52.6" 5386 source = "registry+https://github.com/rust-lang/crates.io-index" 5387 - checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 5388 5389 [[package]] 5390 name = "windows_aarch64_msvc" ··· 5394 5395 [[package]] 5396 name = "windows_aarch64_msvc" 5397 - version = "0.48.5" 5398 source = "registry+https://github.com/rust-lang/crates.io-index" 5399 - checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 5400 5401 [[package]] 5402 name = "windows_aarch64_msvc" 5403 - version = "0.52.6" 5404 source = "registry+https://github.com/rust-lang/crates.io-index" 5405 - checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 5406 5407 [[package]] 5408 name = "windows_i686_gnu" ··· 5412 5413 [[package]] 5414 name = "windows_i686_gnu" 5415 - version = "0.48.5" 5416 source = "registry+https://github.com/rust-lang/crates.io-index" 5417 - checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 5418 5419 [[package]] 5420 name = "windows_i686_gnu" 5421 - version = "0.52.6" 5422 source = "registry+https://github.com/rust-lang/crates.io-index" 5423 - checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 5424 5425 [[package]] 5426 name = "windows_i686_gnullvm" ··· 5429 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 5430 5431 [[package]] 5432 name = "windows_i686_msvc" 5433 version = "0.42.2" 5434 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5436 5437 [[package]] 5438 name = "windows_i686_msvc" 5439 - version = "0.48.5" 5440 source = "registry+https://github.com/rust-lang/crates.io-index" 5441 - checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 5442 5443 [[package]] 5444 name = "windows_i686_msvc" 5445 - version = "0.52.6" 5446 source = "registry+https://github.com/rust-lang/crates.io-index" 5447 - checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 5448 5449 [[package]] 5450 name = "windows_x86_64_gnu" ··· 5454 5455 [[package]] 5456 name = "windows_x86_64_gnu" 5457 - version = "0.48.5" 5458 source = "registry+https://github.com/rust-lang/crates.io-index" 5459 - checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 5460 5461 [[package]] 5462 name = "windows_x86_64_gnu" 5463 - version = "0.52.6" 5464 source = "registry+https://github.com/rust-lang/crates.io-index" 5465 - checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 5466 5467 [[package]] 5468 name = "windows_x86_64_gnullvm" ··· 5472 5473 [[package]] 5474 name = "windows_x86_64_gnullvm" 5475 - version = "0.48.5" 5476 source = "registry+https://github.com/rust-lang/crates.io-index" 5477 - checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 5478 5479 [[package]] 5480 name = "windows_x86_64_gnullvm" 5481 - version = "0.52.6" 5482 source = "registry+https://github.com/rust-lang/crates.io-index" 5483 - checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 5484 5485 [[package]] 5486 name = "windows_x86_64_msvc" ··· 5490 5491 [[package]] 5492 name = "windows_x86_64_msvc" 5493 - version = "0.48.5" 5494 source = "registry+https://github.com/rust-lang/crates.io-index" 5495 - checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 5496 5497 [[package]] 5498 name = "windows_x86_64_msvc" 5499 - version = "0.52.6" 5500 source = "registry+https://github.com/rust-lang/crates.io-index" 5501 - checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 5502 5503 [[package]] 5504 name = "winnow" ··· 5510 ] 5511 5512 [[package]] 5513 - name = "winreg" 5514 - version = "0.50.0" 5515 source = "registry+https://github.com/rust-lang/crates.io-index" 5516 - checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 5517 dependencies = [ 5518 - "cfg-if", 5519 - "windows-sys 0.48.0", 5520 ] 5521 5522 [[package]] 5523 name = "winreg" 5524 - version = "0.52.0" 5525 source = "registry+https://github.com/rust-lang/crates.io-index" 5526 - checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" 5527 dependencies = [ 5528 "cfg-if", 5529 - "windows-sys 0.48.0", 5530 ] 5531 5532 [[package]] 5533 name = "wry" 5534 - version = "0.46.2" 5535 source = "registry+https://github.com/rust-lang/crates.io-index" 5536 - checksum = "6fa1c8c760041c64ce6be99f83d6cb55fe3fcd85a1ad46d32895f6e65cee87ba" 5537 dependencies = [ 5538 "base64 0.22.1", 5539 - "block2", 5540 "crossbeam-channel", 5541 "dpi", 5542 "dunce", 5543 "gdkx11", ··· 5549 "kuchikiki", 5550 "libc", 5551 "ndk", 5552 - "objc2 0.5.2", 5553 "objc2-app-kit", 5554 - "objc2-foundation", 5555 "objc2-ui-kit", 5556 "objc2-web-kit", 5557 "once_cell", ··· 5560 "sha2", 5561 "soup3", 5562 "tao-macros", 5563 - "thiserror", 5564 "webkit2gtk", 5565 "webkit2gtk-sys", 5566 "webview2-com", 5567 "windows", 5568 - "windows-core 0.58.0", 5569 "windows-version", 5570 "x11-dl", 5571 ] ··· 5592 ] 5593 5594 [[package]] 5595 name = "zerocopy" 5596 - version = "0.7.35" 5597 source = "registry+https://github.com/rust-lang/crates.io-index" 5598 - checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 5599 dependencies = [ 5600 - "byteorder", 5601 "zerocopy-derive", 5602 ] 5603 5604 [[package]] 5605 name = "zerocopy-derive" 5606 - version = "0.7.35" 5607 source = "registry+https://github.com/rust-lang/crates.io-index" 5608 - checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 5609 dependencies = [ 5610 "proc-macro2", 5611 "quote", 5612 - "syn 2.0.79", 5613 ] 5614 5615 [[package]] 5616 name = "zeroize" 5617 - version = "1.8.1" 5618 source = "registry+https://github.com/rust-lang/crates.io-index" 5619 - checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 5620 5621 [[package]] 5622 name = "zune-core" ··· 5635 5636 [[package]] 5637 name = "zune-jpeg" 5638 - version = "0.4.13" 5639 source = "registry+https://github.com/rust-lang/crates.io-index" 5640 - checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" 5641 dependencies = [ 5642 "zune-core", 5643 ]
··· 1 # This file is automatically @generated by Cargo. 2 # It is not intended for manual editing. 3 + version = 4 4 5 [[package]] 6 + name = "VRChatPhotoManager" 7 + version = "0.2.7" 8 dependencies = [ 9 + "arboard", 10 + "dirs", 11 + "fast_image_resize", 12 + "image", 13 + "mslnk", 14 + "notify", 15 + "open", 16 + "regex", 17 + "reqwest", 18 + "serde", 19 + "serde_json", 20 + "tauri", 21 + "tauri-build", 22 + "tauri-plugin-http", 23 + "tauri-plugin-process", 24 + "tauri-plugin-shell", 25 + "tauri-plugin-single-instance", 26 ] 27 28 [[package]] 29 name = "adler2" 30 + version = "2.0.1" 31 source = "registry+https://github.com/rust-lang/crates.io-index" 32 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 33 34 [[package]] 35 name = "aho-corasick" 36 + version = "1.1.4" 37 source = "registry+https://github.com/rust-lang/crates.io-index" 38 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 39 dependencies = [ 40 "memchr", 41 ] 42 43 [[package]] 44 name = "aligned-vec" 45 + version = "0.6.4" 46 source = "registry+https://github.com/rust-lang/crates.io-index" 47 + checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" 48 + dependencies = [ 49 + "equator", 50 + ] 51 52 [[package]] 53 name = "alloc-no-stdlib" ··· 65 ] 66 67 [[package]] 68 name = "android_system_properties" 69 version = "0.1.5" 70 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 75 76 [[package]] 77 name = "anyhow" 78 + version = "1.0.100" 79 source = "registry+https://github.com/rust-lang/crates.io-index" 80 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 81 82 [[package]] 83 name = "arbitrary" 84 + version = "1.4.2" 85 source = "registry+https://github.com/rust-lang/crates.io-index" 86 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 87 + 88 + [[package]] 89 + name = "arboard" 90 + version = "3.6.1" 91 + source = "registry+https://github.com/rust-lang/crates.io-index" 92 + checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 93 + dependencies = [ 94 + "clipboard-win", 95 + "image", 96 + "log", 97 + "objc2 0.6.3", 98 + "objc2-app-kit", 99 + "objc2-core-foundation", 100 + "objc2-core-graphics", 101 + "objc2-foundation 0.3.2", 102 + "parking_lot", 103 + "percent-encoding", 104 + "windows-sys 0.60.2", 105 + "x11rb", 106 + ] 107 108 [[package]] 109 name = "arg_enum_proc_macro" ··· 113 dependencies = [ 114 "proc-macro2", 115 "quote", 116 + "syn 2.0.109", 117 ] 118 119 [[package]] ··· 123 checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 124 125 [[package]] 126 + name = "async-broadcast" 127 + version = "0.7.2" 128 + source = "registry+https://github.com/rust-lang/crates.io-index" 129 + checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 130 + dependencies = [ 131 + "event-listener", 132 + "event-listener-strategy", 133 + "futures-core", 134 + "pin-project-lite", 135 + ] 136 + 137 + [[package]] 138 + name = "async-channel" 139 + version = "2.5.0" 140 + source = "registry+https://github.com/rust-lang/crates.io-index" 141 + checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 142 + dependencies = [ 143 + "concurrent-queue", 144 + "event-listener-strategy", 145 + "futures-core", 146 + "pin-project-lite", 147 + ] 148 + 149 + [[package]] 150 + name = "async-executor" 151 + version = "1.13.3" 152 + source = "registry+https://github.com/rust-lang/crates.io-index" 153 + checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 154 + dependencies = [ 155 + "async-task", 156 + "concurrent-queue", 157 + "fastrand", 158 + "futures-lite", 159 + "pin-project-lite", 160 + "slab", 161 + ] 162 + 163 + [[package]] 164 + name = "async-io" 165 + version = "2.6.0" 166 + source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 168 + dependencies = [ 169 + "autocfg", 170 + "cfg-if", 171 + "concurrent-queue", 172 + "futures-io", 173 + "futures-lite", 174 + "parking", 175 + "polling", 176 + "rustix", 177 + "slab", 178 + "windows-sys 0.61.2", 179 + ] 180 + 181 + [[package]] 182 + name = "async-lock" 183 + version = "3.4.1" 184 + source = "registry+https://github.com/rust-lang/crates.io-index" 185 + checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 186 + dependencies = [ 187 + "event-listener", 188 + "event-listener-strategy", 189 + "pin-project-lite", 190 + ] 191 + 192 + [[package]] 193 + name = "async-process" 194 + version = "2.5.0" 195 + source = "registry+https://github.com/rust-lang/crates.io-index" 196 + checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 197 + dependencies = [ 198 + "async-channel", 199 + "async-io", 200 + "async-lock", 201 + "async-signal", 202 + "async-task", 203 + "blocking", 204 + "cfg-if", 205 + "event-listener", 206 + "futures-lite", 207 + "rustix", 208 + ] 209 + 210 + [[package]] 211 + name = "async-recursion" 212 + version = "1.1.1" 213 + source = "registry+https://github.com/rust-lang/crates.io-index" 214 + checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 215 + dependencies = [ 216 + "proc-macro2", 217 + "quote", 218 + "syn 2.0.109", 219 + ] 220 + 221 + [[package]] 222 + name = "async-signal" 223 + version = "0.2.13" 224 + source = "registry+https://github.com/rust-lang/crates.io-index" 225 + checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 226 + dependencies = [ 227 + "async-io", 228 + "async-lock", 229 + "atomic-waker", 230 + "cfg-if", 231 + "futures-core", 232 + "futures-io", 233 + "rustix", 234 + "signal-hook-registry", 235 + "slab", 236 + "windows-sys 0.61.2", 237 + ] 238 + 239 + [[package]] 240 + name = "async-task" 241 + version = "4.7.1" 242 + source = "registry+https://github.com/rust-lang/crates.io-index" 243 + checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 244 + 245 + [[package]] 246 + name = "async-trait" 247 + version = "0.1.89" 248 + source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 250 + dependencies = [ 251 + "proc-macro2", 252 + "quote", 253 + "syn 2.0.109", 254 + ] 255 + 256 + [[package]] 257 name = "atk" 258 + version = "0.18.2" 259 source = "registry+https://github.com/rust-lang/crates.io-index" 260 + checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" 261 dependencies = [ 262 "atk-sys", 263 "glib", ··· 266 267 [[package]] 268 name = "atk-sys" 269 + version = "0.18.2" 270 source = "registry+https://github.com/rust-lang/crates.io-index" 271 + checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" 272 dependencies = [ 273 "glib-sys", 274 "gobject-sys", ··· 284 285 [[package]] 286 name = "autocfg" 287 + version = "1.5.0" 288 source = "registry+https://github.com/rust-lang/crates.io-index" 289 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 290 291 [[package]] 292 name = "av1-grain" 293 + version = "0.2.5" 294 source = "registry+https://github.com/rust-lang/crates.io-index" 295 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 296 dependencies = [ 297 "anyhow", 298 "arrayvec", ··· 304 305 [[package]] 306 name = "avif-serialize" 307 + version = "0.8.6" 308 source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" 310 dependencies = [ 311 "arrayvec", 312 ] 313 314 [[package]] 315 name = "base64" 316 version = "0.21.7" 317 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 325 326 [[package]] 327 name = "bit_field" 328 + version = "0.10.3" 329 source = "registry+https://github.com/rust-lang/crates.io-index" 330 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 331 332 [[package]] 333 name = "bitflags" ··· 337 338 [[package]] 339 name = "bitflags" 340 + version = "2.10.0" 341 source = "registry+https://github.com/rust-lang/crates.io-index" 342 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 343 dependencies = [ 344 + "serde_core", 345 ] 346 347 [[package]] 348 name = "bitstream-io" 349 + version = "2.6.0" 350 source = "registry+https://github.com/rust-lang/crates.io-index" 351 + checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" 352 353 [[package]] 354 name = "block-buffer" ··· 369 ] 370 371 [[package]] 372 + name = "block2" 373 + version = "0.6.2" 374 + source = "registry+https://github.com/rust-lang/crates.io-index" 375 + checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" 376 + dependencies = [ 377 + "objc2 0.6.3", 378 + ] 379 + 380 + [[package]] 381 + name = "blocking" 382 + version = "1.6.2" 383 + source = "registry+https://github.com/rust-lang/crates.io-index" 384 + checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 385 + dependencies = [ 386 + "async-channel", 387 + "async-task", 388 + "futures-io", 389 + "futures-lite", 390 + "piper", 391 + ] 392 + 393 + [[package]] 394 name = "brotli" 395 + version = "8.0.2" 396 source = "registry+https://github.com/rust-lang/crates.io-index" 397 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 398 dependencies = [ 399 "alloc-no-stdlib", 400 "alloc-stdlib", ··· 403 404 [[package]] 405 name = "brotli-decompressor" 406 + version = "5.0.0" 407 source = "registry+https://github.com/rust-lang/crates.io-index" 408 + checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" 409 dependencies = [ 410 "alloc-no-stdlib", 411 "alloc-stdlib", ··· 413 414 [[package]] 415 name = "built" 416 + version = "0.7.7" 417 source = "registry+https://github.com/rust-lang/crates.io-index" 418 + checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" 419 420 [[package]] 421 name = "bumpalo" 422 + version = "3.19.0" 423 source = "registry+https://github.com/rust-lang/crates.io-index" 424 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 425 426 [[package]] 427 name = "bytemuck" 428 + version = "1.24.0" 429 source = "registry+https://github.com/rust-lang/crates.io-index" 430 + checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 431 432 [[package]] 433 name = "byteorder" ··· 443 444 [[package]] 445 name = "bytes" 446 + version = "1.10.1" 447 source = "registry+https://github.com/rust-lang/crates.io-index" 448 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 449 dependencies = [ 450 "serde", 451 ] ··· 456 source = "registry+https://github.com/rust-lang/crates.io-index" 457 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" 458 dependencies = [ 459 + "bitflags 2.10.0", 460 "cairo-sys-rs", 461 "glib", 462 "libc", 463 "once_cell", 464 + "thiserror 1.0.69", 465 ] 466 467 [[package]] ··· 477 478 [[package]] 479 name = "camino" 480 + version = "1.2.1" 481 source = "registry+https://github.com/rust-lang/crates.io-index" 482 + checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" 483 dependencies = [ 484 + "serde_core", 485 ] 486 487 [[package]] 488 name = "cargo-platform" 489 + version = "0.1.9" 490 source = "registry+https://github.com/rust-lang/crates.io-index" 491 + checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 492 dependencies = [ 493 "serde", 494 ] 495 496 [[package]] 497 name = "cargo_metadata" 498 + version = "0.19.2" 499 source = "registry+https://github.com/rust-lang/crates.io-index" 500 + checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" 501 dependencies = [ 502 "camino", 503 "cargo-platform", 504 "semver", 505 "serde", 506 "serde_json", 507 + "thiserror 2.0.17", 508 ] 509 510 [[package]] 511 name = "cargo_toml" 512 + version = "0.22.3" 513 source = "registry+https://github.com/rust-lang/crates.io-index" 514 + checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" 515 dependencies = [ 516 "serde", 517 + "toml 0.9.8", 518 ] 519 520 [[package]] 521 name = "cc" 522 + version = "1.2.45" 523 source = "registry+https://github.com/rust-lang/crates.io-index" 524 + checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" 525 dependencies = [ 526 + "find-msvc-tools", 527 "jobserver", 528 "libc", 529 "shlex", ··· 558 559 [[package]] 560 name = "cfg-if" 561 + version = "1.0.4" 562 source = "registry+https://github.com/rust-lang/crates.io-index" 563 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 564 565 [[package]] 566 name = "cfg_aliases" ··· 570 571 [[package]] 572 name = "chrono" 573 + version = "0.4.42" 574 source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 576 dependencies = [ 577 "iana-time-zone", 578 "num-traits", 579 "serde", 580 + "windows-link 0.2.1", 581 ] 582 583 [[package]] 584 + name = "clipboard-win" 585 + version = "5.4.1" 586 source = "registry+https://github.com/rust-lang/crates.io-index" 587 + checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" 588 dependencies = [ 589 + "error-code", 590 ] 591 592 [[package]] ··· 606 ] 607 608 [[package]] 609 + name = "concurrent-queue" 610 + version = "2.5.0" 611 + source = "registry+https://github.com/rust-lang/crates.io-index" 612 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 613 + dependencies = [ 614 + "crossbeam-utils", 615 + ] 616 + 617 + [[package]] 618 + name = "const-random" 619 + version = "0.1.18" 620 + source = "registry+https://github.com/rust-lang/crates.io-index" 621 + checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" 622 + dependencies = [ 623 + "const-random-macro", 624 + ] 625 + 626 + [[package]] 627 + name = "const-random-macro" 628 + version = "0.1.16" 629 + source = "registry+https://github.com/rust-lang/crates.io-index" 630 + checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" 631 + dependencies = [ 632 + "getrandom 0.2.16", 633 + "once_cell", 634 + "tiny-keccak", 635 + ] 636 + 637 + [[package]] 638 name = "convert_case" 639 version = "0.4.0" 640 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 653 654 [[package]] 655 name = "cookie_store" 656 + version = "0.21.1" 657 source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" 659 dependencies = [ 660 "cookie", 661 + "document-features", 662 + "idna", 663 "log", 664 "publicsuffix", 665 "serde", ··· 681 682 [[package]] 683 name = "core-foundation" 684 + version = "0.10.1" 685 source = "registry+https://github.com/rust-lang/crates.io-index" 686 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 687 dependencies = [ 688 "core-foundation-sys", 689 "libc", ··· 701 source = "registry+https://github.com/rust-lang/crates.io-index" 702 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 703 dependencies = [ 704 + "bitflags 2.10.0", 705 + "core-foundation 0.10.1", 706 "core-graphics-types", 707 "foreign-types 0.5.0", 708 "libc", ··· 714 source = "registry+https://github.com/rust-lang/crates.io-index" 715 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 716 dependencies = [ 717 + "bitflags 2.10.0", 718 + "core-foundation 0.10.1", 719 "libc", 720 ] 721 722 [[package]] 723 name = "cpufeatures" 724 + version = "0.2.17" 725 source = "registry+https://github.com/rust-lang/crates.io-index" 726 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 727 dependencies = [ 728 "libc", 729 ] 730 731 [[package]] 732 name = "crc32fast" 733 + version = "1.5.0" 734 source = "registry+https://github.com/rust-lang/crates.io-index" 735 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 736 dependencies = [ 737 "cfg-if", 738 ] 739 740 [[package]] 741 name = "crossbeam-channel" 742 + version = "0.5.15" 743 source = "registry+https://github.com/rust-lang/crates.io-index" 744 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 745 dependencies = [ 746 "crossbeam-utils", 747 ] 748 749 [[package]] 750 name = "crossbeam-deque" 751 + version = "0.8.6" 752 source = "registry+https://github.com/rust-lang/crates.io-index" 753 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 754 dependencies = [ 755 "crossbeam-epoch", 756 "crossbeam-utils", ··· 767 768 [[package]] 769 name = "crossbeam-utils" 770 + version = "0.8.21" 771 source = "registry+https://github.com/rust-lang/crates.io-index" 772 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 773 774 [[package]] 775 name = "crunchy" 776 + version = "0.2.4" 777 source = "registry+https://github.com/rust-lang/crates.io-index" 778 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 779 780 [[package]] 781 name = "crypto-common" ··· 789 790 [[package]] 791 name = "cssparser" 792 + version = "0.29.6" 793 source = "registry+https://github.com/rust-lang/crates.io-index" 794 + checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" 795 dependencies = [ 796 "cssparser-macros", 797 "dtoa-short", 798 + "itoa", 799 "matches", 800 + "phf 0.10.1", 801 "proc-macro2", 802 "quote", 803 "smallvec", ··· 811 checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 812 dependencies = [ 813 "quote", 814 + "syn 2.0.109", 815 ] 816 817 [[package]] 818 name = "ctor" 819 + version = "0.2.9" 820 source = "registry+https://github.com/rust-lang/crates.io-index" 821 + checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" 822 dependencies = [ 823 "quote", 824 + "syn 2.0.109", 825 ] 826 827 [[package]] 828 name = "darling" 829 + version = "0.21.3" 830 source = "registry+https://github.com/rust-lang/crates.io-index" 831 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 832 dependencies = [ 833 "darling_core", 834 "darling_macro", ··· 836 837 [[package]] 838 name = "darling_core" 839 + version = "0.21.3" 840 source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 842 dependencies = [ 843 "fnv", 844 "ident_case", 845 "proc-macro2", 846 "quote", 847 "strsim", 848 + "syn 2.0.109", 849 ] 850 851 [[package]] 852 name = "darling_macro" 853 + version = "0.21.3" 854 source = "registry+https://github.com/rust-lang/crates.io-index" 855 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 856 dependencies = [ 857 "darling_core", 858 "quote", 859 + "syn 2.0.109", 860 ] 861 862 [[package]] 863 name = "data-url" 864 + version = "0.3.2" 865 source = "registry+https://github.com/rust-lang/crates.io-index" 866 + checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" 867 868 [[package]] 869 name = "deranged" 870 + version = "0.5.5" 871 source = "registry+https://github.com/rust-lang/crates.io-index" 872 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 873 dependencies = [ 874 "powerfmt", 875 + "serde_core", 876 ] 877 878 [[package]] 879 name = "derive_more" 880 + version = "0.99.20" 881 source = "registry+https://github.com/rust-lang/crates.io-index" 882 + checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" 883 dependencies = [ 884 "convert_case", 885 "proc-macro2", 886 "quote", 887 "rustc_version", 888 + "syn 2.0.109", 889 ] 890 891 [[package]] ··· 900 901 [[package]] 902 name = "dirs" 903 + version = "6.0.0" 904 source = "registry+https://github.com/rust-lang/crates.io-index" 905 + checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 906 dependencies = [ 907 "dirs-sys", 908 ] 909 910 [[package]] 911 name = "dirs-sys" 912 + version = "0.5.0" 913 source = "registry+https://github.com/rust-lang/crates.io-index" 914 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 915 dependencies = [ 916 "libc", 917 "option-ext", 918 "redox_users", 919 + "windows-sys 0.61.2", 920 ] 921 922 [[package]] ··· 926 checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 927 928 [[package]] 929 + name = "dispatch2" 930 + version = "0.3.0" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 933 + dependencies = [ 934 + "bitflags 2.10.0", 935 + "objc2 0.6.3", 936 + ] 937 + 938 + [[package]] 939 + name = "displaydoc" 940 + version = "0.2.5" 941 + source = "registry+https://github.com/rust-lang/crates.io-index" 942 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 943 + dependencies = [ 944 + "proc-macro2", 945 + "quote", 946 + "syn 2.0.109", 947 + ] 948 + 949 + [[package]] 950 name = "dlopen2" 951 + version = "0.8.0" 952 source = "registry+https://github.com/rust-lang/crates.io-index" 953 + checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" 954 dependencies = [ 955 "dlopen2_derive", 956 "libc", ··· 960 961 [[package]] 962 name = "dlopen2_derive" 963 + version = "0.4.1" 964 source = "registry+https://github.com/rust-lang/crates.io-index" 965 + checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" 966 dependencies = [ 967 "proc-macro2", 968 "quote", 969 + "syn 2.0.109", 970 + ] 971 + 972 + [[package]] 973 + name = "dlv-list" 974 + version = "0.5.2" 975 + source = "registry+https://github.com/rust-lang/crates.io-index" 976 + checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" 977 + dependencies = [ 978 + "const-random", 979 ] 980 981 [[package]] 982 name = "document-features" 983 + version = "0.2.12" 984 source = "registry+https://github.com/rust-lang/crates.io-index" 985 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 986 dependencies = [ 987 "litrs", 988 ] 989 990 [[package]] 991 name = "dpi" 992 + version = "0.1.2" 993 source = "registry+https://github.com/rust-lang/crates.io-index" 994 + checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 995 dependencies = [ 996 "serde", 997 ] 998 999 [[package]] 1000 name = "dtoa" 1001 + version = "1.0.10" 1002 source = "registry+https://github.com/rust-lang/crates.io-index" 1003 + checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" 1004 1005 [[package]] 1006 name = "dtoa-short" ··· 1019 1020 [[package]] 1021 name = "dyn-clone" 1022 + version = "1.0.20" 1023 source = "registry+https://github.com/rust-lang/crates.io-index" 1024 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 1025 1026 [[package]] 1027 name = "either" 1028 + version = "1.15.0" 1029 source = "registry+https://github.com/rust-lang/crates.io-index" 1030 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 1031 1032 [[package]] 1033 name = "embed-resource" 1034 + version = "3.0.6" 1035 source = "registry+https://github.com/rust-lang/crates.io-index" 1036 + checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" 1037 dependencies = [ 1038 "cc", 1039 "memchr", 1040 "rustc_version", 1041 + "toml 0.9.8", 1042 "vswhom", 1043 + "winreg", 1044 ] 1045 1046 [[package]] ··· 1051 1052 [[package]] 1053 name = "encoding_rs" 1054 + version = "0.8.35" 1055 source = "registry+https://github.com/rust-lang/crates.io-index" 1056 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 1057 dependencies = [ 1058 "cfg-if", 1059 ] 1060 1061 [[package]] 1062 + name = "endi" 1063 + version = "1.1.0" 1064 + source = "registry+https://github.com/rust-lang/crates.io-index" 1065 + checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 1066 + 1067 + [[package]] 1068 + name = "enumflags2" 1069 + version = "0.7.12" 1070 + source = "registry+https://github.com/rust-lang/crates.io-index" 1071 + checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" 1072 + dependencies = [ 1073 + "enumflags2_derive", 1074 + "serde", 1075 + ] 1076 + 1077 + [[package]] 1078 + name = "enumflags2_derive" 1079 + version = "0.7.12" 1080 + source = "registry+https://github.com/rust-lang/crates.io-index" 1081 + checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" 1082 + dependencies = [ 1083 + "proc-macro2", 1084 + "quote", 1085 + "syn 2.0.109", 1086 + ] 1087 + 1088 + [[package]] 1089 + name = "equator" 1090 + version = "0.4.2" 1091 + source = "registry+https://github.com/rust-lang/crates.io-index" 1092 + checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" 1093 + dependencies = [ 1094 + "equator-macro", 1095 + ] 1096 + 1097 + [[package]] 1098 + name = "equator-macro" 1099 + version = "0.4.2" 1100 + source = "registry+https://github.com/rust-lang/crates.io-index" 1101 + checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" 1102 + dependencies = [ 1103 + "proc-macro2", 1104 + "quote", 1105 + "syn 2.0.109", 1106 + ] 1107 + 1108 + [[package]] 1109 name = "equivalent" 1110 + version = "1.0.2" 1111 source = "registry+https://github.com/rust-lang/crates.io-index" 1112 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1113 1114 [[package]] 1115 name = "erased-serde" 1116 + version = "0.4.9" 1117 source = "registry+https://github.com/rust-lang/crates.io-index" 1118 + checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" 1119 dependencies = [ 1120 "serde", 1121 + "serde_core", 1122 "typeid", 1123 ] 1124 1125 [[package]] 1126 name = "errno" 1127 + version = "0.3.14" 1128 source = "registry+https://github.com/rust-lang/crates.io-index" 1129 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1130 dependencies = [ 1131 "libc", 1132 + "windows-sys 0.61.2", 1133 + ] 1134 + 1135 + [[package]] 1136 + name = "error-code" 1137 + version = "3.3.2" 1138 + source = "registry+https://github.com/rust-lang/crates.io-index" 1139 + checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 1140 + 1141 + [[package]] 1142 + name = "event-listener" 1143 + version = "5.4.1" 1144 + source = "registry+https://github.com/rust-lang/crates.io-index" 1145 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1146 + dependencies = [ 1147 + "concurrent-queue", 1148 + "parking", 1149 + "pin-project-lite", 1150 + ] 1151 + 1152 + [[package]] 1153 + name = "event-listener-strategy" 1154 + version = "0.5.4" 1155 + source = "registry+https://github.com/rust-lang/crates.io-index" 1156 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1157 + dependencies = [ 1158 + "event-listener", 1159 + "pin-project-lite", 1160 ] 1161 1162 [[package]] 1163 name = "exr" 1164 + version = "1.73.0" 1165 source = "registry+https://github.com/rust-lang/crates.io-index" 1166 + checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" 1167 dependencies = [ 1168 "bit_field", 1169 "half", 1170 "lebe", 1171 + "miniz_oxide", 1172 "rayon-core", 1173 "smallvec", 1174 "zune-inflate", ··· 1176 1177 [[package]] 1178 name = "fast_image_resize" 1179 + version = "5.3.0" 1180 source = "registry+https://github.com/rust-lang/crates.io-index" 1181 + checksum = "1bd1eda71e8af93f8b00e189404235d82f4de77ea4a0d182b44a7f03994d647c" 1182 dependencies = [ 1183 "bytemuck", 1184 "cfg-if", 1185 "document-features", 1186 "image", 1187 "num-traits", 1188 + "thiserror 2.0.17", 1189 ] 1190 1191 [[package]] 1192 name = "fastrand" 1193 + version = "2.3.0" 1194 source = "registry+https://github.com/rust-lang/crates.io-index" 1195 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1196 1197 [[package]] 1198 + name = "fax" 1199 + version = "0.2.6" 1200 source = "registry+https://github.com/rust-lang/crates.io-index" 1201 + checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 1202 dependencies = [ 1203 + "fax_derive", 1204 ] 1205 1206 [[package]] 1207 + name = "fax_derive" 1208 + version = "0.2.0" 1209 source = "registry+https://github.com/rust-lang/crates.io-index" 1210 + checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 1211 dependencies = [ 1212 + "proc-macro2", 1213 + "quote", 1214 + "syn 2.0.109", 1215 ] 1216 1217 [[package]] 1218 + name = "fdeflate" 1219 + version = "0.3.7" 1220 source = "registry+https://github.com/rust-lang/crates.io-index" 1221 + checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 1222 dependencies = [ 1223 + "simd-adler32", 1224 ] 1225 1226 [[package]] 1227 + name = "field-offset" 1228 + version = "0.3.6" 1229 source = "registry+https://github.com/rust-lang/crates.io-index" 1230 + checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" 1231 dependencies = [ 1232 + "memoffset", 1233 + "rustc_version", 1234 ] 1235 1236 [[package]] 1237 + name = "find-msvc-tools" 1238 version = "0.1.4" 1239 source = "registry+https://github.com/rust-lang/crates.io-index" 1240 + checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 1241 1242 [[package]] 1243 + name = "flate2" 1244 + version = "1.1.5" 1245 source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 1247 dependencies = [ 1248 + "crc32fast", 1249 + "miniz_oxide", 1250 ] 1251 1252 [[package]] ··· 1282 dependencies = [ 1283 "proc-macro2", 1284 "quote", 1285 + "syn 2.0.109", 1286 ] 1287 1288 [[package]] ··· 1299 1300 [[package]] 1301 name = "form_urlencoded" 1302 + version = "1.2.2" 1303 source = "registry+https://github.com/rust-lang/crates.io-index" 1304 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1305 dependencies = [ 1306 "percent-encoding", 1307 ] ··· 1357 version = "0.3.31" 1358 source = "registry+https://github.com/rust-lang/crates.io-index" 1359 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1360 + 1361 + [[package]] 1362 + name = "futures-lite" 1363 + version = "2.6.1" 1364 + source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1366 + dependencies = [ 1367 + "fastrand", 1368 + "futures-core", 1369 + "futures-io", 1370 + "parking", 1371 + "pin-project-lite", 1372 + ] 1373 1374 [[package]] 1375 name = "futures-macro" ··· 1379 dependencies = [ 1380 "proc-macro2", 1381 "quote", 1382 + "syn 2.0.109", 1383 ] 1384 1385 [[package]] ··· 1422 1423 [[package]] 1424 name = "gdk" 1425 + version = "0.18.2" 1426 source = "registry+https://github.com/rust-lang/crates.io-index" 1427 + checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" 1428 dependencies = [ 1429 "cairo-rs", 1430 "gdk-pixbuf", ··· 1463 1464 [[package]] 1465 name = "gdk-sys" 1466 + version = "0.18.2" 1467 source = "registry+https://github.com/rust-lang/crates.io-index" 1468 + checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" 1469 dependencies = [ 1470 "cairo-sys-rs", 1471 "gdk-pixbuf-sys", ··· 1480 1481 [[package]] 1482 name = "gdkwayland-sys" 1483 + version = "0.18.2" 1484 source = "registry+https://github.com/rust-lang/crates.io-index" 1485 + checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" 1486 dependencies = [ 1487 "gdk-sys", 1488 "glib-sys", ··· 1494 1495 [[package]] 1496 name = "gdkx11" 1497 + version = "0.18.2" 1498 source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" 1500 dependencies = [ 1501 "gdk", 1502 "gdkx11-sys", ··· 1508 1509 [[package]] 1510 name = "gdkx11-sys" 1511 + version = "0.18.2" 1512 source = "registry+https://github.com/rust-lang/crates.io-index" 1513 + checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" 1514 dependencies = [ 1515 "gdk-sys", 1516 "glib-sys", ··· 1521 1522 [[package]] 1523 name = "generic-array" 1524 + version = "0.14.9" 1525 source = "registry+https://github.com/rust-lang/crates.io-index" 1526 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1527 dependencies = [ 1528 "typenum", 1529 "version_check", 1530 ] 1531 1532 [[package]] 1533 + name = "gethostname" 1534 + version = "1.1.0" 1535 + source = "registry+https://github.com/rust-lang/crates.io-index" 1536 + checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" 1537 + dependencies = [ 1538 + "rustix", 1539 + "windows-link 0.2.1", 1540 + ] 1541 + 1542 + [[package]] 1543 name = "getrandom" 1544 version = "0.1.16" 1545 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1552 1553 [[package]] 1554 name = "getrandom" 1555 + version = "0.2.16" 1556 source = "registry+https://github.com/rust-lang/crates.io-index" 1557 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1558 dependencies = [ 1559 "cfg-if", 1560 + "js-sys", 1561 "libc", 1562 + "wasi 0.11.1+wasi-snapshot-preview1", 1563 + "wasm-bindgen", 1564 ] 1565 1566 [[package]] 1567 + name = "getrandom" 1568 + version = "0.3.4" 1569 source = "registry+https://github.com/rust-lang/crates.io-index" 1570 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1571 dependencies = [ 1572 + "cfg-if", 1573 + "js-sys", 1574 + "libc", 1575 + "r-efi", 1576 + "wasip2", 1577 + "wasm-bindgen", 1578 ] 1579 1580 [[package]] 1581 + name = "gif" 1582 + version = "0.13.3" 1583 source = "registry+https://github.com/rust-lang/crates.io-index" 1584 + checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" 1585 + dependencies = [ 1586 + "color_quant", 1587 + "weezl", 1588 + ] 1589 1590 [[package]] 1591 name = "gio" ··· 1603 "once_cell", 1604 "pin-project-lite", 1605 "smallvec", 1606 + "thiserror 1.0.69", 1607 ] 1608 1609 [[package]] ··· 1625 source = "registry+https://github.com/rust-lang/crates.io-index" 1626 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" 1627 dependencies = [ 1628 + "bitflags 2.10.0", 1629 "futures-channel", 1630 "futures-core", 1631 "futures-executor", ··· 1639 "memchr", 1640 "once_cell", 1641 "smallvec", 1642 + "thiserror 1.0.69", 1643 ] 1644 1645 [[package]] ··· 1653 "proc-macro-error", 1654 "proc-macro2", 1655 "quote", 1656 + "syn 2.0.109", 1657 ] 1658 1659 [[package]] ··· 1668 1669 [[package]] 1670 name = "glob" 1671 + version = "0.3.3" 1672 source = "registry+https://github.com/rust-lang/crates.io-index" 1673 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1674 1675 [[package]] 1676 name = "gobject-sys" ··· 1685 1686 [[package]] 1687 name = "gtk" 1688 + version = "0.18.2" 1689 source = "registry+https://github.com/rust-lang/crates.io-index" 1690 + checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" 1691 dependencies = [ 1692 "atk", 1693 "cairo-rs", ··· 1706 1707 [[package]] 1708 name = "gtk-sys" 1709 + version = "0.18.2" 1710 source = "registry+https://github.com/rust-lang/crates.io-index" 1711 + checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" 1712 dependencies = [ 1713 "atk-sys", 1714 "cairo-sys-rs", ··· 1724 1725 [[package]] 1726 name = "gtk3-macros" 1727 + version = "0.18.2" 1728 source = "registry+https://github.com/rust-lang/crates.io-index" 1729 + checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" 1730 dependencies = [ 1731 "proc-macro-crate 1.3.1", 1732 "proc-macro-error", 1733 "proc-macro2", 1734 "quote", 1735 + "syn 2.0.109", 1736 ] 1737 1738 [[package]] 1739 name = "h2" 1740 + version = "0.4.12" 1741 source = "registry+https://github.com/rust-lang/crates.io-index" 1742 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1743 dependencies = [ 1744 "atomic-waker", 1745 "bytes", ··· 1747 "futures-core", 1748 "futures-sink", 1749 "http", 1750 + "indexmap 2.12.0", 1751 "slab", 1752 "tokio", 1753 "tokio-util", ··· 1756 1757 [[package]] 1758 name = "half" 1759 + version = "2.7.1" 1760 source = "registry+https://github.com/rust-lang/crates.io-index" 1761 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1762 dependencies = [ 1763 "cfg-if", 1764 "crunchy", 1765 + "zerocopy", 1766 ] 1767 1768 [[package]] ··· 1773 1774 [[package]] 1775 name = "hashbrown" 1776 + version = "0.14.5" 1777 + source = "registry+https://github.com/rust-lang/crates.io-index" 1778 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1779 + 1780 + [[package]] 1781 + name = "hashbrown" 1782 + version = "0.16.0" 1783 source = "registry+https://github.com/rust-lang/crates.io-index" 1784 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1785 1786 [[package]] 1787 name = "heck" ··· 1797 1798 [[package]] 1799 name = "hermit-abi" 1800 + version = "0.5.2" 1801 source = "registry+https://github.com/rust-lang/crates.io-index" 1802 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1803 1804 [[package]] 1805 name = "hex" ··· 1809 1810 [[package]] 1811 name = "html5ever" 1812 + version = "0.29.1" 1813 source = "registry+https://github.com/rust-lang/crates.io-index" 1814 + checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" 1815 dependencies = [ 1816 "log", 1817 "mac", 1818 "markup5ever", 1819 + "match_token", 1820 ] 1821 1822 [[package]] 1823 name = "http" 1824 + version = "1.3.1" 1825 source = "registry+https://github.com/rust-lang/crates.io-index" 1826 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1827 dependencies = [ 1828 "bytes", 1829 "fnv", 1830 + "itoa", 1831 ] 1832 1833 [[package]] ··· 1842 1843 [[package]] 1844 name = "http-body-util" 1845 + version = "0.1.3" 1846 source = "registry+https://github.com/rust-lang/crates.io-index" 1847 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1848 dependencies = [ 1849 "bytes", 1850 + "futures-core", 1851 "http", 1852 "http-body", 1853 "pin-project-lite", ··· 1855 1856 [[package]] 1857 name = "httparse" 1858 + version = "1.10.1" 1859 source = "registry+https://github.com/rust-lang/crates.io-index" 1860 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1861 1862 [[package]] 1863 name = "hyper" 1864 + version = "1.7.0" 1865 source = "registry+https://github.com/rust-lang/crates.io-index" 1866 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1867 dependencies = [ 1868 + "atomic-waker", 1869 "bytes", 1870 "futures-channel", 1871 + "futures-core", 1872 "h2", 1873 "http", 1874 "http-body", 1875 "httparse", 1876 + "itoa", 1877 "pin-project-lite", 1878 + "pin-utils", 1879 "smallvec", 1880 "tokio", 1881 "want", ··· 1883 1884 [[package]] 1885 name = "hyper-rustls" 1886 + version = "0.27.7" 1887 source = "registry+https://github.com/rust-lang/crates.io-index" 1888 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1889 dependencies = [ 1890 "http", 1891 "hyper", 1892 "hyper-util", ··· 1916 1917 [[package]] 1918 name = "hyper-util" 1919 + version = "0.1.17" 1920 source = "registry+https://github.com/rust-lang/crates.io-index" 1921 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 1922 dependencies = [ 1923 + "base64 0.22.1", 1924 "bytes", 1925 "futures-channel", 1926 + "futures-core", 1927 "futures-util", 1928 "http", 1929 "http-body", 1930 "hyper", 1931 + "ipnet", 1932 + "libc", 1933 + "percent-encoding", 1934 "pin-project-lite", 1935 "socket2", 1936 + "system-configuration", 1937 "tokio", 1938 "tower-service", 1939 "tracing", 1940 + "windows-registry", 1941 ] 1942 1943 [[package]] 1944 name = "iana-time-zone" 1945 + version = "0.1.64" 1946 source = "registry+https://github.com/rust-lang/crates.io-index" 1947 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1948 dependencies = [ 1949 "android_system_properties", 1950 "core-foundation-sys", 1951 "iana-time-zone-haiku", 1952 "js-sys", 1953 + "log", 1954 "wasm-bindgen", 1955 + "windows-core 0.62.2", 1956 ] 1957 1958 [[package]] ··· 1966 1967 [[package]] 1968 name = "ico" 1969 + version = "0.4.0" 1970 source = "registry+https://github.com/rust-lang/crates.io-index" 1971 + checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" 1972 dependencies = [ 1973 "byteorder", 1974 + "png 0.17.16", 1975 + ] 1976 + 1977 + [[package]] 1978 + name = "icu_collections" 1979 + version = "2.1.1" 1980 + source = "registry+https://github.com/rust-lang/crates.io-index" 1981 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1982 + dependencies = [ 1983 + "displaydoc", 1984 + "potential_utf", 1985 + "yoke", 1986 + "zerofrom", 1987 + "zerovec", 1988 + ] 1989 + 1990 + [[package]] 1991 + name = "icu_locale_core" 1992 + version = "2.1.1" 1993 + source = "registry+https://github.com/rust-lang/crates.io-index" 1994 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1995 + dependencies = [ 1996 + "displaydoc", 1997 + "litemap", 1998 + "tinystr", 1999 + "writeable", 2000 + "zerovec", 2001 + ] 2002 + 2003 + [[package]] 2004 + name = "icu_normalizer" 2005 + version = "2.1.1" 2006 + source = "registry+https://github.com/rust-lang/crates.io-index" 2007 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 2008 + dependencies = [ 2009 + "icu_collections", 2010 + "icu_normalizer_data", 2011 + "icu_properties", 2012 + "icu_provider", 2013 + "smallvec", 2014 + "zerovec", 2015 + ] 2016 + 2017 + [[package]] 2018 + name = "icu_normalizer_data" 2019 + version = "2.1.1" 2020 + source = "registry+https://github.com/rust-lang/crates.io-index" 2021 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 2022 + 2023 + [[package]] 2024 + name = "icu_properties" 2025 + version = "2.1.1" 2026 + source = "registry+https://github.com/rust-lang/crates.io-index" 2027 + checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" 2028 + dependencies = [ 2029 + "icu_collections", 2030 + "icu_locale_core", 2031 + "icu_properties_data", 2032 + "icu_provider", 2033 + "zerotrie", 2034 + "zerovec", 2035 + ] 2036 + 2037 + [[package]] 2038 + name = "icu_properties_data" 2039 + version = "2.1.1" 2040 + source = "registry+https://github.com/rust-lang/crates.io-index" 2041 + checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" 2042 + 2043 + [[package]] 2044 + name = "icu_provider" 2045 + version = "2.1.1" 2046 + source = "registry+https://github.com/rust-lang/crates.io-index" 2047 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 2048 + dependencies = [ 2049 + "displaydoc", 2050 + "icu_locale_core", 2051 + "writeable", 2052 + "yoke", 2053 + "zerofrom", 2054 + "zerotrie", 2055 + "zerovec", 2056 ] 2057 2058 [[package]] ··· 2063 2064 [[package]] 2065 name = "idna" 2066 + version = "1.1.0" 2067 source = "registry+https://github.com/rust-lang/crates.io-index" 2068 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 2069 dependencies = [ 2070 + "idna_adapter", 2071 + "smallvec", 2072 + "utf8_iter", 2073 ] 2074 2075 [[package]] 2076 + name = "idna_adapter" 2077 + version = "1.2.1" 2078 source = "registry+https://github.com/rust-lang/crates.io-index" 2079 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 2080 dependencies = [ 2081 + "icu_normalizer", 2082 + "icu_properties", 2083 ] 2084 2085 [[package]] 2086 name = "image" 2087 + version = "0.25.8" 2088 source = "registry+https://github.com/rust-lang/crates.io-index" 2089 + checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 2090 dependencies = [ 2091 "bytemuck", 2092 "byteorder-lite", ··· 2094 "exr", 2095 "gif", 2096 "image-webp", 2097 + "moxcms", 2098 "num-traits", 2099 + "png 0.18.0", 2100 "qoi", 2101 "ravif", 2102 "rayon", ··· 2108 2109 [[package]] 2110 name = "image-webp" 2111 + version = "0.2.4" 2112 source = "registry+https://github.com/rust-lang/crates.io-index" 2113 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 2114 dependencies = [ 2115 "byteorder-lite", 2116 "quick-error", ··· 2118 2119 [[package]] 2120 name = "imgref" 2121 + version = "1.12.0" 2122 source = "registry+https://github.com/rust-lang/crates.io-index" 2123 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 2124 2125 [[package]] 2126 name = "indexmap" ··· 2135 2136 [[package]] 2137 name = "indexmap" 2138 + version = "2.12.0" 2139 source = "registry+https://github.com/rust-lang/crates.io-index" 2140 + checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 2141 dependencies = [ 2142 "equivalent", 2143 + "hashbrown 0.16.0", 2144 "serde", 2145 + "serde_core", 2146 ] 2147 2148 [[package]] 2149 name = "infer" 2150 + version = "0.19.0" 2151 source = "registry+https://github.com/rust-lang/crates.io-index" 2152 + checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" 2153 dependencies = [ 2154 "cfb", 2155 ] 2156 2157 [[package]] 2158 name = "inotify" 2159 + version = "0.11.0" 2160 source = "registry+https://github.com/rust-lang/crates.io-index" 2161 + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 2162 dependencies = [ 2163 + "bitflags 2.10.0", 2164 "inotify-sys", 2165 "libc", 2166 ] ··· 2175 ] 2176 2177 [[package]] 2178 name = "interpolate_name" 2179 version = "0.2.4" 2180 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2182 dependencies = [ 2183 "proc-macro2", 2184 "quote", 2185 + "syn 2.0.109", 2186 ] 2187 2188 [[package]] 2189 + name = "ipnet" 2190 + version = "2.11.0" 2191 source = "registry+https://github.com/rust-lang/crates.io-index" 2192 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 2193 2194 [[package]] 2195 + name = "iri-string" 2196 + version = "0.7.9" 2197 source = "registry+https://github.com/rust-lang/crates.io-index" 2198 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 2199 + dependencies = [ 2200 + "memchr", 2201 + "serde", 2202 + ] 2203 2204 [[package]] 2205 name = "is-docker" ··· 2231 2232 [[package]] 2233 name = "itoa" 2234 + version = "1.0.15" 2235 source = "registry+https://github.com/rust-lang/crates.io-index" 2236 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 2237 2238 [[package]] 2239 name = "javascriptcore-rs" ··· 2269 "combine", 2270 "jni-sys", 2271 "log", 2272 + "thiserror 1.0.69", 2273 "walkdir", 2274 "windows-sys 0.45.0", 2275 ] ··· 2282 2283 [[package]] 2284 name = "jobserver" 2285 + version = "0.1.34" 2286 source = "registry+https://github.com/rust-lang/crates.io-index" 2287 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 2288 dependencies = [ 2289 + "getrandom 0.3.4", 2290 "libc", 2291 ] 2292 2293 [[package]] 2294 name = "js-sys" 2295 + version = "0.3.82" 2296 source = "registry+https://github.com/rust-lang/crates.io-index" 2297 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 2298 dependencies = [ 2299 + "once_cell", 2300 "wasm-bindgen", 2301 ] 2302 2303 [[package]] 2304 name = "json-patch" 2305 + version = "3.0.1" 2306 source = "registry+https://github.com/rust-lang/crates.io-index" 2307 + checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" 2308 dependencies = [ 2309 "jsonptr", 2310 "serde", 2311 "serde_json", 2312 + "thiserror 1.0.69", 2313 ] 2314 2315 [[package]] 2316 name = "jsonptr" 2317 + version = "0.6.3" 2318 source = "registry+https://github.com/rust-lang/crates.io-index" 2319 + checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" 2320 dependencies = [ 2321 "serde", 2322 "serde_json", 2323 ] ··· 2328 source = "registry+https://github.com/rust-lang/crates.io-index" 2329 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" 2330 dependencies = [ 2331 + "bitflags 2.10.0", 2332 "serde", 2333 "unicode-segmentation", 2334 ] 2335 2336 [[package]] 2337 name = "kqueue" 2338 + version = "1.1.1" 2339 source = "registry+https://github.com/rust-lang/crates.io-index" 2340 + checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" 2341 dependencies = [ 2342 "kqueue-sys", 2343 "libc", ··· 2355 2356 [[package]] 2357 name = "kuchikiki" 2358 + version = "0.8.8-speedreader" 2359 source = "registry+https://github.com/rust-lang/crates.io-index" 2360 + checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" 2361 dependencies = [ 2362 "cssparser", 2363 "html5ever", 2364 + "indexmap 2.12.0", 2365 "selectors", 2366 ] 2367 ··· 2373 2374 [[package]] 2375 name = "lebe" 2376 + version = "0.5.3" 2377 source = "registry+https://github.com/rust-lang/crates.io-index" 2378 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 2379 2380 [[package]] 2381 name = "libappindicator" ··· 2403 2404 [[package]] 2405 name = "libc" 2406 + version = "0.2.177" 2407 source = "registry+https://github.com/rust-lang/crates.io-index" 2408 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 2409 2410 [[package]] 2411 name = "libfuzzer-sys" 2412 + version = "0.4.10" 2413 source = "registry+https://github.com/rust-lang/crates.io-index" 2414 + checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" 2415 dependencies = [ 2416 "arbitrary", 2417 "cc", 2418 ] 2419 2420 [[package]] ··· 2429 2430 [[package]] 2431 name = "libredox" 2432 + version = "0.1.10" 2433 source = "registry+https://github.com/rust-lang/crates.io-index" 2434 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 2435 dependencies = [ 2436 + "bitflags 2.10.0", 2437 "libc", 2438 ] 2439 2440 [[package]] 2441 name = "linux-raw-sys" 2442 + version = "0.11.0" 2443 source = "registry+https://github.com/rust-lang/crates.io-index" 2444 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 2445 + 2446 + [[package]] 2447 + name = "litemap" 2448 + version = "0.8.1" 2449 + source = "registry+https://github.com/rust-lang/crates.io-index" 2450 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2451 2452 [[package]] 2453 name = "litrs" 2454 + version = "1.0.0" 2455 source = "registry+https://github.com/rust-lang/crates.io-index" 2456 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 2457 2458 [[package]] 2459 name = "lock_api" 2460 + version = "0.4.14" 2461 source = "registry+https://github.com/rust-lang/crates.io-index" 2462 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2463 dependencies = [ 2464 "scopeguard", 2465 ] 2466 2467 [[package]] 2468 name = "log" 2469 + version = "0.4.28" 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2471 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2472 2473 [[package]] 2474 name = "loop9" ··· 2480 ] 2481 2482 [[package]] 2483 + name = "lru-slab" 2484 + version = "0.1.2" 2485 + source = "registry+https://github.com/rust-lang/crates.io-index" 2486 + checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2487 + 2488 + [[package]] 2489 name = "mac" 2490 version = "0.1.1" 2491 source = "registry+https://github.com/rust-lang/crates.io-index" 2492 checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2493 2494 [[package]] 2495 + name = "markup5ever" 2496 + version = "0.14.1" 2497 source = "registry+https://github.com/rust-lang/crates.io-index" 2498 + checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" 2499 dependencies = [ 2500 + "log", 2501 + "phf 0.11.3", 2502 + "phf_codegen 0.11.3", 2503 + "string_cache", 2504 + "string_cache_codegen", 2505 + "tendril", 2506 ] 2507 2508 [[package]] 2509 + name = "match_token" 2510 + version = "0.1.0" 2511 source = "registry+https://github.com/rust-lang/crates.io-index" 2512 + checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" 2513 dependencies = [ 2514 + "proc-macro2", 2515 + "quote", 2516 + "syn 2.0.109", 2517 ] 2518 2519 [[package]] ··· 2529 checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 2530 dependencies = [ 2531 "cfg-if", 2532 + "rayon", 2533 ] 2534 2535 [[package]] 2536 name = "memchr" 2537 + version = "2.7.6" 2538 source = "registry+https://github.com/rust-lang/crates.io-index" 2539 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2540 2541 [[package]] 2542 name = "memoffset" ··· 2554 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2555 2556 [[package]] 2557 name = "miniz_oxide" 2558 + version = "0.8.9" 2559 source = "registry+https://github.com/rust-lang/crates.io-index" 2560 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2561 dependencies = [ 2562 "adler2", 2563 "simd-adler32", ··· 2565 2566 [[package]] 2567 name = "mio" 2568 + version = "1.1.0" 2569 source = "registry+https://github.com/rust-lang/crates.io-index" 2570 + checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" 2571 dependencies = [ 2572 "libc", 2573 "log", 2574 + "wasi 0.11.1+wasi-snapshot-preview1", 2575 + "windows-sys 0.61.2", 2576 ] 2577 2578 [[package]] 2579 + name = "moxcms" 2580 + version = "0.7.9" 2581 source = "registry+https://github.com/rust-lang/crates.io-index" 2582 + checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" 2583 dependencies = [ 2584 + "num-traits", 2585 + "pxfm", 2586 ] 2587 2588 [[package]] ··· 2598 2599 [[package]] 2600 name = "muda" 2601 + version = "0.17.1" 2602 source = "registry+https://github.com/rust-lang/crates.io-index" 2603 + checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" 2604 dependencies = [ 2605 "crossbeam-channel", 2606 "dpi", 2607 "gtk", 2608 "keyboard-types", 2609 + "objc2 0.6.3", 2610 "objc2-app-kit", 2611 + "objc2-core-foundation", 2612 + "objc2-foundation 0.3.2", 2613 "once_cell", 2614 + "png 0.17.16", 2615 "serde", 2616 + "thiserror 2.0.17", 2617 + "windows-sys 0.60.2", 2618 ] 2619 2620 [[package]] 2621 name = "native-tls" 2622 + version = "0.2.14" 2623 source = "registry+https://github.com/rust-lang/crates.io-index" 2624 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 2625 dependencies = [ 2626 "libc", 2627 "log", ··· 2640 source = "registry+https://github.com/rust-lang/crates.io-index" 2641 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2642 dependencies = [ 2643 + "bitflags 2.10.0", 2644 "jni-sys", 2645 "log", 2646 "ndk-sys", 2647 "num_enum", 2648 "raw-window-handle", 2649 + "thiserror 1.0.69", 2650 ] 2651 2652 [[package]] ··· 2671 checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2672 2673 [[package]] 2674 + name = "nix" 2675 + version = "0.30.1" 2676 + source = "registry+https://github.com/rust-lang/crates.io-index" 2677 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2678 + dependencies = [ 2679 + "bitflags 2.10.0", 2680 + "cfg-if", 2681 + "cfg_aliases", 2682 + "libc", 2683 + "memoffset", 2684 + ] 2685 + 2686 + [[package]] 2687 name = "nodrop" 2688 version = "0.1.14" 2689 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2691 2692 [[package]] 2693 name = "nom" 2694 + version = "8.0.0" 2695 source = "registry+https://github.com/rust-lang/crates.io-index" 2696 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 2697 dependencies = [ 2698 "memchr", 2699 ] 2700 2701 [[package]] ··· 2706 2707 [[package]] 2708 name = "notify" 2709 + version = "8.2.0" 2710 source = "registry+https://github.com/rust-lang/crates.io-index" 2711 + checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" 2712 dependencies = [ 2713 + "bitflags 2.10.0", 2714 "fsevent-sys", 2715 "inotify", 2716 "kqueue", 2717 "libc", 2718 "log", 2719 + "mio", 2720 + "notify-types", 2721 "walkdir", 2722 + "windows-sys 0.60.2", 2723 ] 2724 2725 [[package]] 2726 + name = "notify-types" 2727 + version = "2.0.0" 2728 + source = "registry+https://github.com/rust-lang/crates.io-index" 2729 + checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" 2730 + 2731 + [[package]] 2732 name = "num-bigint" 2733 version = "0.4.6" 2734 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2752 dependencies = [ 2753 "proc-macro2", 2754 "quote", 2755 + "syn 2.0.109", 2756 ] 2757 2758 [[package]] ··· 2786 2787 [[package]] 2788 name = "num_enum" 2789 + version = "0.7.5" 2790 source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 2792 dependencies = [ 2793 "num_enum_derive", 2794 + "rustversion", 2795 ] 2796 2797 [[package]] 2798 name = "num_enum_derive" 2799 + version = "0.7.5" 2800 source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 2802 dependencies = [ 2803 + "proc-macro-crate 3.4.0", 2804 "proc-macro2", 2805 "quote", 2806 + "syn 2.0.109", 2807 ] 2808 2809 [[package]] ··· 2811 version = "0.3.5" 2812 source = "registry+https://github.com/rust-lang/crates.io-index" 2813 checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 2814 2815 [[package]] 2816 name = "objc2" 2817 + version = "0.5.2" 2818 source = "registry+https://github.com/rust-lang/crates.io-index" 2819 + checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 2820 dependencies = [ 2821 "objc-sys", 2822 + "objc2-encode", 2823 ] 2824 2825 [[package]] 2826 name = "objc2" 2827 + version = "0.6.3" 2828 source = "registry+https://github.com/rust-lang/crates.io-index" 2829 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 2830 dependencies = [ 2831 + "objc2-encode", 2832 + "objc2-exception-helper", 2833 ] 2834 2835 [[package]] 2836 name = "objc2-app-kit" 2837 + version = "0.3.2" 2838 source = "registry+https://github.com/rust-lang/crates.io-index" 2839 + checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 2840 dependencies = [ 2841 + "bitflags 2.10.0", 2842 + "block2 0.6.2", 2843 "libc", 2844 + "objc2 0.6.3", 2845 + "objc2-cloud-kit", 2846 "objc2-core-data", 2847 + "objc2-core-foundation", 2848 + "objc2-core-graphics", 2849 "objc2-core-image", 2850 + "objc2-core-text", 2851 + "objc2-core-video", 2852 + "objc2-foundation 0.3.2", 2853 + "objc2-quartz-core 0.3.2", 2854 ] 2855 2856 [[package]] 2857 name = "objc2-cloud-kit" 2858 + version = "0.3.2" 2859 source = "registry+https://github.com/rust-lang/crates.io-index" 2860 + checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" 2861 dependencies = [ 2862 + "bitflags 2.10.0", 2863 + "objc2 0.6.3", 2864 + "objc2-foundation 0.3.2", 2865 ] 2866 2867 [[package]] 2868 + name = "objc2-core-data" 2869 + version = "0.3.2" 2870 source = "registry+https://github.com/rust-lang/crates.io-index" 2871 + checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" 2872 dependencies = [ 2873 + "bitflags 2.10.0", 2874 + "objc2 0.6.3", 2875 + "objc2-foundation 0.3.2", 2876 + ] 2877 + 2878 + [[package]] 2879 + name = "objc2-core-foundation" 2880 + version = "0.3.2" 2881 + source = "registry+https://github.com/rust-lang/crates.io-index" 2882 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2883 + dependencies = [ 2884 + "bitflags 2.10.0", 2885 + "dispatch2", 2886 + "objc2 0.6.3", 2887 ] 2888 2889 [[package]] 2890 + name = "objc2-core-graphics" 2891 + version = "0.3.2" 2892 source = "registry+https://github.com/rust-lang/crates.io-index" 2893 + checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" 2894 dependencies = [ 2895 + "bitflags 2.10.0", 2896 + "dispatch2", 2897 + "objc2 0.6.3", 2898 + "objc2-core-foundation", 2899 + "objc2-io-surface", 2900 ] 2901 2902 [[package]] 2903 name = "objc2-core-image" 2904 + version = "0.3.2" 2905 source = "registry+https://github.com/rust-lang/crates.io-index" 2906 + checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" 2907 dependencies = [ 2908 + "objc2 0.6.3", 2909 + "objc2-foundation 0.3.2", 2910 ] 2911 2912 [[package]] 2913 + name = "objc2-core-text" 2914 + version = "0.3.2" 2915 source = "registry+https://github.com/rust-lang/crates.io-index" 2916 + checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" 2917 dependencies = [ 2918 + "bitflags 2.10.0", 2919 + "objc2 0.6.3", 2920 + "objc2-core-foundation", 2921 + "objc2-core-graphics", 2922 + ] 2923 + 2924 + [[package]] 2925 + name = "objc2-core-video" 2926 + version = "0.3.2" 2927 + source = "registry+https://github.com/rust-lang/crates.io-index" 2928 + checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" 2929 + dependencies = [ 2930 + "bitflags 2.10.0", 2931 + "objc2 0.6.3", 2932 + "objc2-core-foundation", 2933 + "objc2-core-graphics", 2934 + "objc2-io-surface", 2935 ] 2936 2937 [[package]] 2938 name = "objc2-encode" 2939 + version = "4.1.0" 2940 source = "registry+https://github.com/rust-lang/crates.io-index" 2941 + checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2942 2943 [[package]] 2944 + name = "objc2-exception-helper" 2945 + version = "0.1.1" 2946 source = "registry+https://github.com/rust-lang/crates.io-index" 2947 + checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" 2948 + dependencies = [ 2949 + "cc", 2950 + ] 2951 2952 [[package]] 2953 name = "objc2-foundation" ··· 2955 source = "registry+https://github.com/rust-lang/crates.io-index" 2956 checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2957 dependencies = [ 2958 + "bitflags 2.10.0", 2959 + "block2 0.5.1", 2960 "libc", 2961 "objc2 0.5.2", 2962 ] 2963 2964 [[package]] 2965 + name = "objc2-foundation" 2966 + version = "0.3.2" 2967 source = "registry+https://github.com/rust-lang/crates.io-index" 2968 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 2969 dependencies = [ 2970 + "bitflags 2.10.0", 2971 + "block2 0.6.2", 2972 + "libc", 2973 + "objc2 0.6.3", 2974 + "objc2-core-foundation", 2975 ] 2976 2977 [[package]] 2978 + name = "objc2-io-surface" 2979 + version = "0.3.2" 2980 source = "registry+https://github.com/rust-lang/crates.io-index" 2981 + checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" 2982 dependencies = [ 2983 + "bitflags 2.10.0", 2984 + "objc2 0.6.3", 2985 + "objc2-core-foundation", 2986 ] 2987 2988 [[package]] 2989 + name = "objc2-javascript-core" 2990 + version = "0.3.2" 2991 source = "registry+https://github.com/rust-lang/crates.io-index" 2992 + checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" 2993 dependencies = [ 2994 + "objc2 0.6.3", 2995 + "objc2-core-foundation", 2996 ] 2997 2998 [[package]] 2999 + name = "objc2-metal" 3000 version = "0.2.2" 3001 source = "registry+https://github.com/rust-lang/crates.io-index" 3002 + checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 3003 dependencies = [ 3004 + "bitflags 2.10.0", 3005 + "block2 0.5.1", 3006 "objc2 0.5.2", 3007 + "objc2-foundation 0.2.2", 3008 ] 3009 3010 [[package]] 3011 + name = "objc2-quartz-core" 3012 version = "0.2.2" 3013 source = "registry+https://github.com/rust-lang/crates.io-index" 3014 + checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 3015 dependencies = [ 3016 + "bitflags 2.10.0", 3017 + "block2 0.5.1", 3018 "objc2 0.5.2", 3019 + "objc2-foundation 0.2.2", 3020 + "objc2-metal", 3021 ] 3022 3023 [[package]] 3024 + name = "objc2-quartz-core" 3025 + version = "0.3.2" 3026 source = "registry+https://github.com/rust-lang/crates.io-index" 3027 + checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" 3028 dependencies = [ 3029 + "bitflags 2.10.0", 3030 + "objc2 0.6.3", 3031 + "objc2-foundation 0.3.2", 3032 ] 3033 3034 [[package]] 3035 + name = "objc2-security" 3036 + version = "0.3.2" 3037 source = "registry+https://github.com/rust-lang/crates.io-index" 3038 + checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" 3039 dependencies = [ 3040 + "bitflags 2.10.0", 3041 + "objc2 0.6.3", 3042 + "objc2-core-foundation", 3043 ] 3044 3045 [[package]] 3046 + name = "objc2-ui-kit" 3047 + version = "0.3.2" 3048 source = "registry+https://github.com/rust-lang/crates.io-index" 3049 + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" 3050 dependencies = [ 3051 + "bitflags 2.10.0", 3052 + "objc2 0.6.3", 3053 + "objc2-core-foundation", 3054 + "objc2-foundation 0.3.2", 3055 ] 3056 3057 [[package]] 3058 + name = "objc2-web-kit" 3059 + version = "0.3.2" 3060 source = "registry+https://github.com/rust-lang/crates.io-index" 3061 + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" 3062 dependencies = [ 3063 + "bitflags 2.10.0", 3064 + "block2 0.6.2", 3065 + "objc2 0.6.3", 3066 + "objc2-app-kit", 3067 + "objc2-core-foundation", 3068 + "objc2-foundation 0.3.2", 3069 + "objc2-javascript-core", 3070 + "objc2-security", 3071 ] 3072 3073 [[package]] 3074 name = "once_cell" 3075 + version = "1.21.3" 3076 source = "registry+https://github.com/rust-lang/crates.io-index" 3077 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 3078 3079 [[package]] 3080 name = "open" 3081 + version = "5.3.2" 3082 source = "registry+https://github.com/rust-lang/crates.io-index" 3083 + checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" 3084 dependencies = [ 3085 + "dunce", 3086 "is-wsl", 3087 "libc", 3088 "pathdiff", ··· 3090 3091 [[package]] 3092 name = "openssl" 3093 + version = "0.10.74" 3094 source = "registry+https://github.com/rust-lang/crates.io-index" 3095 + checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 3096 dependencies = [ 3097 + "bitflags 2.10.0", 3098 "cfg-if", 3099 "foreign-types 0.3.2", 3100 "libc", ··· 3111 dependencies = [ 3112 "proc-macro2", 3113 "quote", 3114 + "syn 2.0.109", 3115 ] 3116 3117 [[package]] 3118 name = "openssl-probe" 3119 + version = "0.1.6" 3120 source = "registry+https://github.com/rust-lang/crates.io-index" 3121 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 3122 3123 [[package]] 3124 name = "openssl-sys" 3125 + version = "0.9.110" 3126 source = "registry+https://github.com/rust-lang/crates.io-index" 3127 + checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" 3128 dependencies = [ 3129 "cc", 3130 "libc", ··· 3139 checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 3140 3141 [[package]] 3142 + name = "ordered-multimap" 3143 + version = "0.7.3" 3144 + source = "registry+https://github.com/rust-lang/crates.io-index" 3145 + checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" 3146 + dependencies = [ 3147 + "dlv-list", 3148 + "hashbrown 0.14.5", 3149 + ] 3150 + 3151 + [[package]] 3152 + name = "ordered-stream" 3153 + version = "0.2.0" 3154 + source = "registry+https://github.com/rust-lang/crates.io-index" 3155 + checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 3156 + dependencies = [ 3157 + "futures-core", 3158 + "pin-project-lite", 3159 + ] 3160 + 3161 + [[package]] 3162 name = "os_pipe" 3163 + version = "1.2.3" 3164 source = "registry+https://github.com/rust-lang/crates.io-index" 3165 + checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" 3166 dependencies = [ 3167 "libc", 3168 + "windows-sys 0.61.2", 3169 ] 3170 3171 [[package]] ··· 3194 ] 3195 3196 [[package]] 3197 + name = "parking" 3198 + version = "2.2.1" 3199 + source = "registry+https://github.com/rust-lang/crates.io-index" 3200 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 3201 + 3202 + [[package]] 3203 name = "parking_lot" 3204 + version = "0.12.5" 3205 source = "registry+https://github.com/rust-lang/crates.io-index" 3206 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 3207 dependencies = [ 3208 "lock_api", 3209 "parking_lot_core", ··· 3211 3212 [[package]] 3213 name = "parking_lot_core" 3214 + version = "0.9.12" 3215 source = "registry+https://github.com/rust-lang/crates.io-index" 3216 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 3217 dependencies = [ 3218 "cfg-if", 3219 "libc", 3220 "redox_syscall", 3221 "smallvec", 3222 + "windows-link 0.2.1", 3223 ] 3224 3225 [[package]] ··· 3230 3231 [[package]] 3232 name = "pathdiff" 3233 + version = "0.2.3" 3234 source = "registry+https://github.com/rust-lang/crates.io-index" 3235 + checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 3236 3237 [[package]] 3238 name = "percent-encoding" 3239 + version = "2.3.2" 3240 source = "registry+https://github.com/rust-lang/crates.io-index" 3241 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3242 3243 [[package]] 3244 name = "phf" ··· 3246 source = "registry+https://github.com/rust-lang/crates.io-index" 3247 checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 3248 dependencies = [ 3249 "phf_shared 0.8.0", 3250 ] 3251 3252 [[package]] ··· 3255 source = "registry+https://github.com/rust-lang/crates.io-index" 3256 checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" 3257 dependencies = [ 3258 + "phf_macros 0.10.0", 3259 "phf_shared 0.10.0", 3260 + "proc-macro-hack", 3261 ] 3262 3263 [[package]] 3264 name = "phf" 3265 + version = "0.11.3" 3266 source = "registry+https://github.com/rust-lang/crates.io-index" 3267 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 3268 dependencies = [ 3269 + "phf_macros 0.11.3", 3270 + "phf_shared 0.11.3", 3271 ] 3272 3273 [[package]] ··· 3282 3283 [[package]] 3284 name = "phf_codegen" 3285 + version = "0.11.3" 3286 source = "registry+https://github.com/rust-lang/crates.io-index" 3287 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 3288 dependencies = [ 3289 + "phf_generator 0.11.3", 3290 + "phf_shared 0.11.3", 3291 ] 3292 3293 [[package]] ··· 3312 3313 [[package]] 3314 name = "phf_generator" 3315 + version = "0.11.3" 3316 source = "registry+https://github.com/rust-lang/crates.io-index" 3317 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 3318 dependencies = [ 3319 + "phf_shared 0.11.3", 3320 "rand 0.8.5", 3321 ] 3322 3323 [[package]] 3324 name = "phf_macros" 3325 + version = "0.10.0" 3326 source = "registry+https://github.com/rust-lang/crates.io-index" 3327 + checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" 3328 dependencies = [ 3329 + "phf_generator 0.10.0", 3330 + "phf_shared 0.10.0", 3331 "proc-macro-hack", 3332 "proc-macro2", 3333 "quote", ··· 3336 3337 [[package]] 3338 name = "phf_macros" 3339 + version = "0.11.3" 3340 source = "registry+https://github.com/rust-lang/crates.io-index" 3341 + checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 3342 dependencies = [ 3343 + "phf_generator 0.11.3", 3344 + "phf_shared 0.11.3", 3345 "proc-macro2", 3346 "quote", 3347 + "syn 2.0.109", 3348 ] 3349 3350 [[package]] ··· 3353 source = "registry+https://github.com/rust-lang/crates.io-index" 3354 checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 3355 dependencies = [ 3356 + "siphasher 0.3.11", 3357 ] 3358 3359 [[package]] ··· 3362 source = "registry+https://github.com/rust-lang/crates.io-index" 3363 checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 3364 dependencies = [ 3365 + "siphasher 0.3.11", 3366 ] 3367 3368 [[package]] 3369 name = "phf_shared" 3370 + version = "0.11.3" 3371 source = "registry+https://github.com/rust-lang/crates.io-index" 3372 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 3373 dependencies = [ 3374 + "siphasher 1.0.1", 3375 ] 3376 3377 [[package]] 3378 name = "pin-project-lite" 3379 + version = "0.2.16" 3380 source = "registry+https://github.com/rust-lang/crates.io-index" 3381 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 3382 3383 [[package]] 3384 name = "pin-utils" ··· 3387 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 3388 3389 [[package]] 3390 + name = "piper" 3391 + version = "0.2.4" 3392 + source = "registry+https://github.com/rust-lang/crates.io-index" 3393 + checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 3394 + dependencies = [ 3395 + "atomic-waker", 3396 + "fastrand", 3397 + "futures-io", 3398 + ] 3399 + 3400 + [[package]] 3401 name = "pkg-config" 3402 + version = "0.3.32" 3403 source = "registry+https://github.com/rust-lang/crates.io-index" 3404 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 3405 3406 [[package]] 3407 name = "plist" 3408 + version = "1.8.0" 3409 source = "registry+https://github.com/rust-lang/crates.io-index" 3410 + checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" 3411 dependencies = [ 3412 "base64 0.22.1", 3413 + "indexmap 2.12.0", 3414 "quick-xml", 3415 "serde", 3416 "time", ··· 3418 3419 [[package]] 3420 name = "png" 3421 + version = "0.17.16" 3422 source = "registry+https://github.com/rust-lang/crates.io-index" 3423 + checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 3424 dependencies = [ 3425 "bitflags 1.3.2", 3426 "crc32fast", 3427 "fdeflate", 3428 "flate2", 3429 + "miniz_oxide", 3430 + ] 3431 + 3432 + [[package]] 3433 + name = "png" 3434 + version = "0.18.0" 3435 + source = "registry+https://github.com/rust-lang/crates.io-index" 3436 + checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" 3437 + dependencies = [ 3438 + "bitflags 2.10.0", 3439 + "crc32fast", 3440 + "fdeflate", 3441 + "flate2", 3442 + "miniz_oxide", 3443 + ] 3444 + 3445 + [[package]] 3446 + name = "polling" 3447 + version = "3.11.0" 3448 + source = "registry+https://github.com/rust-lang/crates.io-index" 3449 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 3450 + dependencies = [ 3451 + "cfg-if", 3452 + "concurrent-queue", 3453 + "hermit-abi", 3454 + "pin-project-lite", 3455 + "rustix", 3456 + "windows-sys 0.61.2", 3457 + ] 3458 + 3459 + [[package]] 3460 + name = "potential_utf" 3461 + version = "0.1.4" 3462 + source = "registry+https://github.com/rust-lang/crates.io-index" 3463 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 3464 + dependencies = [ 3465 + "zerovec", 3466 ] 3467 3468 [[package]] ··· 3473 3474 [[package]] 3475 name = "ppv-lite86" 3476 + version = "0.2.21" 3477 source = "registry+https://github.com/rust-lang/crates.io-index" 3478 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 3479 dependencies = [ 3480 "zerocopy", 3481 ] ··· 3502 source = "registry+https://github.com/rust-lang/crates.io-index" 3503 checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" 3504 dependencies = [ 3505 + "toml_datetime 0.6.3", 3506 "toml_edit 0.20.2", 3507 ] 3508 3509 [[package]] 3510 + name = "proc-macro-crate" 3511 + version = "3.4.0" 3512 + source = "registry+https://github.com/rust-lang/crates.io-index" 3513 + checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 3514 + dependencies = [ 3515 + "toml_edit 0.23.7", 3516 + ] 3517 + 3518 + [[package]] 3519 name = "proc-macro-error" 3520 version = "1.0.4" 3521 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3547 3548 [[package]] 3549 name = "proc-macro2" 3550 + version = "1.0.103" 3551 source = "registry+https://github.com/rust-lang/crates.io-index" 3552 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 3553 dependencies = [ 3554 "unicode-ident", 3555 ] 3556 3557 [[package]] 3558 name = "profiling" 3559 + version = "1.0.17" 3560 source = "registry+https://github.com/rust-lang/crates.io-index" 3561 + checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 3562 dependencies = [ 3563 "profiling-procmacros", 3564 ] 3565 3566 [[package]] 3567 name = "profiling-procmacros" 3568 + version = "1.0.17" 3569 source = "registry+https://github.com/rust-lang/crates.io-index" 3570 + checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 3571 dependencies = [ 3572 "quote", 3573 + "syn 2.0.109", 3574 ] 3575 3576 [[package]] ··· 3581 3582 [[package]] 3583 name = "publicsuffix" 3584 + version = "2.3.0" 3585 source = "registry+https://github.com/rust-lang/crates.io-index" 3586 + checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" 3587 dependencies = [ 3588 + "idna", 3589 "psl-types", 3590 ] 3591 3592 [[package]] 3593 + name = "pxfm" 3594 + version = "0.1.25" 3595 + source = "registry+https://github.com/rust-lang/crates.io-index" 3596 + checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" 3597 + dependencies = [ 3598 + "num-traits", 3599 + ] 3600 + 3601 + [[package]] 3602 name = "qoi" 3603 version = "0.4.1" 3604 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3615 3616 [[package]] 3617 name = "quick-xml" 3618 + version = "0.38.3" 3619 source = "registry+https://github.com/rust-lang/crates.io-index" 3620 + checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 3621 dependencies = [ 3622 "memchr", 3623 ] 3624 3625 [[package]] 3626 name = "quinn" 3627 + version = "0.11.9" 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 3629 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 3630 dependencies = [ 3631 "bytes", 3632 + "cfg_aliases", 3633 "pin-project-lite", 3634 "quinn-proto", 3635 "quinn-udp", 3636 "rustc-hash", 3637 "rustls", 3638 "socket2", 3639 + "thiserror 2.0.17", 3640 "tokio", 3641 "tracing", 3642 + "web-time", 3643 ] 3644 3645 [[package]] 3646 name = "quinn-proto" 3647 + version = "0.11.13" 3648 source = "registry+https://github.com/rust-lang/crates.io-index" 3649 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 3650 dependencies = [ 3651 "bytes", 3652 + "getrandom 0.3.4", 3653 + "lru-slab", 3654 + "rand 0.9.2", 3655 "ring", 3656 "rustc-hash", 3657 "rustls", 3658 + "rustls-pki-types", 3659 "slab", 3660 + "thiserror 2.0.17", 3661 "tinyvec", 3662 "tracing", 3663 + "web-time", 3664 ] 3665 3666 [[package]] 3667 name = "quinn-udp" 3668 + version = "0.5.14" 3669 source = "registry+https://github.com/rust-lang/crates.io-index" 3670 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 3671 dependencies = [ 3672 + "cfg_aliases", 3673 "libc", 3674 "once_cell", 3675 "socket2", 3676 "tracing", 3677 + "windows-sys 0.60.2", 3678 ] 3679 3680 [[package]] 3681 name = "quote" 3682 + version = "1.0.42" 3683 source = "registry+https://github.com/rust-lang/crates.io-index" 3684 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 3685 dependencies = [ 3686 "proc-macro2", 3687 ] 3688 3689 [[package]] 3690 + name = "r-efi" 3691 + version = "5.3.0" 3692 + source = "registry+https://github.com/rust-lang/crates.io-index" 3693 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 3694 + 3695 + [[package]] 3696 name = "rand" 3697 version = "0.7.3" 3698 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3718 ] 3719 3720 [[package]] 3721 + name = "rand" 3722 + version = "0.9.2" 3723 + source = "registry+https://github.com/rust-lang/crates.io-index" 3724 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 3725 + dependencies = [ 3726 + "rand_chacha 0.9.0", 3727 + "rand_core 0.9.3", 3728 + ] 3729 + 3730 + [[package]] 3731 name = "rand_chacha" 3732 version = "0.2.2" 3733 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3748 ] 3749 3750 [[package]] 3751 + name = "rand_chacha" 3752 + version = "0.9.0" 3753 + source = "registry+https://github.com/rust-lang/crates.io-index" 3754 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 3755 + dependencies = [ 3756 + "ppv-lite86", 3757 + "rand_core 0.9.3", 3758 + ] 3759 + 3760 + [[package]] 3761 name = "rand_core" 3762 version = "0.5.1" 3763 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3772 source = "registry+https://github.com/rust-lang/crates.io-index" 3773 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 3774 dependencies = [ 3775 + "getrandom 0.2.16", 3776 + ] 3777 + 3778 + [[package]] 3779 + name = "rand_core" 3780 + version = "0.9.3" 3781 + source = "registry+https://github.com/rust-lang/crates.io-index" 3782 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 3783 + dependencies = [ 3784 + "getrandom 0.3.4", 3785 ] 3786 3787 [[package]] ··· 3832 "rand_chacha 0.3.1", 3833 "simd_helpers", 3834 "system-deps", 3835 + "thiserror 1.0.69", 3836 "v_frame", 3837 "wasm-bindgen", 3838 ] 3839 3840 [[package]] 3841 name = "ravif" 3842 + version = "0.11.20" 3843 source = "registry+https://github.com/rust-lang/crates.io-index" 3844 + checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" 3845 dependencies = [ 3846 "avif-serialize", 3847 "imgref", 3848 "loop9", 3849 "quick-error", 3850 "rav1e", 3851 + "rayon", 3852 "rgb", 3853 ] 3854 ··· 3860 3861 [[package]] 3862 name = "rayon" 3863 + version = "1.11.0" 3864 source = "registry+https://github.com/rust-lang/crates.io-index" 3865 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 3866 dependencies = [ 3867 "either", 3868 "rayon-core", ··· 3870 3871 [[package]] 3872 name = "rayon-core" 3873 + version = "1.13.0" 3874 source = "registry+https://github.com/rust-lang/crates.io-index" 3875 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 3876 dependencies = [ 3877 "crossbeam-deque", 3878 "crossbeam-utils", ··· 3880 3881 [[package]] 3882 name = "redox_syscall" 3883 + version = "0.5.18" 3884 source = "registry+https://github.com/rust-lang/crates.io-index" 3885 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 3886 dependencies = [ 3887 + "bitflags 2.10.0", 3888 ] 3889 3890 [[package]] 3891 name = "redox_users" 3892 + version = "0.5.2" 3893 source = "registry+https://github.com/rust-lang/crates.io-index" 3894 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 3895 dependencies = [ 3896 + "getrandom 0.2.16", 3897 "libredox", 3898 + "thiserror 2.0.17", 3899 + ] 3900 + 3901 + [[package]] 3902 + name = "ref-cast" 3903 + version = "1.0.25" 3904 + source = "registry+https://github.com/rust-lang/crates.io-index" 3905 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 3906 + dependencies = [ 3907 + "ref-cast-impl", 3908 + ] 3909 + 3910 + [[package]] 3911 + name = "ref-cast-impl" 3912 + version = "1.0.25" 3913 + source = "registry+https://github.com/rust-lang/crates.io-index" 3914 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 3915 + dependencies = [ 3916 + "proc-macro2", 3917 + "quote", 3918 + "syn 2.0.109", 3919 ] 3920 3921 [[package]] 3922 name = "regex" 3923 + version = "1.12.2" 3924 source = "registry+https://github.com/rust-lang/crates.io-index" 3925 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 3926 dependencies = [ 3927 "aho-corasick", 3928 "memchr", ··· 3932 3933 [[package]] 3934 name = "regex-automata" 3935 + version = "0.4.13" 3936 source = "registry+https://github.com/rust-lang/crates.io-index" 3937 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 3938 dependencies = [ 3939 "aho-corasick", 3940 "memchr", ··· 3943 3944 [[package]] 3945 name = "regex-syntax" 3946 + version = "0.8.8" 3947 source = "registry+https://github.com/rust-lang/crates.io-index" 3948 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 3949 3950 [[package]] 3951 name = "reqwest" 3952 + version = "0.12.24" 3953 source = "registry+https://github.com/rust-lang/crates.io-index" 3954 + checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" 3955 dependencies = [ 3956 "base64 0.22.1", 3957 "bytes", ··· 3969 "hyper-rustls", 3970 "hyper-tls", 3971 "hyper-util", 3972 "js-sys", 3973 "log", 3974 "mime", 3975 "native-tls", 3976 "percent-encoding", 3977 "pin-project-lite", 3978 "quinn", 3979 "rustls", 3980 "rustls-pki-types", 3981 "serde", 3982 "serde_json", 3983 "serde_urlencoded", 3984 "sync_wrapper", 3985 "tokio", 3986 "tokio-native-tls", 3987 "tokio-rustls", 3988 "tokio-util", 3989 + "tower", 3990 + "tower-http", 3991 "tower-service", 3992 "url", 3993 "wasm-bindgen", ··· 3995 "wasm-streams", 3996 "web-sys", 3997 "webpki-roots", 3998 ] 3999 4000 [[package]] 4001 name = "rgb" 4002 + version = "0.8.52" 4003 source = "registry+https://github.com/rust-lang/crates.io-index" 4004 + checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" 4005 4006 [[package]] 4007 name = "ring" 4008 + version = "0.17.14" 4009 source = "registry+https://github.com/rust-lang/crates.io-index" 4010 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 4011 dependencies = [ 4012 "cc", 4013 "cfg-if", 4014 + "getrandom 0.2.16", 4015 "libc", 4016 "untrusted", 4017 "windows-sys 0.52.0", 4018 ] 4019 4020 [[package]] 4021 + name = "rust-ini" 4022 + version = "0.21.3" 4023 source = "registry+https://github.com/rust-lang/crates.io-index" 4024 + checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" 4025 + dependencies = [ 4026 + "cfg-if", 4027 + "ordered-multimap", 4028 + ] 4029 4030 [[package]] 4031 name = "rustc-hash" 4032 + version = "2.1.1" 4033 source = "registry+https://github.com/rust-lang/crates.io-index" 4034 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 4035 4036 [[package]] 4037 name = "rustc_version" ··· 4044 4045 [[package]] 4046 name = "rustix" 4047 + version = "1.1.2" 4048 source = "registry+https://github.com/rust-lang/crates.io-index" 4049 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 4050 dependencies = [ 4051 + "bitflags 2.10.0", 4052 "errno", 4053 "libc", 4054 "linux-raw-sys", 4055 + "windows-sys 0.61.2", 4056 ] 4057 4058 [[package]] 4059 name = "rustls" 4060 + version = "0.23.35" 4061 source = "registry+https://github.com/rust-lang/crates.io-index" 4062 + checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" 4063 dependencies = [ 4064 "once_cell", 4065 "ring", ··· 4070 ] 4071 4072 [[package]] 4073 + name = "rustls-pki-types" 4074 + version = "1.13.0" 4075 source = "registry+https://github.com/rust-lang/crates.io-index" 4076 + checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" 4077 dependencies = [ 4078 + "web-time", 4079 + "zeroize", 4080 ] 4081 4082 [[package]] 4083 name = "rustls-webpki" 4084 + version = "0.103.8" 4085 source = "registry+https://github.com/rust-lang/crates.io-index" 4086 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 4087 dependencies = [ 4088 "ring", 4089 "rustls-pki-types", ··· 4091 ] 4092 4093 [[package]] 4094 + name = "rustversion" 4095 + version = "1.0.22" 4096 + source = "registry+https://github.com/rust-lang/crates.io-index" 4097 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 4098 + 4099 + [[package]] 4100 name = "ryu" 4101 + version = "1.0.20" 4102 source = "registry+https://github.com/rust-lang/crates.io-index" 4103 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 4104 4105 [[package]] 4106 name = "same-file" ··· 4113 4114 [[package]] 4115 name = "schannel" 4116 + version = "0.1.28" 4117 source = "registry+https://github.com/rust-lang/crates.io-index" 4118 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 4119 dependencies = [ 4120 + "windows-sys 0.61.2", 4121 ] 4122 4123 [[package]] 4124 name = "schemars" 4125 + version = "0.8.22" 4126 source = "registry+https://github.com/rust-lang/crates.io-index" 4127 + checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" 4128 dependencies = [ 4129 "dyn-clone", 4130 "indexmap 1.9.3", ··· 4136 ] 4137 4138 [[package]] 4139 + name = "schemars" 4140 + version = "0.9.0" 4141 + source = "registry+https://github.com/rust-lang/crates.io-index" 4142 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 4143 + dependencies = [ 4144 + "dyn-clone", 4145 + "ref-cast", 4146 + "serde", 4147 + "serde_json", 4148 + ] 4149 + 4150 + [[package]] 4151 + name = "schemars" 4152 + version = "1.1.0" 4153 + source = "registry+https://github.com/rust-lang/crates.io-index" 4154 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 4155 + dependencies = [ 4156 + "dyn-clone", 4157 + "ref-cast", 4158 + "serde", 4159 + "serde_json", 4160 + ] 4161 + 4162 + [[package]] 4163 name = "schemars_derive" 4164 + version = "0.8.22" 4165 source = "registry+https://github.com/rust-lang/crates.io-index" 4166 + checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" 4167 dependencies = [ 4168 "proc-macro2", 4169 "quote", 4170 "serde_derive_internals", 4171 + "syn 2.0.109", 4172 ] 4173 4174 [[package]] ··· 4183 source = "registry+https://github.com/rust-lang/crates.io-index" 4184 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4185 dependencies = [ 4186 + "bitflags 2.10.0", 4187 "core-foundation 0.9.4", 4188 "core-foundation-sys", 4189 "libc", ··· 4192 4193 [[package]] 4194 name = "security-framework-sys" 4195 + version = "2.15.0" 4196 source = "registry+https://github.com/rust-lang/crates.io-index" 4197 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 4198 dependencies = [ 4199 "core-foundation-sys", 4200 "libc", ··· 4202 4203 [[package]] 4204 name = "selectors" 4205 + version = "0.24.0" 4206 source = "registry+https://github.com/rust-lang/crates.io-index" 4207 + checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" 4208 dependencies = [ 4209 "bitflags 1.3.2", 4210 "cssparser", 4211 "derive_more", 4212 "fxhash", 4213 "log", 4214 "phf 0.8.0", 4215 "phf_codegen 0.8.0", 4216 "precomputed-hash", 4217 "servo_arc", 4218 "smallvec", 4219 ] 4220 4221 [[package]] 4222 name = "semver" 4223 + version = "1.0.27" 4224 source = "registry+https://github.com/rust-lang/crates.io-index" 4225 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4226 dependencies = [ 4227 "serde", 4228 + "serde_core", 4229 ] 4230 4231 [[package]] 4232 name = "serde" 4233 + version = "1.0.228" 4234 source = "registry+https://github.com/rust-lang/crates.io-index" 4235 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 4236 dependencies = [ 4237 + "serde_core", 4238 "serde_derive", 4239 ] 4240 4241 [[package]] 4242 name = "serde-untagged" 4243 + version = "0.1.9" 4244 source = "registry+https://github.com/rust-lang/crates.io-index" 4245 + checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" 4246 dependencies = [ 4247 "erased-serde", 4248 "serde", 4249 + "serde_core", 4250 "typeid", 4251 ] 4252 4253 [[package]] 4254 + name = "serde_core" 4255 + version = "1.0.228" 4256 + source = "registry+https://github.com/rust-lang/crates.io-index" 4257 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 4258 + dependencies = [ 4259 + "serde_derive", 4260 + ] 4261 + 4262 + [[package]] 4263 name = "serde_derive" 4264 + version = "1.0.228" 4265 source = "registry+https://github.com/rust-lang/crates.io-index" 4266 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 4267 dependencies = [ 4268 "proc-macro2", 4269 "quote", 4270 + "syn 2.0.109", 4271 ] 4272 4273 [[package]] ··· 4278 dependencies = [ 4279 "proc-macro2", 4280 "quote", 4281 + "syn 2.0.109", 4282 ] 4283 4284 [[package]] 4285 name = "serde_json" 4286 + version = "1.0.145" 4287 source = "registry+https://github.com/rust-lang/crates.io-index" 4288 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 4289 dependencies = [ 4290 + "itoa", 4291 "memchr", 4292 "ryu", 4293 "serde", 4294 + "serde_core", 4295 ] 4296 4297 [[package]] 4298 name = "serde_repr" 4299 + version = "0.1.20" 4300 source = "registry+https://github.com/rust-lang/crates.io-index" 4301 + checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 4302 dependencies = [ 4303 "proc-macro2", 4304 "quote", 4305 + "syn 2.0.109", 4306 ] 4307 4308 [[package]] 4309 name = "serde_spanned" 4310 + version = "0.6.9" 4311 source = "registry+https://github.com/rust-lang/crates.io-index" 4312 + checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" 4313 dependencies = [ 4314 "serde", 4315 ] 4316 4317 [[package]] 4318 + name = "serde_spanned" 4319 + version = "1.0.3" 4320 + source = "registry+https://github.com/rust-lang/crates.io-index" 4321 + checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" 4322 + dependencies = [ 4323 + "serde_core", 4324 + ] 4325 + 4326 + [[package]] 4327 name = "serde_urlencoded" 4328 version = "0.7.1" 4329 source = "registry+https://github.com/rust-lang/crates.io-index" 4330 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 4331 dependencies = [ 4332 "form_urlencoded", 4333 + "itoa", 4334 "ryu", 4335 "serde", 4336 ] 4337 4338 [[package]] 4339 name = "serde_with" 4340 + version = "3.15.1" 4341 source = "registry+https://github.com/rust-lang/crates.io-index" 4342 + checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" 4343 dependencies = [ 4344 "base64 0.22.1", 4345 "chrono", 4346 "hex", 4347 "indexmap 1.9.3", 4348 + "indexmap 2.12.0", 4349 + "schemars 0.9.0", 4350 + "schemars 1.1.0", 4351 + "serde_core", 4352 "serde_json", 4353 "serde_with_macros", 4354 "time", ··· 4356 4357 [[package]] 4358 name = "serde_with_macros" 4359 + version = "3.15.1" 4360 source = "registry+https://github.com/rust-lang/crates.io-index" 4361 + checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" 4362 dependencies = [ 4363 "darling", 4364 "proc-macro2", 4365 "quote", 4366 + "syn 2.0.109", 4367 ] 4368 4369 [[package]] 4370 name = "serialize-to-javascript" 4371 + version = "0.1.2" 4372 source = "registry+https://github.com/rust-lang/crates.io-index" 4373 + checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" 4374 dependencies = [ 4375 "serde", 4376 "serde_json", ··· 4379 4380 [[package]] 4381 name = "serialize-to-javascript-impl" 4382 + version = "0.1.2" 4383 source = "registry+https://github.com/rust-lang/crates.io-index" 4384 + checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" 4385 dependencies = [ 4386 "proc-macro2", 4387 "quote", 4388 + "syn 2.0.109", 4389 ] 4390 4391 [[package]] 4392 name = "servo_arc" 4393 + version = "0.2.0" 4394 source = "registry+https://github.com/rust-lang/crates.io-index" 4395 + checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" 4396 dependencies = [ 4397 "nodrop", 4398 "stable_deref_trait", ··· 4400 4401 [[package]] 4402 name = "sha2" 4403 + version = "0.10.9" 4404 source = "registry+https://github.com/rust-lang/crates.io-index" 4405 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 4406 dependencies = [ 4407 "cfg-if", 4408 "cpufeatures", ··· 4411 4412 [[package]] 4413 name = "shared_child" 4414 + version = "1.1.1" 4415 source = "registry+https://github.com/rust-lang/crates.io-index" 4416 + checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" 4417 dependencies = [ 4418 "libc", 4419 + "sigchld", 4420 + "windows-sys 0.60.2", 4421 ] 4422 4423 [[package]] ··· 4427 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 4428 4429 [[package]] 4430 + name = "sigchld" 4431 + version = "0.2.4" 4432 + source = "registry+https://github.com/rust-lang/crates.io-index" 4433 + checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" 4434 + dependencies = [ 4435 + "libc", 4436 + "os_pipe", 4437 + "signal-hook", 4438 + ] 4439 + 4440 + [[package]] 4441 + name = "signal-hook" 4442 + version = "0.3.18" 4443 + source = "registry+https://github.com/rust-lang/crates.io-index" 4444 + checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" 4445 + dependencies = [ 4446 + "libc", 4447 + "signal-hook-registry", 4448 + ] 4449 + 4450 + [[package]] 4451 + name = "signal-hook-registry" 4452 + version = "1.4.6" 4453 + source = "registry+https://github.com/rust-lang/crates.io-index" 4454 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 4455 + dependencies = [ 4456 + "libc", 4457 + ] 4458 + 4459 + [[package]] 4460 name = "simd-adler32" 4461 version = "0.3.7" 4462 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4478 checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 4479 4480 [[package]] 4481 + name = "siphasher" 4482 + version = "1.0.1" 4483 + source = "registry+https://github.com/rust-lang/crates.io-index" 4484 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 4485 + 4486 + [[package]] 4487 name = "slab" 4488 + version = "0.4.11" 4489 source = "registry+https://github.com/rust-lang/crates.io-index" 4490 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 4491 4492 [[package]] 4493 name = "smallvec" 4494 + version = "1.15.1" 4495 source = "registry+https://github.com/rust-lang/crates.io-index" 4496 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 4497 4498 [[package]] 4499 name = "socket2" 4500 + version = "0.6.1" 4501 source = "registry+https://github.com/rust-lang/crates.io-index" 4502 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 4503 dependencies = [ 4504 "libc", 4505 + "windows-sys 0.60.2", 4506 ] 4507 4508 [[package]] ··· 4518 "js-sys", 4519 "log", 4520 "objc2 0.5.2", 4521 + "objc2-foundation 0.2.2", 4522 + "objc2-quartz-core 0.2.2", 4523 "raw-window-handle", 4524 "redox_syscall", 4525 "wasm-bindgen", ··· 4554 ] 4555 4556 [[package]] 4557 + name = "stable_deref_trait" 4558 + version = "1.2.1" 4559 source = "registry+https://github.com/rust-lang/crates.io-index" 4560 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 4561 4562 [[package]] 4563 + name = "static_assertions" 4564 + version = "1.1.0" 4565 source = "registry+https://github.com/rust-lang/crates.io-index" 4566 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4567 4568 [[package]] 4569 name = "string_cache" 4570 + version = "0.8.9" 4571 source = "registry+https://github.com/rust-lang/crates.io-index" 4572 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 4573 dependencies = [ 4574 "new_debug_unreachable", 4575 "parking_lot", 4576 + "phf_shared 0.11.3", 4577 "precomputed-hash", 4578 "serde", 4579 ] 4580 4581 [[package]] 4582 name = "string_cache_codegen" 4583 + version = "0.5.4" 4584 source = "registry+https://github.com/rust-lang/crates.io-index" 4585 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 4586 dependencies = [ 4587 + "phf_generator 0.11.3", 4588 + "phf_shared 0.11.3", 4589 "proc-macro2", 4590 "quote", 4591 ] ··· 4626 4627 [[package]] 4628 name = "syn" 4629 + version = "2.0.109" 4630 source = "registry+https://github.com/rust-lang/crates.io-index" 4631 + checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" 4632 dependencies = [ 4633 "proc-macro2", 4634 "quote", ··· 4637 4638 [[package]] 4639 name = "sync_wrapper" 4640 + version = "1.0.2" 4641 source = "registry+https://github.com/rust-lang/crates.io-index" 4642 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 4643 dependencies = [ 4644 "futures-core", 4645 ] 4646 4647 [[package]] 4648 + name = "synstructure" 4649 + version = "0.13.2" 4650 + source = "registry+https://github.com/rust-lang/crates.io-index" 4651 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 4652 + dependencies = [ 4653 + "proc-macro2", 4654 + "quote", 4655 + "syn 2.0.109", 4656 + ] 4657 + 4658 + [[package]] 4659 name = "system-configuration" 4660 version = "0.6.1" 4661 source = "registry+https://github.com/rust-lang/crates.io-index" 4662 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4663 dependencies = [ 4664 + "bitflags 2.10.0", 4665 "core-foundation 0.9.4", 4666 "system-configuration-sys", 4667 ] ··· 4691 4692 [[package]] 4693 name = "tao" 4694 + version = "0.34.5" 4695 source = "registry+https://github.com/rust-lang/crates.io-index" 4696 + checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" 4697 dependencies = [ 4698 + "bitflags 2.10.0", 4699 + "block2 0.6.2", 4700 + "core-foundation 0.10.1", 4701 "core-graphics", 4702 "crossbeam-channel", 4703 "dispatch", ··· 4706 "gdkwayland-sys", 4707 "gdkx11-sys", 4708 "gtk", 4709 "jni", 4710 "lazy_static", 4711 "libc", ··· 4713 "ndk", 4714 "ndk-context", 4715 "ndk-sys", 4716 + "objc2 0.6.3", 4717 + "objc2-app-kit", 4718 + "objc2-foundation 0.3.2", 4719 "once_cell", 4720 "parking_lot", 4721 "raw-window-handle", ··· 4724 "unicode-segmentation", 4725 "url", 4726 "windows", 4727 + "windows-core 0.61.2", 4728 "windows-version", 4729 "x11-dl", 4730 ] ··· 4737 dependencies = [ 4738 "proc-macro2", 4739 "quote", 4740 + "syn 2.0.109", 4741 ] 4742 4743 [[package]] ··· 4748 4749 [[package]] 4750 name = "tauri" 4751 + version = "2.9.2" 4752 source = "registry+https://github.com/rust-lang/crates.io-index" 4753 + checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" 4754 dependencies = [ 4755 "anyhow", 4756 "bytes", 4757 + "cookie", 4758 "dirs", 4759 "dunce", 4760 "embed_plist", 4761 + "getrandom 0.3.4", 4762 "glob", 4763 "gtk", 4764 "heck 0.5.0", ··· 4769 "log", 4770 "mime", 4771 "muda", 4772 + "objc2 0.6.3", 4773 "objc2-app-kit", 4774 + "objc2-foundation 0.3.2", 4775 + "objc2-ui-kit", 4776 + "objc2-web-kit", 4777 "percent-encoding", 4778 "plist", 4779 "raw-window-handle", ··· 4787 "tauri-macros", 4788 "tauri-runtime", 4789 "tauri-runtime-wry", 4790 + "tauri-utils", 4791 + "thiserror 2.0.17", 4792 "tokio", 4793 "tray-icon", 4794 "url", 4795 "webkit2gtk", 4796 "webview2-com", 4797 "window-vibrancy", ··· 4800 4801 [[package]] 4802 name = "tauri-build" 4803 + version = "2.5.1" 4804 source = "registry+https://github.com/rust-lang/crates.io-index" 4805 + checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" 4806 dependencies = [ 4807 "anyhow", 4808 "cargo_toml", ··· 4810 "glob", 4811 "heck 0.5.0", 4812 "json-patch", 4813 + "schemars 0.8.22", 4814 "semver", 4815 "serde", 4816 "serde_json", 4817 + "tauri-utils", 4818 "tauri-winres", 4819 + "toml 0.9.8", 4820 "walkdir", 4821 ] 4822 4823 [[package]] 4824 name = "tauri-codegen" 4825 + version = "2.5.0" 4826 source = "registry+https://github.com/rust-lang/crates.io-index" 4827 + checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" 4828 dependencies = [ 4829 "base64 0.22.1", 4830 "brotli", 4831 "ico", 4832 "json-patch", 4833 "plist", 4834 + "png 0.17.16", 4835 "proc-macro2", 4836 "quote", 4837 "semver", 4838 "serde", 4839 "serde_json", 4840 "sha2", 4841 + "syn 2.0.109", 4842 + "tauri-utils", 4843 + "thiserror 2.0.17", 4844 "time", 4845 "url", 4846 "uuid", ··· 4849 4850 [[package]] 4851 name = "tauri-macros" 4852 + version = "2.5.0" 4853 source = "registry+https://github.com/rust-lang/crates.io-index" 4854 + checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" 4855 dependencies = [ 4856 "heck 0.5.0", 4857 "proc-macro2", 4858 "quote", 4859 + "syn 2.0.109", 4860 "tauri-codegen", 4861 + "tauri-utils", 4862 ] 4863 4864 [[package]] 4865 name = "tauri-plugin" 4866 + version = "2.5.1" 4867 source = "registry+https://github.com/rust-lang/crates.io-index" 4868 + checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" 4869 dependencies = [ 4870 "anyhow", 4871 "glob", 4872 "plist", 4873 + "schemars 0.8.22", 4874 "serde", 4875 "serde_json", 4876 + "tauri-utils", 4877 + "toml 0.9.8", 4878 "walkdir", 4879 ] 4880 4881 [[package]] 4882 name = "tauri-plugin-deep-link" 4883 + version = "2.4.5" 4884 source = "registry+https://github.com/rust-lang/crates.io-index" 4885 + checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" 4886 dependencies = [ 4887 + "dunce", 4888 + "plist", 4889 + "rust-ini", 4890 + "serde", 4891 + "serde_json", 4892 + "tauri", 4893 + "tauri-plugin", 4894 + "tauri-utils", 4895 + "thiserror 2.0.17", 4896 + "tracing", 4897 + "url", 4898 + "windows-registry", 4899 + "windows-result 0.3.4", 4900 ] 4901 4902 [[package]] 4903 name = "tauri-plugin-fs" 4904 + version = "2.4.4" 4905 source = "registry+https://github.com/rust-lang/crates.io-index" 4906 + checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" 4907 dependencies = [ 4908 "anyhow", 4909 "dunce", 4910 "glob", 4911 "percent-encoding", 4912 + "schemars 0.8.22", 4913 "serde", 4914 "serde_json", 4915 "serde_repr", 4916 "tauri", 4917 "tauri-plugin", 4918 + "tauri-utils", 4919 + "thiserror 2.0.17", 4920 + "toml 0.9.8", 4921 "url", 4922 ] 4923 4924 [[package]] 4925 name = "tauri-plugin-http" 4926 + version = "2.5.4" 4927 source = "registry+https://github.com/rust-lang/crates.io-index" 4928 + checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" 4929 dependencies = [ 4930 + "bytes", 4931 + "cookie_store", 4932 "data-url", 4933 "http", 4934 "regex", 4935 "reqwest", 4936 + "schemars 0.8.22", 4937 "serde", 4938 "serde_json", 4939 "tauri", 4940 "tauri-plugin", 4941 "tauri-plugin-fs", 4942 + "thiserror 2.0.17", 4943 "tokio", 4944 "url", 4945 "urlpattern", ··· 4947 4948 [[package]] 4949 name = "tauri-plugin-process" 4950 + version = "2.3.1" 4951 source = "registry+https://github.com/rust-lang/crates.io-index" 4952 + checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" 4953 dependencies = [ 4954 "tauri", 4955 "tauri-plugin", ··· 4957 4958 [[package]] 4959 name = "tauri-plugin-shell" 4960 + version = "2.3.3" 4961 source = "registry+https://github.com/rust-lang/crates.io-index" 4962 + checksum = "c374b6db45f2a8a304f0273a15080d98c70cde86178855fc24653ba657a1144c" 4963 dependencies = [ 4964 "encoding_rs", 4965 "log", 4966 "open", 4967 "os_pipe", 4968 "regex", 4969 + "schemars 0.8.22", 4970 "serde", 4971 "serde_json", 4972 "shared_child", 4973 "tauri", 4974 "tauri-plugin", 4975 + "thiserror 2.0.17", 4976 "tokio", 4977 ] 4978 4979 [[package]] 4980 + name = "tauri-plugin-single-instance" 4981 + version = "2.3.6" 4982 + source = "registry+https://github.com/rust-lang/crates.io-index" 4983 + checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" 4984 + dependencies = [ 4985 + "serde", 4986 + "serde_json", 4987 + "tauri", 4988 + "tauri-plugin-deep-link", 4989 + "thiserror 2.0.17", 4990 + "tracing", 4991 + "windows-sys 0.60.2", 4992 + "zbus", 4993 + ] 4994 + 4995 + [[package]] 4996 name = "tauri-runtime" 4997 + version = "2.9.1" 4998 source = "registry+https://github.com/rust-lang/crates.io-index" 4999 + checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" 5000 dependencies = [ 5001 + "cookie", 5002 "dpi", 5003 "gtk", 5004 "http", 5005 "jni", 5006 + "objc2 0.6.3", 5007 + "objc2-ui-kit", 5008 + "objc2-web-kit", 5009 "raw-window-handle", 5010 "serde", 5011 "serde_json", 5012 + "tauri-utils", 5013 + "thiserror 2.0.17", 5014 "url", 5015 + "webkit2gtk", 5016 + "webview2-com", 5017 "windows", 5018 ] 5019 5020 [[package]] 5021 name = "tauri-runtime-wry" 5022 + version = "2.9.1" 5023 source = "registry+https://github.com/rust-lang/crates.io-index" 5024 + checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" 5025 dependencies = [ 5026 "gtk", 5027 "http", 5028 "jni", 5029 "log", 5030 + "objc2 0.6.3", 5031 "objc2-app-kit", 5032 + "objc2-foundation 0.3.2", 5033 + "once_cell", 5034 "percent-encoding", 5035 "raw-window-handle", 5036 "softbuffer", 5037 "tao", 5038 "tauri-runtime", 5039 + "tauri-utils", 5040 "url", 5041 "webkit2gtk", 5042 "webview2-com", ··· 5046 5047 [[package]] 5048 name = "tauri-utils" 5049 + version = "2.8.0" 5050 source = "registry+https://github.com/rust-lang/crates.io-index" 5051 + checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" 5052 dependencies = [ 5053 + "anyhow", 5054 "brotli", 5055 "cargo_metadata", 5056 "ctor", 5057 "dunce", 5058 "glob", 5059 "html5ever", 5060 + "http", 5061 + "infer", 5062 "json-patch", 5063 "kuchikiki", 5064 "log", 5065 "memchr", 5066 + "phf 0.11.3", 5067 "proc-macro2", 5068 "quote", 5069 "regex", 5070 + "schemars 0.8.22", 5071 "semver", 5072 "serde", 5073 "serde-untagged", 5074 "serde_json", 5075 "serde_with", 5076 "swift-rs", 5077 + "thiserror 2.0.17", 5078 + "toml 0.9.8", 5079 "url", 5080 "urlpattern", 5081 "uuid", ··· 5084 5085 [[package]] 5086 name = "tauri-winres" 5087 + version = "0.3.3" 5088 source = "registry+https://github.com/rust-lang/crates.io-index" 5089 + checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" 5090 dependencies = [ 5091 "embed-resource", 5092 + "toml 0.9.8", 5093 ] 5094 5095 [[package]] 5096 name = "tempfile" 5097 + version = "3.23.0" 5098 source = "registry+https://github.com/rust-lang/crates.io-index" 5099 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 5100 dependencies = [ 5101 "fastrand", 5102 + "getrandom 0.3.4", 5103 "once_cell", 5104 "rustix", 5105 + "windows-sys 0.61.2", 5106 ] 5107 5108 [[package]] ··· 5117 ] 5118 5119 [[package]] 5120 + name = "thiserror" 5121 + version = "1.0.69" 5122 source = "registry+https://github.com/rust-lang/crates.io-index" 5123 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 5124 + dependencies = [ 5125 + "thiserror-impl 1.0.69", 5126 + ] 5127 5128 [[package]] 5129 name = "thiserror" 5130 + version = "2.0.17" 5131 source = "registry+https://github.com/rust-lang/crates.io-index" 5132 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 5133 dependencies = [ 5134 + "thiserror-impl 2.0.17", 5135 ] 5136 5137 [[package]] 5138 name = "thiserror-impl" 5139 + version = "1.0.69" 5140 source = "registry+https://github.com/rust-lang/crates.io-index" 5141 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 5142 dependencies = [ 5143 "proc-macro2", 5144 "quote", 5145 + "syn 2.0.109", 5146 + ] 5147 + 5148 + [[package]] 5149 + name = "thiserror-impl" 5150 + version = "2.0.17" 5151 + source = "registry+https://github.com/rust-lang/crates.io-index" 5152 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 5153 + dependencies = [ 5154 + "proc-macro2", 5155 + "quote", 5156 + "syn 2.0.109", 5157 ] 5158 5159 [[package]] 5160 name = "tiff" 5161 + version = "0.10.3" 5162 source = "registry+https://github.com/rust-lang/crates.io-index" 5163 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 5164 dependencies = [ 5165 + "fax", 5166 "flate2", 5167 + "half", 5168 + "quick-error", 5169 "weezl", 5170 + "zune-jpeg", 5171 ] 5172 5173 [[package]] 5174 name = "time" 5175 + version = "0.3.44" 5176 source = "registry+https://github.com/rust-lang/crates.io-index" 5177 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 5178 dependencies = [ 5179 "deranged", 5180 + "itoa", 5181 "num-conv", 5182 "powerfmt", 5183 "serde", ··· 5187 5188 [[package]] 5189 name = "time-core" 5190 + version = "0.1.6" 5191 source = "registry+https://github.com/rust-lang/crates.io-index" 5192 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 5193 5194 [[package]] 5195 name = "time-macros" 5196 + version = "0.2.24" 5197 source = "registry+https://github.com/rust-lang/crates.io-index" 5198 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 5199 dependencies = [ 5200 "num-conv", 5201 "time-core", 5202 ] 5203 5204 [[package]] 5205 + name = "tiny-keccak" 5206 + version = "2.0.2" 5207 + source = "registry+https://github.com/rust-lang/crates.io-index" 5208 + checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 5209 + dependencies = [ 5210 + "crunchy", 5211 + ] 5212 + 5213 + [[package]] 5214 + name = "tinystr" 5215 + version = "0.8.2" 5216 + source = "registry+https://github.com/rust-lang/crates.io-index" 5217 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 5218 + dependencies = [ 5219 + "displaydoc", 5220 + "zerovec", 5221 + ] 5222 + 5223 + [[package]] 5224 name = "tinyvec" 5225 + version = "1.10.0" 5226 source = "registry+https://github.com/rust-lang/crates.io-index" 5227 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 5228 dependencies = [ 5229 "tinyvec_macros", 5230 ] ··· 5236 checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 5237 5238 [[package]] 5239 name = "tokio" 5240 + version = "1.48.0" 5241 source = "registry+https://github.com/rust-lang/crates.io-index" 5242 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 5243 dependencies = [ 5244 "bytes", 5245 "libc", 5246 + "mio", 5247 "pin-project-lite", 5248 "socket2", 5249 "tokio-macros", 5250 + "windows-sys 0.61.2", 5251 ] 5252 5253 [[package]] 5254 name = "tokio-macros" 5255 + version = "2.6.0" 5256 source = "registry+https://github.com/rust-lang/crates.io-index" 5257 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 5258 dependencies = [ 5259 "proc-macro2", 5260 "quote", 5261 + "syn 2.0.109", 5262 ] 5263 5264 [[package]] ··· 5273 5274 [[package]] 5275 name = "tokio-rustls" 5276 + version = "0.26.4" 5277 source = "registry+https://github.com/rust-lang/crates.io-index" 5278 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 5279 dependencies = [ 5280 "rustls", 5281 "tokio", 5282 ] 5283 5284 [[package]] 5285 name = "tokio-util" 5286 + version = "0.7.17" 5287 source = "registry+https://github.com/rust-lang/crates.io-index" 5288 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 5289 dependencies = [ 5290 "bytes", 5291 "futures-core", ··· 5296 5297 [[package]] 5298 name = "toml" 5299 + version = "0.8.2" 5300 source = "registry+https://github.com/rust-lang/crates.io-index" 5301 + checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" 5302 dependencies = [ 5303 "serde", 5304 + "serde_spanned 0.6.9", 5305 + "toml_datetime 0.6.3", 5306 + "toml_edit 0.20.2", 5307 ] 5308 5309 [[package]] 5310 name = "toml" 5311 + version = "0.9.8" 5312 source = "registry+https://github.com/rust-lang/crates.io-index" 5313 + checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" 5314 dependencies = [ 5315 + "indexmap 2.12.0", 5316 + "serde_core", 5317 + "serde_spanned 1.0.3", 5318 + "toml_datetime 0.7.3", 5319 + "toml_parser", 5320 + "toml_writer", 5321 + "winnow 0.7.13", 5322 ] 5323 5324 [[package]] ··· 5331 ] 5332 5333 [[package]] 5334 + name = "toml_datetime" 5335 + version = "0.7.3" 5336 + source = "registry+https://github.com/rust-lang/crates.io-index" 5337 + checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 5338 + dependencies = [ 5339 + "serde_core", 5340 + ] 5341 + 5342 + [[package]] 5343 name = "toml_edit" 5344 version = "0.19.15" 5345 source = "registry+https://github.com/rust-lang/crates.io-index" 5346 checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 5347 dependencies = [ 5348 + "indexmap 2.12.0", 5349 + "toml_datetime 0.6.3", 5350 + "winnow 0.5.40", 5351 ] 5352 5353 [[package]] ··· 5356 source = "registry+https://github.com/rust-lang/crates.io-index" 5357 checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 5358 dependencies = [ 5359 + "indexmap 2.12.0", 5360 "serde", 5361 + "serde_spanned 0.6.9", 5362 + "toml_datetime 0.6.3", 5363 + "winnow 0.5.40", 5364 + ] 5365 + 5366 + [[package]] 5367 + name = "toml_edit" 5368 + version = "0.23.7" 5369 + source = "registry+https://github.com/rust-lang/crates.io-index" 5370 + checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" 5371 + dependencies = [ 5372 + "indexmap 2.12.0", 5373 + "toml_datetime 0.7.3", 5374 + "toml_parser", 5375 + "winnow 0.7.13", 5376 + ] 5377 + 5378 + [[package]] 5379 + name = "toml_parser" 5380 + version = "1.0.4" 5381 + source = "registry+https://github.com/rust-lang/crates.io-index" 5382 + checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 5383 + dependencies = [ 5384 + "winnow 0.7.13", 5385 + ] 5386 + 5387 + [[package]] 5388 + name = "toml_writer" 5389 + version = "1.0.4" 5390 + source = "registry+https://github.com/rust-lang/crates.io-index" 5391 + checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" 5392 + 5393 + [[package]] 5394 + name = "tower" 5395 + version = "0.5.2" 5396 + source = "registry+https://github.com/rust-lang/crates.io-index" 5397 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 5398 + dependencies = [ 5399 + "futures-core", 5400 + "futures-util", 5401 + "pin-project-lite", 5402 + "sync_wrapper", 5403 + "tokio", 5404 + "tower-layer", 5405 + "tower-service", 5406 ] 5407 5408 [[package]] 5409 + name = "tower-http" 5410 + version = "0.6.6" 5411 + source = "registry+https://github.com/rust-lang/crates.io-index" 5412 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 5413 + dependencies = [ 5414 + "bitflags 2.10.0", 5415 + "bytes", 5416 + "futures-util", 5417 + "http", 5418 + "http-body", 5419 + "iri-string", 5420 + "pin-project-lite", 5421 + "tower", 5422 + "tower-layer", 5423 + "tower-service", 5424 + ] 5425 + 5426 + [[package]] 5427 + name = "tower-layer" 5428 + version = "0.3.3" 5429 + source = "registry+https://github.com/rust-lang/crates.io-index" 5430 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 5431 + 5432 + [[package]] 5433 name = "tower-service" 5434 version = "0.3.3" 5435 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5437 5438 [[package]] 5439 name = "tracing" 5440 + version = "0.1.41" 5441 source = "registry+https://github.com/rust-lang/crates.io-index" 5442 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 5443 dependencies = [ 5444 "pin-project-lite", 5445 + "tracing-attributes", 5446 "tracing-core", 5447 ] 5448 5449 [[package]] 5450 + name = "tracing-attributes" 5451 + version = "0.1.30" 5452 + source = "registry+https://github.com/rust-lang/crates.io-index" 5453 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 5454 + dependencies = [ 5455 + "proc-macro2", 5456 + "quote", 5457 + "syn 2.0.109", 5458 + ] 5459 + 5460 + [[package]] 5461 name = "tracing-core" 5462 + version = "0.1.34" 5463 source = "registry+https://github.com/rust-lang/crates.io-index" 5464 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 5465 dependencies = [ 5466 "once_cell", 5467 ] 5468 5469 [[package]] 5470 name = "tray-icon" 5471 + version = "0.21.2" 5472 source = "registry+https://github.com/rust-lang/crates.io-index" 5473 + checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" 5474 dependencies = [ 5475 "crossbeam-channel", 5476 "dirs", 5477 "libappindicator", 5478 "muda", 5479 + "objc2 0.6.3", 5480 "objc2-app-kit", 5481 + "objc2-core-foundation", 5482 + "objc2-core-graphics", 5483 + "objc2-foundation 0.3.2", 5484 "once_cell", 5485 + "png 0.17.16", 5486 "serde", 5487 + "thiserror 2.0.17", 5488 + "windows-sys 0.60.2", 5489 ] 5490 5491 [[package]] ··· 5496 5497 [[package]] 5498 name = "typeid" 5499 + version = "1.0.3" 5500 source = "registry+https://github.com/rust-lang/crates.io-index" 5501 + checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 5502 5503 [[package]] 5504 name = "typenum" 5505 + version = "1.19.0" 5506 source = "registry+https://github.com/rust-lang/crates.io-index" 5507 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 5508 + 5509 + [[package]] 5510 + name = "uds_windows" 5511 + version = "1.1.0" 5512 + source = "registry+https://github.com/rust-lang/crates.io-index" 5513 + checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 5514 + dependencies = [ 5515 + "memoffset", 5516 + "tempfile", 5517 + "winapi", 5518 + ] 5519 5520 [[package]] 5521 name = "unic-char-property" ··· 5559 ] 5560 5561 [[package]] 5562 name = "unicode-ident" 5563 + version = "1.0.22" 5564 source = "registry+https://github.com/rust-lang/crates.io-index" 5565 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 5566 5567 [[package]] 5568 name = "unicode-segmentation" ··· 5578 5579 [[package]] 5580 name = "url" 5581 + version = "2.5.7" 5582 source = "registry+https://github.com/rust-lang/crates.io-index" 5583 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 5584 dependencies = [ 5585 "form_urlencoded", 5586 + "idna", 5587 "percent-encoding", 5588 "serde", 5589 ] ··· 5607 checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 5608 5609 [[package]] 5610 + name = "utf8_iter" 5611 + version = "1.0.4" 5612 + source = "registry+https://github.com/rust-lang/crates.io-index" 5613 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 5614 + 5615 + [[package]] 5616 name = "uuid" 5617 + version = "1.18.1" 5618 source = "registry+https://github.com/rust-lang/crates.io-index" 5619 + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 5620 dependencies = [ 5621 + "getrandom 0.3.4", 5622 + "js-sys", 5623 "serde", 5624 + "wasm-bindgen", 5625 ] 5626 5627 [[package]] 5628 name = "v_frame" 5629 + version = "0.3.9" 5630 source = "registry+https://github.com/rust-lang/crates.io-index" 5631 + checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" 5632 dependencies = [ 5633 "aligned-vec", 5634 "num-traits", ··· 5643 5644 [[package]] 5645 name = "version-compare" 5646 + version = "0.2.1" 5647 source = "registry+https://github.com/rust-lang/crates.io-index" 5648 + checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" 5649 5650 [[package]] 5651 name = "version_check" ··· 5654 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5655 5656 [[package]] 5657 name = "vswhom" 5658 version = "0.1.0" 5659 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5665 5666 [[package]] 5667 name = "vswhom-sys" 5668 + version = "0.1.3" 5669 source = "registry+https://github.com/rust-lang/crates.io-index" 5670 + checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" 5671 dependencies = [ 5672 "cc", 5673 "libc", ··· 5700 5701 [[package]] 5702 name = "wasi" 5703 + version = "0.11.1+wasi-snapshot-preview1" 5704 source = "registry+https://github.com/rust-lang/crates.io-index" 5705 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5706 5707 [[package]] 5708 + name = "wasip2" 5709 + version = "1.0.1+wasi-0.2.4" 5710 source = "registry+https://github.com/rust-lang/crates.io-index" 5711 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 5712 dependencies = [ 5713 + "wit-bindgen", 5714 ] 5715 5716 [[package]] 5717 + name = "wasm-bindgen" 5718 + version = "0.2.105" 5719 source = "registry+https://github.com/rust-lang/crates.io-index" 5720 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 5721 dependencies = [ 5722 + "cfg-if", 5723 "once_cell", 5724 + "rustversion", 5725 + "wasm-bindgen-macro", 5726 "wasm-bindgen-shared", 5727 ] 5728 5729 [[package]] 5730 name = "wasm-bindgen-futures" 5731 + version = "0.4.55" 5732 source = "registry+https://github.com/rust-lang/crates.io-index" 5733 + checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 5734 dependencies = [ 5735 "cfg-if", 5736 "js-sys", 5737 + "once_cell", 5738 "wasm-bindgen", 5739 "web-sys", 5740 ] 5741 5742 [[package]] 5743 name = "wasm-bindgen-macro" 5744 + version = "0.2.105" 5745 source = "registry+https://github.com/rust-lang/crates.io-index" 5746 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 5747 dependencies = [ 5748 "quote", 5749 "wasm-bindgen-macro-support", ··· 5751 5752 [[package]] 5753 name = "wasm-bindgen-macro-support" 5754 + version = "0.2.105" 5755 source = "registry+https://github.com/rust-lang/crates.io-index" 5756 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 5757 dependencies = [ 5758 + "bumpalo", 5759 "proc-macro2", 5760 "quote", 5761 + "syn 2.0.109", 5762 "wasm-bindgen-shared", 5763 ] 5764 5765 [[package]] 5766 name = "wasm-bindgen-shared" 5767 + version = "0.2.105" 5768 source = "registry+https://github.com/rust-lang/crates.io-index" 5769 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 5770 + dependencies = [ 5771 + "unicode-ident", 5772 + ] 5773 5774 [[package]] 5775 name = "wasm-streams" 5776 + version = "0.4.2" 5777 source = "registry+https://github.com/rust-lang/crates.io-index" 5778 + checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 5779 dependencies = [ 5780 "futures-util", 5781 "js-sys", ··· 5786 5787 [[package]] 5788 name = "web-sys" 5789 + version = "0.3.82" 5790 + source = "registry+https://github.com/rust-lang/crates.io-index" 5791 + checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" 5792 + dependencies = [ 5793 + "js-sys", 5794 + "wasm-bindgen", 5795 + ] 5796 + 5797 + [[package]] 5798 + name = "web-time" 5799 + version = "1.1.0" 5800 source = "registry+https://github.com/rust-lang/crates.io-index" 5801 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 5802 dependencies = [ 5803 "js-sys", 5804 "wasm-bindgen", ··· 5850 5851 [[package]] 5852 name = "webpki-roots" 5853 + version = "1.0.4" 5854 source = "registry+https://github.com/rust-lang/crates.io-index" 5855 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 5856 dependencies = [ 5857 "rustls-pki-types", 5858 ] 5859 5860 [[package]] 5861 name = "webview2-com" 5862 + version = "0.38.0" 5863 source = "registry+https://github.com/rust-lang/crates.io-index" 5864 + checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" 5865 dependencies = [ 5866 "webview2-com-macros", 5867 "webview2-com-sys", 5868 "windows", 5869 + "windows-core 0.61.2", 5870 "windows-implement", 5871 "windows-interface", 5872 ] ··· 5879 dependencies = [ 5880 "proc-macro2", 5881 "quote", 5882 + "syn 2.0.109", 5883 ] 5884 5885 [[package]] 5886 name = "webview2-com-sys" 5887 + version = "0.38.0" 5888 source = "registry+https://github.com/rust-lang/crates.io-index" 5889 + checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 5890 dependencies = [ 5891 + "thiserror 2.0.17", 5892 "windows", 5893 + "windows-core 0.61.2", 5894 ] 5895 5896 [[package]] 5897 name = "weezl" 5898 + version = "0.1.10" 5899 source = "registry+https://github.com/rust-lang/crates.io-index" 5900 + checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 5901 5902 [[package]] 5903 name = "winapi" ··· 5917 5918 [[package]] 5919 name = "winapi-util" 5920 + version = "0.1.11" 5921 source = "registry+https://github.com/rust-lang/crates.io-index" 5922 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 5923 dependencies = [ 5924 + "windows-sys 0.61.2", 5925 ] 5926 5927 [[package]] ··· 5932 5933 [[package]] 5934 name = "window-vibrancy" 5935 + version = "0.6.0" 5936 source = "registry+https://github.com/rust-lang/crates.io-index" 5937 + checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" 5938 dependencies = [ 5939 + "objc2 0.6.3", 5940 "objc2-app-kit", 5941 + "objc2-core-foundation", 5942 + "objc2-foundation 0.3.2", 5943 "raw-window-handle", 5944 "windows-sys 0.59.0", 5945 "windows-version", ··· 5947 5948 [[package]] 5949 name = "windows" 5950 + version = "0.61.3" 5951 source = "registry+https://github.com/rust-lang/crates.io-index" 5952 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 5953 dependencies = [ 5954 + "windows-collections", 5955 + "windows-core 0.61.2", 5956 + "windows-future", 5957 + "windows-link 0.1.3", 5958 + "windows-numerics", 5959 + ] 5960 + 5961 + [[package]] 5962 + name = "windows-collections" 5963 + version = "0.2.0" 5964 + source = "registry+https://github.com/rust-lang/crates.io-index" 5965 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 5966 + dependencies = [ 5967 + "windows-core 0.61.2", 5968 ] 5969 5970 [[package]] 5971 name = "windows-core" 5972 + version = "0.61.2" 5973 source = "registry+https://github.com/rust-lang/crates.io-index" 5974 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 5975 dependencies = [ 5976 + "windows-implement", 5977 + "windows-interface", 5978 + "windows-link 0.1.3", 5979 + "windows-result 0.3.4", 5980 + "windows-strings 0.4.2", 5981 ] 5982 5983 [[package]] 5984 name = "windows-core" 5985 + version = "0.62.2" 5986 source = "registry+https://github.com/rust-lang/crates.io-index" 5987 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 5988 dependencies = [ 5989 "windows-implement", 5990 "windows-interface", 5991 + "windows-link 0.2.1", 5992 + "windows-result 0.4.1", 5993 + "windows-strings 0.5.1", 5994 + ] 5995 + 5996 + [[package]] 5997 + name = "windows-future" 5998 + version = "0.2.1" 5999 + source = "registry+https://github.com/rust-lang/crates.io-index" 6000 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 6001 + dependencies = [ 6002 + "windows-core 0.61.2", 6003 + "windows-link 0.1.3", 6004 + "windows-threading", 6005 ] 6006 6007 [[package]] 6008 name = "windows-implement" 6009 + version = "0.60.2" 6010 source = "registry+https://github.com/rust-lang/crates.io-index" 6011 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 6012 dependencies = [ 6013 "proc-macro2", 6014 "quote", 6015 + "syn 2.0.109", 6016 ] 6017 6018 [[package]] 6019 name = "windows-interface" 6020 + version = "0.59.3" 6021 source = "registry+https://github.com/rust-lang/crates.io-index" 6022 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 6023 dependencies = [ 6024 "proc-macro2", 6025 "quote", 6026 + "syn 2.0.109", 6027 + ] 6028 + 6029 + [[package]] 6030 + name = "windows-link" 6031 + version = "0.1.3" 6032 + source = "registry+https://github.com/rust-lang/crates.io-index" 6033 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6034 + 6035 + [[package]] 6036 + name = "windows-link" 6037 + version = "0.2.1" 6038 + source = "registry+https://github.com/rust-lang/crates.io-index" 6039 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 6040 + 6041 + [[package]] 6042 + name = "windows-numerics" 6043 + version = "0.2.0" 6044 + source = "registry+https://github.com/rust-lang/crates.io-index" 6045 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6046 + dependencies = [ 6047 + "windows-core 0.61.2", 6048 + "windows-link 0.1.3", 6049 ] 6050 6051 [[package]] 6052 name = "windows-registry" 6053 + version = "0.5.3" 6054 source = "registry+https://github.com/rust-lang/crates.io-index" 6055 + checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 6056 dependencies = [ 6057 + "windows-link 0.1.3", 6058 + "windows-result 0.3.4", 6059 + "windows-strings 0.4.2", 6060 ] 6061 6062 [[package]] 6063 name = "windows-result" 6064 + version = "0.3.4" 6065 source = "registry+https://github.com/rust-lang/crates.io-index" 6066 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6067 dependencies = [ 6068 + "windows-link 0.1.3", 6069 + ] 6070 + 6071 + [[package]] 6072 + name = "windows-result" 6073 + version = "0.4.1" 6074 + source = "registry+https://github.com/rust-lang/crates.io-index" 6075 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 6076 + dependencies = [ 6077 + "windows-link 0.2.1", 6078 ] 6079 6080 [[package]] 6081 name = "windows-strings" 6082 + version = "0.4.2" 6083 source = "registry+https://github.com/rust-lang/crates.io-index" 6084 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6085 dependencies = [ 6086 + "windows-link 0.1.3", 6087 ] 6088 6089 [[package]] 6090 + name = "windows-strings" 6091 + version = "0.5.1" 6092 source = "registry+https://github.com/rust-lang/crates.io-index" 6093 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 6094 dependencies = [ 6095 + "windows-link 0.2.1", 6096 ] 6097 6098 [[package]] 6099 name = "windows-sys" 6100 + version = "0.45.0" 6101 source = "registry+https://github.com/rust-lang/crates.io-index" 6102 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 6103 dependencies = [ 6104 + "windows-targets 0.42.2", 6105 ] 6106 6107 [[package]] ··· 6123 ] 6124 6125 [[package]] 6126 + name = "windows-sys" 6127 + version = "0.60.2" 6128 + source = "registry+https://github.com/rust-lang/crates.io-index" 6129 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6130 + dependencies = [ 6131 + "windows-targets 0.53.5", 6132 + ] 6133 + 6134 + [[package]] 6135 + name = "windows-sys" 6136 + version = "0.61.2" 6137 + source = "registry+https://github.com/rust-lang/crates.io-index" 6138 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 6139 + dependencies = [ 6140 + "windows-link 0.2.1", 6141 + ] 6142 + 6143 + [[package]] 6144 name = "windows-targets" 6145 version = "0.42.2" 6146 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 6157 6158 [[package]] 6159 name = "windows-targets" 6160 version = "0.52.6" 6161 source = "registry+https://github.com/rust-lang/crates.io-index" 6162 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" ··· 6164 "windows_aarch64_gnullvm 0.52.6", 6165 "windows_aarch64_msvc 0.52.6", 6166 "windows_i686_gnu 0.52.6", 6167 + "windows_i686_gnullvm 0.52.6", 6168 "windows_i686_msvc 0.52.6", 6169 "windows_x86_64_gnu 0.52.6", 6170 "windows_x86_64_gnullvm 0.52.6", ··· 6172 ] 6173 6174 [[package]] 6175 + name = "windows-targets" 6176 + version = "0.53.5" 6177 + source = "registry+https://github.com/rust-lang/crates.io-index" 6178 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 6179 + dependencies = [ 6180 + "windows-link 0.2.1", 6181 + "windows_aarch64_gnullvm 0.53.1", 6182 + "windows_aarch64_msvc 0.53.1", 6183 + "windows_i686_gnu 0.53.1", 6184 + "windows_i686_gnullvm 0.53.1", 6185 + "windows_i686_msvc 0.53.1", 6186 + "windows_x86_64_gnu 0.53.1", 6187 + "windows_x86_64_gnullvm 0.53.1", 6188 + "windows_x86_64_msvc 0.53.1", 6189 + ] 6190 + 6191 + [[package]] 6192 + name = "windows-threading" 6193 + version = "0.1.0" 6194 + source = "registry+https://github.com/rust-lang/crates.io-index" 6195 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6196 + dependencies = [ 6197 + "windows-link 0.1.3", 6198 + ] 6199 + 6200 + [[package]] 6201 name = "windows-version" 6202 + version = "0.1.7" 6203 source = "registry+https://github.com/rust-lang/crates.io-index" 6204 + checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" 6205 dependencies = [ 6206 + "windows-link 0.2.1", 6207 ] 6208 6209 [[package]] ··· 6214 6215 [[package]] 6216 name = "windows_aarch64_gnullvm" 6217 + version = "0.52.6" 6218 source = "registry+https://github.com/rust-lang/crates.io-index" 6219 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6220 6221 [[package]] 6222 name = "windows_aarch64_gnullvm" 6223 + version = "0.53.1" 6224 source = "registry+https://github.com/rust-lang/crates.io-index" 6225 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 6226 6227 [[package]] 6228 name = "windows_aarch64_msvc" ··· 6232 6233 [[package]] 6234 name = "windows_aarch64_msvc" 6235 + version = "0.52.6" 6236 source = "registry+https://github.com/rust-lang/crates.io-index" 6237 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6238 6239 [[package]] 6240 name = "windows_aarch64_msvc" 6241 + version = "0.53.1" 6242 source = "registry+https://github.com/rust-lang/crates.io-index" 6243 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6244 6245 [[package]] 6246 name = "windows_i686_gnu" ··· 6250 6251 [[package]] 6252 name = "windows_i686_gnu" 6253 + version = "0.52.6" 6254 source = "registry+https://github.com/rust-lang/crates.io-index" 6255 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6256 6257 [[package]] 6258 name = "windows_i686_gnu" 6259 + version = "0.53.1" 6260 source = "registry+https://github.com/rust-lang/crates.io-index" 6261 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 6262 6263 [[package]] 6264 name = "windows_i686_gnullvm" ··· 6267 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 6268 6269 [[package]] 6270 + name = "windows_i686_gnullvm" 6271 + version = "0.53.1" 6272 + source = "registry+https://github.com/rust-lang/crates.io-index" 6273 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6274 + 6275 + [[package]] 6276 name = "windows_i686_msvc" 6277 version = "0.42.2" 6278 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 6280 6281 [[package]] 6282 name = "windows_i686_msvc" 6283 + version = "0.52.6" 6284 source = "registry+https://github.com/rust-lang/crates.io-index" 6285 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6286 6287 [[package]] 6288 name = "windows_i686_msvc" 6289 + version = "0.53.1" 6290 source = "registry+https://github.com/rust-lang/crates.io-index" 6291 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 6292 6293 [[package]] 6294 name = "windows_x86_64_gnu" ··· 6298 6299 [[package]] 6300 name = "windows_x86_64_gnu" 6301 + version = "0.52.6" 6302 source = "registry+https://github.com/rust-lang/crates.io-index" 6303 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6304 6305 [[package]] 6306 name = "windows_x86_64_gnu" 6307 + version = "0.53.1" 6308 source = "registry+https://github.com/rust-lang/crates.io-index" 6309 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 6310 6311 [[package]] 6312 name = "windows_x86_64_gnullvm" ··· 6316 6317 [[package]] 6318 name = "windows_x86_64_gnullvm" 6319 + version = "0.52.6" 6320 source = "registry+https://github.com/rust-lang/crates.io-index" 6321 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6322 6323 [[package]] 6324 name = "windows_x86_64_gnullvm" 6325 + version = "0.53.1" 6326 source = "registry+https://github.com/rust-lang/crates.io-index" 6327 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 6328 6329 [[package]] 6330 name = "windows_x86_64_msvc" ··· 6334 6335 [[package]] 6336 name = "windows_x86_64_msvc" 6337 + version = "0.52.6" 6338 source = "registry+https://github.com/rust-lang/crates.io-index" 6339 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6340 6341 [[package]] 6342 name = "windows_x86_64_msvc" 6343 + version = "0.53.1" 6344 source = "registry+https://github.com/rust-lang/crates.io-index" 6345 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6346 6347 [[package]] 6348 name = "winnow" ··· 6354 ] 6355 6356 [[package]] 6357 + name = "winnow" 6358 + version = "0.7.13" 6359 source = "registry+https://github.com/rust-lang/crates.io-index" 6360 + checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 6361 dependencies = [ 6362 + "memchr", 6363 ] 6364 6365 [[package]] 6366 name = "winreg" 6367 + version = "0.55.0" 6368 source = "registry+https://github.com/rust-lang/crates.io-index" 6369 + checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" 6370 dependencies = [ 6371 "cfg-if", 6372 + "windows-sys 0.59.0", 6373 ] 6374 6375 [[package]] 6376 + name = "wit-bindgen" 6377 + version = "0.46.0" 6378 + source = "registry+https://github.com/rust-lang/crates.io-index" 6379 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 6380 + 6381 + [[package]] 6382 + name = "writeable" 6383 + version = "0.6.2" 6384 + source = "registry+https://github.com/rust-lang/crates.io-index" 6385 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6386 + 6387 + [[package]] 6388 name = "wry" 6389 + version = "0.53.5" 6390 source = "registry+https://github.com/rust-lang/crates.io-index" 6391 + checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" 6392 dependencies = [ 6393 "base64 0.22.1", 6394 + "block2 0.6.2", 6395 + "cookie", 6396 "crossbeam-channel", 6397 + "dirs", 6398 "dpi", 6399 "dunce", 6400 "gdkx11", ··· 6406 "kuchikiki", 6407 "libc", 6408 "ndk", 6409 + "objc2 0.6.3", 6410 "objc2-app-kit", 6411 + "objc2-core-foundation", 6412 + "objc2-foundation 0.3.2", 6413 "objc2-ui-kit", 6414 "objc2-web-kit", 6415 "once_cell", ··· 6418 "sha2", 6419 "soup3", 6420 "tao-macros", 6421 + "thiserror 2.0.17", 6422 + "url", 6423 "webkit2gtk", 6424 "webkit2gtk-sys", 6425 "webview2-com", 6426 "windows", 6427 + "windows-core 0.61.2", 6428 "windows-version", 6429 "x11-dl", 6430 ] ··· 6451 ] 6452 6453 [[package]] 6454 + name = "x11rb" 6455 + version = "0.13.2" 6456 + source = "registry+https://github.com/rust-lang/crates.io-index" 6457 + checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 6458 + dependencies = [ 6459 + "gethostname", 6460 + "rustix", 6461 + "x11rb-protocol", 6462 + ] 6463 + 6464 + [[package]] 6465 + name = "x11rb-protocol" 6466 + version = "0.13.2" 6467 + source = "registry+https://github.com/rust-lang/crates.io-index" 6468 + checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 6469 + 6470 + [[package]] 6471 + name = "yoke" 6472 + version = "0.8.1" 6473 + source = "registry+https://github.com/rust-lang/crates.io-index" 6474 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 6475 + dependencies = [ 6476 + "stable_deref_trait", 6477 + "yoke-derive", 6478 + "zerofrom", 6479 + ] 6480 + 6481 + [[package]] 6482 + name = "yoke-derive" 6483 + version = "0.8.1" 6484 + source = "registry+https://github.com/rust-lang/crates.io-index" 6485 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 6486 + dependencies = [ 6487 + "proc-macro2", 6488 + "quote", 6489 + "syn 2.0.109", 6490 + "synstructure", 6491 + ] 6492 + 6493 + [[package]] 6494 + name = "zbus" 6495 + version = "5.12.0" 6496 + source = "registry+https://github.com/rust-lang/crates.io-index" 6497 + checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" 6498 + dependencies = [ 6499 + "async-broadcast", 6500 + "async-executor", 6501 + "async-io", 6502 + "async-lock", 6503 + "async-process", 6504 + "async-recursion", 6505 + "async-task", 6506 + "async-trait", 6507 + "blocking", 6508 + "enumflags2", 6509 + "event-listener", 6510 + "futures-core", 6511 + "futures-lite", 6512 + "hex", 6513 + "nix", 6514 + "ordered-stream", 6515 + "serde", 6516 + "serde_repr", 6517 + "tracing", 6518 + "uds_windows", 6519 + "uuid", 6520 + "windows-sys 0.61.2", 6521 + "winnow 0.7.13", 6522 + "zbus_macros", 6523 + "zbus_names", 6524 + "zvariant", 6525 + ] 6526 + 6527 + [[package]] 6528 + name = "zbus_macros" 6529 + version = "5.12.0" 6530 + source = "registry+https://github.com/rust-lang/crates.io-index" 6531 + checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" 6532 + dependencies = [ 6533 + "proc-macro-crate 3.4.0", 6534 + "proc-macro2", 6535 + "quote", 6536 + "syn 2.0.109", 6537 + "zbus_names", 6538 + "zvariant", 6539 + "zvariant_utils", 6540 + ] 6541 + 6542 + [[package]] 6543 + name = "zbus_names" 6544 + version = "4.2.0" 6545 + source = "registry+https://github.com/rust-lang/crates.io-index" 6546 + checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 6547 + dependencies = [ 6548 + "serde", 6549 + "static_assertions", 6550 + "winnow 0.7.13", 6551 + "zvariant", 6552 + ] 6553 + 6554 + [[package]] 6555 name = "zerocopy" 6556 + version = "0.8.27" 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 6558 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 6559 dependencies = [ 6560 "zerocopy-derive", 6561 ] 6562 6563 [[package]] 6564 name = "zerocopy-derive" 6565 + version = "0.8.27" 6566 source = "registry+https://github.com/rust-lang/crates.io-index" 6567 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 6568 dependencies = [ 6569 "proc-macro2", 6570 "quote", 6571 + "syn 2.0.109", 6572 + ] 6573 + 6574 + [[package]] 6575 + name = "zerofrom" 6576 + version = "0.1.6" 6577 + source = "registry+https://github.com/rust-lang/crates.io-index" 6578 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 6579 + dependencies = [ 6580 + "zerofrom-derive", 6581 + ] 6582 + 6583 + [[package]] 6584 + name = "zerofrom-derive" 6585 + version = "0.1.6" 6586 + source = "registry+https://github.com/rust-lang/crates.io-index" 6587 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 6588 + dependencies = [ 6589 + "proc-macro2", 6590 + "quote", 6591 + "syn 2.0.109", 6592 + "synstructure", 6593 ] 6594 6595 [[package]] 6596 name = "zeroize" 6597 + version = "1.8.2" 6598 + source = "registry+https://github.com/rust-lang/crates.io-index" 6599 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 6600 + 6601 + [[package]] 6602 + name = "zerotrie" 6603 + version = "0.2.3" 6604 + source = "registry+https://github.com/rust-lang/crates.io-index" 6605 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 6606 + dependencies = [ 6607 + "displaydoc", 6608 + "yoke", 6609 + "zerofrom", 6610 + ] 6611 + 6612 + [[package]] 6613 + name = "zerovec" 6614 + version = "0.11.5" 6615 + source = "registry+https://github.com/rust-lang/crates.io-index" 6616 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 6617 + dependencies = [ 6618 + "yoke", 6619 + "zerofrom", 6620 + "zerovec-derive", 6621 + ] 6622 + 6623 + [[package]] 6624 + name = "zerovec-derive" 6625 + version = "0.11.2" 6626 source = "registry+https://github.com/rust-lang/crates.io-index" 6627 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 6628 + dependencies = [ 6629 + "proc-macro2", 6630 + "quote", 6631 + "syn 2.0.109", 6632 + ] 6633 6634 [[package]] 6635 name = "zune-core" ··· 6648 6649 [[package]] 6650 name = "zune-jpeg" 6651 + version = "0.4.21" 6652 source = "registry+https://github.com/rust-lang/crates.io-index" 6653 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 6654 dependencies = [ 6655 "zune-core", 6656 ] 6657 + 6658 + [[package]] 6659 + name = "zvariant" 6660 + version = "5.8.0" 6661 + source = "registry+https://github.com/rust-lang/crates.io-index" 6662 + checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" 6663 + dependencies = [ 6664 + "endi", 6665 + "enumflags2", 6666 + "serde", 6667 + "winnow 0.7.13", 6668 + "zvariant_derive", 6669 + "zvariant_utils", 6670 + ] 6671 + 6672 + [[package]] 6673 + name = "zvariant_derive" 6674 + version = "5.8.0" 6675 + source = "registry+https://github.com/rust-lang/crates.io-index" 6676 + checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" 6677 + dependencies = [ 6678 + "proc-macro-crate 3.4.0", 6679 + "proc-macro2", 6680 + "quote", 6681 + "syn 2.0.109", 6682 + "zvariant_utils", 6683 + ] 6684 + 6685 + [[package]] 6686 + name = "zvariant_utils" 6687 + version = "3.2.1" 6688 + source = "registry+https://github.com/rust-lang/crates.io-index" 6689 + checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 6690 + dependencies = [ 6691 + "proc-macro2", 6692 + "quote", 6693 + "serde", 6694 + "syn 2.0.109", 6695 + "winnow 0.7.13", 6696 + ]
+19 -15
src-tauri/Cargo.toml
··· 1 [package] 2 - name = "vrcpm-rs" 3 - version = "0.2.1" 4 description = "VRChat Photo Manager" 5 authors = ["_phaz"] 6 edition = "2021" ··· 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 13 [dependencies] 14 - tauri = { version = "2.0.0-rc", features = ["tray-icon", "image-png"] } 15 serde = { version = "1.0", features = ["derive"] } 16 serde_json = "1.0" 17 - open = "5.1.2" 18 - tauri-plugin-deep-link = "0.1.2" 19 - dirs = "5.0.1" 20 - notify = "6.1.1" 21 - regex = "1.10.4" 22 reqwest = { version = "0.12", features = ["blocking"] } 23 - tauri-plugin-shell = "2.0.0-rc.2" 24 - tauri-plugin-http = "2.0.0-rc.0" 25 - tauri-plugin-process = "2.0.0-rc.0" 26 - image = "0.25.2" 27 - fast_image_resize = { version = "4.2.1", features = [ "image" ] } 28 - 29 [target.'cfg(windows)'.dependencies] 30 - mslnk = { version = "0.1.8" } 31 32 [features] 33 # this feature is used for production builds or when `devPath` points to the filesystem 34 # DO NOT REMOVE!! 35 custom-protocol = ["tauri/custom-protocol"]
··· 1 [package] 2 + name = "VRChatPhotoManager" 3 + version = "0.2.7-hot1" 4 description = "VRChat Photo Manager" 5 authors = ["_phaz"] 6 edition = "2021" ··· 11 tauri-build = { version = "2.0.0-rc", features = [] } 12 13 [dependencies] 14 + tauri = { version = "2.9", features = [ "tray-icon", "image-png", "devtools" ] } 15 serde = { version = "1.0", features = ["derive"] } 16 serde_json = "1.0" 17 + open = "5.3" 18 + dirs = "6.0" 19 + notify = "8.2" 20 + regex = "1.12" 21 reqwest = { version = "0.12", features = ["blocking"] } 22 + image = "0.25" 23 + fast_image_resize = { version = "5.3", features = [ "image" ] } 24 + arboard = "3.6" 25 + tauri-plugin-single-instance = { version = "2.3", features = ["deep-link"] } 26 + tauri-plugin-shell = "2.3" 27 + tauri-plugin-http = "2.5" 28 + tauri-plugin-process = "2.3" 29 [target.'cfg(windows)'.dependencies] 30 + mslnk = { version = "0.1" } 31 32 [features] 33 # this feature is used for production builds or when `devPath` points to the filesystem 34 # DO NOT REMOVE!! 35 custom-protocol = ["tauri/custom-protocol"] 36 + 37 + [profile.release.package.wry] 38 + debug = true 39 + debug-assertions = true
+1 -1
src-tauri/build.rs
··· 1 fn main() { 2 - tauri_build::build() 3 }
··· 1 fn main() { 2 + tauri_build::build() 3 }
+1 -1
src-tauri/gen/schemas/acl-manifests.json
··· 1 - {"core":{"default_permission":{"identifier":"default","description":"Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-read-body","allow-fetch-send"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}}
··· 1 + {"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type","allow-register-listener","allow-remove-listener"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-register-listener":{"identifier":"allow-register-listener","description":"Enables the register_listener command without any pre-configured scope.","commands":{"allow":["register_listener"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-remove-listener":{"identifier":"allow-remove-listener","description":"Enables the remove_listener command without any pre-configured scope.","commands":{"allow":["remove_listener"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-register-listener":{"identifier":"deny-register-listener","description":"Denies the register_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["register_listener"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-remove-listener":{"identifier":"deny-remove-listener","description":"Denies the remove_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_listener"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"http":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n","permissions":["allow-fetch","allow-fetch-cancel","allow-fetch-read-body","allow-fetch-send"]},"permissions":{"allow-fetch":{"identifier":"allow-fetch","description":"Enables the fetch command without any pre-configured scope.","commands":{"allow":["fetch"],"deny":[]}},"allow-fetch-cancel":{"identifier":"allow-fetch-cancel","description":"Enables the fetch_cancel command without any pre-configured scope.","commands":{"allow":["fetch_cancel"],"deny":[]}},"allow-fetch-read-body":{"identifier":"allow-fetch-read-body","description":"Enables the fetch_read_body command without any pre-configured scope.","commands":{"allow":["fetch_read_body"],"deny":[]}},"allow-fetch-send":{"identifier":"allow-fetch-send","description":"Enables the fetch_send command without any pre-configured scope.","commands":{"allow":["fetch_send"],"deny":[]}},"deny-fetch":{"identifier":"deny-fetch","description":"Denies the fetch command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch"]}},"deny-fetch-cancel":{"identifier":"deny-fetch-cancel","description":"Denies the fetch_cancel command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_cancel"]}},"deny-fetch-read-body":{"identifier":"deny-fetch-read-body","description":"Denies the fetch_read_body command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_read_body"]}},"deny-fetch-send":{"identifier":"deny-fetch-send","description":"Denies the fetch_send command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_send"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"},{"properties":{"url":{"description":"A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"}],"description":"HTTP scope entry.","title":"HttpScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}}
+894 -361
src-tauri/gen/schemas/desktop-schema.json
··· 37 ], 38 "definitions": { 39 "Capability": { 40 - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", 41 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 51 "description": { 52 - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 72 "windows": { 73 - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 74 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 79 "webviews": { 80 - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 81 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 86 "permissions": { 87 - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 142 { 143 - "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n", 144 "type": "string", 145 - "const": "http:default" 146 }, 147 { 148 "description": "Enables the fetch command without any pre-configured scope.", 149 "type": "string", 150 - "const": "http:allow-fetch" 151 }, 152 { 153 "description": "Enables the fetch_cancel command without any pre-configured scope.", 154 "type": "string", 155 - "const": "http:allow-fetch-cancel" 156 }, 157 { 158 "description": "Enables the fetch_read_body command without any pre-configured scope.", 159 "type": "string", 160 - "const": "http:allow-fetch-read-body" 161 }, 162 { 163 "description": "Enables the fetch_send command without any pre-configured scope.", 164 "type": "string", 165 - "const": "http:allow-fetch-send" 166 }, 167 { 168 "description": "Denies the fetch command without any pre-configured scope.", 169 "type": "string", 170 - "const": "http:deny-fetch" 171 }, 172 { 173 "description": "Denies the fetch_cancel command without any pre-configured scope.", 174 "type": "string", 175 - "const": "http:deny-fetch-cancel" 176 }, 177 { 178 "description": "Denies the fetch_read_body command without any pre-configured scope.", 179 "type": "string", 180 - "const": "http:deny-fetch-read-body" 181 }, 182 { 183 "description": "Denies the fetch_send command without any pre-configured scope.", 184 "type": "string", 185 - "const": "http:deny-fetch-send" 186 } 187 ] 188 } ··· 257 "identifier": { 258 "anyOf": [ 259 { 260 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 261 "type": "string", 262 - "const": "shell:default" 263 }, 264 { 265 "description": "Enables the execute command without any pre-configured scope.", 266 "type": "string", 267 - "const": "shell:allow-execute" 268 }, 269 { 270 "description": "Enables the kill command without any pre-configured scope.", 271 "type": "string", 272 - "const": "shell:allow-kill" 273 }, 274 { 275 "description": "Enables the open command without any pre-configured scope.", 276 "type": "string", 277 - "const": "shell:allow-open" 278 }, 279 { 280 "description": "Enables the spawn command without any pre-configured scope.", 281 "type": "string", 282 - "const": "shell:allow-spawn" 283 }, 284 { 285 "description": "Enables the stdin_write command without any pre-configured scope.", 286 "type": "string", 287 - "const": "shell:allow-stdin-write" 288 }, 289 { 290 "description": "Denies the execute command without any pre-configured scope.", 291 "type": "string", 292 - "const": "shell:deny-execute" 293 }, 294 { 295 "description": "Denies the kill command without any pre-configured scope.", 296 "type": "string", 297 - "const": "shell:deny-kill" 298 }, 299 { 300 "description": "Denies the open command without any pre-configured scope.", 301 "type": "string", 302 - "const": "shell:deny-open" 303 }, 304 { 305 "description": "Denies the spawn command without any pre-configured scope.", 306 "type": "string", 307 - "const": "shell:deny-spawn" 308 }, 309 { 310 "description": "Denies the stdin_write command without any pre-configured scope.", 311 "type": "string", 312 - "const": "shell:deny-stdin-write" 313 } 314 ] 315 } ··· 493 "description": "Permission identifier", 494 "oneOf": [ 495 { 496 - "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", 497 "type": "string", 498 - "const": "core:default" 499 }, 500 { 501 - "description": "Default permissions for the plugin.", 502 "type": "string", 503 - "const": "core:app:default" 504 }, 505 { 506 "description": "Enables the app_hide command without any pre-configured scope.", 507 "type": "string", 508 - "const": "core:app:allow-app-hide" 509 }, 510 { 511 "description": "Enables the app_show command without any pre-configured scope.", 512 "type": "string", 513 - "const": "core:app:allow-app-show" 514 }, 515 { 516 "description": "Enables the default_window_icon command without any pre-configured scope.", 517 "type": "string", 518 - "const": "core:app:allow-default-window-icon" 519 }, 520 { 521 "description": "Enables the name command without any pre-configured scope.", 522 "type": "string", 523 - "const": "core:app:allow-name" 524 }, 525 { 526 "description": "Enables the set_app_theme command without any pre-configured scope.", 527 "type": "string", 528 - "const": "core:app:allow-set-app-theme" 529 }, 530 { 531 "description": "Enables the tauri_version command without any pre-configured scope.", 532 "type": "string", 533 - "const": "core:app:allow-tauri-version" 534 }, 535 { 536 "description": "Enables the version command without any pre-configured scope.", 537 "type": "string", 538 - "const": "core:app:allow-version" 539 }, 540 { 541 "description": "Denies the app_hide command without any pre-configured scope.", 542 "type": "string", 543 - "const": "core:app:deny-app-hide" 544 }, 545 { 546 "description": "Denies the app_show command without any pre-configured scope.", 547 "type": "string", 548 - "const": "core:app:deny-app-show" 549 }, 550 { 551 "description": "Denies the default_window_icon command without any pre-configured scope.", 552 "type": "string", 553 - "const": "core:app:deny-default-window-icon" 554 }, 555 { 556 "description": "Denies the name command without any pre-configured scope.", 557 "type": "string", 558 - "const": "core:app:deny-name" 559 }, 560 { 561 "description": "Denies the set_app_theme command without any pre-configured scope.", 562 "type": "string", 563 - "const": "core:app:deny-set-app-theme" 564 }, 565 { 566 "description": "Denies the tauri_version command without any pre-configured scope.", 567 "type": "string", 568 - "const": "core:app:deny-tauri-version" 569 }, 570 { 571 "description": "Denies the version command without any pre-configured scope.", 572 "type": "string", 573 - "const": "core:app:deny-version" 574 }, 575 { 576 - "description": "Default permissions for the plugin.", 577 "type": "string", 578 - "const": "core:event:default" 579 }, 580 { 581 "description": "Enables the emit command without any pre-configured scope.", 582 "type": "string", 583 - "const": "core:event:allow-emit" 584 }, 585 { 586 "description": "Enables the emit_to command without any pre-configured scope.", 587 "type": "string", 588 - "const": "core:event:allow-emit-to" 589 }, 590 { 591 "description": "Enables the listen command without any pre-configured scope.", 592 "type": "string", 593 - "const": "core:event:allow-listen" 594 }, 595 { 596 "description": "Enables the unlisten command without any pre-configured scope.", 597 "type": "string", 598 - "const": "core:event:allow-unlisten" 599 }, 600 { 601 "description": "Denies the emit command without any pre-configured scope.", 602 "type": "string", 603 - "const": "core:event:deny-emit" 604 }, 605 { 606 "description": "Denies the emit_to command without any pre-configured scope.", 607 "type": "string", 608 - "const": "core:event:deny-emit-to" 609 }, 610 { 611 "description": "Denies the listen command without any pre-configured scope.", 612 "type": "string", 613 - "const": "core:event:deny-listen" 614 }, 615 { 616 "description": "Denies the unlisten command without any pre-configured scope.", 617 "type": "string", 618 - "const": "core:event:deny-unlisten" 619 }, 620 { 621 - "description": "Default permissions for the plugin.", 622 "type": "string", 623 - "const": "core:image:default" 624 }, 625 { 626 "description": "Enables the from_bytes command without any pre-configured scope.", 627 "type": "string", 628 - "const": "core:image:allow-from-bytes" 629 }, 630 { 631 "description": "Enables the from_path command without any pre-configured scope.", 632 "type": "string", 633 - "const": "core:image:allow-from-path" 634 }, 635 { 636 "description": "Enables the new command without any pre-configured scope.", 637 "type": "string", 638 - "const": "core:image:allow-new" 639 }, 640 { 641 "description": "Enables the rgba command without any pre-configured scope.", 642 "type": "string", 643 - "const": "core:image:allow-rgba" 644 }, 645 { 646 "description": "Enables the size command without any pre-configured scope.", 647 "type": "string", 648 - "const": "core:image:allow-size" 649 }, 650 { 651 "description": "Denies the from_bytes command without any pre-configured scope.", 652 "type": "string", 653 - "const": "core:image:deny-from-bytes" 654 }, 655 { 656 "description": "Denies the from_path command without any pre-configured scope.", 657 "type": "string", 658 - "const": "core:image:deny-from-path" 659 }, 660 { 661 "description": "Denies the new command without any pre-configured scope.", 662 "type": "string", 663 - "const": "core:image:deny-new" 664 }, 665 { 666 "description": "Denies the rgba command without any pre-configured scope.", 667 "type": "string", 668 - "const": "core:image:deny-rgba" 669 }, 670 { 671 "description": "Denies the size command without any pre-configured scope.", 672 "type": "string", 673 - "const": "core:image:deny-size" 674 }, 675 { 676 - "description": "Default permissions for the plugin.", 677 "type": "string", 678 - "const": "core:menu:default" 679 }, 680 { 681 "description": "Enables the append command without any pre-configured scope.", 682 "type": "string", 683 - "const": "core:menu:allow-append" 684 }, 685 { 686 "description": "Enables the create_default command without any pre-configured scope.", 687 "type": "string", 688 - "const": "core:menu:allow-create-default" 689 }, 690 { 691 "description": "Enables the get command without any pre-configured scope.", 692 "type": "string", 693 - "const": "core:menu:allow-get" 694 }, 695 { 696 "description": "Enables the insert command without any pre-configured scope.", 697 "type": "string", 698 - "const": "core:menu:allow-insert" 699 }, 700 { 701 "description": "Enables the is_checked command without any pre-configured scope.", 702 "type": "string", 703 - "const": "core:menu:allow-is-checked" 704 }, 705 { 706 "description": "Enables the is_enabled command without any pre-configured scope.", 707 "type": "string", 708 - "const": "core:menu:allow-is-enabled" 709 }, 710 { 711 "description": "Enables the items command without any pre-configured scope.", 712 "type": "string", 713 - "const": "core:menu:allow-items" 714 }, 715 { 716 "description": "Enables the new command without any pre-configured scope.", 717 "type": "string", 718 - "const": "core:menu:allow-new" 719 }, 720 { 721 "description": "Enables the popup command without any pre-configured scope.", 722 "type": "string", 723 - "const": "core:menu:allow-popup" 724 }, 725 { 726 "description": "Enables the prepend command without any pre-configured scope.", 727 "type": "string", 728 - "const": "core:menu:allow-prepend" 729 }, 730 { 731 "description": "Enables the remove command without any pre-configured scope.", 732 "type": "string", 733 - "const": "core:menu:allow-remove" 734 }, 735 { 736 "description": "Enables the remove_at command without any pre-configured scope.", 737 "type": "string", 738 - "const": "core:menu:allow-remove-at" 739 }, 740 { 741 "description": "Enables the set_accelerator command without any pre-configured scope.", 742 "type": "string", 743 - "const": "core:menu:allow-set-accelerator" 744 }, 745 { 746 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 747 "type": "string", 748 - "const": "core:menu:allow-set-as-app-menu" 749 }, 750 { 751 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 752 "type": "string", 753 - "const": "core:menu:allow-set-as-help-menu-for-nsapp" 754 }, 755 { 756 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 757 "type": "string", 758 - "const": "core:menu:allow-set-as-window-menu" 759 }, 760 { 761 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 762 "type": "string", 763 - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" 764 }, 765 { 766 "description": "Enables the set_checked command without any pre-configured scope.", 767 "type": "string", 768 - "const": "core:menu:allow-set-checked" 769 }, 770 { 771 "description": "Enables the set_enabled command without any pre-configured scope.", 772 "type": "string", 773 - "const": "core:menu:allow-set-enabled" 774 }, 775 { 776 "description": "Enables the set_icon command without any pre-configured scope.", 777 "type": "string", 778 - "const": "core:menu:allow-set-icon" 779 }, 780 { 781 "description": "Enables the set_text command without any pre-configured scope.", 782 "type": "string", 783 - "const": "core:menu:allow-set-text" 784 }, 785 { 786 "description": "Enables the text command without any pre-configured scope.", 787 "type": "string", 788 - "const": "core:menu:allow-text" 789 }, 790 { 791 "description": "Denies the append command without any pre-configured scope.", 792 "type": "string", 793 - "const": "core:menu:deny-append" 794 }, 795 { 796 "description": "Denies the create_default command without any pre-configured scope.", 797 "type": "string", 798 - "const": "core:menu:deny-create-default" 799 }, 800 { 801 "description": "Denies the get command without any pre-configured scope.", 802 "type": "string", 803 - "const": "core:menu:deny-get" 804 }, 805 { 806 "description": "Denies the insert command without any pre-configured scope.", 807 "type": "string", 808 - "const": "core:menu:deny-insert" 809 }, 810 { 811 "description": "Denies the is_checked command without any pre-configured scope.", 812 "type": "string", 813 - "const": "core:menu:deny-is-checked" 814 }, 815 { 816 "description": "Denies the is_enabled command without any pre-configured scope.", 817 "type": "string", 818 - "const": "core:menu:deny-is-enabled" 819 }, 820 { 821 "description": "Denies the items command without any pre-configured scope.", 822 "type": "string", 823 - "const": "core:menu:deny-items" 824 }, 825 { 826 "description": "Denies the new command without any pre-configured scope.", 827 "type": "string", 828 - "const": "core:menu:deny-new" 829 }, 830 { 831 "description": "Denies the popup command without any pre-configured scope.", 832 "type": "string", 833 - "const": "core:menu:deny-popup" 834 }, 835 { 836 "description": "Denies the prepend command without any pre-configured scope.", 837 "type": "string", 838 - "const": "core:menu:deny-prepend" 839 }, 840 { 841 "description": "Denies the remove command without any pre-configured scope.", 842 "type": "string", 843 - "const": "core:menu:deny-remove" 844 }, 845 { 846 "description": "Denies the remove_at command without any pre-configured scope.", 847 "type": "string", 848 - "const": "core:menu:deny-remove-at" 849 }, 850 { 851 "description": "Denies the set_accelerator command without any pre-configured scope.", 852 "type": "string", 853 - "const": "core:menu:deny-set-accelerator" 854 }, 855 { 856 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 857 "type": "string", 858 - "const": "core:menu:deny-set-as-app-menu" 859 }, 860 { 861 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 862 "type": "string", 863 - "const": "core:menu:deny-set-as-help-menu-for-nsapp" 864 }, 865 { 866 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 867 "type": "string", 868 - "const": "core:menu:deny-set-as-window-menu" 869 }, 870 { 871 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 872 "type": "string", 873 - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" 874 }, 875 { 876 "description": "Denies the set_checked command without any pre-configured scope.", 877 "type": "string", 878 - "const": "core:menu:deny-set-checked" 879 }, 880 { 881 "description": "Denies the set_enabled command without any pre-configured scope.", 882 "type": "string", 883 - "const": "core:menu:deny-set-enabled" 884 }, 885 { 886 "description": "Denies the set_icon command without any pre-configured scope.", 887 "type": "string", 888 - "const": "core:menu:deny-set-icon" 889 }, 890 { 891 "description": "Denies the set_text command without any pre-configured scope.", 892 "type": "string", 893 - "const": "core:menu:deny-set-text" 894 }, 895 { 896 "description": "Denies the text command without any pre-configured scope.", 897 "type": "string", 898 - "const": "core:menu:deny-text" 899 }, 900 { 901 - "description": "Default permissions for the plugin.", 902 "type": "string", 903 - "const": "core:path:default" 904 }, 905 { 906 "description": "Enables the basename command without any pre-configured scope.", 907 "type": "string", 908 - "const": "core:path:allow-basename" 909 }, 910 { 911 "description": "Enables the dirname command without any pre-configured scope.", 912 "type": "string", 913 - "const": "core:path:allow-dirname" 914 }, 915 { 916 "description": "Enables the extname command without any pre-configured scope.", 917 "type": "string", 918 - "const": "core:path:allow-extname" 919 }, 920 { 921 "description": "Enables the is_absolute command without any pre-configured scope.", 922 "type": "string", 923 - "const": "core:path:allow-is-absolute" 924 }, 925 { 926 "description": "Enables the join command without any pre-configured scope.", 927 "type": "string", 928 - "const": "core:path:allow-join" 929 }, 930 { 931 "description": "Enables the normalize command without any pre-configured scope.", 932 "type": "string", 933 - "const": "core:path:allow-normalize" 934 }, 935 { 936 "description": "Enables the resolve command without any pre-configured scope.", 937 "type": "string", 938 - "const": "core:path:allow-resolve" 939 }, 940 { 941 "description": "Enables the resolve_directory command without any pre-configured scope.", 942 "type": "string", 943 - "const": "core:path:allow-resolve-directory" 944 }, 945 { 946 "description": "Denies the basename command without any pre-configured scope.", 947 "type": "string", 948 - "const": "core:path:deny-basename" 949 }, 950 { 951 "description": "Denies the dirname command without any pre-configured scope.", 952 "type": "string", 953 - "const": "core:path:deny-dirname" 954 }, 955 { 956 "description": "Denies the extname command without any pre-configured scope.", 957 "type": "string", 958 - "const": "core:path:deny-extname" 959 }, 960 { 961 "description": "Denies the is_absolute command without any pre-configured scope.", 962 "type": "string", 963 - "const": "core:path:deny-is-absolute" 964 }, 965 { 966 "description": "Denies the join command without any pre-configured scope.", 967 "type": "string", 968 - "const": "core:path:deny-join" 969 }, 970 { 971 "description": "Denies the normalize command without any pre-configured scope.", 972 "type": "string", 973 - "const": "core:path:deny-normalize" 974 }, 975 { 976 "description": "Denies the resolve command without any pre-configured scope.", 977 "type": "string", 978 - "const": "core:path:deny-resolve" 979 }, 980 { 981 "description": "Denies the resolve_directory command without any pre-configured scope.", 982 "type": "string", 983 - "const": "core:path:deny-resolve-directory" 984 }, 985 { 986 - "description": "Default permissions for the plugin.", 987 "type": "string", 988 - "const": "core:resources:default" 989 }, 990 { 991 "description": "Enables the close command without any pre-configured scope.", 992 "type": "string", 993 - "const": "core:resources:allow-close" 994 }, 995 { 996 "description": "Denies the close command without any pre-configured scope.", 997 "type": "string", 998 - "const": "core:resources:deny-close" 999 }, 1000 { 1001 - "description": "Default permissions for the plugin.", 1002 "type": "string", 1003 - "const": "core:tray:default" 1004 }, 1005 { 1006 "description": "Enables the get_by_id command without any pre-configured scope.", 1007 "type": "string", 1008 - "const": "core:tray:allow-get-by-id" 1009 }, 1010 { 1011 "description": "Enables the new command without any pre-configured scope.", 1012 "type": "string", 1013 - "const": "core:tray:allow-new" 1014 }, 1015 { 1016 "description": "Enables the remove_by_id command without any pre-configured scope.", 1017 "type": "string", 1018 - "const": "core:tray:allow-remove-by-id" 1019 }, 1020 { 1021 "description": "Enables the set_icon command without any pre-configured scope.", 1022 "type": "string", 1023 - "const": "core:tray:allow-set-icon" 1024 }, 1025 { 1026 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1027 "type": "string", 1028 - "const": "core:tray:allow-set-icon-as-template" 1029 }, 1030 { 1031 "description": "Enables the set_menu command without any pre-configured scope.", 1032 "type": "string", 1033 - "const": "core:tray:allow-set-menu" 1034 }, 1035 { 1036 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1037 "type": "string", 1038 - "const": "core:tray:allow-set-show-menu-on-left-click" 1039 }, 1040 { 1041 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1042 "type": "string", 1043 - "const": "core:tray:allow-set-temp-dir-path" 1044 }, 1045 { 1046 "description": "Enables the set_title command without any pre-configured scope.", 1047 "type": "string", 1048 - "const": "core:tray:allow-set-title" 1049 }, 1050 { 1051 "description": "Enables the set_tooltip command without any pre-configured scope.", 1052 "type": "string", 1053 - "const": "core:tray:allow-set-tooltip" 1054 }, 1055 { 1056 "description": "Enables the set_visible command without any pre-configured scope.", 1057 "type": "string", 1058 - "const": "core:tray:allow-set-visible" 1059 }, 1060 { 1061 "description": "Denies the get_by_id command without any pre-configured scope.", 1062 "type": "string", 1063 - "const": "core:tray:deny-get-by-id" 1064 }, 1065 { 1066 "description": "Denies the new command without any pre-configured scope.", 1067 "type": "string", 1068 - "const": "core:tray:deny-new" 1069 }, 1070 { 1071 "description": "Denies the remove_by_id command without any pre-configured scope.", 1072 "type": "string", 1073 - "const": "core:tray:deny-remove-by-id" 1074 }, 1075 { 1076 "description": "Denies the set_icon command without any pre-configured scope.", 1077 "type": "string", 1078 - "const": "core:tray:deny-set-icon" 1079 }, 1080 { 1081 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1082 "type": "string", 1083 - "const": "core:tray:deny-set-icon-as-template" 1084 }, 1085 { 1086 "description": "Denies the set_menu command without any pre-configured scope.", 1087 "type": "string", 1088 - "const": "core:tray:deny-set-menu" 1089 }, 1090 { 1091 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1092 "type": "string", 1093 - "const": "core:tray:deny-set-show-menu-on-left-click" 1094 }, 1095 { 1096 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1097 "type": "string", 1098 - "const": "core:tray:deny-set-temp-dir-path" 1099 }, 1100 { 1101 "description": "Denies the set_title command without any pre-configured scope.", 1102 "type": "string", 1103 - "const": "core:tray:deny-set-title" 1104 }, 1105 { 1106 "description": "Denies the set_tooltip command without any pre-configured scope.", 1107 "type": "string", 1108 - "const": "core:tray:deny-set-tooltip" 1109 }, 1110 { 1111 "description": "Denies the set_visible command without any pre-configured scope.", 1112 "type": "string", 1113 - "const": "core:tray:deny-set-visible" 1114 }, 1115 { 1116 - "description": "Default permissions for the plugin.", 1117 "type": "string", 1118 - "const": "core:webview:default" 1119 }, 1120 { 1121 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1122 "type": "string", 1123 - "const": "core:webview:allow-clear-all-browsing-data" 1124 }, 1125 { 1126 "description": "Enables the create_webview command without any pre-configured scope.", 1127 "type": "string", 1128 - "const": "core:webview:allow-create-webview" 1129 }, 1130 { 1131 "description": "Enables the create_webview_window command without any pre-configured scope.", 1132 "type": "string", 1133 - "const": "core:webview:allow-create-webview-window" 1134 }, 1135 { 1136 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1137 "type": "string", 1138 - "const": "core:webview:allow-get-all-webviews" 1139 }, 1140 { 1141 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1142 "type": "string", 1143 - "const": "core:webview:allow-internal-toggle-devtools" 1144 }, 1145 { 1146 "description": "Enables the print command without any pre-configured scope.", 1147 "type": "string", 1148 - "const": "core:webview:allow-print" 1149 }, 1150 { 1151 "description": "Enables the reparent command without any pre-configured scope.", 1152 "type": "string", 1153 - "const": "core:webview:allow-reparent" 1154 }, 1155 { 1156 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1157 "type": "string", 1158 - "const": "core:webview:allow-set-webview-focus" 1159 }, 1160 { 1161 "description": "Enables the set_webview_position command without any pre-configured scope.", 1162 "type": "string", 1163 - "const": "core:webview:allow-set-webview-position" 1164 }, 1165 { 1166 "description": "Enables the set_webview_size command without any pre-configured scope.", 1167 "type": "string", 1168 - "const": "core:webview:allow-set-webview-size" 1169 }, 1170 { 1171 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1172 "type": "string", 1173 - "const": "core:webview:allow-set-webview-zoom" 1174 }, 1175 { 1176 "description": "Enables the webview_close command without any pre-configured scope.", 1177 "type": "string", 1178 - "const": "core:webview:allow-webview-close" 1179 }, 1180 { 1181 "description": "Enables the webview_hide command without any pre-configured scope.", 1182 "type": "string", 1183 - "const": "core:webview:allow-webview-hide" 1184 }, 1185 { 1186 "description": "Enables the webview_position command without any pre-configured scope.", 1187 "type": "string", 1188 - "const": "core:webview:allow-webview-position" 1189 }, 1190 { 1191 "description": "Enables the webview_show command without any pre-configured scope.", 1192 "type": "string", 1193 - "const": "core:webview:allow-webview-show" 1194 }, 1195 { 1196 "description": "Enables the webview_size command without any pre-configured scope.", 1197 "type": "string", 1198 - "const": "core:webview:allow-webview-size" 1199 }, 1200 { 1201 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1202 "type": "string", 1203 - "const": "core:webview:deny-clear-all-browsing-data" 1204 }, 1205 { 1206 "description": "Denies the create_webview command without any pre-configured scope.", 1207 "type": "string", 1208 - "const": "core:webview:deny-create-webview" 1209 }, 1210 { 1211 "description": "Denies the create_webview_window command without any pre-configured scope.", 1212 "type": "string", 1213 - "const": "core:webview:deny-create-webview-window" 1214 }, 1215 { 1216 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1217 "type": "string", 1218 - "const": "core:webview:deny-get-all-webviews" 1219 }, 1220 { 1221 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1222 "type": "string", 1223 - "const": "core:webview:deny-internal-toggle-devtools" 1224 }, 1225 { 1226 "description": "Denies the print command without any pre-configured scope.", 1227 "type": "string", 1228 - "const": "core:webview:deny-print" 1229 }, 1230 { 1231 "description": "Denies the reparent command without any pre-configured scope.", 1232 "type": "string", 1233 - "const": "core:webview:deny-reparent" 1234 }, 1235 { 1236 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1237 "type": "string", 1238 - "const": "core:webview:deny-set-webview-focus" 1239 }, 1240 { 1241 "description": "Denies the set_webview_position command without any pre-configured scope.", 1242 "type": "string", 1243 - "const": "core:webview:deny-set-webview-position" 1244 }, 1245 { 1246 "description": "Denies the set_webview_size command without any pre-configured scope.", 1247 "type": "string", 1248 - "const": "core:webview:deny-set-webview-size" 1249 }, 1250 { 1251 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1252 "type": "string", 1253 - "const": "core:webview:deny-set-webview-zoom" 1254 }, 1255 { 1256 "description": "Denies the webview_close command without any pre-configured scope.", 1257 "type": "string", 1258 - "const": "core:webview:deny-webview-close" 1259 }, 1260 { 1261 "description": "Denies the webview_hide command without any pre-configured scope.", 1262 "type": "string", 1263 - "const": "core:webview:deny-webview-hide" 1264 }, 1265 { 1266 "description": "Denies the webview_position command without any pre-configured scope.", 1267 "type": "string", 1268 - "const": "core:webview:deny-webview-position" 1269 }, 1270 { 1271 "description": "Denies the webview_show command without any pre-configured scope.", 1272 "type": "string", 1273 - "const": "core:webview:deny-webview-show" 1274 }, 1275 { 1276 "description": "Denies the webview_size command without any pre-configured scope.", 1277 "type": "string", 1278 - "const": "core:webview:deny-webview-size" 1279 }, 1280 { 1281 - "description": "Default permissions for the plugin.", 1282 "type": "string", 1283 - "const": "core:window:default" 1284 }, 1285 { 1286 "description": "Enables the available_monitors command without any pre-configured scope.", 1287 "type": "string", 1288 - "const": "core:window:allow-available-monitors" 1289 }, 1290 { 1291 "description": "Enables the center command without any pre-configured scope.", 1292 "type": "string", 1293 - "const": "core:window:allow-center" 1294 }, 1295 { 1296 "description": "Enables the close command without any pre-configured scope.", 1297 "type": "string", 1298 - "const": "core:window:allow-close" 1299 }, 1300 { 1301 "description": "Enables the create command without any pre-configured scope.", 1302 "type": "string", 1303 - "const": "core:window:allow-create" 1304 }, 1305 { 1306 "description": "Enables the current_monitor command without any pre-configured scope.", 1307 "type": "string", 1308 - "const": "core:window:allow-current-monitor" 1309 }, 1310 { 1311 "description": "Enables the cursor_position command without any pre-configured scope.", 1312 "type": "string", 1313 - "const": "core:window:allow-cursor-position" 1314 }, 1315 { 1316 "description": "Enables the destroy command without any pre-configured scope.", 1317 "type": "string", 1318 - "const": "core:window:allow-destroy" 1319 }, 1320 { 1321 "description": "Enables the get_all_windows command without any pre-configured scope.", 1322 "type": "string", 1323 - "const": "core:window:allow-get-all-windows" 1324 }, 1325 { 1326 "description": "Enables the hide command without any pre-configured scope.", 1327 "type": "string", 1328 - "const": "core:window:allow-hide" 1329 }, 1330 { 1331 "description": "Enables the inner_position command without any pre-configured scope.", 1332 "type": "string", 1333 - "const": "core:window:allow-inner-position" 1334 }, 1335 { 1336 "description": "Enables the inner_size command without any pre-configured scope.", 1337 "type": "string", 1338 - "const": "core:window:allow-inner-size" 1339 }, 1340 { 1341 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1342 "type": "string", 1343 - "const": "core:window:allow-internal-toggle-maximize" 1344 }, 1345 { 1346 "description": "Enables the is_closable command without any pre-configured scope.", 1347 "type": "string", 1348 - "const": "core:window:allow-is-closable" 1349 }, 1350 { 1351 "description": "Enables the is_decorated command without any pre-configured scope.", 1352 "type": "string", 1353 - "const": "core:window:allow-is-decorated" 1354 }, 1355 { 1356 "description": "Enables the is_enabled command without any pre-configured scope.", 1357 "type": "string", 1358 - "const": "core:window:allow-is-enabled" 1359 }, 1360 { 1361 "description": "Enables the is_focused command without any pre-configured scope.", 1362 "type": "string", 1363 - "const": "core:window:allow-is-focused" 1364 }, 1365 { 1366 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1367 "type": "string", 1368 - "const": "core:window:allow-is-fullscreen" 1369 }, 1370 { 1371 "description": "Enables the is_maximizable command without any pre-configured scope.", 1372 "type": "string", 1373 - "const": "core:window:allow-is-maximizable" 1374 }, 1375 { 1376 "description": "Enables the is_maximized command without any pre-configured scope.", 1377 "type": "string", 1378 - "const": "core:window:allow-is-maximized" 1379 }, 1380 { 1381 "description": "Enables the is_minimizable command without any pre-configured scope.", 1382 "type": "string", 1383 - "const": "core:window:allow-is-minimizable" 1384 }, 1385 { 1386 "description": "Enables the is_minimized command without any pre-configured scope.", 1387 "type": "string", 1388 - "const": "core:window:allow-is-minimized" 1389 }, 1390 { 1391 "description": "Enables the is_resizable command without any pre-configured scope.", 1392 "type": "string", 1393 - "const": "core:window:allow-is-resizable" 1394 }, 1395 { 1396 "description": "Enables the is_visible command without any pre-configured scope.", 1397 "type": "string", 1398 - "const": "core:window:allow-is-visible" 1399 }, 1400 { 1401 "description": "Enables the maximize command without any pre-configured scope.", 1402 "type": "string", 1403 - "const": "core:window:allow-maximize" 1404 }, 1405 { 1406 "description": "Enables the minimize command without any pre-configured scope.", 1407 "type": "string", 1408 - "const": "core:window:allow-minimize" 1409 }, 1410 { 1411 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1412 "type": "string", 1413 - "const": "core:window:allow-monitor-from-point" 1414 }, 1415 { 1416 "description": "Enables the outer_position command without any pre-configured scope.", 1417 "type": "string", 1418 - "const": "core:window:allow-outer-position" 1419 }, 1420 { 1421 "description": "Enables the outer_size command without any pre-configured scope.", 1422 "type": "string", 1423 - "const": "core:window:allow-outer-size" 1424 }, 1425 { 1426 "description": "Enables the primary_monitor command without any pre-configured scope.", 1427 "type": "string", 1428 - "const": "core:window:allow-primary-monitor" 1429 }, 1430 { 1431 "description": "Enables the request_user_attention command without any pre-configured scope.", 1432 "type": "string", 1433 - "const": "core:window:allow-request-user-attention" 1434 }, 1435 { 1436 "description": "Enables the scale_factor command without any pre-configured scope.", 1437 "type": "string", 1438 - "const": "core:window:allow-scale-factor" 1439 }, 1440 { 1441 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1442 "type": "string", 1443 - "const": "core:window:allow-set-always-on-bottom" 1444 }, 1445 { 1446 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1447 "type": "string", 1448 - "const": "core:window:allow-set-always-on-top" 1449 }, 1450 { 1451 "description": "Enables the set_closable command without any pre-configured scope.", 1452 "type": "string", 1453 - "const": "core:window:allow-set-closable" 1454 }, 1455 { 1456 "description": "Enables the set_content_protected command without any pre-configured scope.", 1457 "type": "string", 1458 - "const": "core:window:allow-set-content-protected" 1459 }, 1460 { 1461 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1462 "type": "string", 1463 - "const": "core:window:allow-set-cursor-grab" 1464 }, 1465 { 1466 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1467 "type": "string", 1468 - "const": "core:window:allow-set-cursor-icon" 1469 }, 1470 { 1471 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1472 "type": "string", 1473 - "const": "core:window:allow-set-cursor-position" 1474 }, 1475 { 1476 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1477 "type": "string", 1478 - "const": "core:window:allow-set-cursor-visible" 1479 }, 1480 { 1481 "description": "Enables the set_decorations command without any pre-configured scope.", 1482 "type": "string", 1483 - "const": "core:window:allow-set-decorations" 1484 }, 1485 { 1486 "description": "Enables the set_effects command without any pre-configured scope.", 1487 "type": "string", 1488 - "const": "core:window:allow-set-effects" 1489 }, 1490 { 1491 "description": "Enables the set_enabled command without any pre-configured scope.", 1492 "type": "string", 1493 - "const": "core:window:allow-set-enabled" 1494 }, 1495 { 1496 "description": "Enables the set_focus command without any pre-configured scope.", 1497 "type": "string", 1498 - "const": "core:window:allow-set-focus" 1499 }, 1500 { 1501 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1502 "type": "string", 1503 - "const": "core:window:allow-set-fullscreen" 1504 }, 1505 { 1506 "description": "Enables the set_icon command without any pre-configured scope.", 1507 "type": "string", 1508 - "const": "core:window:allow-set-icon" 1509 }, 1510 { 1511 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1512 "type": "string", 1513 - "const": "core:window:allow-set-ignore-cursor-events" 1514 }, 1515 { 1516 "description": "Enables the set_max_size command without any pre-configured scope.", 1517 "type": "string", 1518 - "const": "core:window:allow-set-max-size" 1519 }, 1520 { 1521 "description": "Enables the set_maximizable command without any pre-configured scope.", 1522 "type": "string", 1523 - "const": "core:window:allow-set-maximizable" 1524 }, 1525 { 1526 "description": "Enables the set_min_size command without any pre-configured scope.", 1527 "type": "string", 1528 - "const": "core:window:allow-set-min-size" 1529 }, 1530 { 1531 "description": "Enables the set_minimizable command without any pre-configured scope.", 1532 "type": "string", 1533 - "const": "core:window:allow-set-minimizable" 1534 }, 1535 { 1536 "description": "Enables the set_position command without any pre-configured scope.", 1537 "type": "string", 1538 - "const": "core:window:allow-set-position" 1539 }, 1540 { 1541 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1542 "type": "string", 1543 - "const": "core:window:allow-set-progress-bar" 1544 }, 1545 { 1546 "description": "Enables the set_resizable command without any pre-configured scope.", 1547 "type": "string", 1548 - "const": "core:window:allow-set-resizable" 1549 }, 1550 { 1551 "description": "Enables the set_shadow command without any pre-configured scope.", 1552 "type": "string", 1553 - "const": "core:window:allow-set-shadow" 1554 }, 1555 { 1556 "description": "Enables the set_size command without any pre-configured scope.", 1557 "type": "string", 1558 - "const": "core:window:allow-set-size" 1559 }, 1560 { 1561 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1562 "type": "string", 1563 - "const": "core:window:allow-set-size-constraints" 1564 }, 1565 { 1566 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1567 "type": "string", 1568 - "const": "core:window:allow-set-skip-taskbar" 1569 }, 1570 { 1571 "description": "Enables the set_theme command without any pre-configured scope.", 1572 "type": "string", 1573 - "const": "core:window:allow-set-theme" 1574 }, 1575 { 1576 "description": "Enables the set_title command without any pre-configured scope.", 1577 "type": "string", 1578 - "const": "core:window:allow-set-title" 1579 }, 1580 { 1581 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1582 "type": "string", 1583 - "const": "core:window:allow-set-title-bar-style" 1584 }, 1585 { 1586 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1587 "type": "string", 1588 - "const": "core:window:allow-set-visible-on-all-workspaces" 1589 }, 1590 { 1591 "description": "Enables the show command without any pre-configured scope.", 1592 "type": "string", 1593 - "const": "core:window:allow-show" 1594 }, 1595 { 1596 "description": "Enables the start_dragging command without any pre-configured scope.", 1597 "type": "string", 1598 - "const": "core:window:allow-start-dragging" 1599 }, 1600 { 1601 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1602 "type": "string", 1603 - "const": "core:window:allow-start-resize-dragging" 1604 }, 1605 { 1606 "description": "Enables the theme command without any pre-configured scope.", 1607 "type": "string", 1608 - "const": "core:window:allow-theme" 1609 }, 1610 { 1611 "description": "Enables the title command without any pre-configured scope.", 1612 "type": "string", 1613 - "const": "core:window:allow-title" 1614 }, 1615 { 1616 "description": "Enables the toggle_maximize command without any pre-configured scope.", 1617 "type": "string", 1618 - "const": "core:window:allow-toggle-maximize" 1619 }, 1620 { 1621 "description": "Enables the unmaximize command without any pre-configured scope.", 1622 "type": "string", 1623 - "const": "core:window:allow-unmaximize" 1624 }, 1625 { 1626 "description": "Enables the unminimize command without any pre-configured scope.", 1627 "type": "string", 1628 - "const": "core:window:allow-unminimize" 1629 }, 1630 { 1631 "description": "Denies the available_monitors command without any pre-configured scope.", 1632 "type": "string", 1633 - "const": "core:window:deny-available-monitors" 1634 }, 1635 { 1636 "description": "Denies the center command without any pre-configured scope.", 1637 "type": "string", 1638 - "const": "core:window:deny-center" 1639 }, 1640 { 1641 "description": "Denies the close command without any pre-configured scope.", 1642 "type": "string", 1643 - "const": "core:window:deny-close" 1644 }, 1645 { 1646 "description": "Denies the create command without any pre-configured scope.", 1647 "type": "string", 1648 - "const": "core:window:deny-create" 1649 }, 1650 { 1651 "description": "Denies the current_monitor command without any pre-configured scope.", 1652 "type": "string", 1653 - "const": "core:window:deny-current-monitor" 1654 }, 1655 { 1656 "description": "Denies the cursor_position command without any pre-configured scope.", 1657 "type": "string", 1658 - "const": "core:window:deny-cursor-position" 1659 }, 1660 { 1661 "description": "Denies the destroy command without any pre-configured scope.", 1662 "type": "string", 1663 - "const": "core:window:deny-destroy" 1664 }, 1665 { 1666 "description": "Denies the get_all_windows command without any pre-configured scope.", 1667 "type": "string", 1668 - "const": "core:window:deny-get-all-windows" 1669 }, 1670 { 1671 "description": "Denies the hide command without any pre-configured scope.", 1672 "type": "string", 1673 - "const": "core:window:deny-hide" 1674 }, 1675 { 1676 "description": "Denies the inner_position command without any pre-configured scope.", 1677 "type": "string", 1678 - "const": "core:window:deny-inner-position" 1679 }, 1680 { 1681 "description": "Denies the inner_size command without any pre-configured scope.", 1682 "type": "string", 1683 - "const": "core:window:deny-inner-size" 1684 }, 1685 { 1686 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 1687 "type": "string", 1688 - "const": "core:window:deny-internal-toggle-maximize" 1689 }, 1690 { 1691 "description": "Denies the is_closable command without any pre-configured scope.", 1692 "type": "string", 1693 - "const": "core:window:deny-is-closable" 1694 }, 1695 { 1696 "description": "Denies the is_decorated command without any pre-configured scope.", 1697 "type": "string", 1698 - "const": "core:window:deny-is-decorated" 1699 }, 1700 { 1701 "description": "Denies the is_enabled command without any pre-configured scope.", 1702 "type": "string", 1703 - "const": "core:window:deny-is-enabled" 1704 }, 1705 { 1706 "description": "Denies the is_focused command without any pre-configured scope.", 1707 "type": "string", 1708 - "const": "core:window:deny-is-focused" 1709 }, 1710 { 1711 "description": "Denies the is_fullscreen command without any pre-configured scope.", 1712 "type": "string", 1713 - "const": "core:window:deny-is-fullscreen" 1714 }, 1715 { 1716 "description": "Denies the is_maximizable command without any pre-configured scope.", 1717 "type": "string", 1718 - "const": "core:window:deny-is-maximizable" 1719 }, 1720 { 1721 "description": "Denies the is_maximized command without any pre-configured scope.", 1722 "type": "string", 1723 - "const": "core:window:deny-is-maximized" 1724 }, 1725 { 1726 "description": "Denies the is_minimizable command without any pre-configured scope.", 1727 "type": "string", 1728 - "const": "core:window:deny-is-minimizable" 1729 }, 1730 { 1731 "description": "Denies the is_minimized command without any pre-configured scope.", 1732 "type": "string", 1733 - "const": "core:window:deny-is-minimized" 1734 }, 1735 { 1736 "description": "Denies the is_resizable command without any pre-configured scope.", 1737 "type": "string", 1738 - "const": "core:window:deny-is-resizable" 1739 }, 1740 { 1741 "description": "Denies the is_visible command without any pre-configured scope.", 1742 "type": "string", 1743 - "const": "core:window:deny-is-visible" 1744 }, 1745 { 1746 "description": "Denies the maximize command without any pre-configured scope.", 1747 "type": "string", 1748 - "const": "core:window:deny-maximize" 1749 }, 1750 { 1751 "description": "Denies the minimize command without any pre-configured scope.", 1752 "type": "string", 1753 - "const": "core:window:deny-minimize" 1754 }, 1755 { 1756 "description": "Denies the monitor_from_point command without any pre-configured scope.", 1757 "type": "string", 1758 - "const": "core:window:deny-monitor-from-point" 1759 }, 1760 { 1761 "description": "Denies the outer_position command without any pre-configured scope.", 1762 "type": "string", 1763 - "const": "core:window:deny-outer-position" 1764 }, 1765 { 1766 "description": "Denies the outer_size command without any pre-configured scope.", 1767 "type": "string", 1768 - "const": "core:window:deny-outer-size" 1769 }, 1770 { 1771 "description": "Denies the primary_monitor command without any pre-configured scope.", 1772 "type": "string", 1773 - "const": "core:window:deny-primary-monitor" 1774 }, 1775 { 1776 "description": "Denies the request_user_attention command without any pre-configured scope.", 1777 "type": "string", 1778 - "const": "core:window:deny-request-user-attention" 1779 }, 1780 { 1781 "description": "Denies the scale_factor command without any pre-configured scope.", 1782 "type": "string", 1783 - "const": "core:window:deny-scale-factor" 1784 }, 1785 { 1786 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 1787 "type": "string", 1788 - "const": "core:window:deny-set-always-on-bottom" 1789 }, 1790 { 1791 "description": "Denies the set_always_on_top command without any pre-configured scope.", 1792 "type": "string", 1793 - "const": "core:window:deny-set-always-on-top" 1794 }, 1795 { 1796 "description": "Denies the set_closable command without any pre-configured scope.", 1797 "type": "string", 1798 - "const": "core:window:deny-set-closable" 1799 }, 1800 { 1801 "description": "Denies the set_content_protected command without any pre-configured scope.", 1802 "type": "string", 1803 - "const": "core:window:deny-set-content-protected" 1804 }, 1805 { 1806 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 - "const": "core:window:deny-set-cursor-grab" 1809 }, 1810 { 1811 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 1812 "type": "string", 1813 - "const": "core:window:deny-set-cursor-icon" 1814 }, 1815 { 1816 "description": "Denies the set_cursor_position command without any pre-configured scope.", 1817 "type": "string", 1818 - "const": "core:window:deny-set-cursor-position" 1819 }, 1820 { 1821 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 1822 "type": "string", 1823 - "const": "core:window:deny-set-cursor-visible" 1824 }, 1825 { 1826 "description": "Denies the set_decorations command without any pre-configured scope.", 1827 "type": "string", 1828 - "const": "core:window:deny-set-decorations" 1829 }, 1830 { 1831 "description": "Denies the set_effects command without any pre-configured scope.", 1832 "type": "string", 1833 - "const": "core:window:deny-set-effects" 1834 }, 1835 { 1836 "description": "Denies the set_enabled command without any pre-configured scope.", 1837 "type": "string", 1838 - "const": "core:window:deny-set-enabled" 1839 }, 1840 { 1841 "description": "Denies the set_focus command without any pre-configured scope.", 1842 "type": "string", 1843 - "const": "core:window:deny-set-focus" 1844 }, 1845 { 1846 "description": "Denies the set_fullscreen command without any pre-configured scope.", 1847 "type": "string", 1848 - "const": "core:window:deny-set-fullscreen" 1849 }, 1850 { 1851 "description": "Denies the set_icon command without any pre-configured scope.", 1852 "type": "string", 1853 - "const": "core:window:deny-set-icon" 1854 }, 1855 { 1856 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 1857 "type": "string", 1858 - "const": "core:window:deny-set-ignore-cursor-events" 1859 }, 1860 { 1861 "description": "Denies the set_max_size command without any pre-configured scope.", 1862 "type": "string", 1863 - "const": "core:window:deny-set-max-size" 1864 }, 1865 { 1866 "description": "Denies the set_maximizable command without any pre-configured scope.", 1867 "type": "string", 1868 - "const": "core:window:deny-set-maximizable" 1869 }, 1870 { 1871 "description": "Denies the set_min_size command without any pre-configured scope.", 1872 "type": "string", 1873 - "const": "core:window:deny-set-min-size" 1874 }, 1875 { 1876 "description": "Denies the set_minimizable command without any pre-configured scope.", 1877 "type": "string", 1878 - "const": "core:window:deny-set-minimizable" 1879 }, 1880 { 1881 "description": "Denies the set_position command without any pre-configured scope.", 1882 "type": "string", 1883 - "const": "core:window:deny-set-position" 1884 }, 1885 { 1886 "description": "Denies the set_progress_bar command without any pre-configured scope.", 1887 "type": "string", 1888 - "const": "core:window:deny-set-progress-bar" 1889 }, 1890 { 1891 "description": "Denies the set_resizable command without any pre-configured scope.", 1892 "type": "string", 1893 - "const": "core:window:deny-set-resizable" 1894 }, 1895 { 1896 "description": "Denies the set_shadow command without any pre-configured scope.", 1897 "type": "string", 1898 - "const": "core:window:deny-set-shadow" 1899 }, 1900 { 1901 "description": "Denies the set_size command without any pre-configured scope.", 1902 "type": "string", 1903 - "const": "core:window:deny-set-size" 1904 }, 1905 { 1906 "description": "Denies the set_size_constraints command without any pre-configured scope.", 1907 "type": "string", 1908 - "const": "core:window:deny-set-size-constraints" 1909 }, 1910 { 1911 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 1912 "type": "string", 1913 - "const": "core:window:deny-set-skip-taskbar" 1914 }, 1915 { 1916 "description": "Denies the set_theme command without any pre-configured scope.", 1917 "type": "string", 1918 - "const": "core:window:deny-set-theme" 1919 }, 1920 { 1921 "description": "Denies the set_title command without any pre-configured scope.", 1922 "type": "string", 1923 - "const": "core:window:deny-set-title" 1924 }, 1925 { 1926 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 1927 "type": "string", 1928 - "const": "core:window:deny-set-title-bar-style" 1929 }, 1930 { 1931 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 1932 "type": "string", 1933 - "const": "core:window:deny-set-visible-on-all-workspaces" 1934 }, 1935 { 1936 "description": "Denies the show command without any pre-configured scope.", 1937 "type": "string", 1938 - "const": "core:window:deny-show" 1939 }, 1940 { 1941 "description": "Denies the start_dragging command without any pre-configured scope.", 1942 "type": "string", 1943 - "const": "core:window:deny-start-dragging" 1944 }, 1945 { 1946 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 1947 "type": "string", 1948 - "const": "core:window:deny-start-resize-dragging" 1949 }, 1950 { 1951 "description": "Denies the theme command without any pre-configured scope.", 1952 "type": "string", 1953 - "const": "core:window:deny-theme" 1954 }, 1955 { 1956 "description": "Denies the title command without any pre-configured scope.", 1957 "type": "string", 1958 - "const": "core:window:deny-title" 1959 }, 1960 { 1961 "description": "Denies the toggle_maximize command without any pre-configured scope.", 1962 "type": "string", 1963 - "const": "core:window:deny-toggle-maximize" 1964 }, 1965 { 1966 "description": "Denies the unmaximize command without any pre-configured scope.", 1967 "type": "string", 1968 - "const": "core:window:deny-unmaximize" 1969 }, 1970 { 1971 "description": "Denies the unminimize command without any pre-configured scope.", 1972 "type": "string", 1973 - "const": "core:window:deny-unminimize" 1974 }, 1975 { 1976 - "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n", 1977 "type": "string", 1978 - "const": "http:default" 1979 }, 1980 { 1981 "description": "Enables the fetch command without any pre-configured scope.", 1982 "type": "string", 1983 - "const": "http:allow-fetch" 1984 }, 1985 { 1986 "description": "Enables the fetch_cancel command without any pre-configured scope.", 1987 "type": "string", 1988 - "const": "http:allow-fetch-cancel" 1989 }, 1990 { 1991 "description": "Enables the fetch_read_body command without any pre-configured scope.", 1992 "type": "string", 1993 - "const": "http:allow-fetch-read-body" 1994 }, 1995 { 1996 "description": "Enables the fetch_send command without any pre-configured scope.", 1997 "type": "string", 1998 - "const": "http:allow-fetch-send" 1999 }, 2000 { 2001 "description": "Denies the fetch command without any pre-configured scope.", 2002 "type": "string", 2003 - "const": "http:deny-fetch" 2004 }, 2005 { 2006 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2007 "type": "string", 2008 - "const": "http:deny-fetch-cancel" 2009 }, 2010 { 2011 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2012 "type": "string", 2013 - "const": "http:deny-fetch-read-body" 2014 }, 2015 { 2016 "description": "Denies the fetch_send command without any pre-configured scope.", 2017 "type": "string", 2018 - "const": "http:deny-fetch-send" 2019 }, 2020 { 2021 - "description": "This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", 2022 "type": "string", 2023 - "const": "process:default" 2024 }, 2025 { 2026 "description": "Enables the exit command without any pre-configured scope.", 2027 "type": "string", 2028 - "const": "process:allow-exit" 2029 }, 2030 { 2031 "description": "Enables the restart command without any pre-configured scope.", 2032 "type": "string", 2033 - "const": "process:allow-restart" 2034 }, 2035 { 2036 "description": "Denies the exit command without any pre-configured scope.", 2037 "type": "string", 2038 - "const": "process:deny-exit" 2039 }, 2040 { 2041 "description": "Denies the restart command without any pre-configured scope.", 2042 "type": "string", 2043 - "const": "process:deny-restart" 2044 }, 2045 { 2046 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 2047 "type": "string", 2048 - "const": "shell:default" 2049 }, 2050 { 2051 "description": "Enables the execute command without any pre-configured scope.", 2052 "type": "string", 2053 - "const": "shell:allow-execute" 2054 }, 2055 { 2056 "description": "Enables the kill command without any pre-configured scope.", 2057 "type": "string", 2058 - "const": "shell:allow-kill" 2059 }, 2060 { 2061 "description": "Enables the open command without any pre-configured scope.", 2062 "type": "string", 2063 - "const": "shell:allow-open" 2064 }, 2065 { 2066 "description": "Enables the spawn command without any pre-configured scope.", 2067 "type": "string", 2068 - "const": "shell:allow-spawn" 2069 }, 2070 { 2071 "description": "Enables the stdin_write command without any pre-configured scope.", 2072 "type": "string", 2073 - "const": "shell:allow-stdin-write" 2074 }, 2075 { 2076 "description": "Denies the execute command without any pre-configured scope.", 2077 "type": "string", 2078 - "const": "shell:deny-execute" 2079 }, 2080 { 2081 "description": "Denies the kill command without any pre-configured scope.", 2082 "type": "string", 2083 - "const": "shell:deny-kill" 2084 }, 2085 { 2086 "description": "Denies the open command without any pre-configured scope.", 2087 "type": "string", 2088 - "const": "shell:deny-open" 2089 }, 2090 { 2091 "description": "Denies the spawn command without any pre-configured scope.", 2092 "type": "string", 2093 - "const": "shell:deny-spawn" 2094 }, 2095 { 2096 "description": "Denies the stdin_write command without any pre-configured scope.", 2097 "type": "string", 2098 - "const": "shell:deny-stdin-write" 2099 } 2100 ] 2101 },
··· 37 ], 38 "definitions": { 39 "Capability": { 40 + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", 41 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 51 "description": { 52 + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 72 "windows": { 73 + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 74 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 79 "webviews": { 80 + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 81 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 86 "permissions": { 87 + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 142 { 143 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 144 "type": "string", 145 + "const": "http:default", 146 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 147 }, 148 { 149 "description": "Enables the fetch command without any pre-configured scope.", 150 "type": "string", 151 + "const": "http:allow-fetch", 152 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 153 }, 154 { 155 "description": "Enables the fetch_cancel command without any pre-configured scope.", 156 "type": "string", 157 + "const": "http:allow-fetch-cancel", 158 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 159 }, 160 { 161 "description": "Enables the fetch_read_body command without any pre-configured scope.", 162 "type": "string", 163 + "const": "http:allow-fetch-read-body", 164 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 165 }, 166 { 167 "description": "Enables the fetch_send command without any pre-configured scope.", 168 "type": "string", 169 + "const": "http:allow-fetch-send", 170 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 171 }, 172 { 173 "description": "Denies the fetch command without any pre-configured scope.", 174 "type": "string", 175 + "const": "http:deny-fetch", 176 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 177 }, 178 { 179 "description": "Denies the fetch_cancel command without any pre-configured scope.", 180 "type": "string", 181 + "const": "http:deny-fetch-cancel", 182 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 183 }, 184 { 185 "description": "Denies the fetch_read_body command without any pre-configured scope.", 186 "type": "string", 187 + "const": "http:deny-fetch-read-body", 188 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 189 }, 190 { 191 "description": "Denies the fetch_send command without any pre-configured scope.", 192 "type": "string", 193 + "const": "http:deny-fetch-send", 194 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 195 } 196 ] 197 } ··· 266 "identifier": { 267 "anyOf": [ 268 { 269 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 270 "type": "string", 271 + "const": "shell:default", 272 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 273 }, 274 { 275 "description": "Enables the execute command without any pre-configured scope.", 276 "type": "string", 277 + "const": "shell:allow-execute", 278 + "markdownDescription": "Enables the execute command without any pre-configured scope." 279 }, 280 { 281 "description": "Enables the kill command without any pre-configured scope.", 282 "type": "string", 283 + "const": "shell:allow-kill", 284 + "markdownDescription": "Enables the kill command without any pre-configured scope." 285 }, 286 { 287 "description": "Enables the open command without any pre-configured scope.", 288 "type": "string", 289 + "const": "shell:allow-open", 290 + "markdownDescription": "Enables the open command without any pre-configured scope." 291 }, 292 { 293 "description": "Enables the spawn command without any pre-configured scope.", 294 "type": "string", 295 + "const": "shell:allow-spawn", 296 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 297 }, 298 { 299 "description": "Enables the stdin_write command without any pre-configured scope.", 300 "type": "string", 301 + "const": "shell:allow-stdin-write", 302 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 303 }, 304 { 305 "description": "Denies the execute command without any pre-configured scope.", 306 "type": "string", 307 + "const": "shell:deny-execute", 308 + "markdownDescription": "Denies the execute command without any pre-configured scope." 309 }, 310 { 311 "description": "Denies the kill command without any pre-configured scope.", 312 "type": "string", 313 + "const": "shell:deny-kill", 314 + "markdownDescription": "Denies the kill command without any pre-configured scope." 315 }, 316 { 317 "description": "Denies the open command without any pre-configured scope.", 318 "type": "string", 319 + "const": "shell:deny-open", 320 + "markdownDescription": "Denies the open command without any pre-configured scope." 321 }, 322 { 323 "description": "Denies the spawn command without any pre-configured scope.", 324 "type": "string", 325 + "const": "shell:deny-spawn", 326 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 327 }, 328 { 329 "description": "Denies the stdin_write command without any pre-configured scope.", 330 "type": "string", 331 + "const": "shell:deny-stdin-write", 332 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 333 } 334 ] 335 } ··· 513 "description": "Permission identifier", 514 "oneOf": [ 515 { 516 + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", 517 "type": "string", 518 + "const": "core:default", 519 + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 }, 521 { 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 "type": "string", 524 + "const": "core:app:default", 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", 529 "type": "string", 530 + "const": "core:app:allow-app-hide", 531 + "markdownDescription": "Enables the app_hide command without any pre-configured scope." 532 }, 533 { 534 "description": "Enables the app_show command without any pre-configured scope.", 535 "type": "string", 536 + "const": "core:app:allow-app-show", 537 + "markdownDescription": "Enables the app_show command without any pre-configured scope." 538 + }, 539 + { 540 + "description": "Enables the bundle_type command without any pre-configured scope.", 541 + "type": "string", 542 + "const": "core:app:allow-bundle-type", 543 + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." 544 }, 545 { 546 "description": "Enables the default_window_icon command without any pre-configured scope.", 547 "type": "string", 548 + "const": "core:app:allow-default-window-icon", 549 + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." 550 + }, 551 + { 552 + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", 553 + "type": "string", 554 + "const": "core:app:allow-fetch-data-store-identifiers", 555 + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." 556 + }, 557 + { 558 + "description": "Enables the identifier command without any pre-configured scope.", 559 + "type": "string", 560 + "const": "core:app:allow-identifier", 561 + "markdownDescription": "Enables the identifier command without any pre-configured scope." 562 }, 563 { 564 "description": "Enables the name command without any pre-configured scope.", 565 "type": "string", 566 + "const": "core:app:allow-name", 567 + "markdownDescription": "Enables the name command without any pre-configured scope." 568 + }, 569 + { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 576 + "description": "Enables the remove_data_store command without any pre-configured scope.", 577 + "type": "string", 578 + "const": "core:app:allow-remove-data-store", 579 + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 580 + }, 581 + { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 }, 587 { 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 589 "type": "string", 590 + "const": "core:app:allow-set-app-theme", 591 + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." 592 + }, 593 + { 594 + "description": "Enables the set_dock_visibility command without any pre-configured scope.", 595 + "type": "string", 596 + "const": "core:app:allow-set-dock-visibility", 597 + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." 598 }, 599 { 600 "description": "Enables the tauri_version command without any pre-configured scope.", 601 "type": "string", 602 + "const": "core:app:allow-tauri-version", 603 + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." 604 }, 605 { 606 "description": "Enables the version command without any pre-configured scope.", 607 "type": "string", 608 + "const": "core:app:allow-version", 609 + "markdownDescription": "Enables the version command without any pre-configured scope." 610 }, 611 { 612 "description": "Denies the app_hide command without any pre-configured scope.", 613 "type": "string", 614 + "const": "core:app:deny-app-hide", 615 + "markdownDescription": "Denies the app_hide command without any pre-configured scope." 616 }, 617 { 618 "description": "Denies the app_show command without any pre-configured scope.", 619 "type": "string", 620 + "const": "core:app:deny-app-show", 621 + "markdownDescription": "Denies the app_show command without any pre-configured scope." 622 + }, 623 + { 624 + "description": "Denies the bundle_type command without any pre-configured scope.", 625 + "type": "string", 626 + "const": "core:app:deny-bundle-type", 627 + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." 628 }, 629 { 630 "description": "Denies the default_window_icon command without any pre-configured scope.", 631 "type": "string", 632 + "const": "core:app:deny-default-window-icon", 633 + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." 634 + }, 635 + { 636 + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", 637 + "type": "string", 638 + "const": "core:app:deny-fetch-data-store-identifiers", 639 + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." 640 + }, 641 + { 642 + "description": "Denies the identifier command without any pre-configured scope.", 643 + "type": "string", 644 + "const": "core:app:deny-identifier", 645 + "markdownDescription": "Denies the identifier command without any pre-configured scope." 646 }, 647 { 648 "description": "Denies the name command without any pre-configured scope.", 649 "type": "string", 650 + "const": "core:app:deny-name", 651 + "markdownDescription": "Denies the name command without any pre-configured scope." 652 + }, 653 + { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 660 + "description": "Denies the remove_data_store command without any pre-configured scope.", 661 + "type": "string", 662 + "const": "core:app:deny-remove-data-store", 663 + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 670 }, 671 { 672 "description": "Denies the set_app_theme command without any pre-configured scope.", 673 "type": "string", 674 + "const": "core:app:deny-set-app-theme", 675 + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." 676 + }, 677 + { 678 + "description": "Denies the set_dock_visibility command without any pre-configured scope.", 679 + "type": "string", 680 + "const": "core:app:deny-set-dock-visibility", 681 + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." 682 }, 683 { 684 "description": "Denies the tauri_version command without any pre-configured scope.", 685 "type": "string", 686 + "const": "core:app:deny-tauri-version", 687 + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." 688 }, 689 { 690 "description": "Denies the version command without any pre-configured scope.", 691 "type": "string", 692 + "const": "core:app:deny-version", 693 + "markdownDescription": "Denies the version command without any pre-configured scope." 694 }, 695 { 696 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", 697 "type": "string", 698 + "const": "core:event:default", 699 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" 700 }, 701 { 702 "description": "Enables the emit command without any pre-configured scope.", 703 "type": "string", 704 + "const": "core:event:allow-emit", 705 + "markdownDescription": "Enables the emit command without any pre-configured scope." 706 }, 707 { 708 "description": "Enables the emit_to command without any pre-configured scope.", 709 "type": "string", 710 + "const": "core:event:allow-emit-to", 711 + "markdownDescription": "Enables the emit_to command without any pre-configured scope." 712 }, 713 { 714 "description": "Enables the listen command without any pre-configured scope.", 715 "type": "string", 716 + "const": "core:event:allow-listen", 717 + "markdownDescription": "Enables the listen command without any pre-configured scope." 718 }, 719 { 720 "description": "Enables the unlisten command without any pre-configured scope.", 721 "type": "string", 722 + "const": "core:event:allow-unlisten", 723 + "markdownDescription": "Enables the unlisten command without any pre-configured scope." 724 }, 725 { 726 "description": "Denies the emit command without any pre-configured scope.", 727 "type": "string", 728 + "const": "core:event:deny-emit", 729 + "markdownDescription": "Denies the emit command without any pre-configured scope." 730 }, 731 { 732 "description": "Denies the emit_to command without any pre-configured scope.", 733 "type": "string", 734 + "const": "core:event:deny-emit-to", 735 + "markdownDescription": "Denies the emit_to command without any pre-configured scope." 736 }, 737 { 738 "description": "Denies the listen command without any pre-configured scope.", 739 "type": "string", 740 + "const": "core:event:deny-listen", 741 + "markdownDescription": "Denies the listen command without any pre-configured scope." 742 }, 743 { 744 "description": "Denies the unlisten command without any pre-configured scope.", 745 "type": "string", 746 + "const": "core:event:deny-unlisten", 747 + "markdownDescription": "Denies the unlisten command without any pre-configured scope." 748 }, 749 { 750 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", 751 "type": "string", 752 + "const": "core:image:default", 753 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" 754 }, 755 { 756 "description": "Enables the from_bytes command without any pre-configured scope.", 757 "type": "string", 758 + "const": "core:image:allow-from-bytes", 759 + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." 760 }, 761 { 762 "description": "Enables the from_path command without any pre-configured scope.", 763 "type": "string", 764 + "const": "core:image:allow-from-path", 765 + "markdownDescription": "Enables the from_path command without any pre-configured scope." 766 }, 767 { 768 "description": "Enables the new command without any pre-configured scope.", 769 "type": "string", 770 + "const": "core:image:allow-new", 771 + "markdownDescription": "Enables the new command without any pre-configured scope." 772 }, 773 { 774 "description": "Enables the rgba command without any pre-configured scope.", 775 "type": "string", 776 + "const": "core:image:allow-rgba", 777 + "markdownDescription": "Enables the rgba command without any pre-configured scope." 778 }, 779 { 780 "description": "Enables the size command without any pre-configured scope.", 781 "type": "string", 782 + "const": "core:image:allow-size", 783 + "markdownDescription": "Enables the size command without any pre-configured scope." 784 }, 785 { 786 "description": "Denies the from_bytes command without any pre-configured scope.", 787 "type": "string", 788 + "const": "core:image:deny-from-bytes", 789 + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." 790 }, 791 { 792 "description": "Denies the from_path command without any pre-configured scope.", 793 "type": "string", 794 + "const": "core:image:deny-from-path", 795 + "markdownDescription": "Denies the from_path command without any pre-configured scope." 796 }, 797 { 798 "description": "Denies the new command without any pre-configured scope.", 799 "type": "string", 800 + "const": "core:image:deny-new", 801 + "markdownDescription": "Denies the new command without any pre-configured scope." 802 }, 803 { 804 "description": "Denies the rgba command without any pre-configured scope.", 805 "type": "string", 806 + "const": "core:image:deny-rgba", 807 + "markdownDescription": "Denies the rgba command without any pre-configured scope." 808 }, 809 { 810 "description": "Denies the size command without any pre-configured scope.", 811 "type": "string", 812 + "const": "core:image:deny-size", 813 + "markdownDescription": "Denies the size command without any pre-configured scope." 814 }, 815 { 816 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", 817 "type": "string", 818 + "const": "core:menu:default", 819 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" 820 }, 821 { 822 "description": "Enables the append command without any pre-configured scope.", 823 "type": "string", 824 + "const": "core:menu:allow-append", 825 + "markdownDescription": "Enables the append command without any pre-configured scope." 826 }, 827 { 828 "description": "Enables the create_default command without any pre-configured scope.", 829 "type": "string", 830 + "const": "core:menu:allow-create-default", 831 + "markdownDescription": "Enables the create_default command without any pre-configured scope." 832 }, 833 { 834 "description": "Enables the get command without any pre-configured scope.", 835 "type": "string", 836 + "const": "core:menu:allow-get", 837 + "markdownDescription": "Enables the get command without any pre-configured scope." 838 }, 839 { 840 "description": "Enables the insert command without any pre-configured scope.", 841 "type": "string", 842 + "const": "core:menu:allow-insert", 843 + "markdownDescription": "Enables the insert command without any pre-configured scope." 844 }, 845 { 846 "description": "Enables the is_checked command without any pre-configured scope.", 847 "type": "string", 848 + "const": "core:menu:allow-is-checked", 849 + "markdownDescription": "Enables the is_checked command without any pre-configured scope." 850 }, 851 { 852 "description": "Enables the is_enabled command without any pre-configured scope.", 853 "type": "string", 854 + "const": "core:menu:allow-is-enabled", 855 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 856 }, 857 { 858 "description": "Enables the items command without any pre-configured scope.", 859 "type": "string", 860 + "const": "core:menu:allow-items", 861 + "markdownDescription": "Enables the items command without any pre-configured scope." 862 }, 863 { 864 "description": "Enables the new command without any pre-configured scope.", 865 "type": "string", 866 + "const": "core:menu:allow-new", 867 + "markdownDescription": "Enables the new command without any pre-configured scope." 868 }, 869 { 870 "description": "Enables the popup command without any pre-configured scope.", 871 "type": "string", 872 + "const": "core:menu:allow-popup", 873 + "markdownDescription": "Enables the popup command without any pre-configured scope." 874 }, 875 { 876 "description": "Enables the prepend command without any pre-configured scope.", 877 "type": "string", 878 + "const": "core:menu:allow-prepend", 879 + "markdownDescription": "Enables the prepend command without any pre-configured scope." 880 }, 881 { 882 "description": "Enables the remove command without any pre-configured scope.", 883 "type": "string", 884 + "const": "core:menu:allow-remove", 885 + "markdownDescription": "Enables the remove command without any pre-configured scope." 886 }, 887 { 888 "description": "Enables the remove_at command without any pre-configured scope.", 889 "type": "string", 890 + "const": "core:menu:allow-remove-at", 891 + "markdownDescription": "Enables the remove_at command without any pre-configured scope." 892 }, 893 { 894 "description": "Enables the set_accelerator command without any pre-configured scope.", 895 "type": "string", 896 + "const": "core:menu:allow-set-accelerator", 897 + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." 898 }, 899 { 900 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 901 "type": "string", 902 + "const": "core:menu:allow-set-as-app-menu", 903 + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." 904 }, 905 { 906 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 907 "type": "string", 908 + "const": "core:menu:allow-set-as-help-menu-for-nsapp", 909 + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." 910 }, 911 { 912 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 913 "type": "string", 914 + "const": "core:menu:allow-set-as-window-menu", 915 + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." 916 }, 917 { 918 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 919 "type": "string", 920 + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", 921 + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." 922 }, 923 { 924 "description": "Enables the set_checked command without any pre-configured scope.", 925 "type": "string", 926 + "const": "core:menu:allow-set-checked", 927 + "markdownDescription": "Enables the set_checked command without any pre-configured scope." 928 }, 929 { 930 "description": "Enables the set_enabled command without any pre-configured scope.", 931 "type": "string", 932 + "const": "core:menu:allow-set-enabled", 933 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 934 }, 935 { 936 "description": "Enables the set_icon command without any pre-configured scope.", 937 "type": "string", 938 + "const": "core:menu:allow-set-icon", 939 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 940 }, 941 { 942 "description": "Enables the set_text command without any pre-configured scope.", 943 "type": "string", 944 + "const": "core:menu:allow-set-text", 945 + "markdownDescription": "Enables the set_text command without any pre-configured scope." 946 }, 947 { 948 "description": "Enables the text command without any pre-configured scope.", 949 "type": "string", 950 + "const": "core:menu:allow-text", 951 + "markdownDescription": "Enables the text command without any pre-configured scope." 952 }, 953 { 954 "description": "Denies the append command without any pre-configured scope.", 955 "type": "string", 956 + "const": "core:menu:deny-append", 957 + "markdownDescription": "Denies the append command without any pre-configured scope." 958 }, 959 { 960 "description": "Denies the create_default command without any pre-configured scope.", 961 "type": "string", 962 + "const": "core:menu:deny-create-default", 963 + "markdownDescription": "Denies the create_default command without any pre-configured scope." 964 }, 965 { 966 "description": "Denies the get command without any pre-configured scope.", 967 "type": "string", 968 + "const": "core:menu:deny-get", 969 + "markdownDescription": "Denies the get command without any pre-configured scope." 970 }, 971 { 972 "description": "Denies the insert command without any pre-configured scope.", 973 "type": "string", 974 + "const": "core:menu:deny-insert", 975 + "markdownDescription": "Denies the insert command without any pre-configured scope." 976 }, 977 { 978 "description": "Denies the is_checked command without any pre-configured scope.", 979 "type": "string", 980 + "const": "core:menu:deny-is-checked", 981 + "markdownDescription": "Denies the is_checked command without any pre-configured scope." 982 }, 983 { 984 "description": "Denies the is_enabled command without any pre-configured scope.", 985 "type": "string", 986 + "const": "core:menu:deny-is-enabled", 987 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 988 }, 989 { 990 "description": "Denies the items command without any pre-configured scope.", 991 "type": "string", 992 + "const": "core:menu:deny-items", 993 + "markdownDescription": "Denies the items command without any pre-configured scope." 994 }, 995 { 996 "description": "Denies the new command without any pre-configured scope.", 997 "type": "string", 998 + "const": "core:menu:deny-new", 999 + "markdownDescription": "Denies the new command without any pre-configured scope." 1000 }, 1001 { 1002 "description": "Denies the popup command without any pre-configured scope.", 1003 "type": "string", 1004 + "const": "core:menu:deny-popup", 1005 + "markdownDescription": "Denies the popup command without any pre-configured scope." 1006 }, 1007 { 1008 "description": "Denies the prepend command without any pre-configured scope.", 1009 "type": "string", 1010 + "const": "core:menu:deny-prepend", 1011 + "markdownDescription": "Denies the prepend command without any pre-configured scope." 1012 }, 1013 { 1014 "description": "Denies the remove command without any pre-configured scope.", 1015 "type": "string", 1016 + "const": "core:menu:deny-remove", 1017 + "markdownDescription": "Denies the remove command without any pre-configured scope." 1018 }, 1019 { 1020 "description": "Denies the remove_at command without any pre-configured scope.", 1021 "type": "string", 1022 + "const": "core:menu:deny-remove-at", 1023 + "markdownDescription": "Denies the remove_at command without any pre-configured scope." 1024 }, 1025 { 1026 "description": "Denies the set_accelerator command without any pre-configured scope.", 1027 "type": "string", 1028 + "const": "core:menu:deny-set-accelerator", 1029 + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." 1030 }, 1031 { 1032 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 1033 "type": "string", 1034 + "const": "core:menu:deny-set-as-app-menu", 1035 + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." 1036 }, 1037 { 1038 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 1039 "type": "string", 1040 + "const": "core:menu:deny-set-as-help-menu-for-nsapp", 1041 + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." 1042 }, 1043 { 1044 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 1045 "type": "string", 1046 + "const": "core:menu:deny-set-as-window-menu", 1047 + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." 1048 }, 1049 { 1050 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 1051 "type": "string", 1052 + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", 1053 + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." 1054 }, 1055 { 1056 "description": "Denies the set_checked command without any pre-configured scope.", 1057 "type": "string", 1058 + "const": "core:menu:deny-set-checked", 1059 + "markdownDescription": "Denies the set_checked command without any pre-configured scope." 1060 }, 1061 { 1062 "description": "Denies the set_enabled command without any pre-configured scope.", 1063 "type": "string", 1064 + "const": "core:menu:deny-set-enabled", 1065 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 1066 }, 1067 { 1068 "description": "Denies the set_icon command without any pre-configured scope.", 1069 "type": "string", 1070 + "const": "core:menu:deny-set-icon", 1071 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1072 }, 1073 { 1074 "description": "Denies the set_text command without any pre-configured scope.", 1075 "type": "string", 1076 + "const": "core:menu:deny-set-text", 1077 + "markdownDescription": "Denies the set_text command without any pre-configured scope." 1078 }, 1079 { 1080 "description": "Denies the text command without any pre-configured scope.", 1081 "type": "string", 1082 + "const": "core:menu:deny-text", 1083 + "markdownDescription": "Denies the text command without any pre-configured scope." 1084 }, 1085 { 1086 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", 1087 "type": "string", 1088 + "const": "core:path:default", 1089 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" 1090 }, 1091 { 1092 "description": "Enables the basename command without any pre-configured scope.", 1093 "type": "string", 1094 + "const": "core:path:allow-basename", 1095 + "markdownDescription": "Enables the basename command without any pre-configured scope." 1096 }, 1097 { 1098 "description": "Enables the dirname command without any pre-configured scope.", 1099 "type": "string", 1100 + "const": "core:path:allow-dirname", 1101 + "markdownDescription": "Enables the dirname command without any pre-configured scope." 1102 }, 1103 { 1104 "description": "Enables the extname command without any pre-configured scope.", 1105 "type": "string", 1106 + "const": "core:path:allow-extname", 1107 + "markdownDescription": "Enables the extname command without any pre-configured scope." 1108 }, 1109 { 1110 "description": "Enables the is_absolute command without any pre-configured scope.", 1111 "type": "string", 1112 + "const": "core:path:allow-is-absolute", 1113 + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." 1114 }, 1115 { 1116 "description": "Enables the join command without any pre-configured scope.", 1117 "type": "string", 1118 + "const": "core:path:allow-join", 1119 + "markdownDescription": "Enables the join command without any pre-configured scope." 1120 }, 1121 { 1122 "description": "Enables the normalize command without any pre-configured scope.", 1123 "type": "string", 1124 + "const": "core:path:allow-normalize", 1125 + "markdownDescription": "Enables the normalize command without any pre-configured scope." 1126 }, 1127 { 1128 "description": "Enables the resolve command without any pre-configured scope.", 1129 "type": "string", 1130 + "const": "core:path:allow-resolve", 1131 + "markdownDescription": "Enables the resolve command without any pre-configured scope." 1132 }, 1133 { 1134 "description": "Enables the resolve_directory command without any pre-configured scope.", 1135 "type": "string", 1136 + "const": "core:path:allow-resolve-directory", 1137 + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." 1138 }, 1139 { 1140 "description": "Denies the basename command without any pre-configured scope.", 1141 "type": "string", 1142 + "const": "core:path:deny-basename", 1143 + "markdownDescription": "Denies the basename command without any pre-configured scope." 1144 }, 1145 { 1146 "description": "Denies the dirname command without any pre-configured scope.", 1147 "type": "string", 1148 + "const": "core:path:deny-dirname", 1149 + "markdownDescription": "Denies the dirname command without any pre-configured scope." 1150 }, 1151 { 1152 "description": "Denies the extname command without any pre-configured scope.", 1153 "type": "string", 1154 + "const": "core:path:deny-extname", 1155 + "markdownDescription": "Denies the extname command without any pre-configured scope." 1156 }, 1157 { 1158 "description": "Denies the is_absolute command without any pre-configured scope.", 1159 "type": "string", 1160 + "const": "core:path:deny-is-absolute", 1161 + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." 1162 }, 1163 { 1164 "description": "Denies the join command without any pre-configured scope.", 1165 "type": "string", 1166 + "const": "core:path:deny-join", 1167 + "markdownDescription": "Denies the join command without any pre-configured scope." 1168 }, 1169 { 1170 "description": "Denies the normalize command without any pre-configured scope.", 1171 "type": "string", 1172 + "const": "core:path:deny-normalize", 1173 + "markdownDescription": "Denies the normalize command without any pre-configured scope." 1174 }, 1175 { 1176 "description": "Denies the resolve command without any pre-configured scope.", 1177 "type": "string", 1178 + "const": "core:path:deny-resolve", 1179 + "markdownDescription": "Denies the resolve command without any pre-configured scope." 1180 }, 1181 { 1182 "description": "Denies the resolve_directory command without any pre-configured scope.", 1183 "type": "string", 1184 + "const": "core:path:deny-resolve-directory", 1185 + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." 1186 }, 1187 { 1188 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", 1189 "type": "string", 1190 + "const": "core:resources:default", 1191 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" 1192 }, 1193 { 1194 "description": "Enables the close command without any pre-configured scope.", 1195 "type": "string", 1196 + "const": "core:resources:allow-close", 1197 + "markdownDescription": "Enables the close command without any pre-configured scope." 1198 }, 1199 { 1200 "description": "Denies the close command without any pre-configured scope.", 1201 "type": "string", 1202 + "const": "core:resources:deny-close", 1203 + "markdownDescription": "Denies the close command without any pre-configured scope." 1204 }, 1205 { 1206 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`", 1207 "type": "string", 1208 + "const": "core:tray:default", 1209 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`" 1210 }, 1211 { 1212 "description": "Enables the get_by_id command without any pre-configured scope.", 1213 "type": "string", 1214 + "const": "core:tray:allow-get-by-id", 1215 + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." 1216 }, 1217 { 1218 "description": "Enables the new command without any pre-configured scope.", 1219 "type": "string", 1220 + "const": "core:tray:allow-new", 1221 + "markdownDescription": "Enables the new command without any pre-configured scope." 1222 }, 1223 { 1224 "description": "Enables the remove_by_id command without any pre-configured scope.", 1225 "type": "string", 1226 + "const": "core:tray:allow-remove-by-id", 1227 + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." 1228 }, 1229 { 1230 "description": "Enables the set_icon command without any pre-configured scope.", 1231 "type": "string", 1232 + "const": "core:tray:allow-set-icon", 1233 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1234 }, 1235 { 1236 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1237 "type": "string", 1238 + "const": "core:tray:allow-set-icon-as-template", 1239 + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." 1240 }, 1241 { 1242 "description": "Enables the set_menu command without any pre-configured scope.", 1243 "type": "string", 1244 + "const": "core:tray:allow-set-menu", 1245 + "markdownDescription": "Enables the set_menu command without any pre-configured scope." 1246 }, 1247 { 1248 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1249 "type": "string", 1250 + "const": "core:tray:allow-set-show-menu-on-left-click", 1251 + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." 1252 }, 1253 { 1254 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1255 "type": "string", 1256 + "const": "core:tray:allow-set-temp-dir-path", 1257 + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." 1258 }, 1259 { 1260 "description": "Enables the set_title command without any pre-configured scope.", 1261 "type": "string", 1262 + "const": "core:tray:allow-set-title", 1263 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1264 }, 1265 { 1266 "description": "Enables the set_tooltip command without any pre-configured scope.", 1267 "type": "string", 1268 + "const": "core:tray:allow-set-tooltip", 1269 + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." 1270 }, 1271 { 1272 "description": "Enables the set_visible command without any pre-configured scope.", 1273 "type": "string", 1274 + "const": "core:tray:allow-set-visible", 1275 + "markdownDescription": "Enables the set_visible command without any pre-configured scope." 1276 }, 1277 { 1278 "description": "Denies the get_by_id command without any pre-configured scope.", 1279 "type": "string", 1280 + "const": "core:tray:deny-get-by-id", 1281 + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." 1282 }, 1283 { 1284 "description": "Denies the new command without any pre-configured scope.", 1285 "type": "string", 1286 + "const": "core:tray:deny-new", 1287 + "markdownDescription": "Denies the new command without any pre-configured scope." 1288 }, 1289 { 1290 "description": "Denies the remove_by_id command without any pre-configured scope.", 1291 "type": "string", 1292 + "const": "core:tray:deny-remove-by-id", 1293 + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." 1294 }, 1295 { 1296 "description": "Denies the set_icon command without any pre-configured scope.", 1297 "type": "string", 1298 + "const": "core:tray:deny-set-icon", 1299 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1300 }, 1301 { 1302 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1303 "type": "string", 1304 + "const": "core:tray:deny-set-icon-as-template", 1305 + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." 1306 }, 1307 { 1308 "description": "Denies the set_menu command without any pre-configured scope.", 1309 "type": "string", 1310 + "const": "core:tray:deny-set-menu", 1311 + "markdownDescription": "Denies the set_menu command without any pre-configured scope." 1312 }, 1313 { 1314 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1315 "type": "string", 1316 + "const": "core:tray:deny-set-show-menu-on-left-click", 1317 + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." 1318 }, 1319 { 1320 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1321 "type": "string", 1322 + "const": "core:tray:deny-set-temp-dir-path", 1323 + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." 1324 }, 1325 { 1326 "description": "Denies the set_title command without any pre-configured scope.", 1327 "type": "string", 1328 + "const": "core:tray:deny-set-title", 1329 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1330 }, 1331 { 1332 "description": "Denies the set_tooltip command without any pre-configured scope.", 1333 "type": "string", 1334 + "const": "core:tray:deny-set-tooltip", 1335 + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." 1336 }, 1337 { 1338 "description": "Denies the set_visible command without any pre-configured scope.", 1339 "type": "string", 1340 + "const": "core:tray:deny-set-visible", 1341 + "markdownDescription": "Denies the set_visible command without any pre-configured scope." 1342 }, 1343 { 1344 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", 1345 "type": "string", 1346 + "const": "core:webview:default", 1347 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" 1348 }, 1349 { 1350 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1351 "type": "string", 1352 + "const": "core:webview:allow-clear-all-browsing-data", 1353 + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." 1354 }, 1355 { 1356 "description": "Enables the create_webview command without any pre-configured scope.", 1357 "type": "string", 1358 + "const": "core:webview:allow-create-webview", 1359 + "markdownDescription": "Enables the create_webview command without any pre-configured scope." 1360 }, 1361 { 1362 "description": "Enables the create_webview_window command without any pre-configured scope.", 1363 "type": "string", 1364 + "const": "core:webview:allow-create-webview-window", 1365 + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." 1366 }, 1367 { 1368 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1369 "type": "string", 1370 + "const": "core:webview:allow-get-all-webviews", 1371 + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." 1372 }, 1373 { 1374 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1375 "type": "string", 1376 + "const": "core:webview:allow-internal-toggle-devtools", 1377 + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." 1378 }, 1379 { 1380 "description": "Enables the print command without any pre-configured scope.", 1381 "type": "string", 1382 + "const": "core:webview:allow-print", 1383 + "markdownDescription": "Enables the print command without any pre-configured scope." 1384 }, 1385 { 1386 "description": "Enables the reparent command without any pre-configured scope.", 1387 "type": "string", 1388 + "const": "core:webview:allow-reparent", 1389 + "markdownDescription": "Enables the reparent command without any pre-configured scope." 1390 + }, 1391 + { 1392 + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", 1393 + "type": "string", 1394 + "const": "core:webview:allow-set-webview-auto-resize", 1395 + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." 1396 + }, 1397 + { 1398 + "description": "Enables the set_webview_background_color command without any pre-configured scope.", 1399 + "type": "string", 1400 + "const": "core:webview:allow-set-webview-background-color", 1401 + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." 1402 }, 1403 { 1404 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1405 "type": "string", 1406 + "const": "core:webview:allow-set-webview-focus", 1407 + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." 1408 }, 1409 { 1410 "description": "Enables the set_webview_position command without any pre-configured scope.", 1411 "type": "string", 1412 + "const": "core:webview:allow-set-webview-position", 1413 + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." 1414 }, 1415 { 1416 "description": "Enables the set_webview_size command without any pre-configured scope.", 1417 "type": "string", 1418 + "const": "core:webview:allow-set-webview-size", 1419 + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." 1420 }, 1421 { 1422 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1423 "type": "string", 1424 + "const": "core:webview:allow-set-webview-zoom", 1425 + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." 1426 }, 1427 { 1428 "description": "Enables the webview_close command without any pre-configured scope.", 1429 "type": "string", 1430 + "const": "core:webview:allow-webview-close", 1431 + "markdownDescription": "Enables the webview_close command without any pre-configured scope." 1432 }, 1433 { 1434 "description": "Enables the webview_hide command without any pre-configured scope.", 1435 "type": "string", 1436 + "const": "core:webview:allow-webview-hide", 1437 + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." 1438 }, 1439 { 1440 "description": "Enables the webview_position command without any pre-configured scope.", 1441 "type": "string", 1442 + "const": "core:webview:allow-webview-position", 1443 + "markdownDescription": "Enables the webview_position command without any pre-configured scope." 1444 }, 1445 { 1446 "description": "Enables the webview_show command without any pre-configured scope.", 1447 "type": "string", 1448 + "const": "core:webview:allow-webview-show", 1449 + "markdownDescription": "Enables the webview_show command without any pre-configured scope." 1450 }, 1451 { 1452 "description": "Enables the webview_size command without any pre-configured scope.", 1453 "type": "string", 1454 + "const": "core:webview:allow-webview-size", 1455 + "markdownDescription": "Enables the webview_size command without any pre-configured scope." 1456 }, 1457 { 1458 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1459 "type": "string", 1460 + "const": "core:webview:deny-clear-all-browsing-data", 1461 + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." 1462 }, 1463 { 1464 "description": "Denies the create_webview command without any pre-configured scope.", 1465 "type": "string", 1466 + "const": "core:webview:deny-create-webview", 1467 + "markdownDescription": "Denies the create_webview command without any pre-configured scope." 1468 }, 1469 { 1470 "description": "Denies the create_webview_window command without any pre-configured scope.", 1471 "type": "string", 1472 + "const": "core:webview:deny-create-webview-window", 1473 + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." 1474 }, 1475 { 1476 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1477 "type": "string", 1478 + "const": "core:webview:deny-get-all-webviews", 1479 + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." 1480 }, 1481 { 1482 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1483 "type": "string", 1484 + "const": "core:webview:deny-internal-toggle-devtools", 1485 + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." 1486 }, 1487 { 1488 "description": "Denies the print command without any pre-configured scope.", 1489 "type": "string", 1490 + "const": "core:webview:deny-print", 1491 + "markdownDescription": "Denies the print command without any pre-configured scope." 1492 }, 1493 { 1494 "description": "Denies the reparent command without any pre-configured scope.", 1495 "type": "string", 1496 + "const": "core:webview:deny-reparent", 1497 + "markdownDescription": "Denies the reparent command without any pre-configured scope." 1498 + }, 1499 + { 1500 + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", 1501 + "type": "string", 1502 + "const": "core:webview:deny-set-webview-auto-resize", 1503 + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." 1504 + }, 1505 + { 1506 + "description": "Denies the set_webview_background_color command without any pre-configured scope.", 1507 + "type": "string", 1508 + "const": "core:webview:deny-set-webview-background-color", 1509 + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." 1510 }, 1511 { 1512 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1513 "type": "string", 1514 + "const": "core:webview:deny-set-webview-focus", 1515 + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." 1516 }, 1517 { 1518 "description": "Denies the set_webview_position command without any pre-configured scope.", 1519 "type": "string", 1520 + "const": "core:webview:deny-set-webview-position", 1521 + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." 1522 }, 1523 { 1524 "description": "Denies the set_webview_size command without any pre-configured scope.", 1525 "type": "string", 1526 + "const": "core:webview:deny-set-webview-size", 1527 + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." 1528 }, 1529 { 1530 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1531 "type": "string", 1532 + "const": "core:webview:deny-set-webview-zoom", 1533 + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." 1534 }, 1535 { 1536 "description": "Denies the webview_close command without any pre-configured scope.", 1537 "type": "string", 1538 + "const": "core:webview:deny-webview-close", 1539 + "markdownDescription": "Denies the webview_close command without any pre-configured scope." 1540 }, 1541 { 1542 "description": "Denies the webview_hide command without any pre-configured scope.", 1543 "type": "string", 1544 + "const": "core:webview:deny-webview-hide", 1545 + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." 1546 }, 1547 { 1548 "description": "Denies the webview_position command without any pre-configured scope.", 1549 "type": "string", 1550 + "const": "core:webview:deny-webview-position", 1551 + "markdownDescription": "Denies the webview_position command without any pre-configured scope." 1552 }, 1553 { 1554 "description": "Denies the webview_show command without any pre-configured scope.", 1555 "type": "string", 1556 + "const": "core:webview:deny-webview-show", 1557 + "markdownDescription": "Denies the webview_show command without any pre-configured scope." 1558 }, 1559 { 1560 "description": "Denies the webview_size command without any pre-configured scope.", 1561 "type": "string", 1562 + "const": "core:webview:deny-webview-size", 1563 + "markdownDescription": "Denies the webview_size command without any pre-configured scope." 1564 }, 1565 { 1566 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`", 1567 "type": "string", 1568 + "const": "core:window:default", 1569 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`" 1570 }, 1571 { 1572 "description": "Enables the available_monitors command without any pre-configured scope.", 1573 "type": "string", 1574 + "const": "core:window:allow-available-monitors", 1575 + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." 1576 }, 1577 { 1578 "description": "Enables the center command without any pre-configured scope.", 1579 "type": "string", 1580 + "const": "core:window:allow-center", 1581 + "markdownDescription": "Enables the center command without any pre-configured scope." 1582 }, 1583 { 1584 "description": "Enables the close command without any pre-configured scope.", 1585 "type": "string", 1586 + "const": "core:window:allow-close", 1587 + "markdownDescription": "Enables the close command without any pre-configured scope." 1588 }, 1589 { 1590 "description": "Enables the create command without any pre-configured scope.", 1591 "type": "string", 1592 + "const": "core:window:allow-create", 1593 + "markdownDescription": "Enables the create command without any pre-configured scope." 1594 }, 1595 { 1596 "description": "Enables the current_monitor command without any pre-configured scope.", 1597 "type": "string", 1598 + "const": "core:window:allow-current-monitor", 1599 + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." 1600 }, 1601 { 1602 "description": "Enables the cursor_position command without any pre-configured scope.", 1603 "type": "string", 1604 + "const": "core:window:allow-cursor-position", 1605 + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." 1606 }, 1607 { 1608 "description": "Enables the destroy command without any pre-configured scope.", 1609 "type": "string", 1610 + "const": "core:window:allow-destroy", 1611 + "markdownDescription": "Enables the destroy command without any pre-configured scope." 1612 }, 1613 { 1614 "description": "Enables the get_all_windows command without any pre-configured scope.", 1615 "type": "string", 1616 + "const": "core:window:allow-get-all-windows", 1617 + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." 1618 }, 1619 { 1620 "description": "Enables the hide command without any pre-configured scope.", 1621 "type": "string", 1622 + "const": "core:window:allow-hide", 1623 + "markdownDescription": "Enables the hide command without any pre-configured scope." 1624 }, 1625 { 1626 "description": "Enables the inner_position command without any pre-configured scope.", 1627 "type": "string", 1628 + "const": "core:window:allow-inner-position", 1629 + "markdownDescription": "Enables the inner_position command without any pre-configured scope." 1630 }, 1631 { 1632 "description": "Enables the inner_size command without any pre-configured scope.", 1633 "type": "string", 1634 + "const": "core:window:allow-inner-size", 1635 + "markdownDescription": "Enables the inner_size command without any pre-configured scope." 1636 }, 1637 { 1638 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1639 "type": "string", 1640 + "const": "core:window:allow-internal-toggle-maximize", 1641 + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." 1642 + }, 1643 + { 1644 + "description": "Enables the is_always_on_top command without any pre-configured scope.", 1645 + "type": "string", 1646 + "const": "core:window:allow-is-always-on-top", 1647 + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." 1648 }, 1649 { 1650 "description": "Enables the is_closable command without any pre-configured scope.", 1651 "type": "string", 1652 + "const": "core:window:allow-is-closable", 1653 + "markdownDescription": "Enables the is_closable command without any pre-configured scope." 1654 }, 1655 { 1656 "description": "Enables the is_decorated command without any pre-configured scope.", 1657 "type": "string", 1658 + "const": "core:window:allow-is-decorated", 1659 + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." 1660 }, 1661 { 1662 "description": "Enables the is_enabled command without any pre-configured scope.", 1663 "type": "string", 1664 + "const": "core:window:allow-is-enabled", 1665 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 1666 }, 1667 { 1668 "description": "Enables the is_focused command without any pre-configured scope.", 1669 "type": "string", 1670 + "const": "core:window:allow-is-focused", 1671 + "markdownDescription": "Enables the is_focused command without any pre-configured scope." 1672 }, 1673 { 1674 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1675 "type": "string", 1676 + "const": "core:window:allow-is-fullscreen", 1677 + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." 1678 }, 1679 { 1680 "description": "Enables the is_maximizable command without any pre-configured scope.", 1681 "type": "string", 1682 + "const": "core:window:allow-is-maximizable", 1683 + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." 1684 }, 1685 { 1686 "description": "Enables the is_maximized command without any pre-configured scope.", 1687 "type": "string", 1688 + "const": "core:window:allow-is-maximized", 1689 + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." 1690 }, 1691 { 1692 "description": "Enables the is_minimizable command without any pre-configured scope.", 1693 "type": "string", 1694 + "const": "core:window:allow-is-minimizable", 1695 + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." 1696 }, 1697 { 1698 "description": "Enables the is_minimized command without any pre-configured scope.", 1699 "type": "string", 1700 + "const": "core:window:allow-is-minimized", 1701 + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." 1702 }, 1703 { 1704 "description": "Enables the is_resizable command without any pre-configured scope.", 1705 "type": "string", 1706 + "const": "core:window:allow-is-resizable", 1707 + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." 1708 }, 1709 { 1710 "description": "Enables the is_visible command without any pre-configured scope.", 1711 "type": "string", 1712 + "const": "core:window:allow-is-visible", 1713 + "markdownDescription": "Enables the is_visible command without any pre-configured scope." 1714 }, 1715 { 1716 "description": "Enables the maximize command without any pre-configured scope.", 1717 "type": "string", 1718 + "const": "core:window:allow-maximize", 1719 + "markdownDescription": "Enables the maximize command without any pre-configured scope." 1720 }, 1721 { 1722 "description": "Enables the minimize command without any pre-configured scope.", 1723 "type": "string", 1724 + "const": "core:window:allow-minimize", 1725 + "markdownDescription": "Enables the minimize command without any pre-configured scope." 1726 }, 1727 { 1728 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1729 "type": "string", 1730 + "const": "core:window:allow-monitor-from-point", 1731 + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." 1732 }, 1733 { 1734 "description": "Enables the outer_position command without any pre-configured scope.", 1735 "type": "string", 1736 + "const": "core:window:allow-outer-position", 1737 + "markdownDescription": "Enables the outer_position command without any pre-configured scope." 1738 }, 1739 { 1740 "description": "Enables the outer_size command without any pre-configured scope.", 1741 "type": "string", 1742 + "const": "core:window:allow-outer-size", 1743 + "markdownDescription": "Enables the outer_size command without any pre-configured scope." 1744 }, 1745 { 1746 "description": "Enables the primary_monitor command without any pre-configured scope.", 1747 "type": "string", 1748 + "const": "core:window:allow-primary-monitor", 1749 + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." 1750 }, 1751 { 1752 "description": "Enables the request_user_attention command without any pre-configured scope.", 1753 "type": "string", 1754 + "const": "core:window:allow-request-user-attention", 1755 + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." 1756 }, 1757 { 1758 "description": "Enables the scale_factor command without any pre-configured scope.", 1759 "type": "string", 1760 + "const": "core:window:allow-scale-factor", 1761 + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." 1762 }, 1763 { 1764 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1765 "type": "string", 1766 + "const": "core:window:allow-set-always-on-bottom", 1767 + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." 1768 }, 1769 { 1770 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1771 "type": "string", 1772 + "const": "core:window:allow-set-always-on-top", 1773 + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." 1774 + }, 1775 + { 1776 + "description": "Enables the set_background_color command without any pre-configured scope.", 1777 + "type": "string", 1778 + "const": "core:window:allow-set-background-color", 1779 + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." 1780 + }, 1781 + { 1782 + "description": "Enables the set_badge_count command without any pre-configured scope.", 1783 + "type": "string", 1784 + "const": "core:window:allow-set-badge-count", 1785 + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." 1786 + }, 1787 + { 1788 + "description": "Enables the set_badge_label command without any pre-configured scope.", 1789 + "type": "string", 1790 + "const": "core:window:allow-set-badge-label", 1791 + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." 1792 }, 1793 { 1794 "description": "Enables the set_closable command without any pre-configured scope.", 1795 "type": "string", 1796 + "const": "core:window:allow-set-closable", 1797 + "markdownDescription": "Enables the set_closable command without any pre-configured scope." 1798 }, 1799 { 1800 "description": "Enables the set_content_protected command without any pre-configured scope.", 1801 "type": "string", 1802 + "const": "core:window:allow-set-content-protected", 1803 + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." 1804 }, 1805 { 1806 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 + "const": "core:window:allow-set-cursor-grab", 1809 + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." 1810 }, 1811 { 1812 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1813 "type": "string", 1814 + "const": "core:window:allow-set-cursor-icon", 1815 + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." 1816 }, 1817 { 1818 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1819 "type": "string", 1820 + "const": "core:window:allow-set-cursor-position", 1821 + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." 1822 }, 1823 { 1824 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1825 "type": "string", 1826 + "const": "core:window:allow-set-cursor-visible", 1827 + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." 1828 }, 1829 { 1830 "description": "Enables the set_decorations command without any pre-configured scope.", 1831 "type": "string", 1832 + "const": "core:window:allow-set-decorations", 1833 + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." 1834 }, 1835 { 1836 "description": "Enables the set_effects command without any pre-configured scope.", 1837 "type": "string", 1838 + "const": "core:window:allow-set-effects", 1839 + "markdownDescription": "Enables the set_effects command without any pre-configured scope." 1840 }, 1841 { 1842 "description": "Enables the set_enabled command without any pre-configured scope.", 1843 "type": "string", 1844 + "const": "core:window:allow-set-enabled", 1845 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 1846 }, 1847 { 1848 "description": "Enables the set_focus command without any pre-configured scope.", 1849 "type": "string", 1850 + "const": "core:window:allow-set-focus", 1851 + "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1852 + }, 1853 + { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 }, 1859 { 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 "type": "string", 1862 + "const": "core:window:allow-set-fullscreen", 1863 + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." 1864 }, 1865 { 1866 "description": "Enables the set_icon command without any pre-configured scope.", 1867 "type": "string", 1868 + "const": "core:window:allow-set-icon", 1869 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1870 }, 1871 { 1872 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1873 "type": "string", 1874 + "const": "core:window:allow-set-ignore-cursor-events", 1875 + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." 1876 }, 1877 { 1878 "description": "Enables the set_max_size command without any pre-configured scope.", 1879 "type": "string", 1880 + "const": "core:window:allow-set-max-size", 1881 + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." 1882 }, 1883 { 1884 "description": "Enables the set_maximizable command without any pre-configured scope.", 1885 "type": "string", 1886 + "const": "core:window:allow-set-maximizable", 1887 + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." 1888 }, 1889 { 1890 "description": "Enables the set_min_size command without any pre-configured scope.", 1891 "type": "string", 1892 + "const": "core:window:allow-set-min-size", 1893 + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." 1894 }, 1895 { 1896 "description": "Enables the set_minimizable command without any pre-configured scope.", 1897 "type": "string", 1898 + "const": "core:window:allow-set-minimizable", 1899 + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." 1900 + }, 1901 + { 1902 + "description": "Enables the set_overlay_icon command without any pre-configured scope.", 1903 + "type": "string", 1904 + "const": "core:window:allow-set-overlay-icon", 1905 + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." 1906 }, 1907 { 1908 "description": "Enables the set_position command without any pre-configured scope.", 1909 "type": "string", 1910 + "const": "core:window:allow-set-position", 1911 + "markdownDescription": "Enables the set_position command without any pre-configured scope." 1912 }, 1913 { 1914 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1915 "type": "string", 1916 + "const": "core:window:allow-set-progress-bar", 1917 + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." 1918 }, 1919 { 1920 "description": "Enables the set_resizable command without any pre-configured scope.", 1921 "type": "string", 1922 + "const": "core:window:allow-set-resizable", 1923 + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." 1924 }, 1925 { 1926 "description": "Enables the set_shadow command without any pre-configured scope.", 1927 "type": "string", 1928 + "const": "core:window:allow-set-shadow", 1929 + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1936 }, 1937 { 1938 "description": "Enables the set_size command without any pre-configured scope.", 1939 "type": "string", 1940 + "const": "core:window:allow-set-size", 1941 + "markdownDescription": "Enables the set_size command without any pre-configured scope." 1942 }, 1943 { 1944 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1945 "type": "string", 1946 + "const": "core:window:allow-set-size-constraints", 1947 + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." 1948 }, 1949 { 1950 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1951 "type": "string", 1952 + "const": "core:window:allow-set-skip-taskbar", 1953 + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." 1954 }, 1955 { 1956 "description": "Enables the set_theme command without any pre-configured scope.", 1957 "type": "string", 1958 + "const": "core:window:allow-set-theme", 1959 + "markdownDescription": "Enables the set_theme command without any pre-configured scope." 1960 }, 1961 { 1962 "description": "Enables the set_title command without any pre-configured scope.", 1963 "type": "string", 1964 + "const": "core:window:allow-set-title", 1965 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1966 }, 1967 { 1968 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1969 "type": "string", 1970 + "const": "core:window:allow-set-title-bar-style", 1971 + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." 1972 }, 1973 { 1974 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1975 "type": "string", 1976 + "const": "core:window:allow-set-visible-on-all-workspaces", 1977 + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." 1978 }, 1979 { 1980 "description": "Enables the show command without any pre-configured scope.", 1981 "type": "string", 1982 + "const": "core:window:allow-show", 1983 + "markdownDescription": "Enables the show command without any pre-configured scope." 1984 }, 1985 { 1986 "description": "Enables the start_dragging command without any pre-configured scope.", 1987 "type": "string", 1988 + "const": "core:window:allow-start-dragging", 1989 + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." 1990 }, 1991 { 1992 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1993 "type": "string", 1994 + "const": "core:window:allow-start-resize-dragging", 1995 + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." 1996 }, 1997 { 1998 "description": "Enables the theme command without any pre-configured scope.", 1999 "type": "string", 2000 + "const": "core:window:allow-theme", 2001 + "markdownDescription": "Enables the theme command without any pre-configured scope." 2002 }, 2003 { 2004 "description": "Enables the title command without any pre-configured scope.", 2005 "type": "string", 2006 + "const": "core:window:allow-title", 2007 + "markdownDescription": "Enables the title command without any pre-configured scope." 2008 }, 2009 { 2010 "description": "Enables the toggle_maximize command without any pre-configured scope.", 2011 "type": "string", 2012 + "const": "core:window:allow-toggle-maximize", 2013 + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." 2014 }, 2015 { 2016 "description": "Enables the unmaximize command without any pre-configured scope.", 2017 "type": "string", 2018 + "const": "core:window:allow-unmaximize", 2019 + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." 2020 }, 2021 { 2022 "description": "Enables the unminimize command without any pre-configured scope.", 2023 "type": "string", 2024 + "const": "core:window:allow-unminimize", 2025 + "markdownDescription": "Enables the unminimize command without any pre-configured scope." 2026 }, 2027 { 2028 "description": "Denies the available_monitors command without any pre-configured scope.", 2029 "type": "string", 2030 + "const": "core:window:deny-available-monitors", 2031 + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." 2032 }, 2033 { 2034 "description": "Denies the center command without any pre-configured scope.", 2035 "type": "string", 2036 + "const": "core:window:deny-center", 2037 + "markdownDescription": "Denies the center command without any pre-configured scope." 2038 }, 2039 { 2040 "description": "Denies the close command without any pre-configured scope.", 2041 "type": "string", 2042 + "const": "core:window:deny-close", 2043 + "markdownDescription": "Denies the close command without any pre-configured scope." 2044 }, 2045 { 2046 "description": "Denies the create command without any pre-configured scope.", 2047 "type": "string", 2048 + "const": "core:window:deny-create", 2049 + "markdownDescription": "Denies the create command without any pre-configured scope." 2050 }, 2051 { 2052 "description": "Denies the current_monitor command without any pre-configured scope.", 2053 "type": "string", 2054 + "const": "core:window:deny-current-monitor", 2055 + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." 2056 }, 2057 { 2058 "description": "Denies the cursor_position command without any pre-configured scope.", 2059 "type": "string", 2060 + "const": "core:window:deny-cursor-position", 2061 + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." 2062 }, 2063 { 2064 "description": "Denies the destroy command without any pre-configured scope.", 2065 "type": "string", 2066 + "const": "core:window:deny-destroy", 2067 + "markdownDescription": "Denies the destroy command without any pre-configured scope." 2068 }, 2069 { 2070 "description": "Denies the get_all_windows command without any pre-configured scope.", 2071 "type": "string", 2072 + "const": "core:window:deny-get-all-windows", 2073 + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." 2074 }, 2075 { 2076 "description": "Denies the hide command without any pre-configured scope.", 2077 "type": "string", 2078 + "const": "core:window:deny-hide", 2079 + "markdownDescription": "Denies the hide command without any pre-configured scope." 2080 }, 2081 { 2082 "description": "Denies the inner_position command without any pre-configured scope.", 2083 "type": "string", 2084 + "const": "core:window:deny-inner-position", 2085 + "markdownDescription": "Denies the inner_position command without any pre-configured scope." 2086 }, 2087 { 2088 "description": "Denies the inner_size command without any pre-configured scope.", 2089 "type": "string", 2090 + "const": "core:window:deny-inner-size", 2091 + "markdownDescription": "Denies the inner_size command without any pre-configured scope." 2092 }, 2093 { 2094 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 2095 "type": "string", 2096 + "const": "core:window:deny-internal-toggle-maximize", 2097 + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." 2098 + }, 2099 + { 2100 + "description": "Denies the is_always_on_top command without any pre-configured scope.", 2101 + "type": "string", 2102 + "const": "core:window:deny-is-always-on-top", 2103 + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." 2104 }, 2105 { 2106 "description": "Denies the is_closable command without any pre-configured scope.", 2107 "type": "string", 2108 + "const": "core:window:deny-is-closable", 2109 + "markdownDescription": "Denies the is_closable command without any pre-configured scope." 2110 }, 2111 { 2112 "description": "Denies the is_decorated command without any pre-configured scope.", 2113 "type": "string", 2114 + "const": "core:window:deny-is-decorated", 2115 + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." 2116 }, 2117 { 2118 "description": "Denies the is_enabled command without any pre-configured scope.", 2119 "type": "string", 2120 + "const": "core:window:deny-is-enabled", 2121 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 2122 }, 2123 { 2124 "description": "Denies the is_focused command without any pre-configured scope.", 2125 "type": "string", 2126 + "const": "core:window:deny-is-focused", 2127 + "markdownDescription": "Denies the is_focused command without any pre-configured scope." 2128 }, 2129 { 2130 "description": "Denies the is_fullscreen command without any pre-configured scope.", 2131 "type": "string", 2132 + "const": "core:window:deny-is-fullscreen", 2133 + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." 2134 }, 2135 { 2136 "description": "Denies the is_maximizable command without any pre-configured scope.", 2137 "type": "string", 2138 + "const": "core:window:deny-is-maximizable", 2139 + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." 2140 }, 2141 { 2142 "description": "Denies the is_maximized command without any pre-configured scope.", 2143 "type": "string", 2144 + "const": "core:window:deny-is-maximized", 2145 + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." 2146 }, 2147 { 2148 "description": "Denies the is_minimizable command without any pre-configured scope.", 2149 "type": "string", 2150 + "const": "core:window:deny-is-minimizable", 2151 + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." 2152 }, 2153 { 2154 "description": "Denies the is_minimized command without any pre-configured scope.", 2155 "type": "string", 2156 + "const": "core:window:deny-is-minimized", 2157 + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." 2158 }, 2159 { 2160 "description": "Denies the is_resizable command without any pre-configured scope.", 2161 "type": "string", 2162 + "const": "core:window:deny-is-resizable", 2163 + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." 2164 }, 2165 { 2166 "description": "Denies the is_visible command without any pre-configured scope.", 2167 "type": "string", 2168 + "const": "core:window:deny-is-visible", 2169 + "markdownDescription": "Denies the is_visible command without any pre-configured scope." 2170 }, 2171 { 2172 "description": "Denies the maximize command without any pre-configured scope.", 2173 "type": "string", 2174 + "const": "core:window:deny-maximize", 2175 + "markdownDescription": "Denies the maximize command without any pre-configured scope." 2176 }, 2177 { 2178 "description": "Denies the minimize command without any pre-configured scope.", 2179 "type": "string", 2180 + "const": "core:window:deny-minimize", 2181 + "markdownDescription": "Denies the minimize command without any pre-configured scope." 2182 }, 2183 { 2184 "description": "Denies the monitor_from_point command without any pre-configured scope.", 2185 "type": "string", 2186 + "const": "core:window:deny-monitor-from-point", 2187 + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." 2188 }, 2189 { 2190 "description": "Denies the outer_position command without any pre-configured scope.", 2191 "type": "string", 2192 + "const": "core:window:deny-outer-position", 2193 + "markdownDescription": "Denies the outer_position command without any pre-configured scope." 2194 }, 2195 { 2196 "description": "Denies the outer_size command without any pre-configured scope.", 2197 "type": "string", 2198 + "const": "core:window:deny-outer-size", 2199 + "markdownDescription": "Denies the outer_size command without any pre-configured scope." 2200 }, 2201 { 2202 "description": "Denies the primary_monitor command without any pre-configured scope.", 2203 "type": "string", 2204 + "const": "core:window:deny-primary-monitor", 2205 + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." 2206 }, 2207 { 2208 "description": "Denies the request_user_attention command without any pre-configured scope.", 2209 "type": "string", 2210 + "const": "core:window:deny-request-user-attention", 2211 + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." 2212 }, 2213 { 2214 "description": "Denies the scale_factor command without any pre-configured scope.", 2215 "type": "string", 2216 + "const": "core:window:deny-scale-factor", 2217 + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." 2218 }, 2219 { 2220 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 2221 "type": "string", 2222 + "const": "core:window:deny-set-always-on-bottom", 2223 + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." 2224 }, 2225 { 2226 "description": "Denies the set_always_on_top command without any pre-configured scope.", 2227 "type": "string", 2228 + "const": "core:window:deny-set-always-on-top", 2229 + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." 2230 + }, 2231 + { 2232 + "description": "Denies the set_background_color command without any pre-configured scope.", 2233 + "type": "string", 2234 + "const": "core:window:deny-set-background-color", 2235 + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." 2236 + }, 2237 + { 2238 + "description": "Denies the set_badge_count command without any pre-configured scope.", 2239 + "type": "string", 2240 + "const": "core:window:deny-set-badge-count", 2241 + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." 2242 + }, 2243 + { 2244 + "description": "Denies the set_badge_label command without any pre-configured scope.", 2245 + "type": "string", 2246 + "const": "core:window:deny-set-badge-label", 2247 + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." 2248 }, 2249 { 2250 "description": "Denies the set_closable command without any pre-configured scope.", 2251 "type": "string", 2252 + "const": "core:window:deny-set-closable", 2253 + "markdownDescription": "Denies the set_closable command without any pre-configured scope." 2254 }, 2255 { 2256 "description": "Denies the set_content_protected command without any pre-configured scope.", 2257 "type": "string", 2258 + "const": "core:window:deny-set-content-protected", 2259 + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." 2260 }, 2261 { 2262 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 2263 "type": "string", 2264 + "const": "core:window:deny-set-cursor-grab", 2265 + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." 2266 }, 2267 { 2268 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 2269 "type": "string", 2270 + "const": "core:window:deny-set-cursor-icon", 2271 + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." 2272 }, 2273 { 2274 "description": "Denies the set_cursor_position command without any pre-configured scope.", 2275 "type": "string", 2276 + "const": "core:window:deny-set-cursor-position", 2277 + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." 2278 }, 2279 { 2280 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 2281 "type": "string", 2282 + "const": "core:window:deny-set-cursor-visible", 2283 + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." 2284 }, 2285 { 2286 "description": "Denies the set_decorations command without any pre-configured scope.", 2287 "type": "string", 2288 + "const": "core:window:deny-set-decorations", 2289 + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." 2290 }, 2291 { 2292 "description": "Denies the set_effects command without any pre-configured scope.", 2293 "type": "string", 2294 + "const": "core:window:deny-set-effects", 2295 + "markdownDescription": "Denies the set_effects command without any pre-configured scope." 2296 }, 2297 { 2298 "description": "Denies the set_enabled command without any pre-configured scope.", 2299 "type": "string", 2300 + "const": "core:window:deny-set-enabled", 2301 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 2302 }, 2303 { 2304 "description": "Denies the set_focus command without any pre-configured scope.", 2305 "type": "string", 2306 + "const": "core:window:deny-set-focus", 2307 + "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2308 + }, 2309 + { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 }, 2315 { 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 "type": "string", 2318 + "const": "core:window:deny-set-fullscreen", 2319 + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." 2320 }, 2321 { 2322 "description": "Denies the set_icon command without any pre-configured scope.", 2323 "type": "string", 2324 + "const": "core:window:deny-set-icon", 2325 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 2326 }, 2327 { 2328 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 2329 "type": "string", 2330 + "const": "core:window:deny-set-ignore-cursor-events", 2331 + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." 2332 }, 2333 { 2334 "description": "Denies the set_max_size command without any pre-configured scope.", 2335 "type": "string", 2336 + "const": "core:window:deny-set-max-size", 2337 + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." 2338 }, 2339 { 2340 "description": "Denies the set_maximizable command without any pre-configured scope.", 2341 "type": "string", 2342 + "const": "core:window:deny-set-maximizable", 2343 + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." 2344 }, 2345 { 2346 "description": "Denies the set_min_size command without any pre-configured scope.", 2347 "type": "string", 2348 + "const": "core:window:deny-set-min-size", 2349 + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." 2350 }, 2351 { 2352 "description": "Denies the set_minimizable command without any pre-configured scope.", 2353 "type": "string", 2354 + "const": "core:window:deny-set-minimizable", 2355 + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." 2356 + }, 2357 + { 2358 + "description": "Denies the set_overlay_icon command without any pre-configured scope.", 2359 + "type": "string", 2360 + "const": "core:window:deny-set-overlay-icon", 2361 + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." 2362 }, 2363 { 2364 "description": "Denies the set_position command without any pre-configured scope.", 2365 "type": "string", 2366 + "const": "core:window:deny-set-position", 2367 + "markdownDescription": "Denies the set_position command without any pre-configured scope." 2368 }, 2369 { 2370 "description": "Denies the set_progress_bar command without any pre-configured scope.", 2371 "type": "string", 2372 + "const": "core:window:deny-set-progress-bar", 2373 + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." 2374 }, 2375 { 2376 "description": "Denies the set_resizable command without any pre-configured scope.", 2377 "type": "string", 2378 + "const": "core:window:deny-set-resizable", 2379 + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." 2380 }, 2381 { 2382 "description": "Denies the set_shadow command without any pre-configured scope.", 2383 "type": "string", 2384 + "const": "core:window:deny-set-shadow", 2385 + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2392 }, 2393 { 2394 "description": "Denies the set_size command without any pre-configured scope.", 2395 "type": "string", 2396 + "const": "core:window:deny-set-size", 2397 + "markdownDescription": "Denies the set_size command without any pre-configured scope." 2398 }, 2399 { 2400 "description": "Denies the set_size_constraints command without any pre-configured scope.", 2401 "type": "string", 2402 + "const": "core:window:deny-set-size-constraints", 2403 + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." 2404 }, 2405 { 2406 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 2407 "type": "string", 2408 + "const": "core:window:deny-set-skip-taskbar", 2409 + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." 2410 }, 2411 { 2412 "description": "Denies the set_theme command without any pre-configured scope.", 2413 "type": "string", 2414 + "const": "core:window:deny-set-theme", 2415 + "markdownDescription": "Denies the set_theme command without any pre-configured scope." 2416 }, 2417 { 2418 "description": "Denies the set_title command without any pre-configured scope.", 2419 "type": "string", 2420 + "const": "core:window:deny-set-title", 2421 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 2422 }, 2423 { 2424 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 2425 "type": "string", 2426 + "const": "core:window:deny-set-title-bar-style", 2427 + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." 2428 }, 2429 { 2430 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 2431 "type": "string", 2432 + "const": "core:window:deny-set-visible-on-all-workspaces", 2433 + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." 2434 }, 2435 { 2436 "description": "Denies the show command without any pre-configured scope.", 2437 "type": "string", 2438 + "const": "core:window:deny-show", 2439 + "markdownDescription": "Denies the show command without any pre-configured scope." 2440 }, 2441 { 2442 "description": "Denies the start_dragging command without any pre-configured scope.", 2443 "type": "string", 2444 + "const": "core:window:deny-start-dragging", 2445 + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." 2446 }, 2447 { 2448 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 2449 "type": "string", 2450 + "const": "core:window:deny-start-resize-dragging", 2451 + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." 2452 }, 2453 { 2454 "description": "Denies the theme command without any pre-configured scope.", 2455 "type": "string", 2456 + "const": "core:window:deny-theme", 2457 + "markdownDescription": "Denies the theme command without any pre-configured scope." 2458 }, 2459 { 2460 "description": "Denies the title command without any pre-configured scope.", 2461 "type": "string", 2462 + "const": "core:window:deny-title", 2463 + "markdownDescription": "Denies the title command without any pre-configured scope." 2464 }, 2465 { 2466 "description": "Denies the toggle_maximize command without any pre-configured scope.", 2467 "type": "string", 2468 + "const": "core:window:deny-toggle-maximize", 2469 + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." 2470 }, 2471 { 2472 "description": "Denies the unmaximize command without any pre-configured scope.", 2473 "type": "string", 2474 + "const": "core:window:deny-unmaximize", 2475 + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." 2476 }, 2477 { 2478 "description": "Denies the unminimize command without any pre-configured scope.", 2479 "type": "string", 2480 + "const": "core:window:deny-unminimize", 2481 + "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 }, 2483 { 2484 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 2485 "type": "string", 2486 + "const": "http:default", 2487 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 2488 }, 2489 { 2490 "description": "Enables the fetch command without any pre-configured scope.", 2491 "type": "string", 2492 + "const": "http:allow-fetch", 2493 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 2494 }, 2495 { 2496 "description": "Enables the fetch_cancel command without any pre-configured scope.", 2497 "type": "string", 2498 + "const": "http:allow-fetch-cancel", 2499 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 2500 }, 2501 { 2502 "description": "Enables the fetch_read_body command without any pre-configured scope.", 2503 "type": "string", 2504 + "const": "http:allow-fetch-read-body", 2505 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 2506 }, 2507 { 2508 "description": "Enables the fetch_send command without any pre-configured scope.", 2509 "type": "string", 2510 + "const": "http:allow-fetch-send", 2511 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 2512 }, 2513 { 2514 "description": "Denies the fetch command without any pre-configured scope.", 2515 "type": "string", 2516 + "const": "http:deny-fetch", 2517 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 2518 }, 2519 { 2520 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2521 "type": "string", 2522 + "const": "http:deny-fetch-cancel", 2523 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 2524 }, 2525 { 2526 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2527 "type": "string", 2528 + "const": "http:deny-fetch-read-body", 2529 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 2530 }, 2531 { 2532 "description": "Denies the fetch_send command without any pre-configured scope.", 2533 "type": "string", 2534 + "const": "http:deny-fetch-send", 2535 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 2536 }, 2537 { 2538 + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", 2539 "type": "string", 2540 + "const": "process:default", 2541 + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" 2542 }, 2543 { 2544 "description": "Enables the exit command without any pre-configured scope.", 2545 "type": "string", 2546 + "const": "process:allow-exit", 2547 + "markdownDescription": "Enables the exit command without any pre-configured scope." 2548 }, 2549 { 2550 "description": "Enables the restart command without any pre-configured scope.", 2551 "type": "string", 2552 + "const": "process:allow-restart", 2553 + "markdownDescription": "Enables the restart command without any pre-configured scope." 2554 }, 2555 { 2556 "description": "Denies the exit command without any pre-configured scope.", 2557 "type": "string", 2558 + "const": "process:deny-exit", 2559 + "markdownDescription": "Denies the exit command without any pre-configured scope." 2560 }, 2561 { 2562 "description": "Denies the restart command without any pre-configured scope.", 2563 "type": "string", 2564 + "const": "process:deny-restart", 2565 + "markdownDescription": "Denies the restart command without any pre-configured scope." 2566 }, 2567 { 2568 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 2569 "type": "string", 2570 + "const": "shell:default", 2571 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 2572 }, 2573 { 2574 "description": "Enables the execute command without any pre-configured scope.", 2575 "type": "string", 2576 + "const": "shell:allow-execute", 2577 + "markdownDescription": "Enables the execute command without any pre-configured scope." 2578 }, 2579 { 2580 "description": "Enables the kill command without any pre-configured scope.", 2581 "type": "string", 2582 + "const": "shell:allow-kill", 2583 + "markdownDescription": "Enables the kill command without any pre-configured scope." 2584 }, 2585 { 2586 "description": "Enables the open command without any pre-configured scope.", 2587 "type": "string", 2588 + "const": "shell:allow-open", 2589 + "markdownDescription": "Enables the open command without any pre-configured scope." 2590 }, 2591 { 2592 "description": "Enables the spawn command without any pre-configured scope.", 2593 "type": "string", 2594 + "const": "shell:allow-spawn", 2595 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 2596 }, 2597 { 2598 "description": "Enables the stdin_write command without any pre-configured scope.", 2599 "type": "string", 2600 + "const": "shell:allow-stdin-write", 2601 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 2602 }, 2603 { 2604 "description": "Denies the execute command without any pre-configured scope.", 2605 "type": "string", 2606 + "const": "shell:deny-execute", 2607 + "markdownDescription": "Denies the execute command without any pre-configured scope." 2608 }, 2609 { 2610 "description": "Denies the kill command without any pre-configured scope.", 2611 "type": "string", 2612 + "const": "shell:deny-kill", 2613 + "markdownDescription": "Denies the kill command without any pre-configured scope." 2614 }, 2615 { 2616 "description": "Denies the open command without any pre-configured scope.", 2617 "type": "string", 2618 + "const": "shell:deny-open", 2619 + "markdownDescription": "Denies the open command without any pre-configured scope." 2620 }, 2621 { 2622 "description": "Denies the spawn command without any pre-configured scope.", 2623 "type": "string", 2624 + "const": "shell:deny-spawn", 2625 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 2626 }, 2627 { 2628 "description": "Denies the stdin_write command without any pre-configured scope.", 2629 "type": "string", 2630 + "const": "shell:deny-stdin-write", 2631 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 2632 } 2633 ] 2634 },
+2774
src-tauri/gen/schemas/linux-schema.json
···
··· 1 + { 2 + "$schema": "http://json-schema.org/draft-07/schema#", 3 + "title": "CapabilityFile", 4 + "description": "Capability formats accepted in a capability file.", 5 + "anyOf": [ 6 + { 7 + "description": "A single capability.", 8 + "allOf": [ 9 + { 10 + "$ref": "#/definitions/Capability" 11 + } 12 + ] 13 + }, 14 + { 15 + "description": "A list of capabilities.", 16 + "type": "array", 17 + "items": { 18 + "$ref": "#/definitions/Capability" 19 + } 20 + }, 21 + { 22 + "description": "A list of capabilities.", 23 + "type": "object", 24 + "required": [ 25 + "capabilities" 26 + ], 27 + "properties": { 28 + "capabilities": { 29 + "description": "The list of capabilities.", 30 + "type": "array", 31 + "items": { 32 + "$ref": "#/definitions/Capability" 33 + } 34 + } 35 + } 36 + } 37 + ], 38 + "definitions": { 39 + "Capability": { 40 + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", 41 + "type": "object", 42 + "required": [ 43 + "identifier", 44 + "permissions" 45 + ], 46 + "properties": { 47 + "identifier": { 48 + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", 49 + "type": "string" 50 + }, 51 + "description": { 52 + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", 53 + "default": "", 54 + "type": "string" 55 + }, 56 + "remote": { 57 + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", 58 + "anyOf": [ 59 + { 60 + "$ref": "#/definitions/CapabilityRemote" 61 + }, 62 + { 63 + "type": "null" 64 + } 65 + ] 66 + }, 67 + "local": { 68 + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", 69 + "default": true, 70 + "type": "boolean" 71 + }, 72 + "windows": { 73 + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 74 + "type": "array", 75 + "items": { 76 + "type": "string" 77 + } 78 + }, 79 + "webviews": { 80 + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 81 + "type": "array", 82 + "items": { 83 + "type": "string" 84 + } 85 + }, 86 + "permissions": { 87 + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", 88 + "type": "array", 89 + "items": { 90 + "$ref": "#/definitions/PermissionEntry" 91 + }, 92 + "uniqueItems": true 93 + }, 94 + "platforms": { 95 + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", 96 + "type": [ 97 + "array", 98 + "null" 99 + ], 100 + "items": { 101 + "$ref": "#/definitions/Target" 102 + } 103 + } 104 + } 105 + }, 106 + "CapabilityRemote": { 107 + "description": "Configuration for remote URLs that are associated with the capability.", 108 + "type": "object", 109 + "required": [ 110 + "urls" 111 + ], 112 + "properties": { 113 + "urls": { 114 + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", 115 + "type": "array", 116 + "items": { 117 + "type": "string" 118 + } 119 + } 120 + } 121 + }, 122 + "PermissionEntry": { 123 + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", 124 + "anyOf": [ 125 + { 126 + "description": "Reference a permission or permission set by identifier.", 127 + "allOf": [ 128 + { 129 + "$ref": "#/definitions/Identifier" 130 + } 131 + ] 132 + }, 133 + { 134 + "description": "Reference a permission or permission set by identifier and extends its scope.", 135 + "type": "object", 136 + "allOf": [ 137 + { 138 + "if": { 139 + "properties": { 140 + "identifier": { 141 + "anyOf": [ 142 + { 143 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 144 + "type": "string", 145 + "const": "http:default", 146 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 147 + }, 148 + { 149 + "description": "Enables the fetch command without any pre-configured scope.", 150 + "type": "string", 151 + "const": "http:allow-fetch", 152 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 153 + }, 154 + { 155 + "description": "Enables the fetch_cancel command without any pre-configured scope.", 156 + "type": "string", 157 + "const": "http:allow-fetch-cancel", 158 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 159 + }, 160 + { 161 + "description": "Enables the fetch_read_body command without any pre-configured scope.", 162 + "type": "string", 163 + "const": "http:allow-fetch-read-body", 164 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 165 + }, 166 + { 167 + "description": "Enables the fetch_send command without any pre-configured scope.", 168 + "type": "string", 169 + "const": "http:allow-fetch-send", 170 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 171 + }, 172 + { 173 + "description": "Denies the fetch command without any pre-configured scope.", 174 + "type": "string", 175 + "const": "http:deny-fetch", 176 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 177 + }, 178 + { 179 + "description": "Denies the fetch_cancel command without any pre-configured scope.", 180 + "type": "string", 181 + "const": "http:deny-fetch-cancel", 182 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 183 + }, 184 + { 185 + "description": "Denies the fetch_read_body command without any pre-configured scope.", 186 + "type": "string", 187 + "const": "http:deny-fetch-read-body", 188 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 189 + }, 190 + { 191 + "description": "Denies the fetch_send command without any pre-configured scope.", 192 + "type": "string", 193 + "const": "http:deny-fetch-send", 194 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 195 + } 196 + ] 197 + } 198 + } 199 + }, 200 + "then": { 201 + "properties": { 202 + "allow": { 203 + "items": { 204 + "title": "HttpScopeEntry", 205 + "description": "HTTP scope entry.", 206 + "anyOf": [ 207 + { 208 + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", 209 + "type": "string" 210 + }, 211 + { 212 + "type": "object", 213 + "required": [ 214 + "url" 215 + ], 216 + "properties": { 217 + "url": { 218 + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", 219 + "type": "string" 220 + } 221 + } 222 + } 223 + ] 224 + } 225 + }, 226 + "deny": { 227 + "items": { 228 + "title": "HttpScopeEntry", 229 + "description": "HTTP scope entry.", 230 + "anyOf": [ 231 + { 232 + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", 233 + "type": "string" 234 + }, 235 + { 236 + "type": "object", 237 + "required": [ 238 + "url" 239 + ], 240 + "properties": { 241 + "url": { 242 + "description": "A URL that can be accessed by the webview when using the HTTP APIs. Wildcards can be used following the URL pattern standard.\n\nSee [the URL Pattern spec](https://urlpattern.spec.whatwg.org/) for more information.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin on port 443\n\n- \"https://*:*\" : allows all HTTPS origin on any port\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"", 243 + "type": "string" 244 + } 245 + } 246 + } 247 + ] 248 + } 249 + } 250 + } 251 + }, 252 + "properties": { 253 + "identifier": { 254 + "description": "Identifier of the permission or permission set.", 255 + "allOf": [ 256 + { 257 + "$ref": "#/definitions/Identifier" 258 + } 259 + ] 260 + } 261 + } 262 + }, 263 + { 264 + "if": { 265 + "properties": { 266 + "identifier": { 267 + "anyOf": [ 268 + { 269 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 270 + "type": "string", 271 + "const": "shell:default", 272 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 273 + }, 274 + { 275 + "description": "Enables the execute command without any pre-configured scope.", 276 + "type": "string", 277 + "const": "shell:allow-execute", 278 + "markdownDescription": "Enables the execute command without any pre-configured scope." 279 + }, 280 + { 281 + "description": "Enables the kill command without any pre-configured scope.", 282 + "type": "string", 283 + "const": "shell:allow-kill", 284 + "markdownDescription": "Enables the kill command without any pre-configured scope." 285 + }, 286 + { 287 + "description": "Enables the open command without any pre-configured scope.", 288 + "type": "string", 289 + "const": "shell:allow-open", 290 + "markdownDescription": "Enables the open command without any pre-configured scope." 291 + }, 292 + { 293 + "description": "Enables the spawn command without any pre-configured scope.", 294 + "type": "string", 295 + "const": "shell:allow-spawn", 296 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 297 + }, 298 + { 299 + "description": "Enables the stdin_write command without any pre-configured scope.", 300 + "type": "string", 301 + "const": "shell:allow-stdin-write", 302 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 303 + }, 304 + { 305 + "description": "Denies the execute command without any pre-configured scope.", 306 + "type": "string", 307 + "const": "shell:deny-execute", 308 + "markdownDescription": "Denies the execute command without any pre-configured scope." 309 + }, 310 + { 311 + "description": "Denies the kill command without any pre-configured scope.", 312 + "type": "string", 313 + "const": "shell:deny-kill", 314 + "markdownDescription": "Denies the kill command without any pre-configured scope." 315 + }, 316 + { 317 + "description": "Denies the open command without any pre-configured scope.", 318 + "type": "string", 319 + "const": "shell:deny-open", 320 + "markdownDescription": "Denies the open command without any pre-configured scope." 321 + }, 322 + { 323 + "description": "Denies the spawn command without any pre-configured scope.", 324 + "type": "string", 325 + "const": "shell:deny-spawn", 326 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 327 + }, 328 + { 329 + "description": "Denies the stdin_write command without any pre-configured scope.", 330 + "type": "string", 331 + "const": "shell:deny-stdin-write", 332 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 333 + } 334 + ] 335 + } 336 + } 337 + }, 338 + "then": { 339 + "properties": { 340 + "allow": { 341 + "items": { 342 + "title": "ShellScopeEntry", 343 + "description": "Shell scope entry.", 344 + "anyOf": [ 345 + { 346 + "type": "object", 347 + "required": [ 348 + "cmd", 349 + "name" 350 + ], 351 + "properties": { 352 + "args": { 353 + "description": "The allowed arguments for the command execution.", 354 + "allOf": [ 355 + { 356 + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" 357 + } 358 + ] 359 + }, 360 + "cmd": { 361 + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", 362 + "type": "string" 363 + }, 364 + "name": { 365 + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", 366 + "type": "string" 367 + } 368 + }, 369 + "additionalProperties": false 370 + }, 371 + { 372 + "type": "object", 373 + "required": [ 374 + "name", 375 + "sidecar" 376 + ], 377 + "properties": { 378 + "args": { 379 + "description": "The allowed arguments for the command execution.", 380 + "allOf": [ 381 + { 382 + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" 383 + } 384 + ] 385 + }, 386 + "name": { 387 + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", 388 + "type": "string" 389 + }, 390 + "sidecar": { 391 + "description": "If this command is a sidecar command.", 392 + "type": "boolean" 393 + } 394 + }, 395 + "additionalProperties": false 396 + } 397 + ] 398 + } 399 + }, 400 + "deny": { 401 + "items": { 402 + "title": "ShellScopeEntry", 403 + "description": "Shell scope entry.", 404 + "anyOf": [ 405 + { 406 + "type": "object", 407 + "required": [ 408 + "cmd", 409 + "name" 410 + ], 411 + "properties": { 412 + "args": { 413 + "description": "The allowed arguments for the command execution.", 414 + "allOf": [ 415 + { 416 + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" 417 + } 418 + ] 419 + }, 420 + "cmd": { 421 + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", 422 + "type": "string" 423 + }, 424 + "name": { 425 + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", 426 + "type": "string" 427 + } 428 + }, 429 + "additionalProperties": false 430 + }, 431 + { 432 + "type": "object", 433 + "required": [ 434 + "name", 435 + "sidecar" 436 + ], 437 + "properties": { 438 + "args": { 439 + "description": "The allowed arguments for the command execution.", 440 + "allOf": [ 441 + { 442 + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" 443 + } 444 + ] 445 + }, 446 + "name": { 447 + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", 448 + "type": "string" 449 + }, 450 + "sidecar": { 451 + "description": "If this command is a sidecar command.", 452 + "type": "boolean" 453 + } 454 + }, 455 + "additionalProperties": false 456 + } 457 + ] 458 + } 459 + } 460 + } 461 + }, 462 + "properties": { 463 + "identifier": { 464 + "description": "Identifier of the permission or permission set.", 465 + "allOf": [ 466 + { 467 + "$ref": "#/definitions/Identifier" 468 + } 469 + ] 470 + } 471 + } 472 + }, 473 + { 474 + "properties": { 475 + "identifier": { 476 + "description": "Identifier of the permission or permission set.", 477 + "allOf": [ 478 + { 479 + "$ref": "#/definitions/Identifier" 480 + } 481 + ] 482 + }, 483 + "allow": { 484 + "description": "Data that defines what is allowed by the scope.", 485 + "type": [ 486 + "array", 487 + "null" 488 + ], 489 + "items": { 490 + "$ref": "#/definitions/Value" 491 + } 492 + }, 493 + "deny": { 494 + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", 495 + "type": [ 496 + "array", 497 + "null" 498 + ], 499 + "items": { 500 + "$ref": "#/definitions/Value" 501 + } 502 + } 503 + } 504 + } 505 + ], 506 + "required": [ 507 + "identifier" 508 + ] 509 + } 510 + ] 511 + }, 512 + "Identifier": { 513 + "description": "Permission identifier", 514 + "oneOf": [ 515 + { 516 + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", 517 + "type": "string", 518 + "const": "core:default", 519 + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 + }, 521 + { 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 + "type": "string", 524 + "const": "core:app:default", 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 + }, 527 + { 528 + "description": "Enables the app_hide command without any pre-configured scope.", 529 + "type": "string", 530 + "const": "core:app:allow-app-hide", 531 + "markdownDescription": "Enables the app_hide command without any pre-configured scope." 532 + }, 533 + { 534 + "description": "Enables the app_show command without any pre-configured scope.", 535 + "type": "string", 536 + "const": "core:app:allow-app-show", 537 + "markdownDescription": "Enables the app_show command without any pre-configured scope." 538 + }, 539 + { 540 + "description": "Enables the bundle_type command without any pre-configured scope.", 541 + "type": "string", 542 + "const": "core:app:allow-bundle-type", 543 + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." 544 + }, 545 + { 546 + "description": "Enables the default_window_icon command without any pre-configured scope.", 547 + "type": "string", 548 + "const": "core:app:allow-default-window-icon", 549 + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." 550 + }, 551 + { 552 + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", 553 + "type": "string", 554 + "const": "core:app:allow-fetch-data-store-identifiers", 555 + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." 556 + }, 557 + { 558 + "description": "Enables the identifier command without any pre-configured scope.", 559 + "type": "string", 560 + "const": "core:app:allow-identifier", 561 + "markdownDescription": "Enables the identifier command without any pre-configured scope." 562 + }, 563 + { 564 + "description": "Enables the name command without any pre-configured scope.", 565 + "type": "string", 566 + "const": "core:app:allow-name", 567 + "markdownDescription": "Enables the name command without any pre-configured scope." 568 + }, 569 + { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 576 + "description": "Enables the remove_data_store command without any pre-configured scope.", 577 + "type": "string", 578 + "const": "core:app:allow-remove-data-store", 579 + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 580 + }, 581 + { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 + }, 587 + { 588 + "description": "Enables the set_app_theme command without any pre-configured scope.", 589 + "type": "string", 590 + "const": "core:app:allow-set-app-theme", 591 + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." 592 + }, 593 + { 594 + "description": "Enables the set_dock_visibility command without any pre-configured scope.", 595 + "type": "string", 596 + "const": "core:app:allow-set-dock-visibility", 597 + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." 598 + }, 599 + { 600 + "description": "Enables the tauri_version command without any pre-configured scope.", 601 + "type": "string", 602 + "const": "core:app:allow-tauri-version", 603 + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." 604 + }, 605 + { 606 + "description": "Enables the version command without any pre-configured scope.", 607 + "type": "string", 608 + "const": "core:app:allow-version", 609 + "markdownDescription": "Enables the version command without any pre-configured scope." 610 + }, 611 + { 612 + "description": "Denies the app_hide command without any pre-configured scope.", 613 + "type": "string", 614 + "const": "core:app:deny-app-hide", 615 + "markdownDescription": "Denies the app_hide command without any pre-configured scope." 616 + }, 617 + { 618 + "description": "Denies the app_show command without any pre-configured scope.", 619 + "type": "string", 620 + "const": "core:app:deny-app-show", 621 + "markdownDescription": "Denies the app_show command without any pre-configured scope." 622 + }, 623 + { 624 + "description": "Denies the bundle_type command without any pre-configured scope.", 625 + "type": "string", 626 + "const": "core:app:deny-bundle-type", 627 + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." 628 + }, 629 + { 630 + "description": "Denies the default_window_icon command without any pre-configured scope.", 631 + "type": "string", 632 + "const": "core:app:deny-default-window-icon", 633 + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." 634 + }, 635 + { 636 + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", 637 + "type": "string", 638 + "const": "core:app:deny-fetch-data-store-identifiers", 639 + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." 640 + }, 641 + { 642 + "description": "Denies the identifier command without any pre-configured scope.", 643 + "type": "string", 644 + "const": "core:app:deny-identifier", 645 + "markdownDescription": "Denies the identifier command without any pre-configured scope." 646 + }, 647 + { 648 + "description": "Denies the name command without any pre-configured scope.", 649 + "type": "string", 650 + "const": "core:app:deny-name", 651 + "markdownDescription": "Denies the name command without any pre-configured scope." 652 + }, 653 + { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 660 + "description": "Denies the remove_data_store command without any pre-configured scope.", 661 + "type": "string", 662 + "const": "core:app:deny-remove-data-store", 663 + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 670 + }, 671 + { 672 + "description": "Denies the set_app_theme command without any pre-configured scope.", 673 + "type": "string", 674 + "const": "core:app:deny-set-app-theme", 675 + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." 676 + }, 677 + { 678 + "description": "Denies the set_dock_visibility command without any pre-configured scope.", 679 + "type": "string", 680 + "const": "core:app:deny-set-dock-visibility", 681 + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." 682 + }, 683 + { 684 + "description": "Denies the tauri_version command without any pre-configured scope.", 685 + "type": "string", 686 + "const": "core:app:deny-tauri-version", 687 + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." 688 + }, 689 + { 690 + "description": "Denies the version command without any pre-configured scope.", 691 + "type": "string", 692 + "const": "core:app:deny-version", 693 + "markdownDescription": "Denies the version command without any pre-configured scope." 694 + }, 695 + { 696 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", 697 + "type": "string", 698 + "const": "core:event:default", 699 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" 700 + }, 701 + { 702 + "description": "Enables the emit command without any pre-configured scope.", 703 + "type": "string", 704 + "const": "core:event:allow-emit", 705 + "markdownDescription": "Enables the emit command without any pre-configured scope." 706 + }, 707 + { 708 + "description": "Enables the emit_to command without any pre-configured scope.", 709 + "type": "string", 710 + "const": "core:event:allow-emit-to", 711 + "markdownDescription": "Enables the emit_to command without any pre-configured scope." 712 + }, 713 + { 714 + "description": "Enables the listen command without any pre-configured scope.", 715 + "type": "string", 716 + "const": "core:event:allow-listen", 717 + "markdownDescription": "Enables the listen command without any pre-configured scope." 718 + }, 719 + { 720 + "description": "Enables the unlisten command without any pre-configured scope.", 721 + "type": "string", 722 + "const": "core:event:allow-unlisten", 723 + "markdownDescription": "Enables the unlisten command without any pre-configured scope." 724 + }, 725 + { 726 + "description": "Denies the emit command without any pre-configured scope.", 727 + "type": "string", 728 + "const": "core:event:deny-emit", 729 + "markdownDescription": "Denies the emit command without any pre-configured scope." 730 + }, 731 + { 732 + "description": "Denies the emit_to command without any pre-configured scope.", 733 + "type": "string", 734 + "const": "core:event:deny-emit-to", 735 + "markdownDescription": "Denies the emit_to command without any pre-configured scope." 736 + }, 737 + { 738 + "description": "Denies the listen command without any pre-configured scope.", 739 + "type": "string", 740 + "const": "core:event:deny-listen", 741 + "markdownDescription": "Denies the listen command without any pre-configured scope." 742 + }, 743 + { 744 + "description": "Denies the unlisten command without any pre-configured scope.", 745 + "type": "string", 746 + "const": "core:event:deny-unlisten", 747 + "markdownDescription": "Denies the unlisten command without any pre-configured scope." 748 + }, 749 + { 750 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", 751 + "type": "string", 752 + "const": "core:image:default", 753 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" 754 + }, 755 + { 756 + "description": "Enables the from_bytes command without any pre-configured scope.", 757 + "type": "string", 758 + "const": "core:image:allow-from-bytes", 759 + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." 760 + }, 761 + { 762 + "description": "Enables the from_path command without any pre-configured scope.", 763 + "type": "string", 764 + "const": "core:image:allow-from-path", 765 + "markdownDescription": "Enables the from_path command without any pre-configured scope." 766 + }, 767 + { 768 + "description": "Enables the new command without any pre-configured scope.", 769 + "type": "string", 770 + "const": "core:image:allow-new", 771 + "markdownDescription": "Enables the new command without any pre-configured scope." 772 + }, 773 + { 774 + "description": "Enables the rgba command without any pre-configured scope.", 775 + "type": "string", 776 + "const": "core:image:allow-rgba", 777 + "markdownDescription": "Enables the rgba command without any pre-configured scope." 778 + }, 779 + { 780 + "description": "Enables the size command without any pre-configured scope.", 781 + "type": "string", 782 + "const": "core:image:allow-size", 783 + "markdownDescription": "Enables the size command without any pre-configured scope." 784 + }, 785 + { 786 + "description": "Denies the from_bytes command without any pre-configured scope.", 787 + "type": "string", 788 + "const": "core:image:deny-from-bytes", 789 + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." 790 + }, 791 + { 792 + "description": "Denies the from_path command without any pre-configured scope.", 793 + "type": "string", 794 + "const": "core:image:deny-from-path", 795 + "markdownDescription": "Denies the from_path command without any pre-configured scope." 796 + }, 797 + { 798 + "description": "Denies the new command without any pre-configured scope.", 799 + "type": "string", 800 + "const": "core:image:deny-new", 801 + "markdownDescription": "Denies the new command without any pre-configured scope." 802 + }, 803 + { 804 + "description": "Denies the rgba command without any pre-configured scope.", 805 + "type": "string", 806 + "const": "core:image:deny-rgba", 807 + "markdownDescription": "Denies the rgba command without any pre-configured scope." 808 + }, 809 + { 810 + "description": "Denies the size command without any pre-configured scope.", 811 + "type": "string", 812 + "const": "core:image:deny-size", 813 + "markdownDescription": "Denies the size command without any pre-configured scope." 814 + }, 815 + { 816 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", 817 + "type": "string", 818 + "const": "core:menu:default", 819 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" 820 + }, 821 + { 822 + "description": "Enables the append command without any pre-configured scope.", 823 + "type": "string", 824 + "const": "core:menu:allow-append", 825 + "markdownDescription": "Enables the append command without any pre-configured scope." 826 + }, 827 + { 828 + "description": "Enables the create_default command without any pre-configured scope.", 829 + "type": "string", 830 + "const": "core:menu:allow-create-default", 831 + "markdownDescription": "Enables the create_default command without any pre-configured scope." 832 + }, 833 + { 834 + "description": "Enables the get command without any pre-configured scope.", 835 + "type": "string", 836 + "const": "core:menu:allow-get", 837 + "markdownDescription": "Enables the get command without any pre-configured scope." 838 + }, 839 + { 840 + "description": "Enables the insert command without any pre-configured scope.", 841 + "type": "string", 842 + "const": "core:menu:allow-insert", 843 + "markdownDescription": "Enables the insert command without any pre-configured scope." 844 + }, 845 + { 846 + "description": "Enables the is_checked command without any pre-configured scope.", 847 + "type": "string", 848 + "const": "core:menu:allow-is-checked", 849 + "markdownDescription": "Enables the is_checked command without any pre-configured scope." 850 + }, 851 + { 852 + "description": "Enables the is_enabled command without any pre-configured scope.", 853 + "type": "string", 854 + "const": "core:menu:allow-is-enabled", 855 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 856 + }, 857 + { 858 + "description": "Enables the items command without any pre-configured scope.", 859 + "type": "string", 860 + "const": "core:menu:allow-items", 861 + "markdownDescription": "Enables the items command without any pre-configured scope." 862 + }, 863 + { 864 + "description": "Enables the new command without any pre-configured scope.", 865 + "type": "string", 866 + "const": "core:menu:allow-new", 867 + "markdownDescription": "Enables the new command without any pre-configured scope." 868 + }, 869 + { 870 + "description": "Enables the popup command without any pre-configured scope.", 871 + "type": "string", 872 + "const": "core:menu:allow-popup", 873 + "markdownDescription": "Enables the popup command without any pre-configured scope." 874 + }, 875 + { 876 + "description": "Enables the prepend command without any pre-configured scope.", 877 + "type": "string", 878 + "const": "core:menu:allow-prepend", 879 + "markdownDescription": "Enables the prepend command without any pre-configured scope." 880 + }, 881 + { 882 + "description": "Enables the remove command without any pre-configured scope.", 883 + "type": "string", 884 + "const": "core:menu:allow-remove", 885 + "markdownDescription": "Enables the remove command without any pre-configured scope." 886 + }, 887 + { 888 + "description": "Enables the remove_at command without any pre-configured scope.", 889 + "type": "string", 890 + "const": "core:menu:allow-remove-at", 891 + "markdownDescription": "Enables the remove_at command without any pre-configured scope." 892 + }, 893 + { 894 + "description": "Enables the set_accelerator command without any pre-configured scope.", 895 + "type": "string", 896 + "const": "core:menu:allow-set-accelerator", 897 + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." 898 + }, 899 + { 900 + "description": "Enables the set_as_app_menu command without any pre-configured scope.", 901 + "type": "string", 902 + "const": "core:menu:allow-set-as-app-menu", 903 + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." 904 + }, 905 + { 906 + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 907 + "type": "string", 908 + "const": "core:menu:allow-set-as-help-menu-for-nsapp", 909 + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." 910 + }, 911 + { 912 + "description": "Enables the set_as_window_menu command without any pre-configured scope.", 913 + "type": "string", 914 + "const": "core:menu:allow-set-as-window-menu", 915 + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." 916 + }, 917 + { 918 + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 919 + "type": "string", 920 + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", 921 + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." 922 + }, 923 + { 924 + "description": "Enables the set_checked command without any pre-configured scope.", 925 + "type": "string", 926 + "const": "core:menu:allow-set-checked", 927 + "markdownDescription": "Enables the set_checked command without any pre-configured scope." 928 + }, 929 + { 930 + "description": "Enables the set_enabled command without any pre-configured scope.", 931 + "type": "string", 932 + "const": "core:menu:allow-set-enabled", 933 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 934 + }, 935 + { 936 + "description": "Enables the set_icon command without any pre-configured scope.", 937 + "type": "string", 938 + "const": "core:menu:allow-set-icon", 939 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 940 + }, 941 + { 942 + "description": "Enables the set_text command without any pre-configured scope.", 943 + "type": "string", 944 + "const": "core:menu:allow-set-text", 945 + "markdownDescription": "Enables the set_text command without any pre-configured scope." 946 + }, 947 + { 948 + "description": "Enables the text command without any pre-configured scope.", 949 + "type": "string", 950 + "const": "core:menu:allow-text", 951 + "markdownDescription": "Enables the text command without any pre-configured scope." 952 + }, 953 + { 954 + "description": "Denies the append command without any pre-configured scope.", 955 + "type": "string", 956 + "const": "core:menu:deny-append", 957 + "markdownDescription": "Denies the append command without any pre-configured scope." 958 + }, 959 + { 960 + "description": "Denies the create_default command without any pre-configured scope.", 961 + "type": "string", 962 + "const": "core:menu:deny-create-default", 963 + "markdownDescription": "Denies the create_default command without any pre-configured scope." 964 + }, 965 + { 966 + "description": "Denies the get command without any pre-configured scope.", 967 + "type": "string", 968 + "const": "core:menu:deny-get", 969 + "markdownDescription": "Denies the get command without any pre-configured scope." 970 + }, 971 + { 972 + "description": "Denies the insert command without any pre-configured scope.", 973 + "type": "string", 974 + "const": "core:menu:deny-insert", 975 + "markdownDescription": "Denies the insert command without any pre-configured scope." 976 + }, 977 + { 978 + "description": "Denies the is_checked command without any pre-configured scope.", 979 + "type": "string", 980 + "const": "core:menu:deny-is-checked", 981 + "markdownDescription": "Denies the is_checked command without any pre-configured scope." 982 + }, 983 + { 984 + "description": "Denies the is_enabled command without any pre-configured scope.", 985 + "type": "string", 986 + "const": "core:menu:deny-is-enabled", 987 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 988 + }, 989 + { 990 + "description": "Denies the items command without any pre-configured scope.", 991 + "type": "string", 992 + "const": "core:menu:deny-items", 993 + "markdownDescription": "Denies the items command without any pre-configured scope." 994 + }, 995 + { 996 + "description": "Denies the new command without any pre-configured scope.", 997 + "type": "string", 998 + "const": "core:menu:deny-new", 999 + "markdownDescription": "Denies the new command without any pre-configured scope." 1000 + }, 1001 + { 1002 + "description": "Denies the popup command without any pre-configured scope.", 1003 + "type": "string", 1004 + "const": "core:menu:deny-popup", 1005 + "markdownDescription": "Denies the popup command without any pre-configured scope." 1006 + }, 1007 + { 1008 + "description": "Denies the prepend command without any pre-configured scope.", 1009 + "type": "string", 1010 + "const": "core:menu:deny-prepend", 1011 + "markdownDescription": "Denies the prepend command without any pre-configured scope." 1012 + }, 1013 + { 1014 + "description": "Denies the remove command without any pre-configured scope.", 1015 + "type": "string", 1016 + "const": "core:menu:deny-remove", 1017 + "markdownDescription": "Denies the remove command without any pre-configured scope." 1018 + }, 1019 + { 1020 + "description": "Denies the remove_at command without any pre-configured scope.", 1021 + "type": "string", 1022 + "const": "core:menu:deny-remove-at", 1023 + "markdownDescription": "Denies the remove_at command without any pre-configured scope." 1024 + }, 1025 + { 1026 + "description": "Denies the set_accelerator command without any pre-configured scope.", 1027 + "type": "string", 1028 + "const": "core:menu:deny-set-accelerator", 1029 + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." 1030 + }, 1031 + { 1032 + "description": "Denies the set_as_app_menu command without any pre-configured scope.", 1033 + "type": "string", 1034 + "const": "core:menu:deny-set-as-app-menu", 1035 + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." 1036 + }, 1037 + { 1038 + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 1039 + "type": "string", 1040 + "const": "core:menu:deny-set-as-help-menu-for-nsapp", 1041 + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." 1042 + }, 1043 + { 1044 + "description": "Denies the set_as_window_menu command without any pre-configured scope.", 1045 + "type": "string", 1046 + "const": "core:menu:deny-set-as-window-menu", 1047 + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." 1048 + }, 1049 + { 1050 + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 1051 + "type": "string", 1052 + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", 1053 + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." 1054 + }, 1055 + { 1056 + "description": "Denies the set_checked command without any pre-configured scope.", 1057 + "type": "string", 1058 + "const": "core:menu:deny-set-checked", 1059 + "markdownDescription": "Denies the set_checked command without any pre-configured scope." 1060 + }, 1061 + { 1062 + "description": "Denies the set_enabled command without any pre-configured scope.", 1063 + "type": "string", 1064 + "const": "core:menu:deny-set-enabled", 1065 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 1066 + }, 1067 + { 1068 + "description": "Denies the set_icon command without any pre-configured scope.", 1069 + "type": "string", 1070 + "const": "core:menu:deny-set-icon", 1071 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1072 + }, 1073 + { 1074 + "description": "Denies the set_text command without any pre-configured scope.", 1075 + "type": "string", 1076 + "const": "core:menu:deny-set-text", 1077 + "markdownDescription": "Denies the set_text command without any pre-configured scope." 1078 + }, 1079 + { 1080 + "description": "Denies the text command without any pre-configured scope.", 1081 + "type": "string", 1082 + "const": "core:menu:deny-text", 1083 + "markdownDescription": "Denies the text command without any pre-configured scope." 1084 + }, 1085 + { 1086 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", 1087 + "type": "string", 1088 + "const": "core:path:default", 1089 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" 1090 + }, 1091 + { 1092 + "description": "Enables the basename command without any pre-configured scope.", 1093 + "type": "string", 1094 + "const": "core:path:allow-basename", 1095 + "markdownDescription": "Enables the basename command without any pre-configured scope." 1096 + }, 1097 + { 1098 + "description": "Enables the dirname command without any pre-configured scope.", 1099 + "type": "string", 1100 + "const": "core:path:allow-dirname", 1101 + "markdownDescription": "Enables the dirname command without any pre-configured scope." 1102 + }, 1103 + { 1104 + "description": "Enables the extname command without any pre-configured scope.", 1105 + "type": "string", 1106 + "const": "core:path:allow-extname", 1107 + "markdownDescription": "Enables the extname command without any pre-configured scope." 1108 + }, 1109 + { 1110 + "description": "Enables the is_absolute command without any pre-configured scope.", 1111 + "type": "string", 1112 + "const": "core:path:allow-is-absolute", 1113 + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." 1114 + }, 1115 + { 1116 + "description": "Enables the join command without any pre-configured scope.", 1117 + "type": "string", 1118 + "const": "core:path:allow-join", 1119 + "markdownDescription": "Enables the join command without any pre-configured scope." 1120 + }, 1121 + { 1122 + "description": "Enables the normalize command without any pre-configured scope.", 1123 + "type": "string", 1124 + "const": "core:path:allow-normalize", 1125 + "markdownDescription": "Enables the normalize command without any pre-configured scope." 1126 + }, 1127 + { 1128 + "description": "Enables the resolve command without any pre-configured scope.", 1129 + "type": "string", 1130 + "const": "core:path:allow-resolve", 1131 + "markdownDescription": "Enables the resolve command without any pre-configured scope." 1132 + }, 1133 + { 1134 + "description": "Enables the resolve_directory command without any pre-configured scope.", 1135 + "type": "string", 1136 + "const": "core:path:allow-resolve-directory", 1137 + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." 1138 + }, 1139 + { 1140 + "description": "Denies the basename command without any pre-configured scope.", 1141 + "type": "string", 1142 + "const": "core:path:deny-basename", 1143 + "markdownDescription": "Denies the basename command without any pre-configured scope." 1144 + }, 1145 + { 1146 + "description": "Denies the dirname command without any pre-configured scope.", 1147 + "type": "string", 1148 + "const": "core:path:deny-dirname", 1149 + "markdownDescription": "Denies the dirname command without any pre-configured scope." 1150 + }, 1151 + { 1152 + "description": "Denies the extname command without any pre-configured scope.", 1153 + "type": "string", 1154 + "const": "core:path:deny-extname", 1155 + "markdownDescription": "Denies the extname command without any pre-configured scope." 1156 + }, 1157 + { 1158 + "description": "Denies the is_absolute command without any pre-configured scope.", 1159 + "type": "string", 1160 + "const": "core:path:deny-is-absolute", 1161 + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." 1162 + }, 1163 + { 1164 + "description": "Denies the join command without any pre-configured scope.", 1165 + "type": "string", 1166 + "const": "core:path:deny-join", 1167 + "markdownDescription": "Denies the join command without any pre-configured scope." 1168 + }, 1169 + { 1170 + "description": "Denies the normalize command without any pre-configured scope.", 1171 + "type": "string", 1172 + "const": "core:path:deny-normalize", 1173 + "markdownDescription": "Denies the normalize command without any pre-configured scope." 1174 + }, 1175 + { 1176 + "description": "Denies the resolve command without any pre-configured scope.", 1177 + "type": "string", 1178 + "const": "core:path:deny-resolve", 1179 + "markdownDescription": "Denies the resolve command without any pre-configured scope." 1180 + }, 1181 + { 1182 + "description": "Denies the resolve_directory command without any pre-configured scope.", 1183 + "type": "string", 1184 + "const": "core:path:deny-resolve-directory", 1185 + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." 1186 + }, 1187 + { 1188 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", 1189 + "type": "string", 1190 + "const": "core:resources:default", 1191 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" 1192 + }, 1193 + { 1194 + "description": "Enables the close command without any pre-configured scope.", 1195 + "type": "string", 1196 + "const": "core:resources:allow-close", 1197 + "markdownDescription": "Enables the close command without any pre-configured scope." 1198 + }, 1199 + { 1200 + "description": "Denies the close command without any pre-configured scope.", 1201 + "type": "string", 1202 + "const": "core:resources:deny-close", 1203 + "markdownDescription": "Denies the close command without any pre-configured scope." 1204 + }, 1205 + { 1206 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`", 1207 + "type": "string", 1208 + "const": "core:tray:default", 1209 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`" 1210 + }, 1211 + { 1212 + "description": "Enables the get_by_id command without any pre-configured scope.", 1213 + "type": "string", 1214 + "const": "core:tray:allow-get-by-id", 1215 + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." 1216 + }, 1217 + { 1218 + "description": "Enables the new command without any pre-configured scope.", 1219 + "type": "string", 1220 + "const": "core:tray:allow-new", 1221 + "markdownDescription": "Enables the new command without any pre-configured scope." 1222 + }, 1223 + { 1224 + "description": "Enables the remove_by_id command without any pre-configured scope.", 1225 + "type": "string", 1226 + "const": "core:tray:allow-remove-by-id", 1227 + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." 1228 + }, 1229 + { 1230 + "description": "Enables the set_icon command without any pre-configured scope.", 1231 + "type": "string", 1232 + "const": "core:tray:allow-set-icon", 1233 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1234 + }, 1235 + { 1236 + "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1237 + "type": "string", 1238 + "const": "core:tray:allow-set-icon-as-template", 1239 + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." 1240 + }, 1241 + { 1242 + "description": "Enables the set_menu command without any pre-configured scope.", 1243 + "type": "string", 1244 + "const": "core:tray:allow-set-menu", 1245 + "markdownDescription": "Enables the set_menu command without any pre-configured scope." 1246 + }, 1247 + { 1248 + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1249 + "type": "string", 1250 + "const": "core:tray:allow-set-show-menu-on-left-click", 1251 + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." 1252 + }, 1253 + { 1254 + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1255 + "type": "string", 1256 + "const": "core:tray:allow-set-temp-dir-path", 1257 + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." 1258 + }, 1259 + { 1260 + "description": "Enables the set_title command without any pre-configured scope.", 1261 + "type": "string", 1262 + "const": "core:tray:allow-set-title", 1263 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1264 + }, 1265 + { 1266 + "description": "Enables the set_tooltip command without any pre-configured scope.", 1267 + "type": "string", 1268 + "const": "core:tray:allow-set-tooltip", 1269 + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." 1270 + }, 1271 + { 1272 + "description": "Enables the set_visible command without any pre-configured scope.", 1273 + "type": "string", 1274 + "const": "core:tray:allow-set-visible", 1275 + "markdownDescription": "Enables the set_visible command without any pre-configured scope." 1276 + }, 1277 + { 1278 + "description": "Denies the get_by_id command without any pre-configured scope.", 1279 + "type": "string", 1280 + "const": "core:tray:deny-get-by-id", 1281 + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." 1282 + }, 1283 + { 1284 + "description": "Denies the new command without any pre-configured scope.", 1285 + "type": "string", 1286 + "const": "core:tray:deny-new", 1287 + "markdownDescription": "Denies the new command without any pre-configured scope." 1288 + }, 1289 + { 1290 + "description": "Denies the remove_by_id command without any pre-configured scope.", 1291 + "type": "string", 1292 + "const": "core:tray:deny-remove-by-id", 1293 + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." 1294 + }, 1295 + { 1296 + "description": "Denies the set_icon command without any pre-configured scope.", 1297 + "type": "string", 1298 + "const": "core:tray:deny-set-icon", 1299 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1300 + }, 1301 + { 1302 + "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1303 + "type": "string", 1304 + "const": "core:tray:deny-set-icon-as-template", 1305 + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." 1306 + }, 1307 + { 1308 + "description": "Denies the set_menu command without any pre-configured scope.", 1309 + "type": "string", 1310 + "const": "core:tray:deny-set-menu", 1311 + "markdownDescription": "Denies the set_menu command without any pre-configured scope." 1312 + }, 1313 + { 1314 + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1315 + "type": "string", 1316 + "const": "core:tray:deny-set-show-menu-on-left-click", 1317 + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." 1318 + }, 1319 + { 1320 + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1321 + "type": "string", 1322 + "const": "core:tray:deny-set-temp-dir-path", 1323 + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." 1324 + }, 1325 + { 1326 + "description": "Denies the set_title command without any pre-configured scope.", 1327 + "type": "string", 1328 + "const": "core:tray:deny-set-title", 1329 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1330 + }, 1331 + { 1332 + "description": "Denies the set_tooltip command without any pre-configured scope.", 1333 + "type": "string", 1334 + "const": "core:tray:deny-set-tooltip", 1335 + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." 1336 + }, 1337 + { 1338 + "description": "Denies the set_visible command without any pre-configured scope.", 1339 + "type": "string", 1340 + "const": "core:tray:deny-set-visible", 1341 + "markdownDescription": "Denies the set_visible command without any pre-configured scope." 1342 + }, 1343 + { 1344 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", 1345 + "type": "string", 1346 + "const": "core:webview:default", 1347 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" 1348 + }, 1349 + { 1350 + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1351 + "type": "string", 1352 + "const": "core:webview:allow-clear-all-browsing-data", 1353 + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." 1354 + }, 1355 + { 1356 + "description": "Enables the create_webview command without any pre-configured scope.", 1357 + "type": "string", 1358 + "const": "core:webview:allow-create-webview", 1359 + "markdownDescription": "Enables the create_webview command without any pre-configured scope." 1360 + }, 1361 + { 1362 + "description": "Enables the create_webview_window command without any pre-configured scope.", 1363 + "type": "string", 1364 + "const": "core:webview:allow-create-webview-window", 1365 + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." 1366 + }, 1367 + { 1368 + "description": "Enables the get_all_webviews command without any pre-configured scope.", 1369 + "type": "string", 1370 + "const": "core:webview:allow-get-all-webviews", 1371 + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." 1372 + }, 1373 + { 1374 + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1375 + "type": "string", 1376 + "const": "core:webview:allow-internal-toggle-devtools", 1377 + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." 1378 + }, 1379 + { 1380 + "description": "Enables the print command without any pre-configured scope.", 1381 + "type": "string", 1382 + "const": "core:webview:allow-print", 1383 + "markdownDescription": "Enables the print command without any pre-configured scope." 1384 + }, 1385 + { 1386 + "description": "Enables the reparent command without any pre-configured scope.", 1387 + "type": "string", 1388 + "const": "core:webview:allow-reparent", 1389 + "markdownDescription": "Enables the reparent command without any pre-configured scope." 1390 + }, 1391 + { 1392 + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", 1393 + "type": "string", 1394 + "const": "core:webview:allow-set-webview-auto-resize", 1395 + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." 1396 + }, 1397 + { 1398 + "description": "Enables the set_webview_background_color command without any pre-configured scope.", 1399 + "type": "string", 1400 + "const": "core:webview:allow-set-webview-background-color", 1401 + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." 1402 + }, 1403 + { 1404 + "description": "Enables the set_webview_focus command without any pre-configured scope.", 1405 + "type": "string", 1406 + "const": "core:webview:allow-set-webview-focus", 1407 + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." 1408 + }, 1409 + { 1410 + "description": "Enables the set_webview_position command without any pre-configured scope.", 1411 + "type": "string", 1412 + "const": "core:webview:allow-set-webview-position", 1413 + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." 1414 + }, 1415 + { 1416 + "description": "Enables the set_webview_size command without any pre-configured scope.", 1417 + "type": "string", 1418 + "const": "core:webview:allow-set-webview-size", 1419 + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." 1420 + }, 1421 + { 1422 + "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1423 + "type": "string", 1424 + "const": "core:webview:allow-set-webview-zoom", 1425 + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." 1426 + }, 1427 + { 1428 + "description": "Enables the webview_close command without any pre-configured scope.", 1429 + "type": "string", 1430 + "const": "core:webview:allow-webview-close", 1431 + "markdownDescription": "Enables the webview_close command without any pre-configured scope." 1432 + }, 1433 + { 1434 + "description": "Enables the webview_hide command without any pre-configured scope.", 1435 + "type": "string", 1436 + "const": "core:webview:allow-webview-hide", 1437 + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." 1438 + }, 1439 + { 1440 + "description": "Enables the webview_position command without any pre-configured scope.", 1441 + "type": "string", 1442 + "const": "core:webview:allow-webview-position", 1443 + "markdownDescription": "Enables the webview_position command without any pre-configured scope." 1444 + }, 1445 + { 1446 + "description": "Enables the webview_show command without any pre-configured scope.", 1447 + "type": "string", 1448 + "const": "core:webview:allow-webview-show", 1449 + "markdownDescription": "Enables the webview_show command without any pre-configured scope." 1450 + }, 1451 + { 1452 + "description": "Enables the webview_size command without any pre-configured scope.", 1453 + "type": "string", 1454 + "const": "core:webview:allow-webview-size", 1455 + "markdownDescription": "Enables the webview_size command without any pre-configured scope." 1456 + }, 1457 + { 1458 + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1459 + "type": "string", 1460 + "const": "core:webview:deny-clear-all-browsing-data", 1461 + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." 1462 + }, 1463 + { 1464 + "description": "Denies the create_webview command without any pre-configured scope.", 1465 + "type": "string", 1466 + "const": "core:webview:deny-create-webview", 1467 + "markdownDescription": "Denies the create_webview command without any pre-configured scope." 1468 + }, 1469 + { 1470 + "description": "Denies the create_webview_window command without any pre-configured scope.", 1471 + "type": "string", 1472 + "const": "core:webview:deny-create-webview-window", 1473 + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." 1474 + }, 1475 + { 1476 + "description": "Denies the get_all_webviews command without any pre-configured scope.", 1477 + "type": "string", 1478 + "const": "core:webview:deny-get-all-webviews", 1479 + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." 1480 + }, 1481 + { 1482 + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1483 + "type": "string", 1484 + "const": "core:webview:deny-internal-toggle-devtools", 1485 + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." 1486 + }, 1487 + { 1488 + "description": "Denies the print command without any pre-configured scope.", 1489 + "type": "string", 1490 + "const": "core:webview:deny-print", 1491 + "markdownDescription": "Denies the print command without any pre-configured scope." 1492 + }, 1493 + { 1494 + "description": "Denies the reparent command without any pre-configured scope.", 1495 + "type": "string", 1496 + "const": "core:webview:deny-reparent", 1497 + "markdownDescription": "Denies the reparent command without any pre-configured scope." 1498 + }, 1499 + { 1500 + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", 1501 + "type": "string", 1502 + "const": "core:webview:deny-set-webview-auto-resize", 1503 + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." 1504 + }, 1505 + { 1506 + "description": "Denies the set_webview_background_color command without any pre-configured scope.", 1507 + "type": "string", 1508 + "const": "core:webview:deny-set-webview-background-color", 1509 + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." 1510 + }, 1511 + { 1512 + "description": "Denies the set_webview_focus command without any pre-configured scope.", 1513 + "type": "string", 1514 + "const": "core:webview:deny-set-webview-focus", 1515 + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." 1516 + }, 1517 + { 1518 + "description": "Denies the set_webview_position command without any pre-configured scope.", 1519 + "type": "string", 1520 + "const": "core:webview:deny-set-webview-position", 1521 + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." 1522 + }, 1523 + { 1524 + "description": "Denies the set_webview_size command without any pre-configured scope.", 1525 + "type": "string", 1526 + "const": "core:webview:deny-set-webview-size", 1527 + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." 1528 + }, 1529 + { 1530 + "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1531 + "type": "string", 1532 + "const": "core:webview:deny-set-webview-zoom", 1533 + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." 1534 + }, 1535 + { 1536 + "description": "Denies the webview_close command without any pre-configured scope.", 1537 + "type": "string", 1538 + "const": "core:webview:deny-webview-close", 1539 + "markdownDescription": "Denies the webview_close command without any pre-configured scope." 1540 + }, 1541 + { 1542 + "description": "Denies the webview_hide command without any pre-configured scope.", 1543 + "type": "string", 1544 + "const": "core:webview:deny-webview-hide", 1545 + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." 1546 + }, 1547 + { 1548 + "description": "Denies the webview_position command without any pre-configured scope.", 1549 + "type": "string", 1550 + "const": "core:webview:deny-webview-position", 1551 + "markdownDescription": "Denies the webview_position command without any pre-configured scope." 1552 + }, 1553 + { 1554 + "description": "Denies the webview_show command without any pre-configured scope.", 1555 + "type": "string", 1556 + "const": "core:webview:deny-webview-show", 1557 + "markdownDescription": "Denies the webview_show command without any pre-configured scope." 1558 + }, 1559 + { 1560 + "description": "Denies the webview_size command without any pre-configured scope.", 1561 + "type": "string", 1562 + "const": "core:webview:deny-webview-size", 1563 + "markdownDescription": "Denies the webview_size command without any pre-configured scope." 1564 + }, 1565 + { 1566 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`", 1567 + "type": "string", 1568 + "const": "core:window:default", 1569 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`" 1570 + }, 1571 + { 1572 + "description": "Enables the available_monitors command without any pre-configured scope.", 1573 + "type": "string", 1574 + "const": "core:window:allow-available-monitors", 1575 + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." 1576 + }, 1577 + { 1578 + "description": "Enables the center command without any pre-configured scope.", 1579 + "type": "string", 1580 + "const": "core:window:allow-center", 1581 + "markdownDescription": "Enables the center command without any pre-configured scope." 1582 + }, 1583 + { 1584 + "description": "Enables the close command without any pre-configured scope.", 1585 + "type": "string", 1586 + "const": "core:window:allow-close", 1587 + "markdownDescription": "Enables the close command without any pre-configured scope." 1588 + }, 1589 + { 1590 + "description": "Enables the create command without any pre-configured scope.", 1591 + "type": "string", 1592 + "const": "core:window:allow-create", 1593 + "markdownDescription": "Enables the create command without any pre-configured scope." 1594 + }, 1595 + { 1596 + "description": "Enables the current_monitor command without any pre-configured scope.", 1597 + "type": "string", 1598 + "const": "core:window:allow-current-monitor", 1599 + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." 1600 + }, 1601 + { 1602 + "description": "Enables the cursor_position command without any pre-configured scope.", 1603 + "type": "string", 1604 + "const": "core:window:allow-cursor-position", 1605 + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." 1606 + }, 1607 + { 1608 + "description": "Enables the destroy command without any pre-configured scope.", 1609 + "type": "string", 1610 + "const": "core:window:allow-destroy", 1611 + "markdownDescription": "Enables the destroy command without any pre-configured scope." 1612 + }, 1613 + { 1614 + "description": "Enables the get_all_windows command without any pre-configured scope.", 1615 + "type": "string", 1616 + "const": "core:window:allow-get-all-windows", 1617 + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." 1618 + }, 1619 + { 1620 + "description": "Enables the hide command without any pre-configured scope.", 1621 + "type": "string", 1622 + "const": "core:window:allow-hide", 1623 + "markdownDescription": "Enables the hide command without any pre-configured scope." 1624 + }, 1625 + { 1626 + "description": "Enables the inner_position command without any pre-configured scope.", 1627 + "type": "string", 1628 + "const": "core:window:allow-inner-position", 1629 + "markdownDescription": "Enables the inner_position command without any pre-configured scope." 1630 + }, 1631 + { 1632 + "description": "Enables the inner_size command without any pre-configured scope.", 1633 + "type": "string", 1634 + "const": "core:window:allow-inner-size", 1635 + "markdownDescription": "Enables the inner_size command without any pre-configured scope." 1636 + }, 1637 + { 1638 + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1639 + "type": "string", 1640 + "const": "core:window:allow-internal-toggle-maximize", 1641 + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." 1642 + }, 1643 + { 1644 + "description": "Enables the is_always_on_top command without any pre-configured scope.", 1645 + "type": "string", 1646 + "const": "core:window:allow-is-always-on-top", 1647 + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." 1648 + }, 1649 + { 1650 + "description": "Enables the is_closable command without any pre-configured scope.", 1651 + "type": "string", 1652 + "const": "core:window:allow-is-closable", 1653 + "markdownDescription": "Enables the is_closable command without any pre-configured scope." 1654 + }, 1655 + { 1656 + "description": "Enables the is_decorated command without any pre-configured scope.", 1657 + "type": "string", 1658 + "const": "core:window:allow-is-decorated", 1659 + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." 1660 + }, 1661 + { 1662 + "description": "Enables the is_enabled command without any pre-configured scope.", 1663 + "type": "string", 1664 + "const": "core:window:allow-is-enabled", 1665 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 1666 + }, 1667 + { 1668 + "description": "Enables the is_focused command without any pre-configured scope.", 1669 + "type": "string", 1670 + "const": "core:window:allow-is-focused", 1671 + "markdownDescription": "Enables the is_focused command without any pre-configured scope." 1672 + }, 1673 + { 1674 + "description": "Enables the is_fullscreen command without any pre-configured scope.", 1675 + "type": "string", 1676 + "const": "core:window:allow-is-fullscreen", 1677 + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." 1678 + }, 1679 + { 1680 + "description": "Enables the is_maximizable command without any pre-configured scope.", 1681 + "type": "string", 1682 + "const": "core:window:allow-is-maximizable", 1683 + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." 1684 + }, 1685 + { 1686 + "description": "Enables the is_maximized command without any pre-configured scope.", 1687 + "type": "string", 1688 + "const": "core:window:allow-is-maximized", 1689 + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." 1690 + }, 1691 + { 1692 + "description": "Enables the is_minimizable command without any pre-configured scope.", 1693 + "type": "string", 1694 + "const": "core:window:allow-is-minimizable", 1695 + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." 1696 + }, 1697 + { 1698 + "description": "Enables the is_minimized command without any pre-configured scope.", 1699 + "type": "string", 1700 + "const": "core:window:allow-is-minimized", 1701 + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." 1702 + }, 1703 + { 1704 + "description": "Enables the is_resizable command without any pre-configured scope.", 1705 + "type": "string", 1706 + "const": "core:window:allow-is-resizable", 1707 + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." 1708 + }, 1709 + { 1710 + "description": "Enables the is_visible command without any pre-configured scope.", 1711 + "type": "string", 1712 + "const": "core:window:allow-is-visible", 1713 + "markdownDescription": "Enables the is_visible command without any pre-configured scope." 1714 + }, 1715 + { 1716 + "description": "Enables the maximize command without any pre-configured scope.", 1717 + "type": "string", 1718 + "const": "core:window:allow-maximize", 1719 + "markdownDescription": "Enables the maximize command without any pre-configured scope." 1720 + }, 1721 + { 1722 + "description": "Enables the minimize command without any pre-configured scope.", 1723 + "type": "string", 1724 + "const": "core:window:allow-minimize", 1725 + "markdownDescription": "Enables the minimize command without any pre-configured scope." 1726 + }, 1727 + { 1728 + "description": "Enables the monitor_from_point command without any pre-configured scope.", 1729 + "type": "string", 1730 + "const": "core:window:allow-monitor-from-point", 1731 + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." 1732 + }, 1733 + { 1734 + "description": "Enables the outer_position command without any pre-configured scope.", 1735 + "type": "string", 1736 + "const": "core:window:allow-outer-position", 1737 + "markdownDescription": "Enables the outer_position command without any pre-configured scope." 1738 + }, 1739 + { 1740 + "description": "Enables the outer_size command without any pre-configured scope.", 1741 + "type": "string", 1742 + "const": "core:window:allow-outer-size", 1743 + "markdownDescription": "Enables the outer_size command without any pre-configured scope." 1744 + }, 1745 + { 1746 + "description": "Enables the primary_monitor command without any pre-configured scope.", 1747 + "type": "string", 1748 + "const": "core:window:allow-primary-monitor", 1749 + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." 1750 + }, 1751 + { 1752 + "description": "Enables the request_user_attention command without any pre-configured scope.", 1753 + "type": "string", 1754 + "const": "core:window:allow-request-user-attention", 1755 + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." 1756 + }, 1757 + { 1758 + "description": "Enables the scale_factor command without any pre-configured scope.", 1759 + "type": "string", 1760 + "const": "core:window:allow-scale-factor", 1761 + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." 1762 + }, 1763 + { 1764 + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1765 + "type": "string", 1766 + "const": "core:window:allow-set-always-on-bottom", 1767 + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." 1768 + }, 1769 + { 1770 + "description": "Enables the set_always_on_top command without any pre-configured scope.", 1771 + "type": "string", 1772 + "const": "core:window:allow-set-always-on-top", 1773 + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." 1774 + }, 1775 + { 1776 + "description": "Enables the set_background_color command without any pre-configured scope.", 1777 + "type": "string", 1778 + "const": "core:window:allow-set-background-color", 1779 + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." 1780 + }, 1781 + { 1782 + "description": "Enables the set_badge_count command without any pre-configured scope.", 1783 + "type": "string", 1784 + "const": "core:window:allow-set-badge-count", 1785 + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." 1786 + }, 1787 + { 1788 + "description": "Enables the set_badge_label command without any pre-configured scope.", 1789 + "type": "string", 1790 + "const": "core:window:allow-set-badge-label", 1791 + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." 1792 + }, 1793 + { 1794 + "description": "Enables the set_closable command without any pre-configured scope.", 1795 + "type": "string", 1796 + "const": "core:window:allow-set-closable", 1797 + "markdownDescription": "Enables the set_closable command without any pre-configured scope." 1798 + }, 1799 + { 1800 + "description": "Enables the set_content_protected command without any pre-configured scope.", 1801 + "type": "string", 1802 + "const": "core:window:allow-set-content-protected", 1803 + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." 1804 + }, 1805 + { 1806 + "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1807 + "type": "string", 1808 + "const": "core:window:allow-set-cursor-grab", 1809 + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." 1810 + }, 1811 + { 1812 + "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1813 + "type": "string", 1814 + "const": "core:window:allow-set-cursor-icon", 1815 + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." 1816 + }, 1817 + { 1818 + "description": "Enables the set_cursor_position command without any pre-configured scope.", 1819 + "type": "string", 1820 + "const": "core:window:allow-set-cursor-position", 1821 + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." 1822 + }, 1823 + { 1824 + "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1825 + "type": "string", 1826 + "const": "core:window:allow-set-cursor-visible", 1827 + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." 1828 + }, 1829 + { 1830 + "description": "Enables the set_decorations command without any pre-configured scope.", 1831 + "type": "string", 1832 + "const": "core:window:allow-set-decorations", 1833 + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." 1834 + }, 1835 + { 1836 + "description": "Enables the set_effects command without any pre-configured scope.", 1837 + "type": "string", 1838 + "const": "core:window:allow-set-effects", 1839 + "markdownDescription": "Enables the set_effects command without any pre-configured scope." 1840 + }, 1841 + { 1842 + "description": "Enables the set_enabled command without any pre-configured scope.", 1843 + "type": "string", 1844 + "const": "core:window:allow-set-enabled", 1845 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 1846 + }, 1847 + { 1848 + "description": "Enables the set_focus command without any pre-configured scope.", 1849 + "type": "string", 1850 + "const": "core:window:allow-set-focus", 1851 + "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1852 + }, 1853 + { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 + }, 1859 + { 1860 + "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 + "type": "string", 1862 + "const": "core:window:allow-set-fullscreen", 1863 + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." 1864 + }, 1865 + { 1866 + "description": "Enables the set_icon command without any pre-configured scope.", 1867 + "type": "string", 1868 + "const": "core:window:allow-set-icon", 1869 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1870 + }, 1871 + { 1872 + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1873 + "type": "string", 1874 + "const": "core:window:allow-set-ignore-cursor-events", 1875 + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." 1876 + }, 1877 + { 1878 + "description": "Enables the set_max_size command without any pre-configured scope.", 1879 + "type": "string", 1880 + "const": "core:window:allow-set-max-size", 1881 + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." 1882 + }, 1883 + { 1884 + "description": "Enables the set_maximizable command without any pre-configured scope.", 1885 + "type": "string", 1886 + "const": "core:window:allow-set-maximizable", 1887 + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." 1888 + }, 1889 + { 1890 + "description": "Enables the set_min_size command without any pre-configured scope.", 1891 + "type": "string", 1892 + "const": "core:window:allow-set-min-size", 1893 + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." 1894 + }, 1895 + { 1896 + "description": "Enables the set_minimizable command without any pre-configured scope.", 1897 + "type": "string", 1898 + "const": "core:window:allow-set-minimizable", 1899 + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." 1900 + }, 1901 + { 1902 + "description": "Enables the set_overlay_icon command without any pre-configured scope.", 1903 + "type": "string", 1904 + "const": "core:window:allow-set-overlay-icon", 1905 + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." 1906 + }, 1907 + { 1908 + "description": "Enables the set_position command without any pre-configured scope.", 1909 + "type": "string", 1910 + "const": "core:window:allow-set-position", 1911 + "markdownDescription": "Enables the set_position command without any pre-configured scope." 1912 + }, 1913 + { 1914 + "description": "Enables the set_progress_bar command without any pre-configured scope.", 1915 + "type": "string", 1916 + "const": "core:window:allow-set-progress-bar", 1917 + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." 1918 + }, 1919 + { 1920 + "description": "Enables the set_resizable command without any pre-configured scope.", 1921 + "type": "string", 1922 + "const": "core:window:allow-set-resizable", 1923 + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." 1924 + }, 1925 + { 1926 + "description": "Enables the set_shadow command without any pre-configured scope.", 1927 + "type": "string", 1928 + "const": "core:window:allow-set-shadow", 1929 + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1936 + }, 1937 + { 1938 + "description": "Enables the set_size command without any pre-configured scope.", 1939 + "type": "string", 1940 + "const": "core:window:allow-set-size", 1941 + "markdownDescription": "Enables the set_size command without any pre-configured scope." 1942 + }, 1943 + { 1944 + "description": "Enables the set_size_constraints command without any pre-configured scope.", 1945 + "type": "string", 1946 + "const": "core:window:allow-set-size-constraints", 1947 + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." 1948 + }, 1949 + { 1950 + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1951 + "type": "string", 1952 + "const": "core:window:allow-set-skip-taskbar", 1953 + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." 1954 + }, 1955 + { 1956 + "description": "Enables the set_theme command without any pre-configured scope.", 1957 + "type": "string", 1958 + "const": "core:window:allow-set-theme", 1959 + "markdownDescription": "Enables the set_theme command without any pre-configured scope." 1960 + }, 1961 + { 1962 + "description": "Enables the set_title command without any pre-configured scope.", 1963 + "type": "string", 1964 + "const": "core:window:allow-set-title", 1965 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1966 + }, 1967 + { 1968 + "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1969 + "type": "string", 1970 + "const": "core:window:allow-set-title-bar-style", 1971 + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." 1972 + }, 1973 + { 1974 + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1975 + "type": "string", 1976 + "const": "core:window:allow-set-visible-on-all-workspaces", 1977 + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." 1978 + }, 1979 + { 1980 + "description": "Enables the show command without any pre-configured scope.", 1981 + "type": "string", 1982 + "const": "core:window:allow-show", 1983 + "markdownDescription": "Enables the show command without any pre-configured scope." 1984 + }, 1985 + { 1986 + "description": "Enables the start_dragging command without any pre-configured scope.", 1987 + "type": "string", 1988 + "const": "core:window:allow-start-dragging", 1989 + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." 1990 + }, 1991 + { 1992 + "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1993 + "type": "string", 1994 + "const": "core:window:allow-start-resize-dragging", 1995 + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." 1996 + }, 1997 + { 1998 + "description": "Enables the theme command without any pre-configured scope.", 1999 + "type": "string", 2000 + "const": "core:window:allow-theme", 2001 + "markdownDescription": "Enables the theme command without any pre-configured scope." 2002 + }, 2003 + { 2004 + "description": "Enables the title command without any pre-configured scope.", 2005 + "type": "string", 2006 + "const": "core:window:allow-title", 2007 + "markdownDescription": "Enables the title command without any pre-configured scope." 2008 + }, 2009 + { 2010 + "description": "Enables the toggle_maximize command without any pre-configured scope.", 2011 + "type": "string", 2012 + "const": "core:window:allow-toggle-maximize", 2013 + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." 2014 + }, 2015 + { 2016 + "description": "Enables the unmaximize command without any pre-configured scope.", 2017 + "type": "string", 2018 + "const": "core:window:allow-unmaximize", 2019 + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." 2020 + }, 2021 + { 2022 + "description": "Enables the unminimize command without any pre-configured scope.", 2023 + "type": "string", 2024 + "const": "core:window:allow-unminimize", 2025 + "markdownDescription": "Enables the unminimize command without any pre-configured scope." 2026 + }, 2027 + { 2028 + "description": "Denies the available_monitors command without any pre-configured scope.", 2029 + "type": "string", 2030 + "const": "core:window:deny-available-monitors", 2031 + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." 2032 + }, 2033 + { 2034 + "description": "Denies the center command without any pre-configured scope.", 2035 + "type": "string", 2036 + "const": "core:window:deny-center", 2037 + "markdownDescription": "Denies the center command without any pre-configured scope." 2038 + }, 2039 + { 2040 + "description": "Denies the close command without any pre-configured scope.", 2041 + "type": "string", 2042 + "const": "core:window:deny-close", 2043 + "markdownDescription": "Denies the close command without any pre-configured scope." 2044 + }, 2045 + { 2046 + "description": "Denies the create command without any pre-configured scope.", 2047 + "type": "string", 2048 + "const": "core:window:deny-create", 2049 + "markdownDescription": "Denies the create command without any pre-configured scope." 2050 + }, 2051 + { 2052 + "description": "Denies the current_monitor command without any pre-configured scope.", 2053 + "type": "string", 2054 + "const": "core:window:deny-current-monitor", 2055 + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." 2056 + }, 2057 + { 2058 + "description": "Denies the cursor_position command without any pre-configured scope.", 2059 + "type": "string", 2060 + "const": "core:window:deny-cursor-position", 2061 + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." 2062 + }, 2063 + { 2064 + "description": "Denies the destroy command without any pre-configured scope.", 2065 + "type": "string", 2066 + "const": "core:window:deny-destroy", 2067 + "markdownDescription": "Denies the destroy command without any pre-configured scope." 2068 + }, 2069 + { 2070 + "description": "Denies the get_all_windows command without any pre-configured scope.", 2071 + "type": "string", 2072 + "const": "core:window:deny-get-all-windows", 2073 + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." 2074 + }, 2075 + { 2076 + "description": "Denies the hide command without any pre-configured scope.", 2077 + "type": "string", 2078 + "const": "core:window:deny-hide", 2079 + "markdownDescription": "Denies the hide command without any pre-configured scope." 2080 + }, 2081 + { 2082 + "description": "Denies the inner_position command without any pre-configured scope.", 2083 + "type": "string", 2084 + "const": "core:window:deny-inner-position", 2085 + "markdownDescription": "Denies the inner_position command without any pre-configured scope." 2086 + }, 2087 + { 2088 + "description": "Denies the inner_size command without any pre-configured scope.", 2089 + "type": "string", 2090 + "const": "core:window:deny-inner-size", 2091 + "markdownDescription": "Denies the inner_size command without any pre-configured scope." 2092 + }, 2093 + { 2094 + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 2095 + "type": "string", 2096 + "const": "core:window:deny-internal-toggle-maximize", 2097 + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." 2098 + }, 2099 + { 2100 + "description": "Denies the is_always_on_top command without any pre-configured scope.", 2101 + "type": "string", 2102 + "const": "core:window:deny-is-always-on-top", 2103 + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." 2104 + }, 2105 + { 2106 + "description": "Denies the is_closable command without any pre-configured scope.", 2107 + "type": "string", 2108 + "const": "core:window:deny-is-closable", 2109 + "markdownDescription": "Denies the is_closable command without any pre-configured scope." 2110 + }, 2111 + { 2112 + "description": "Denies the is_decorated command without any pre-configured scope.", 2113 + "type": "string", 2114 + "const": "core:window:deny-is-decorated", 2115 + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." 2116 + }, 2117 + { 2118 + "description": "Denies the is_enabled command without any pre-configured scope.", 2119 + "type": "string", 2120 + "const": "core:window:deny-is-enabled", 2121 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 2122 + }, 2123 + { 2124 + "description": "Denies the is_focused command without any pre-configured scope.", 2125 + "type": "string", 2126 + "const": "core:window:deny-is-focused", 2127 + "markdownDescription": "Denies the is_focused command without any pre-configured scope." 2128 + }, 2129 + { 2130 + "description": "Denies the is_fullscreen command without any pre-configured scope.", 2131 + "type": "string", 2132 + "const": "core:window:deny-is-fullscreen", 2133 + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." 2134 + }, 2135 + { 2136 + "description": "Denies the is_maximizable command without any pre-configured scope.", 2137 + "type": "string", 2138 + "const": "core:window:deny-is-maximizable", 2139 + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." 2140 + }, 2141 + { 2142 + "description": "Denies the is_maximized command without any pre-configured scope.", 2143 + "type": "string", 2144 + "const": "core:window:deny-is-maximized", 2145 + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." 2146 + }, 2147 + { 2148 + "description": "Denies the is_minimizable command without any pre-configured scope.", 2149 + "type": "string", 2150 + "const": "core:window:deny-is-minimizable", 2151 + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." 2152 + }, 2153 + { 2154 + "description": "Denies the is_minimized command without any pre-configured scope.", 2155 + "type": "string", 2156 + "const": "core:window:deny-is-minimized", 2157 + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." 2158 + }, 2159 + { 2160 + "description": "Denies the is_resizable command without any pre-configured scope.", 2161 + "type": "string", 2162 + "const": "core:window:deny-is-resizable", 2163 + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." 2164 + }, 2165 + { 2166 + "description": "Denies the is_visible command without any pre-configured scope.", 2167 + "type": "string", 2168 + "const": "core:window:deny-is-visible", 2169 + "markdownDescription": "Denies the is_visible command without any pre-configured scope." 2170 + }, 2171 + { 2172 + "description": "Denies the maximize command without any pre-configured scope.", 2173 + "type": "string", 2174 + "const": "core:window:deny-maximize", 2175 + "markdownDescription": "Denies the maximize command without any pre-configured scope." 2176 + }, 2177 + { 2178 + "description": "Denies the minimize command without any pre-configured scope.", 2179 + "type": "string", 2180 + "const": "core:window:deny-minimize", 2181 + "markdownDescription": "Denies the minimize command without any pre-configured scope." 2182 + }, 2183 + { 2184 + "description": "Denies the monitor_from_point command without any pre-configured scope.", 2185 + "type": "string", 2186 + "const": "core:window:deny-monitor-from-point", 2187 + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." 2188 + }, 2189 + { 2190 + "description": "Denies the outer_position command without any pre-configured scope.", 2191 + "type": "string", 2192 + "const": "core:window:deny-outer-position", 2193 + "markdownDescription": "Denies the outer_position command without any pre-configured scope." 2194 + }, 2195 + { 2196 + "description": "Denies the outer_size command without any pre-configured scope.", 2197 + "type": "string", 2198 + "const": "core:window:deny-outer-size", 2199 + "markdownDescription": "Denies the outer_size command without any pre-configured scope." 2200 + }, 2201 + { 2202 + "description": "Denies the primary_monitor command without any pre-configured scope.", 2203 + "type": "string", 2204 + "const": "core:window:deny-primary-monitor", 2205 + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." 2206 + }, 2207 + { 2208 + "description": "Denies the request_user_attention command without any pre-configured scope.", 2209 + "type": "string", 2210 + "const": "core:window:deny-request-user-attention", 2211 + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." 2212 + }, 2213 + { 2214 + "description": "Denies the scale_factor command without any pre-configured scope.", 2215 + "type": "string", 2216 + "const": "core:window:deny-scale-factor", 2217 + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." 2218 + }, 2219 + { 2220 + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 2221 + "type": "string", 2222 + "const": "core:window:deny-set-always-on-bottom", 2223 + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." 2224 + }, 2225 + { 2226 + "description": "Denies the set_always_on_top command without any pre-configured scope.", 2227 + "type": "string", 2228 + "const": "core:window:deny-set-always-on-top", 2229 + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." 2230 + }, 2231 + { 2232 + "description": "Denies the set_background_color command without any pre-configured scope.", 2233 + "type": "string", 2234 + "const": "core:window:deny-set-background-color", 2235 + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." 2236 + }, 2237 + { 2238 + "description": "Denies the set_badge_count command without any pre-configured scope.", 2239 + "type": "string", 2240 + "const": "core:window:deny-set-badge-count", 2241 + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." 2242 + }, 2243 + { 2244 + "description": "Denies the set_badge_label command without any pre-configured scope.", 2245 + "type": "string", 2246 + "const": "core:window:deny-set-badge-label", 2247 + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." 2248 + }, 2249 + { 2250 + "description": "Denies the set_closable command without any pre-configured scope.", 2251 + "type": "string", 2252 + "const": "core:window:deny-set-closable", 2253 + "markdownDescription": "Denies the set_closable command without any pre-configured scope." 2254 + }, 2255 + { 2256 + "description": "Denies the set_content_protected command without any pre-configured scope.", 2257 + "type": "string", 2258 + "const": "core:window:deny-set-content-protected", 2259 + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." 2260 + }, 2261 + { 2262 + "description": "Denies the set_cursor_grab command without any pre-configured scope.", 2263 + "type": "string", 2264 + "const": "core:window:deny-set-cursor-grab", 2265 + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." 2266 + }, 2267 + { 2268 + "description": "Denies the set_cursor_icon command without any pre-configured scope.", 2269 + "type": "string", 2270 + "const": "core:window:deny-set-cursor-icon", 2271 + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." 2272 + }, 2273 + { 2274 + "description": "Denies the set_cursor_position command without any pre-configured scope.", 2275 + "type": "string", 2276 + "const": "core:window:deny-set-cursor-position", 2277 + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." 2278 + }, 2279 + { 2280 + "description": "Denies the set_cursor_visible command without any pre-configured scope.", 2281 + "type": "string", 2282 + "const": "core:window:deny-set-cursor-visible", 2283 + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." 2284 + }, 2285 + { 2286 + "description": "Denies the set_decorations command without any pre-configured scope.", 2287 + "type": "string", 2288 + "const": "core:window:deny-set-decorations", 2289 + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." 2290 + }, 2291 + { 2292 + "description": "Denies the set_effects command without any pre-configured scope.", 2293 + "type": "string", 2294 + "const": "core:window:deny-set-effects", 2295 + "markdownDescription": "Denies the set_effects command without any pre-configured scope." 2296 + }, 2297 + { 2298 + "description": "Denies the set_enabled command without any pre-configured scope.", 2299 + "type": "string", 2300 + "const": "core:window:deny-set-enabled", 2301 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 2302 + }, 2303 + { 2304 + "description": "Denies the set_focus command without any pre-configured scope.", 2305 + "type": "string", 2306 + "const": "core:window:deny-set-focus", 2307 + "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2308 + }, 2309 + { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 + }, 2315 + { 2316 + "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 + "type": "string", 2318 + "const": "core:window:deny-set-fullscreen", 2319 + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." 2320 + }, 2321 + { 2322 + "description": "Denies the set_icon command without any pre-configured scope.", 2323 + "type": "string", 2324 + "const": "core:window:deny-set-icon", 2325 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 2326 + }, 2327 + { 2328 + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 2329 + "type": "string", 2330 + "const": "core:window:deny-set-ignore-cursor-events", 2331 + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." 2332 + }, 2333 + { 2334 + "description": "Denies the set_max_size command without any pre-configured scope.", 2335 + "type": "string", 2336 + "const": "core:window:deny-set-max-size", 2337 + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." 2338 + }, 2339 + { 2340 + "description": "Denies the set_maximizable command without any pre-configured scope.", 2341 + "type": "string", 2342 + "const": "core:window:deny-set-maximizable", 2343 + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." 2344 + }, 2345 + { 2346 + "description": "Denies the set_min_size command without any pre-configured scope.", 2347 + "type": "string", 2348 + "const": "core:window:deny-set-min-size", 2349 + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." 2350 + }, 2351 + { 2352 + "description": "Denies the set_minimizable command without any pre-configured scope.", 2353 + "type": "string", 2354 + "const": "core:window:deny-set-minimizable", 2355 + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." 2356 + }, 2357 + { 2358 + "description": "Denies the set_overlay_icon command without any pre-configured scope.", 2359 + "type": "string", 2360 + "const": "core:window:deny-set-overlay-icon", 2361 + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." 2362 + }, 2363 + { 2364 + "description": "Denies the set_position command without any pre-configured scope.", 2365 + "type": "string", 2366 + "const": "core:window:deny-set-position", 2367 + "markdownDescription": "Denies the set_position command without any pre-configured scope." 2368 + }, 2369 + { 2370 + "description": "Denies the set_progress_bar command without any pre-configured scope.", 2371 + "type": "string", 2372 + "const": "core:window:deny-set-progress-bar", 2373 + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." 2374 + }, 2375 + { 2376 + "description": "Denies the set_resizable command without any pre-configured scope.", 2377 + "type": "string", 2378 + "const": "core:window:deny-set-resizable", 2379 + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." 2380 + }, 2381 + { 2382 + "description": "Denies the set_shadow command without any pre-configured scope.", 2383 + "type": "string", 2384 + "const": "core:window:deny-set-shadow", 2385 + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2392 + }, 2393 + { 2394 + "description": "Denies the set_size command without any pre-configured scope.", 2395 + "type": "string", 2396 + "const": "core:window:deny-set-size", 2397 + "markdownDescription": "Denies the set_size command without any pre-configured scope." 2398 + }, 2399 + { 2400 + "description": "Denies the set_size_constraints command without any pre-configured scope.", 2401 + "type": "string", 2402 + "const": "core:window:deny-set-size-constraints", 2403 + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." 2404 + }, 2405 + { 2406 + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 2407 + "type": "string", 2408 + "const": "core:window:deny-set-skip-taskbar", 2409 + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." 2410 + }, 2411 + { 2412 + "description": "Denies the set_theme command without any pre-configured scope.", 2413 + "type": "string", 2414 + "const": "core:window:deny-set-theme", 2415 + "markdownDescription": "Denies the set_theme command without any pre-configured scope." 2416 + }, 2417 + { 2418 + "description": "Denies the set_title command without any pre-configured scope.", 2419 + "type": "string", 2420 + "const": "core:window:deny-set-title", 2421 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 2422 + }, 2423 + { 2424 + "description": "Denies the set_title_bar_style command without any pre-configured scope.", 2425 + "type": "string", 2426 + "const": "core:window:deny-set-title-bar-style", 2427 + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." 2428 + }, 2429 + { 2430 + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 2431 + "type": "string", 2432 + "const": "core:window:deny-set-visible-on-all-workspaces", 2433 + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." 2434 + }, 2435 + { 2436 + "description": "Denies the show command without any pre-configured scope.", 2437 + "type": "string", 2438 + "const": "core:window:deny-show", 2439 + "markdownDescription": "Denies the show command without any pre-configured scope." 2440 + }, 2441 + { 2442 + "description": "Denies the start_dragging command without any pre-configured scope.", 2443 + "type": "string", 2444 + "const": "core:window:deny-start-dragging", 2445 + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." 2446 + }, 2447 + { 2448 + "description": "Denies the start_resize_dragging command without any pre-configured scope.", 2449 + "type": "string", 2450 + "const": "core:window:deny-start-resize-dragging", 2451 + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." 2452 + }, 2453 + { 2454 + "description": "Denies the theme command without any pre-configured scope.", 2455 + "type": "string", 2456 + "const": "core:window:deny-theme", 2457 + "markdownDescription": "Denies the theme command without any pre-configured scope." 2458 + }, 2459 + { 2460 + "description": "Denies the title command without any pre-configured scope.", 2461 + "type": "string", 2462 + "const": "core:window:deny-title", 2463 + "markdownDescription": "Denies the title command without any pre-configured scope." 2464 + }, 2465 + { 2466 + "description": "Denies the toggle_maximize command without any pre-configured scope.", 2467 + "type": "string", 2468 + "const": "core:window:deny-toggle-maximize", 2469 + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." 2470 + }, 2471 + { 2472 + "description": "Denies the unmaximize command without any pre-configured scope.", 2473 + "type": "string", 2474 + "const": "core:window:deny-unmaximize", 2475 + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." 2476 + }, 2477 + { 2478 + "description": "Denies the unminimize command without any pre-configured scope.", 2479 + "type": "string", 2480 + "const": "core:window:deny-unminimize", 2481 + "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 + }, 2483 + { 2484 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 2485 + "type": "string", 2486 + "const": "http:default", 2487 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 2488 + }, 2489 + { 2490 + "description": "Enables the fetch command without any pre-configured scope.", 2491 + "type": "string", 2492 + "const": "http:allow-fetch", 2493 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 2494 + }, 2495 + { 2496 + "description": "Enables the fetch_cancel command without any pre-configured scope.", 2497 + "type": "string", 2498 + "const": "http:allow-fetch-cancel", 2499 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 2500 + }, 2501 + { 2502 + "description": "Enables the fetch_read_body command without any pre-configured scope.", 2503 + "type": "string", 2504 + "const": "http:allow-fetch-read-body", 2505 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 2506 + }, 2507 + { 2508 + "description": "Enables the fetch_send command without any pre-configured scope.", 2509 + "type": "string", 2510 + "const": "http:allow-fetch-send", 2511 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 2512 + }, 2513 + { 2514 + "description": "Denies the fetch command without any pre-configured scope.", 2515 + "type": "string", 2516 + "const": "http:deny-fetch", 2517 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 2518 + }, 2519 + { 2520 + "description": "Denies the fetch_cancel command without any pre-configured scope.", 2521 + "type": "string", 2522 + "const": "http:deny-fetch-cancel", 2523 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 2524 + }, 2525 + { 2526 + "description": "Denies the fetch_read_body command without any pre-configured scope.", 2527 + "type": "string", 2528 + "const": "http:deny-fetch-read-body", 2529 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 2530 + }, 2531 + { 2532 + "description": "Denies the fetch_send command without any pre-configured scope.", 2533 + "type": "string", 2534 + "const": "http:deny-fetch-send", 2535 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 2536 + }, 2537 + { 2538 + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", 2539 + "type": "string", 2540 + "const": "process:default", 2541 + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" 2542 + }, 2543 + { 2544 + "description": "Enables the exit command without any pre-configured scope.", 2545 + "type": "string", 2546 + "const": "process:allow-exit", 2547 + "markdownDescription": "Enables the exit command without any pre-configured scope." 2548 + }, 2549 + { 2550 + "description": "Enables the restart command without any pre-configured scope.", 2551 + "type": "string", 2552 + "const": "process:allow-restart", 2553 + "markdownDescription": "Enables the restart command without any pre-configured scope." 2554 + }, 2555 + { 2556 + "description": "Denies the exit command without any pre-configured scope.", 2557 + "type": "string", 2558 + "const": "process:deny-exit", 2559 + "markdownDescription": "Denies the exit command without any pre-configured scope." 2560 + }, 2561 + { 2562 + "description": "Denies the restart command without any pre-configured scope.", 2563 + "type": "string", 2564 + "const": "process:deny-restart", 2565 + "markdownDescription": "Denies the restart command without any pre-configured scope." 2566 + }, 2567 + { 2568 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 2569 + "type": "string", 2570 + "const": "shell:default", 2571 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 2572 + }, 2573 + { 2574 + "description": "Enables the execute command without any pre-configured scope.", 2575 + "type": "string", 2576 + "const": "shell:allow-execute", 2577 + "markdownDescription": "Enables the execute command without any pre-configured scope." 2578 + }, 2579 + { 2580 + "description": "Enables the kill command without any pre-configured scope.", 2581 + "type": "string", 2582 + "const": "shell:allow-kill", 2583 + "markdownDescription": "Enables the kill command without any pre-configured scope." 2584 + }, 2585 + { 2586 + "description": "Enables the open command without any pre-configured scope.", 2587 + "type": "string", 2588 + "const": "shell:allow-open", 2589 + "markdownDescription": "Enables the open command without any pre-configured scope." 2590 + }, 2591 + { 2592 + "description": "Enables the spawn command without any pre-configured scope.", 2593 + "type": "string", 2594 + "const": "shell:allow-spawn", 2595 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 2596 + }, 2597 + { 2598 + "description": "Enables the stdin_write command without any pre-configured scope.", 2599 + "type": "string", 2600 + "const": "shell:allow-stdin-write", 2601 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 2602 + }, 2603 + { 2604 + "description": "Denies the execute command without any pre-configured scope.", 2605 + "type": "string", 2606 + "const": "shell:deny-execute", 2607 + "markdownDescription": "Denies the execute command without any pre-configured scope." 2608 + }, 2609 + { 2610 + "description": "Denies the kill command without any pre-configured scope.", 2611 + "type": "string", 2612 + "const": "shell:deny-kill", 2613 + "markdownDescription": "Denies the kill command without any pre-configured scope." 2614 + }, 2615 + { 2616 + "description": "Denies the open command without any pre-configured scope.", 2617 + "type": "string", 2618 + "const": "shell:deny-open", 2619 + "markdownDescription": "Denies the open command without any pre-configured scope." 2620 + }, 2621 + { 2622 + "description": "Denies the spawn command without any pre-configured scope.", 2623 + "type": "string", 2624 + "const": "shell:deny-spawn", 2625 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 2626 + }, 2627 + { 2628 + "description": "Denies the stdin_write command without any pre-configured scope.", 2629 + "type": "string", 2630 + "const": "shell:deny-stdin-write", 2631 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 2632 + } 2633 + ] 2634 + }, 2635 + "Value": { 2636 + "description": "All supported ACL values.", 2637 + "anyOf": [ 2638 + { 2639 + "description": "Represents a null JSON value.", 2640 + "type": "null" 2641 + }, 2642 + { 2643 + "description": "Represents a [`bool`].", 2644 + "type": "boolean" 2645 + }, 2646 + { 2647 + "description": "Represents a valid ACL [`Number`].", 2648 + "allOf": [ 2649 + { 2650 + "$ref": "#/definitions/Number" 2651 + } 2652 + ] 2653 + }, 2654 + { 2655 + "description": "Represents a [`String`].", 2656 + "type": "string" 2657 + }, 2658 + { 2659 + "description": "Represents a list of other [`Value`]s.", 2660 + "type": "array", 2661 + "items": { 2662 + "$ref": "#/definitions/Value" 2663 + } 2664 + }, 2665 + { 2666 + "description": "Represents a map of [`String`] keys to [`Value`]s.", 2667 + "type": "object", 2668 + "additionalProperties": { 2669 + "$ref": "#/definitions/Value" 2670 + } 2671 + } 2672 + ] 2673 + }, 2674 + "Number": { 2675 + "description": "A valid ACL number.", 2676 + "anyOf": [ 2677 + { 2678 + "description": "Represents an [`i64`].", 2679 + "type": "integer", 2680 + "format": "int64" 2681 + }, 2682 + { 2683 + "description": "Represents a [`f64`].", 2684 + "type": "number", 2685 + "format": "double" 2686 + } 2687 + ] 2688 + }, 2689 + "Target": { 2690 + "description": "Platform target.", 2691 + "oneOf": [ 2692 + { 2693 + "description": "MacOS.", 2694 + "type": "string", 2695 + "enum": [ 2696 + "macOS" 2697 + ] 2698 + }, 2699 + { 2700 + "description": "Windows.", 2701 + "type": "string", 2702 + "enum": [ 2703 + "windows" 2704 + ] 2705 + }, 2706 + { 2707 + "description": "Linux.", 2708 + "type": "string", 2709 + "enum": [ 2710 + "linux" 2711 + ] 2712 + }, 2713 + { 2714 + "description": "Android.", 2715 + "type": "string", 2716 + "enum": [ 2717 + "android" 2718 + ] 2719 + }, 2720 + { 2721 + "description": "iOS.", 2722 + "type": "string", 2723 + "enum": [ 2724 + "iOS" 2725 + ] 2726 + } 2727 + ] 2728 + }, 2729 + "ShellScopeEntryAllowedArg": { 2730 + "description": "A command argument allowed to be executed by the webview API.", 2731 + "anyOf": [ 2732 + { 2733 + "description": "A non-configurable argument that is passed to the command in the order it was specified.", 2734 + "type": "string" 2735 + }, 2736 + { 2737 + "description": "A variable that is set while calling the command from the webview API.", 2738 + "type": "object", 2739 + "required": [ 2740 + "validator" 2741 + ], 2742 + "properties": { 2743 + "raw": { 2744 + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", 2745 + "default": false, 2746 + "type": "boolean" 2747 + }, 2748 + "validator": { 2749 + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>", 2750 + "type": "string" 2751 + } 2752 + }, 2753 + "additionalProperties": false 2754 + } 2755 + ] 2756 + }, 2757 + "ShellScopeEntryAllowedArgs": { 2758 + "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", 2759 + "anyOf": [ 2760 + { 2761 + "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", 2762 + "type": "boolean" 2763 + }, 2764 + { 2765 + "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.", 2766 + "type": "array", 2767 + "items": { 2768 + "$ref": "#/definitions/ShellScopeEntryAllowedArg" 2769 + } 2770 + } 2771 + ] 2772 + } 2773 + } 2774 + }
+894 -361
src-tauri/gen/schemas/windows-schema.json
··· 37 ], 38 "definitions": { 39 "Capability": { 40 - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", 41 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 51 "description": { 52 - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 72 "windows": { 73 - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 74 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 79 "webviews": { 80 - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 81 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 86 "permissions": { 87 - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 142 { 143 - "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n", 144 "type": "string", 145 - "const": "http:default" 146 }, 147 { 148 "description": "Enables the fetch command without any pre-configured scope.", 149 "type": "string", 150 - "const": "http:allow-fetch" 151 }, 152 { 153 "description": "Enables the fetch_cancel command without any pre-configured scope.", 154 "type": "string", 155 - "const": "http:allow-fetch-cancel" 156 }, 157 { 158 "description": "Enables the fetch_read_body command without any pre-configured scope.", 159 "type": "string", 160 - "const": "http:allow-fetch-read-body" 161 }, 162 { 163 "description": "Enables the fetch_send command without any pre-configured scope.", 164 "type": "string", 165 - "const": "http:allow-fetch-send" 166 }, 167 { 168 "description": "Denies the fetch command without any pre-configured scope.", 169 "type": "string", 170 - "const": "http:deny-fetch" 171 }, 172 { 173 "description": "Denies the fetch_cancel command without any pre-configured scope.", 174 "type": "string", 175 - "const": "http:deny-fetch-cancel" 176 }, 177 { 178 "description": "Denies the fetch_read_body command without any pre-configured scope.", 179 "type": "string", 180 - "const": "http:deny-fetch-read-body" 181 }, 182 { 183 "description": "Denies the fetch_send command without any pre-configured scope.", 184 "type": "string", 185 - "const": "http:deny-fetch-send" 186 } 187 ] 188 } ··· 257 "identifier": { 258 "anyOf": [ 259 { 260 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 261 "type": "string", 262 - "const": "shell:default" 263 }, 264 { 265 "description": "Enables the execute command without any pre-configured scope.", 266 "type": "string", 267 - "const": "shell:allow-execute" 268 }, 269 { 270 "description": "Enables the kill command without any pre-configured scope.", 271 "type": "string", 272 - "const": "shell:allow-kill" 273 }, 274 { 275 "description": "Enables the open command without any pre-configured scope.", 276 "type": "string", 277 - "const": "shell:allow-open" 278 }, 279 { 280 "description": "Enables the spawn command without any pre-configured scope.", 281 "type": "string", 282 - "const": "shell:allow-spawn" 283 }, 284 { 285 "description": "Enables the stdin_write command without any pre-configured scope.", 286 "type": "string", 287 - "const": "shell:allow-stdin-write" 288 }, 289 { 290 "description": "Denies the execute command without any pre-configured scope.", 291 "type": "string", 292 - "const": "shell:deny-execute" 293 }, 294 { 295 "description": "Denies the kill command without any pre-configured scope.", 296 "type": "string", 297 - "const": "shell:deny-kill" 298 }, 299 { 300 "description": "Denies the open command without any pre-configured scope.", 301 "type": "string", 302 - "const": "shell:deny-open" 303 }, 304 { 305 "description": "Denies the spawn command without any pre-configured scope.", 306 "type": "string", 307 - "const": "shell:deny-spawn" 308 }, 309 { 310 "description": "Denies the stdin_write command without any pre-configured scope.", 311 "type": "string", 312 - "const": "shell:deny-stdin-write" 313 } 314 ] 315 } ··· 493 "description": "Permission identifier", 494 "oneOf": [ 495 { 496 - "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", 497 "type": "string", 498 - "const": "core:default" 499 }, 500 { 501 - "description": "Default permissions for the plugin.", 502 "type": "string", 503 - "const": "core:app:default" 504 }, 505 { 506 "description": "Enables the app_hide command without any pre-configured scope.", 507 "type": "string", 508 - "const": "core:app:allow-app-hide" 509 }, 510 { 511 "description": "Enables the app_show command without any pre-configured scope.", 512 "type": "string", 513 - "const": "core:app:allow-app-show" 514 }, 515 { 516 "description": "Enables the default_window_icon command without any pre-configured scope.", 517 "type": "string", 518 - "const": "core:app:allow-default-window-icon" 519 }, 520 { 521 "description": "Enables the name command without any pre-configured scope.", 522 "type": "string", 523 - "const": "core:app:allow-name" 524 }, 525 { 526 "description": "Enables the set_app_theme command without any pre-configured scope.", 527 "type": "string", 528 - "const": "core:app:allow-set-app-theme" 529 }, 530 { 531 "description": "Enables the tauri_version command without any pre-configured scope.", 532 "type": "string", 533 - "const": "core:app:allow-tauri-version" 534 }, 535 { 536 "description": "Enables the version command without any pre-configured scope.", 537 "type": "string", 538 - "const": "core:app:allow-version" 539 }, 540 { 541 "description": "Denies the app_hide command without any pre-configured scope.", 542 "type": "string", 543 - "const": "core:app:deny-app-hide" 544 }, 545 { 546 "description": "Denies the app_show command without any pre-configured scope.", 547 "type": "string", 548 - "const": "core:app:deny-app-show" 549 }, 550 { 551 "description": "Denies the default_window_icon command without any pre-configured scope.", 552 "type": "string", 553 - "const": "core:app:deny-default-window-icon" 554 }, 555 { 556 "description": "Denies the name command without any pre-configured scope.", 557 "type": "string", 558 - "const": "core:app:deny-name" 559 }, 560 { 561 "description": "Denies the set_app_theme command without any pre-configured scope.", 562 "type": "string", 563 - "const": "core:app:deny-set-app-theme" 564 }, 565 { 566 "description": "Denies the tauri_version command without any pre-configured scope.", 567 "type": "string", 568 - "const": "core:app:deny-tauri-version" 569 }, 570 { 571 "description": "Denies the version command without any pre-configured scope.", 572 "type": "string", 573 - "const": "core:app:deny-version" 574 }, 575 { 576 - "description": "Default permissions for the plugin.", 577 "type": "string", 578 - "const": "core:event:default" 579 }, 580 { 581 "description": "Enables the emit command without any pre-configured scope.", 582 "type": "string", 583 - "const": "core:event:allow-emit" 584 }, 585 { 586 "description": "Enables the emit_to command without any pre-configured scope.", 587 "type": "string", 588 - "const": "core:event:allow-emit-to" 589 }, 590 { 591 "description": "Enables the listen command without any pre-configured scope.", 592 "type": "string", 593 - "const": "core:event:allow-listen" 594 }, 595 { 596 "description": "Enables the unlisten command without any pre-configured scope.", 597 "type": "string", 598 - "const": "core:event:allow-unlisten" 599 }, 600 { 601 "description": "Denies the emit command without any pre-configured scope.", 602 "type": "string", 603 - "const": "core:event:deny-emit" 604 }, 605 { 606 "description": "Denies the emit_to command without any pre-configured scope.", 607 "type": "string", 608 - "const": "core:event:deny-emit-to" 609 }, 610 { 611 "description": "Denies the listen command without any pre-configured scope.", 612 "type": "string", 613 - "const": "core:event:deny-listen" 614 }, 615 { 616 "description": "Denies the unlisten command without any pre-configured scope.", 617 "type": "string", 618 - "const": "core:event:deny-unlisten" 619 }, 620 { 621 - "description": "Default permissions for the plugin.", 622 "type": "string", 623 - "const": "core:image:default" 624 }, 625 { 626 "description": "Enables the from_bytes command without any pre-configured scope.", 627 "type": "string", 628 - "const": "core:image:allow-from-bytes" 629 }, 630 { 631 "description": "Enables the from_path command without any pre-configured scope.", 632 "type": "string", 633 - "const": "core:image:allow-from-path" 634 }, 635 { 636 "description": "Enables the new command without any pre-configured scope.", 637 "type": "string", 638 - "const": "core:image:allow-new" 639 }, 640 { 641 "description": "Enables the rgba command without any pre-configured scope.", 642 "type": "string", 643 - "const": "core:image:allow-rgba" 644 }, 645 { 646 "description": "Enables the size command without any pre-configured scope.", 647 "type": "string", 648 - "const": "core:image:allow-size" 649 }, 650 { 651 "description": "Denies the from_bytes command without any pre-configured scope.", 652 "type": "string", 653 - "const": "core:image:deny-from-bytes" 654 }, 655 { 656 "description": "Denies the from_path command without any pre-configured scope.", 657 "type": "string", 658 - "const": "core:image:deny-from-path" 659 }, 660 { 661 "description": "Denies the new command without any pre-configured scope.", 662 "type": "string", 663 - "const": "core:image:deny-new" 664 }, 665 { 666 "description": "Denies the rgba command without any pre-configured scope.", 667 "type": "string", 668 - "const": "core:image:deny-rgba" 669 }, 670 { 671 "description": "Denies the size command without any pre-configured scope.", 672 "type": "string", 673 - "const": "core:image:deny-size" 674 }, 675 { 676 - "description": "Default permissions for the plugin.", 677 "type": "string", 678 - "const": "core:menu:default" 679 }, 680 { 681 "description": "Enables the append command without any pre-configured scope.", 682 "type": "string", 683 - "const": "core:menu:allow-append" 684 }, 685 { 686 "description": "Enables the create_default command without any pre-configured scope.", 687 "type": "string", 688 - "const": "core:menu:allow-create-default" 689 }, 690 { 691 "description": "Enables the get command without any pre-configured scope.", 692 "type": "string", 693 - "const": "core:menu:allow-get" 694 }, 695 { 696 "description": "Enables the insert command without any pre-configured scope.", 697 "type": "string", 698 - "const": "core:menu:allow-insert" 699 }, 700 { 701 "description": "Enables the is_checked command without any pre-configured scope.", 702 "type": "string", 703 - "const": "core:menu:allow-is-checked" 704 }, 705 { 706 "description": "Enables the is_enabled command without any pre-configured scope.", 707 "type": "string", 708 - "const": "core:menu:allow-is-enabled" 709 }, 710 { 711 "description": "Enables the items command without any pre-configured scope.", 712 "type": "string", 713 - "const": "core:menu:allow-items" 714 }, 715 { 716 "description": "Enables the new command without any pre-configured scope.", 717 "type": "string", 718 - "const": "core:menu:allow-new" 719 }, 720 { 721 "description": "Enables the popup command without any pre-configured scope.", 722 "type": "string", 723 - "const": "core:menu:allow-popup" 724 }, 725 { 726 "description": "Enables the prepend command without any pre-configured scope.", 727 "type": "string", 728 - "const": "core:menu:allow-prepend" 729 }, 730 { 731 "description": "Enables the remove command without any pre-configured scope.", 732 "type": "string", 733 - "const": "core:menu:allow-remove" 734 }, 735 { 736 "description": "Enables the remove_at command without any pre-configured scope.", 737 "type": "string", 738 - "const": "core:menu:allow-remove-at" 739 }, 740 { 741 "description": "Enables the set_accelerator command without any pre-configured scope.", 742 "type": "string", 743 - "const": "core:menu:allow-set-accelerator" 744 }, 745 { 746 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 747 "type": "string", 748 - "const": "core:menu:allow-set-as-app-menu" 749 }, 750 { 751 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 752 "type": "string", 753 - "const": "core:menu:allow-set-as-help-menu-for-nsapp" 754 }, 755 { 756 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 757 "type": "string", 758 - "const": "core:menu:allow-set-as-window-menu" 759 }, 760 { 761 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 762 "type": "string", 763 - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" 764 }, 765 { 766 "description": "Enables the set_checked command without any pre-configured scope.", 767 "type": "string", 768 - "const": "core:menu:allow-set-checked" 769 }, 770 { 771 "description": "Enables the set_enabled command without any pre-configured scope.", 772 "type": "string", 773 - "const": "core:menu:allow-set-enabled" 774 }, 775 { 776 "description": "Enables the set_icon command without any pre-configured scope.", 777 "type": "string", 778 - "const": "core:menu:allow-set-icon" 779 }, 780 { 781 "description": "Enables the set_text command without any pre-configured scope.", 782 "type": "string", 783 - "const": "core:menu:allow-set-text" 784 }, 785 { 786 "description": "Enables the text command without any pre-configured scope.", 787 "type": "string", 788 - "const": "core:menu:allow-text" 789 }, 790 { 791 "description": "Denies the append command without any pre-configured scope.", 792 "type": "string", 793 - "const": "core:menu:deny-append" 794 }, 795 { 796 "description": "Denies the create_default command without any pre-configured scope.", 797 "type": "string", 798 - "const": "core:menu:deny-create-default" 799 }, 800 { 801 "description": "Denies the get command without any pre-configured scope.", 802 "type": "string", 803 - "const": "core:menu:deny-get" 804 }, 805 { 806 "description": "Denies the insert command without any pre-configured scope.", 807 "type": "string", 808 - "const": "core:menu:deny-insert" 809 }, 810 { 811 "description": "Denies the is_checked command without any pre-configured scope.", 812 "type": "string", 813 - "const": "core:menu:deny-is-checked" 814 }, 815 { 816 "description": "Denies the is_enabled command without any pre-configured scope.", 817 "type": "string", 818 - "const": "core:menu:deny-is-enabled" 819 }, 820 { 821 "description": "Denies the items command without any pre-configured scope.", 822 "type": "string", 823 - "const": "core:menu:deny-items" 824 }, 825 { 826 "description": "Denies the new command without any pre-configured scope.", 827 "type": "string", 828 - "const": "core:menu:deny-new" 829 }, 830 { 831 "description": "Denies the popup command without any pre-configured scope.", 832 "type": "string", 833 - "const": "core:menu:deny-popup" 834 }, 835 { 836 "description": "Denies the prepend command without any pre-configured scope.", 837 "type": "string", 838 - "const": "core:menu:deny-prepend" 839 }, 840 { 841 "description": "Denies the remove command without any pre-configured scope.", 842 "type": "string", 843 - "const": "core:menu:deny-remove" 844 }, 845 { 846 "description": "Denies the remove_at command without any pre-configured scope.", 847 "type": "string", 848 - "const": "core:menu:deny-remove-at" 849 }, 850 { 851 "description": "Denies the set_accelerator command without any pre-configured scope.", 852 "type": "string", 853 - "const": "core:menu:deny-set-accelerator" 854 }, 855 { 856 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 857 "type": "string", 858 - "const": "core:menu:deny-set-as-app-menu" 859 }, 860 { 861 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 862 "type": "string", 863 - "const": "core:menu:deny-set-as-help-menu-for-nsapp" 864 }, 865 { 866 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 867 "type": "string", 868 - "const": "core:menu:deny-set-as-window-menu" 869 }, 870 { 871 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 872 "type": "string", 873 - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" 874 }, 875 { 876 "description": "Denies the set_checked command without any pre-configured scope.", 877 "type": "string", 878 - "const": "core:menu:deny-set-checked" 879 }, 880 { 881 "description": "Denies the set_enabled command without any pre-configured scope.", 882 "type": "string", 883 - "const": "core:menu:deny-set-enabled" 884 }, 885 { 886 "description": "Denies the set_icon command without any pre-configured scope.", 887 "type": "string", 888 - "const": "core:menu:deny-set-icon" 889 }, 890 { 891 "description": "Denies the set_text command without any pre-configured scope.", 892 "type": "string", 893 - "const": "core:menu:deny-set-text" 894 }, 895 { 896 "description": "Denies the text command without any pre-configured scope.", 897 "type": "string", 898 - "const": "core:menu:deny-text" 899 }, 900 { 901 - "description": "Default permissions for the plugin.", 902 "type": "string", 903 - "const": "core:path:default" 904 }, 905 { 906 "description": "Enables the basename command without any pre-configured scope.", 907 "type": "string", 908 - "const": "core:path:allow-basename" 909 }, 910 { 911 "description": "Enables the dirname command without any pre-configured scope.", 912 "type": "string", 913 - "const": "core:path:allow-dirname" 914 }, 915 { 916 "description": "Enables the extname command without any pre-configured scope.", 917 "type": "string", 918 - "const": "core:path:allow-extname" 919 }, 920 { 921 "description": "Enables the is_absolute command without any pre-configured scope.", 922 "type": "string", 923 - "const": "core:path:allow-is-absolute" 924 }, 925 { 926 "description": "Enables the join command without any pre-configured scope.", 927 "type": "string", 928 - "const": "core:path:allow-join" 929 }, 930 { 931 "description": "Enables the normalize command without any pre-configured scope.", 932 "type": "string", 933 - "const": "core:path:allow-normalize" 934 }, 935 { 936 "description": "Enables the resolve command without any pre-configured scope.", 937 "type": "string", 938 - "const": "core:path:allow-resolve" 939 }, 940 { 941 "description": "Enables the resolve_directory command without any pre-configured scope.", 942 "type": "string", 943 - "const": "core:path:allow-resolve-directory" 944 }, 945 { 946 "description": "Denies the basename command without any pre-configured scope.", 947 "type": "string", 948 - "const": "core:path:deny-basename" 949 }, 950 { 951 "description": "Denies the dirname command without any pre-configured scope.", 952 "type": "string", 953 - "const": "core:path:deny-dirname" 954 }, 955 { 956 "description": "Denies the extname command without any pre-configured scope.", 957 "type": "string", 958 - "const": "core:path:deny-extname" 959 }, 960 { 961 "description": "Denies the is_absolute command without any pre-configured scope.", 962 "type": "string", 963 - "const": "core:path:deny-is-absolute" 964 }, 965 { 966 "description": "Denies the join command without any pre-configured scope.", 967 "type": "string", 968 - "const": "core:path:deny-join" 969 }, 970 { 971 "description": "Denies the normalize command without any pre-configured scope.", 972 "type": "string", 973 - "const": "core:path:deny-normalize" 974 }, 975 { 976 "description": "Denies the resolve command without any pre-configured scope.", 977 "type": "string", 978 - "const": "core:path:deny-resolve" 979 }, 980 { 981 "description": "Denies the resolve_directory command without any pre-configured scope.", 982 "type": "string", 983 - "const": "core:path:deny-resolve-directory" 984 }, 985 { 986 - "description": "Default permissions for the plugin.", 987 "type": "string", 988 - "const": "core:resources:default" 989 }, 990 { 991 "description": "Enables the close command without any pre-configured scope.", 992 "type": "string", 993 - "const": "core:resources:allow-close" 994 }, 995 { 996 "description": "Denies the close command without any pre-configured scope.", 997 "type": "string", 998 - "const": "core:resources:deny-close" 999 }, 1000 { 1001 - "description": "Default permissions for the plugin.", 1002 "type": "string", 1003 - "const": "core:tray:default" 1004 }, 1005 { 1006 "description": "Enables the get_by_id command without any pre-configured scope.", 1007 "type": "string", 1008 - "const": "core:tray:allow-get-by-id" 1009 }, 1010 { 1011 "description": "Enables the new command without any pre-configured scope.", 1012 "type": "string", 1013 - "const": "core:tray:allow-new" 1014 }, 1015 { 1016 "description": "Enables the remove_by_id command without any pre-configured scope.", 1017 "type": "string", 1018 - "const": "core:tray:allow-remove-by-id" 1019 }, 1020 { 1021 "description": "Enables the set_icon command without any pre-configured scope.", 1022 "type": "string", 1023 - "const": "core:tray:allow-set-icon" 1024 }, 1025 { 1026 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1027 "type": "string", 1028 - "const": "core:tray:allow-set-icon-as-template" 1029 }, 1030 { 1031 "description": "Enables the set_menu command without any pre-configured scope.", 1032 "type": "string", 1033 - "const": "core:tray:allow-set-menu" 1034 }, 1035 { 1036 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1037 "type": "string", 1038 - "const": "core:tray:allow-set-show-menu-on-left-click" 1039 }, 1040 { 1041 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1042 "type": "string", 1043 - "const": "core:tray:allow-set-temp-dir-path" 1044 }, 1045 { 1046 "description": "Enables the set_title command without any pre-configured scope.", 1047 "type": "string", 1048 - "const": "core:tray:allow-set-title" 1049 }, 1050 { 1051 "description": "Enables the set_tooltip command without any pre-configured scope.", 1052 "type": "string", 1053 - "const": "core:tray:allow-set-tooltip" 1054 }, 1055 { 1056 "description": "Enables the set_visible command without any pre-configured scope.", 1057 "type": "string", 1058 - "const": "core:tray:allow-set-visible" 1059 }, 1060 { 1061 "description": "Denies the get_by_id command without any pre-configured scope.", 1062 "type": "string", 1063 - "const": "core:tray:deny-get-by-id" 1064 }, 1065 { 1066 "description": "Denies the new command without any pre-configured scope.", 1067 "type": "string", 1068 - "const": "core:tray:deny-new" 1069 }, 1070 { 1071 "description": "Denies the remove_by_id command without any pre-configured scope.", 1072 "type": "string", 1073 - "const": "core:tray:deny-remove-by-id" 1074 }, 1075 { 1076 "description": "Denies the set_icon command without any pre-configured scope.", 1077 "type": "string", 1078 - "const": "core:tray:deny-set-icon" 1079 }, 1080 { 1081 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1082 "type": "string", 1083 - "const": "core:tray:deny-set-icon-as-template" 1084 }, 1085 { 1086 "description": "Denies the set_menu command without any pre-configured scope.", 1087 "type": "string", 1088 - "const": "core:tray:deny-set-menu" 1089 }, 1090 { 1091 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1092 "type": "string", 1093 - "const": "core:tray:deny-set-show-menu-on-left-click" 1094 }, 1095 { 1096 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1097 "type": "string", 1098 - "const": "core:tray:deny-set-temp-dir-path" 1099 }, 1100 { 1101 "description": "Denies the set_title command without any pre-configured scope.", 1102 "type": "string", 1103 - "const": "core:tray:deny-set-title" 1104 }, 1105 { 1106 "description": "Denies the set_tooltip command without any pre-configured scope.", 1107 "type": "string", 1108 - "const": "core:tray:deny-set-tooltip" 1109 }, 1110 { 1111 "description": "Denies the set_visible command without any pre-configured scope.", 1112 "type": "string", 1113 - "const": "core:tray:deny-set-visible" 1114 }, 1115 { 1116 - "description": "Default permissions for the plugin.", 1117 "type": "string", 1118 - "const": "core:webview:default" 1119 }, 1120 { 1121 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1122 "type": "string", 1123 - "const": "core:webview:allow-clear-all-browsing-data" 1124 }, 1125 { 1126 "description": "Enables the create_webview command without any pre-configured scope.", 1127 "type": "string", 1128 - "const": "core:webview:allow-create-webview" 1129 }, 1130 { 1131 "description": "Enables the create_webview_window command without any pre-configured scope.", 1132 "type": "string", 1133 - "const": "core:webview:allow-create-webview-window" 1134 }, 1135 { 1136 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1137 "type": "string", 1138 - "const": "core:webview:allow-get-all-webviews" 1139 }, 1140 { 1141 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1142 "type": "string", 1143 - "const": "core:webview:allow-internal-toggle-devtools" 1144 }, 1145 { 1146 "description": "Enables the print command without any pre-configured scope.", 1147 "type": "string", 1148 - "const": "core:webview:allow-print" 1149 }, 1150 { 1151 "description": "Enables the reparent command without any pre-configured scope.", 1152 "type": "string", 1153 - "const": "core:webview:allow-reparent" 1154 }, 1155 { 1156 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1157 "type": "string", 1158 - "const": "core:webview:allow-set-webview-focus" 1159 }, 1160 { 1161 "description": "Enables the set_webview_position command without any pre-configured scope.", 1162 "type": "string", 1163 - "const": "core:webview:allow-set-webview-position" 1164 }, 1165 { 1166 "description": "Enables the set_webview_size command without any pre-configured scope.", 1167 "type": "string", 1168 - "const": "core:webview:allow-set-webview-size" 1169 }, 1170 { 1171 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1172 "type": "string", 1173 - "const": "core:webview:allow-set-webview-zoom" 1174 }, 1175 { 1176 "description": "Enables the webview_close command without any pre-configured scope.", 1177 "type": "string", 1178 - "const": "core:webview:allow-webview-close" 1179 }, 1180 { 1181 "description": "Enables the webview_hide command without any pre-configured scope.", 1182 "type": "string", 1183 - "const": "core:webview:allow-webview-hide" 1184 }, 1185 { 1186 "description": "Enables the webview_position command without any pre-configured scope.", 1187 "type": "string", 1188 - "const": "core:webview:allow-webview-position" 1189 }, 1190 { 1191 "description": "Enables the webview_show command without any pre-configured scope.", 1192 "type": "string", 1193 - "const": "core:webview:allow-webview-show" 1194 }, 1195 { 1196 "description": "Enables the webview_size command without any pre-configured scope.", 1197 "type": "string", 1198 - "const": "core:webview:allow-webview-size" 1199 }, 1200 { 1201 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1202 "type": "string", 1203 - "const": "core:webview:deny-clear-all-browsing-data" 1204 }, 1205 { 1206 "description": "Denies the create_webview command without any pre-configured scope.", 1207 "type": "string", 1208 - "const": "core:webview:deny-create-webview" 1209 }, 1210 { 1211 "description": "Denies the create_webview_window command without any pre-configured scope.", 1212 "type": "string", 1213 - "const": "core:webview:deny-create-webview-window" 1214 }, 1215 { 1216 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1217 "type": "string", 1218 - "const": "core:webview:deny-get-all-webviews" 1219 }, 1220 { 1221 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1222 "type": "string", 1223 - "const": "core:webview:deny-internal-toggle-devtools" 1224 }, 1225 { 1226 "description": "Denies the print command without any pre-configured scope.", 1227 "type": "string", 1228 - "const": "core:webview:deny-print" 1229 }, 1230 { 1231 "description": "Denies the reparent command without any pre-configured scope.", 1232 "type": "string", 1233 - "const": "core:webview:deny-reparent" 1234 }, 1235 { 1236 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1237 "type": "string", 1238 - "const": "core:webview:deny-set-webview-focus" 1239 }, 1240 { 1241 "description": "Denies the set_webview_position command without any pre-configured scope.", 1242 "type": "string", 1243 - "const": "core:webview:deny-set-webview-position" 1244 }, 1245 { 1246 "description": "Denies the set_webview_size command without any pre-configured scope.", 1247 "type": "string", 1248 - "const": "core:webview:deny-set-webview-size" 1249 }, 1250 { 1251 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1252 "type": "string", 1253 - "const": "core:webview:deny-set-webview-zoom" 1254 }, 1255 { 1256 "description": "Denies the webview_close command without any pre-configured scope.", 1257 "type": "string", 1258 - "const": "core:webview:deny-webview-close" 1259 }, 1260 { 1261 "description": "Denies the webview_hide command without any pre-configured scope.", 1262 "type": "string", 1263 - "const": "core:webview:deny-webview-hide" 1264 }, 1265 { 1266 "description": "Denies the webview_position command without any pre-configured scope.", 1267 "type": "string", 1268 - "const": "core:webview:deny-webview-position" 1269 }, 1270 { 1271 "description": "Denies the webview_show command without any pre-configured scope.", 1272 "type": "string", 1273 - "const": "core:webview:deny-webview-show" 1274 }, 1275 { 1276 "description": "Denies the webview_size command without any pre-configured scope.", 1277 "type": "string", 1278 - "const": "core:webview:deny-webview-size" 1279 }, 1280 { 1281 - "description": "Default permissions for the plugin.", 1282 "type": "string", 1283 - "const": "core:window:default" 1284 }, 1285 { 1286 "description": "Enables the available_monitors command without any pre-configured scope.", 1287 "type": "string", 1288 - "const": "core:window:allow-available-monitors" 1289 }, 1290 { 1291 "description": "Enables the center command without any pre-configured scope.", 1292 "type": "string", 1293 - "const": "core:window:allow-center" 1294 }, 1295 { 1296 "description": "Enables the close command without any pre-configured scope.", 1297 "type": "string", 1298 - "const": "core:window:allow-close" 1299 }, 1300 { 1301 "description": "Enables the create command without any pre-configured scope.", 1302 "type": "string", 1303 - "const": "core:window:allow-create" 1304 }, 1305 { 1306 "description": "Enables the current_monitor command without any pre-configured scope.", 1307 "type": "string", 1308 - "const": "core:window:allow-current-monitor" 1309 }, 1310 { 1311 "description": "Enables the cursor_position command without any pre-configured scope.", 1312 "type": "string", 1313 - "const": "core:window:allow-cursor-position" 1314 }, 1315 { 1316 "description": "Enables the destroy command without any pre-configured scope.", 1317 "type": "string", 1318 - "const": "core:window:allow-destroy" 1319 }, 1320 { 1321 "description": "Enables the get_all_windows command without any pre-configured scope.", 1322 "type": "string", 1323 - "const": "core:window:allow-get-all-windows" 1324 }, 1325 { 1326 "description": "Enables the hide command without any pre-configured scope.", 1327 "type": "string", 1328 - "const": "core:window:allow-hide" 1329 }, 1330 { 1331 "description": "Enables the inner_position command without any pre-configured scope.", 1332 "type": "string", 1333 - "const": "core:window:allow-inner-position" 1334 }, 1335 { 1336 "description": "Enables the inner_size command without any pre-configured scope.", 1337 "type": "string", 1338 - "const": "core:window:allow-inner-size" 1339 }, 1340 { 1341 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1342 "type": "string", 1343 - "const": "core:window:allow-internal-toggle-maximize" 1344 }, 1345 { 1346 "description": "Enables the is_closable command without any pre-configured scope.", 1347 "type": "string", 1348 - "const": "core:window:allow-is-closable" 1349 }, 1350 { 1351 "description": "Enables the is_decorated command without any pre-configured scope.", 1352 "type": "string", 1353 - "const": "core:window:allow-is-decorated" 1354 }, 1355 { 1356 "description": "Enables the is_enabled command without any pre-configured scope.", 1357 "type": "string", 1358 - "const": "core:window:allow-is-enabled" 1359 }, 1360 { 1361 "description": "Enables the is_focused command without any pre-configured scope.", 1362 "type": "string", 1363 - "const": "core:window:allow-is-focused" 1364 }, 1365 { 1366 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1367 "type": "string", 1368 - "const": "core:window:allow-is-fullscreen" 1369 }, 1370 { 1371 "description": "Enables the is_maximizable command without any pre-configured scope.", 1372 "type": "string", 1373 - "const": "core:window:allow-is-maximizable" 1374 }, 1375 { 1376 "description": "Enables the is_maximized command without any pre-configured scope.", 1377 "type": "string", 1378 - "const": "core:window:allow-is-maximized" 1379 }, 1380 { 1381 "description": "Enables the is_minimizable command without any pre-configured scope.", 1382 "type": "string", 1383 - "const": "core:window:allow-is-minimizable" 1384 }, 1385 { 1386 "description": "Enables the is_minimized command without any pre-configured scope.", 1387 "type": "string", 1388 - "const": "core:window:allow-is-minimized" 1389 }, 1390 { 1391 "description": "Enables the is_resizable command without any pre-configured scope.", 1392 "type": "string", 1393 - "const": "core:window:allow-is-resizable" 1394 }, 1395 { 1396 "description": "Enables the is_visible command without any pre-configured scope.", 1397 "type": "string", 1398 - "const": "core:window:allow-is-visible" 1399 }, 1400 { 1401 "description": "Enables the maximize command without any pre-configured scope.", 1402 "type": "string", 1403 - "const": "core:window:allow-maximize" 1404 }, 1405 { 1406 "description": "Enables the minimize command without any pre-configured scope.", 1407 "type": "string", 1408 - "const": "core:window:allow-minimize" 1409 }, 1410 { 1411 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1412 "type": "string", 1413 - "const": "core:window:allow-monitor-from-point" 1414 }, 1415 { 1416 "description": "Enables the outer_position command without any pre-configured scope.", 1417 "type": "string", 1418 - "const": "core:window:allow-outer-position" 1419 }, 1420 { 1421 "description": "Enables the outer_size command without any pre-configured scope.", 1422 "type": "string", 1423 - "const": "core:window:allow-outer-size" 1424 }, 1425 { 1426 "description": "Enables the primary_monitor command without any pre-configured scope.", 1427 "type": "string", 1428 - "const": "core:window:allow-primary-monitor" 1429 }, 1430 { 1431 "description": "Enables the request_user_attention command without any pre-configured scope.", 1432 "type": "string", 1433 - "const": "core:window:allow-request-user-attention" 1434 }, 1435 { 1436 "description": "Enables the scale_factor command without any pre-configured scope.", 1437 "type": "string", 1438 - "const": "core:window:allow-scale-factor" 1439 }, 1440 { 1441 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1442 "type": "string", 1443 - "const": "core:window:allow-set-always-on-bottom" 1444 }, 1445 { 1446 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1447 "type": "string", 1448 - "const": "core:window:allow-set-always-on-top" 1449 }, 1450 { 1451 "description": "Enables the set_closable command without any pre-configured scope.", 1452 "type": "string", 1453 - "const": "core:window:allow-set-closable" 1454 }, 1455 { 1456 "description": "Enables the set_content_protected command without any pre-configured scope.", 1457 "type": "string", 1458 - "const": "core:window:allow-set-content-protected" 1459 }, 1460 { 1461 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1462 "type": "string", 1463 - "const": "core:window:allow-set-cursor-grab" 1464 }, 1465 { 1466 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1467 "type": "string", 1468 - "const": "core:window:allow-set-cursor-icon" 1469 }, 1470 { 1471 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1472 "type": "string", 1473 - "const": "core:window:allow-set-cursor-position" 1474 }, 1475 { 1476 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1477 "type": "string", 1478 - "const": "core:window:allow-set-cursor-visible" 1479 }, 1480 { 1481 "description": "Enables the set_decorations command without any pre-configured scope.", 1482 "type": "string", 1483 - "const": "core:window:allow-set-decorations" 1484 }, 1485 { 1486 "description": "Enables the set_effects command without any pre-configured scope.", 1487 "type": "string", 1488 - "const": "core:window:allow-set-effects" 1489 }, 1490 { 1491 "description": "Enables the set_enabled command without any pre-configured scope.", 1492 "type": "string", 1493 - "const": "core:window:allow-set-enabled" 1494 }, 1495 { 1496 "description": "Enables the set_focus command without any pre-configured scope.", 1497 "type": "string", 1498 - "const": "core:window:allow-set-focus" 1499 }, 1500 { 1501 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1502 "type": "string", 1503 - "const": "core:window:allow-set-fullscreen" 1504 }, 1505 { 1506 "description": "Enables the set_icon command without any pre-configured scope.", 1507 "type": "string", 1508 - "const": "core:window:allow-set-icon" 1509 }, 1510 { 1511 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1512 "type": "string", 1513 - "const": "core:window:allow-set-ignore-cursor-events" 1514 }, 1515 { 1516 "description": "Enables the set_max_size command without any pre-configured scope.", 1517 "type": "string", 1518 - "const": "core:window:allow-set-max-size" 1519 }, 1520 { 1521 "description": "Enables the set_maximizable command without any pre-configured scope.", 1522 "type": "string", 1523 - "const": "core:window:allow-set-maximizable" 1524 }, 1525 { 1526 "description": "Enables the set_min_size command without any pre-configured scope.", 1527 "type": "string", 1528 - "const": "core:window:allow-set-min-size" 1529 }, 1530 { 1531 "description": "Enables the set_minimizable command without any pre-configured scope.", 1532 "type": "string", 1533 - "const": "core:window:allow-set-minimizable" 1534 }, 1535 { 1536 "description": "Enables the set_position command without any pre-configured scope.", 1537 "type": "string", 1538 - "const": "core:window:allow-set-position" 1539 }, 1540 { 1541 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1542 "type": "string", 1543 - "const": "core:window:allow-set-progress-bar" 1544 }, 1545 { 1546 "description": "Enables the set_resizable command without any pre-configured scope.", 1547 "type": "string", 1548 - "const": "core:window:allow-set-resizable" 1549 }, 1550 { 1551 "description": "Enables the set_shadow command without any pre-configured scope.", 1552 "type": "string", 1553 - "const": "core:window:allow-set-shadow" 1554 }, 1555 { 1556 "description": "Enables the set_size command without any pre-configured scope.", 1557 "type": "string", 1558 - "const": "core:window:allow-set-size" 1559 }, 1560 { 1561 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1562 "type": "string", 1563 - "const": "core:window:allow-set-size-constraints" 1564 }, 1565 { 1566 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1567 "type": "string", 1568 - "const": "core:window:allow-set-skip-taskbar" 1569 }, 1570 { 1571 "description": "Enables the set_theme command without any pre-configured scope.", 1572 "type": "string", 1573 - "const": "core:window:allow-set-theme" 1574 }, 1575 { 1576 "description": "Enables the set_title command without any pre-configured scope.", 1577 "type": "string", 1578 - "const": "core:window:allow-set-title" 1579 }, 1580 { 1581 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1582 "type": "string", 1583 - "const": "core:window:allow-set-title-bar-style" 1584 }, 1585 { 1586 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1587 "type": "string", 1588 - "const": "core:window:allow-set-visible-on-all-workspaces" 1589 }, 1590 { 1591 "description": "Enables the show command without any pre-configured scope.", 1592 "type": "string", 1593 - "const": "core:window:allow-show" 1594 }, 1595 { 1596 "description": "Enables the start_dragging command without any pre-configured scope.", 1597 "type": "string", 1598 - "const": "core:window:allow-start-dragging" 1599 }, 1600 { 1601 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1602 "type": "string", 1603 - "const": "core:window:allow-start-resize-dragging" 1604 }, 1605 { 1606 "description": "Enables the theme command without any pre-configured scope.", 1607 "type": "string", 1608 - "const": "core:window:allow-theme" 1609 }, 1610 { 1611 "description": "Enables the title command without any pre-configured scope.", 1612 "type": "string", 1613 - "const": "core:window:allow-title" 1614 }, 1615 { 1616 "description": "Enables the toggle_maximize command without any pre-configured scope.", 1617 "type": "string", 1618 - "const": "core:window:allow-toggle-maximize" 1619 }, 1620 { 1621 "description": "Enables the unmaximize command without any pre-configured scope.", 1622 "type": "string", 1623 - "const": "core:window:allow-unmaximize" 1624 }, 1625 { 1626 "description": "Enables the unminimize command without any pre-configured scope.", 1627 "type": "string", 1628 - "const": "core:window:allow-unminimize" 1629 }, 1630 { 1631 "description": "Denies the available_monitors command without any pre-configured scope.", 1632 "type": "string", 1633 - "const": "core:window:deny-available-monitors" 1634 }, 1635 { 1636 "description": "Denies the center command without any pre-configured scope.", 1637 "type": "string", 1638 - "const": "core:window:deny-center" 1639 }, 1640 { 1641 "description": "Denies the close command without any pre-configured scope.", 1642 "type": "string", 1643 - "const": "core:window:deny-close" 1644 }, 1645 { 1646 "description": "Denies the create command without any pre-configured scope.", 1647 "type": "string", 1648 - "const": "core:window:deny-create" 1649 }, 1650 { 1651 "description": "Denies the current_monitor command without any pre-configured scope.", 1652 "type": "string", 1653 - "const": "core:window:deny-current-monitor" 1654 }, 1655 { 1656 "description": "Denies the cursor_position command without any pre-configured scope.", 1657 "type": "string", 1658 - "const": "core:window:deny-cursor-position" 1659 }, 1660 { 1661 "description": "Denies the destroy command without any pre-configured scope.", 1662 "type": "string", 1663 - "const": "core:window:deny-destroy" 1664 }, 1665 { 1666 "description": "Denies the get_all_windows command without any pre-configured scope.", 1667 "type": "string", 1668 - "const": "core:window:deny-get-all-windows" 1669 }, 1670 { 1671 "description": "Denies the hide command without any pre-configured scope.", 1672 "type": "string", 1673 - "const": "core:window:deny-hide" 1674 }, 1675 { 1676 "description": "Denies the inner_position command without any pre-configured scope.", 1677 "type": "string", 1678 - "const": "core:window:deny-inner-position" 1679 }, 1680 { 1681 "description": "Denies the inner_size command without any pre-configured scope.", 1682 "type": "string", 1683 - "const": "core:window:deny-inner-size" 1684 }, 1685 { 1686 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 1687 "type": "string", 1688 - "const": "core:window:deny-internal-toggle-maximize" 1689 }, 1690 { 1691 "description": "Denies the is_closable command without any pre-configured scope.", 1692 "type": "string", 1693 - "const": "core:window:deny-is-closable" 1694 }, 1695 { 1696 "description": "Denies the is_decorated command without any pre-configured scope.", 1697 "type": "string", 1698 - "const": "core:window:deny-is-decorated" 1699 }, 1700 { 1701 "description": "Denies the is_enabled command without any pre-configured scope.", 1702 "type": "string", 1703 - "const": "core:window:deny-is-enabled" 1704 }, 1705 { 1706 "description": "Denies the is_focused command without any pre-configured scope.", 1707 "type": "string", 1708 - "const": "core:window:deny-is-focused" 1709 }, 1710 { 1711 "description": "Denies the is_fullscreen command without any pre-configured scope.", 1712 "type": "string", 1713 - "const": "core:window:deny-is-fullscreen" 1714 }, 1715 { 1716 "description": "Denies the is_maximizable command without any pre-configured scope.", 1717 "type": "string", 1718 - "const": "core:window:deny-is-maximizable" 1719 }, 1720 { 1721 "description": "Denies the is_maximized command without any pre-configured scope.", 1722 "type": "string", 1723 - "const": "core:window:deny-is-maximized" 1724 }, 1725 { 1726 "description": "Denies the is_minimizable command without any pre-configured scope.", 1727 "type": "string", 1728 - "const": "core:window:deny-is-minimizable" 1729 }, 1730 { 1731 "description": "Denies the is_minimized command without any pre-configured scope.", 1732 "type": "string", 1733 - "const": "core:window:deny-is-minimized" 1734 }, 1735 { 1736 "description": "Denies the is_resizable command without any pre-configured scope.", 1737 "type": "string", 1738 - "const": "core:window:deny-is-resizable" 1739 }, 1740 { 1741 "description": "Denies the is_visible command without any pre-configured scope.", 1742 "type": "string", 1743 - "const": "core:window:deny-is-visible" 1744 }, 1745 { 1746 "description": "Denies the maximize command without any pre-configured scope.", 1747 "type": "string", 1748 - "const": "core:window:deny-maximize" 1749 }, 1750 { 1751 "description": "Denies the minimize command without any pre-configured scope.", 1752 "type": "string", 1753 - "const": "core:window:deny-minimize" 1754 }, 1755 { 1756 "description": "Denies the monitor_from_point command without any pre-configured scope.", 1757 "type": "string", 1758 - "const": "core:window:deny-monitor-from-point" 1759 }, 1760 { 1761 "description": "Denies the outer_position command without any pre-configured scope.", 1762 "type": "string", 1763 - "const": "core:window:deny-outer-position" 1764 }, 1765 { 1766 "description": "Denies the outer_size command without any pre-configured scope.", 1767 "type": "string", 1768 - "const": "core:window:deny-outer-size" 1769 }, 1770 { 1771 "description": "Denies the primary_monitor command without any pre-configured scope.", 1772 "type": "string", 1773 - "const": "core:window:deny-primary-monitor" 1774 }, 1775 { 1776 "description": "Denies the request_user_attention command without any pre-configured scope.", 1777 "type": "string", 1778 - "const": "core:window:deny-request-user-attention" 1779 }, 1780 { 1781 "description": "Denies the scale_factor command without any pre-configured scope.", 1782 "type": "string", 1783 - "const": "core:window:deny-scale-factor" 1784 }, 1785 { 1786 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 1787 "type": "string", 1788 - "const": "core:window:deny-set-always-on-bottom" 1789 }, 1790 { 1791 "description": "Denies the set_always_on_top command without any pre-configured scope.", 1792 "type": "string", 1793 - "const": "core:window:deny-set-always-on-top" 1794 }, 1795 { 1796 "description": "Denies the set_closable command without any pre-configured scope.", 1797 "type": "string", 1798 - "const": "core:window:deny-set-closable" 1799 }, 1800 { 1801 "description": "Denies the set_content_protected command without any pre-configured scope.", 1802 "type": "string", 1803 - "const": "core:window:deny-set-content-protected" 1804 }, 1805 { 1806 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 - "const": "core:window:deny-set-cursor-grab" 1809 }, 1810 { 1811 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 1812 "type": "string", 1813 - "const": "core:window:deny-set-cursor-icon" 1814 }, 1815 { 1816 "description": "Denies the set_cursor_position command without any pre-configured scope.", 1817 "type": "string", 1818 - "const": "core:window:deny-set-cursor-position" 1819 }, 1820 { 1821 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 1822 "type": "string", 1823 - "const": "core:window:deny-set-cursor-visible" 1824 }, 1825 { 1826 "description": "Denies the set_decorations command without any pre-configured scope.", 1827 "type": "string", 1828 - "const": "core:window:deny-set-decorations" 1829 }, 1830 { 1831 "description": "Denies the set_effects command without any pre-configured scope.", 1832 "type": "string", 1833 - "const": "core:window:deny-set-effects" 1834 }, 1835 { 1836 "description": "Denies the set_enabled command without any pre-configured scope.", 1837 "type": "string", 1838 - "const": "core:window:deny-set-enabled" 1839 }, 1840 { 1841 "description": "Denies the set_focus command without any pre-configured scope.", 1842 "type": "string", 1843 - "const": "core:window:deny-set-focus" 1844 }, 1845 { 1846 "description": "Denies the set_fullscreen command without any pre-configured scope.", 1847 "type": "string", 1848 - "const": "core:window:deny-set-fullscreen" 1849 }, 1850 { 1851 "description": "Denies the set_icon command without any pre-configured scope.", 1852 "type": "string", 1853 - "const": "core:window:deny-set-icon" 1854 }, 1855 { 1856 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 1857 "type": "string", 1858 - "const": "core:window:deny-set-ignore-cursor-events" 1859 }, 1860 { 1861 "description": "Denies the set_max_size command without any pre-configured scope.", 1862 "type": "string", 1863 - "const": "core:window:deny-set-max-size" 1864 }, 1865 { 1866 "description": "Denies the set_maximizable command without any pre-configured scope.", 1867 "type": "string", 1868 - "const": "core:window:deny-set-maximizable" 1869 }, 1870 { 1871 "description": "Denies the set_min_size command without any pre-configured scope.", 1872 "type": "string", 1873 - "const": "core:window:deny-set-min-size" 1874 }, 1875 { 1876 "description": "Denies the set_minimizable command without any pre-configured scope.", 1877 "type": "string", 1878 - "const": "core:window:deny-set-minimizable" 1879 }, 1880 { 1881 "description": "Denies the set_position command without any pre-configured scope.", 1882 "type": "string", 1883 - "const": "core:window:deny-set-position" 1884 }, 1885 { 1886 "description": "Denies the set_progress_bar command without any pre-configured scope.", 1887 "type": "string", 1888 - "const": "core:window:deny-set-progress-bar" 1889 }, 1890 { 1891 "description": "Denies the set_resizable command without any pre-configured scope.", 1892 "type": "string", 1893 - "const": "core:window:deny-set-resizable" 1894 }, 1895 { 1896 "description": "Denies the set_shadow command without any pre-configured scope.", 1897 "type": "string", 1898 - "const": "core:window:deny-set-shadow" 1899 }, 1900 { 1901 "description": "Denies the set_size command without any pre-configured scope.", 1902 "type": "string", 1903 - "const": "core:window:deny-set-size" 1904 }, 1905 { 1906 "description": "Denies the set_size_constraints command without any pre-configured scope.", 1907 "type": "string", 1908 - "const": "core:window:deny-set-size-constraints" 1909 }, 1910 { 1911 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 1912 "type": "string", 1913 - "const": "core:window:deny-set-skip-taskbar" 1914 }, 1915 { 1916 "description": "Denies the set_theme command without any pre-configured scope.", 1917 "type": "string", 1918 - "const": "core:window:deny-set-theme" 1919 }, 1920 { 1921 "description": "Denies the set_title command without any pre-configured scope.", 1922 "type": "string", 1923 - "const": "core:window:deny-set-title" 1924 }, 1925 { 1926 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 1927 "type": "string", 1928 - "const": "core:window:deny-set-title-bar-style" 1929 }, 1930 { 1931 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 1932 "type": "string", 1933 - "const": "core:window:deny-set-visible-on-all-workspaces" 1934 }, 1935 { 1936 "description": "Denies the show command without any pre-configured scope.", 1937 "type": "string", 1938 - "const": "core:window:deny-show" 1939 }, 1940 { 1941 "description": "Denies the start_dragging command without any pre-configured scope.", 1942 "type": "string", 1943 - "const": "core:window:deny-start-dragging" 1944 }, 1945 { 1946 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 1947 "type": "string", 1948 - "const": "core:window:deny-start-resize-dragging" 1949 }, 1950 { 1951 "description": "Denies the theme command without any pre-configured scope.", 1952 "type": "string", 1953 - "const": "core:window:deny-theme" 1954 }, 1955 { 1956 "description": "Denies the title command without any pre-configured scope.", 1957 "type": "string", 1958 - "const": "core:window:deny-title" 1959 }, 1960 { 1961 "description": "Denies the toggle_maximize command without any pre-configured scope.", 1962 "type": "string", 1963 - "const": "core:window:deny-toggle-maximize" 1964 }, 1965 { 1966 "description": "Denies the unmaximize command without any pre-configured scope.", 1967 "type": "string", 1968 - "const": "core:window:deny-unmaximize" 1969 }, 1970 { 1971 "description": "Denies the unminimize command without any pre-configured scope.", 1972 "type": "string", 1973 - "const": "core:window:deny-unminimize" 1974 }, 1975 { 1976 - "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n", 1977 "type": "string", 1978 - "const": "http:default" 1979 }, 1980 { 1981 "description": "Enables the fetch command without any pre-configured scope.", 1982 "type": "string", 1983 - "const": "http:allow-fetch" 1984 }, 1985 { 1986 "description": "Enables the fetch_cancel command without any pre-configured scope.", 1987 "type": "string", 1988 - "const": "http:allow-fetch-cancel" 1989 }, 1990 { 1991 "description": "Enables the fetch_read_body command without any pre-configured scope.", 1992 "type": "string", 1993 - "const": "http:allow-fetch-read-body" 1994 }, 1995 { 1996 "description": "Enables the fetch_send command without any pre-configured scope.", 1997 "type": "string", 1998 - "const": "http:allow-fetch-send" 1999 }, 2000 { 2001 "description": "Denies the fetch command without any pre-configured scope.", 2002 "type": "string", 2003 - "const": "http:deny-fetch" 2004 }, 2005 { 2006 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2007 "type": "string", 2008 - "const": "http:deny-fetch-cancel" 2009 }, 2010 { 2011 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2012 "type": "string", 2013 - "const": "http:deny-fetch-read-body" 2014 }, 2015 { 2016 "description": "Denies the fetch_send command without any pre-configured scope.", 2017 "type": "string", 2018 - "const": "http:deny-fetch-send" 2019 }, 2020 { 2021 - "description": "This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", 2022 "type": "string", 2023 - "const": "process:default" 2024 }, 2025 { 2026 "description": "Enables the exit command without any pre-configured scope.", 2027 "type": "string", 2028 - "const": "process:allow-exit" 2029 }, 2030 { 2031 "description": "Enables the restart command without any pre-configured scope.", 2032 "type": "string", 2033 - "const": "process:allow-restart" 2034 }, 2035 { 2036 "description": "Denies the exit command without any pre-configured scope.", 2037 "type": "string", 2038 - "const": "process:deny-exit" 2039 }, 2040 { 2041 "description": "Denies the restart command without any pre-configured scope.", 2042 "type": "string", 2043 - "const": "process:deny-restart" 2044 }, 2045 { 2046 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", 2047 "type": "string", 2048 - "const": "shell:default" 2049 }, 2050 { 2051 "description": "Enables the execute command without any pre-configured scope.", 2052 "type": "string", 2053 - "const": "shell:allow-execute" 2054 }, 2055 { 2056 "description": "Enables the kill command without any pre-configured scope.", 2057 "type": "string", 2058 - "const": "shell:allow-kill" 2059 }, 2060 { 2061 "description": "Enables the open command without any pre-configured scope.", 2062 "type": "string", 2063 - "const": "shell:allow-open" 2064 }, 2065 { 2066 "description": "Enables the spawn command without any pre-configured scope.", 2067 "type": "string", 2068 - "const": "shell:allow-spawn" 2069 }, 2070 { 2071 "description": "Enables the stdin_write command without any pre-configured scope.", 2072 "type": "string", 2073 - "const": "shell:allow-stdin-write" 2074 }, 2075 { 2076 "description": "Denies the execute command without any pre-configured scope.", 2077 "type": "string", 2078 - "const": "shell:deny-execute" 2079 }, 2080 { 2081 "description": "Denies the kill command without any pre-configured scope.", 2082 "type": "string", 2083 - "const": "shell:deny-kill" 2084 }, 2085 { 2086 "description": "Denies the open command without any pre-configured scope.", 2087 "type": "string", 2088 - "const": "shell:deny-open" 2089 }, 2090 { 2091 "description": "Denies the spawn command without any pre-configured scope.", 2092 "type": "string", 2093 - "const": "shell:deny-spawn" 2094 }, 2095 { 2096 "description": "Denies the stdin_write command without any pre-configured scope.", 2097 "type": "string", 2098 - "const": "shell:deny-stdin-write" 2099 } 2100 ] 2101 },
··· 37 ], 38 "definitions": { 39 "Capability": { 40 + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", 41 "type": "object", 42 "required": [ 43 "identifier", ··· 49 "type": "string" 50 }, 51 "description": { 52 + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", 53 "default": "", 54 "type": "string" 55 }, ··· 70 "type": "boolean" 71 }, 72 "windows": { 73 + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", 74 "type": "array", 75 "items": { 76 "type": "string" 77 } 78 }, 79 "webviews": { 80 + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", 81 "type": "array", 82 "items": { 83 "type": "string" 84 } 85 }, 86 "permissions": { 87 + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", 88 "type": "array", 89 "items": { 90 "$ref": "#/definitions/PermissionEntry" ··· 140 "identifier": { 141 "anyOf": [ 142 { 143 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 144 "type": "string", 145 + "const": "http:default", 146 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 147 }, 148 { 149 "description": "Enables the fetch command without any pre-configured scope.", 150 "type": "string", 151 + "const": "http:allow-fetch", 152 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 153 }, 154 { 155 "description": "Enables the fetch_cancel command without any pre-configured scope.", 156 "type": "string", 157 + "const": "http:allow-fetch-cancel", 158 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 159 }, 160 { 161 "description": "Enables the fetch_read_body command without any pre-configured scope.", 162 "type": "string", 163 + "const": "http:allow-fetch-read-body", 164 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 165 }, 166 { 167 "description": "Enables the fetch_send command without any pre-configured scope.", 168 "type": "string", 169 + "const": "http:allow-fetch-send", 170 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 171 }, 172 { 173 "description": "Denies the fetch command without any pre-configured scope.", 174 "type": "string", 175 + "const": "http:deny-fetch", 176 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 177 }, 178 { 179 "description": "Denies the fetch_cancel command without any pre-configured scope.", 180 "type": "string", 181 + "const": "http:deny-fetch-cancel", 182 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 183 }, 184 { 185 "description": "Denies the fetch_read_body command without any pre-configured scope.", 186 "type": "string", 187 + "const": "http:deny-fetch-read-body", 188 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 189 }, 190 { 191 "description": "Denies the fetch_send command without any pre-configured scope.", 192 "type": "string", 193 + "const": "http:deny-fetch-send", 194 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 195 } 196 ] 197 } ··· 266 "identifier": { 267 "anyOf": [ 268 { 269 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 270 "type": "string", 271 + "const": "shell:default", 272 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 273 }, 274 { 275 "description": "Enables the execute command without any pre-configured scope.", 276 "type": "string", 277 + "const": "shell:allow-execute", 278 + "markdownDescription": "Enables the execute command without any pre-configured scope." 279 }, 280 { 281 "description": "Enables the kill command without any pre-configured scope.", 282 "type": "string", 283 + "const": "shell:allow-kill", 284 + "markdownDescription": "Enables the kill command without any pre-configured scope." 285 }, 286 { 287 "description": "Enables the open command without any pre-configured scope.", 288 "type": "string", 289 + "const": "shell:allow-open", 290 + "markdownDescription": "Enables the open command without any pre-configured scope." 291 }, 292 { 293 "description": "Enables the spawn command without any pre-configured scope.", 294 "type": "string", 295 + "const": "shell:allow-spawn", 296 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 297 }, 298 { 299 "description": "Enables the stdin_write command without any pre-configured scope.", 300 "type": "string", 301 + "const": "shell:allow-stdin-write", 302 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 303 }, 304 { 305 "description": "Denies the execute command without any pre-configured scope.", 306 "type": "string", 307 + "const": "shell:deny-execute", 308 + "markdownDescription": "Denies the execute command without any pre-configured scope." 309 }, 310 { 311 "description": "Denies the kill command without any pre-configured scope.", 312 "type": "string", 313 + "const": "shell:deny-kill", 314 + "markdownDescription": "Denies the kill command without any pre-configured scope." 315 }, 316 { 317 "description": "Denies the open command without any pre-configured scope.", 318 "type": "string", 319 + "const": "shell:deny-open", 320 + "markdownDescription": "Denies the open command without any pre-configured scope." 321 }, 322 { 323 "description": "Denies the spawn command without any pre-configured scope.", 324 "type": "string", 325 + "const": "shell:deny-spawn", 326 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 327 }, 328 { 329 "description": "Denies the stdin_write command without any pre-configured scope.", 330 "type": "string", 331 + "const": "shell:deny-stdin-write", 332 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 333 } 334 ] 335 } ··· 513 "description": "Permission identifier", 514 "oneOf": [ 515 { 516 + "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`", 517 "type": "string", 518 + "const": "core:default", 519 + "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" 520 }, 521 { 522 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`", 523 "type": "string", 524 + "const": "core:app:default", 525 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`" 526 }, 527 { 528 "description": "Enables the app_hide command without any pre-configured scope.", 529 "type": "string", 530 + "const": "core:app:allow-app-hide", 531 + "markdownDescription": "Enables the app_hide command without any pre-configured scope." 532 }, 533 { 534 "description": "Enables the app_show command without any pre-configured scope.", 535 "type": "string", 536 + "const": "core:app:allow-app-show", 537 + "markdownDescription": "Enables the app_show command without any pre-configured scope." 538 + }, 539 + { 540 + "description": "Enables the bundle_type command without any pre-configured scope.", 541 + "type": "string", 542 + "const": "core:app:allow-bundle-type", 543 + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." 544 }, 545 { 546 "description": "Enables the default_window_icon command without any pre-configured scope.", 547 "type": "string", 548 + "const": "core:app:allow-default-window-icon", 549 + "markdownDescription": "Enables the default_window_icon command without any pre-configured scope." 550 + }, 551 + { 552 + "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.", 553 + "type": "string", 554 + "const": "core:app:allow-fetch-data-store-identifiers", 555 + "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope." 556 + }, 557 + { 558 + "description": "Enables the identifier command without any pre-configured scope.", 559 + "type": "string", 560 + "const": "core:app:allow-identifier", 561 + "markdownDescription": "Enables the identifier command without any pre-configured scope." 562 }, 563 { 564 "description": "Enables the name command without any pre-configured scope.", 565 "type": "string", 566 + "const": "core:app:allow-name", 567 + "markdownDescription": "Enables the name command without any pre-configured scope." 568 + }, 569 + { 570 + "description": "Enables the register_listener command without any pre-configured scope.", 571 + "type": "string", 572 + "const": "core:app:allow-register-listener", 573 + "markdownDescription": "Enables the register_listener command without any pre-configured scope." 574 + }, 575 + { 576 + "description": "Enables the remove_data_store command without any pre-configured scope.", 577 + "type": "string", 578 + "const": "core:app:allow-remove-data-store", 579 + "markdownDescription": "Enables the remove_data_store command without any pre-configured scope." 580 + }, 581 + { 582 + "description": "Enables the remove_listener command without any pre-configured scope.", 583 + "type": "string", 584 + "const": "core:app:allow-remove-listener", 585 + "markdownDescription": "Enables the remove_listener command without any pre-configured scope." 586 }, 587 { 588 "description": "Enables the set_app_theme command without any pre-configured scope.", 589 "type": "string", 590 + "const": "core:app:allow-set-app-theme", 591 + "markdownDescription": "Enables the set_app_theme command without any pre-configured scope." 592 + }, 593 + { 594 + "description": "Enables the set_dock_visibility command without any pre-configured scope.", 595 + "type": "string", 596 + "const": "core:app:allow-set-dock-visibility", 597 + "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope." 598 }, 599 { 600 "description": "Enables the tauri_version command without any pre-configured scope.", 601 "type": "string", 602 + "const": "core:app:allow-tauri-version", 603 + "markdownDescription": "Enables the tauri_version command without any pre-configured scope." 604 }, 605 { 606 "description": "Enables the version command without any pre-configured scope.", 607 "type": "string", 608 + "const": "core:app:allow-version", 609 + "markdownDescription": "Enables the version command without any pre-configured scope." 610 }, 611 { 612 "description": "Denies the app_hide command without any pre-configured scope.", 613 "type": "string", 614 + "const": "core:app:deny-app-hide", 615 + "markdownDescription": "Denies the app_hide command without any pre-configured scope." 616 }, 617 { 618 "description": "Denies the app_show command without any pre-configured scope.", 619 "type": "string", 620 + "const": "core:app:deny-app-show", 621 + "markdownDescription": "Denies the app_show command without any pre-configured scope." 622 + }, 623 + { 624 + "description": "Denies the bundle_type command without any pre-configured scope.", 625 + "type": "string", 626 + "const": "core:app:deny-bundle-type", 627 + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." 628 }, 629 { 630 "description": "Denies the default_window_icon command without any pre-configured scope.", 631 "type": "string", 632 + "const": "core:app:deny-default-window-icon", 633 + "markdownDescription": "Denies the default_window_icon command without any pre-configured scope." 634 + }, 635 + { 636 + "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.", 637 + "type": "string", 638 + "const": "core:app:deny-fetch-data-store-identifiers", 639 + "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope." 640 + }, 641 + { 642 + "description": "Denies the identifier command without any pre-configured scope.", 643 + "type": "string", 644 + "const": "core:app:deny-identifier", 645 + "markdownDescription": "Denies the identifier command without any pre-configured scope." 646 }, 647 { 648 "description": "Denies the name command without any pre-configured scope.", 649 "type": "string", 650 + "const": "core:app:deny-name", 651 + "markdownDescription": "Denies the name command without any pre-configured scope." 652 + }, 653 + { 654 + "description": "Denies the register_listener command without any pre-configured scope.", 655 + "type": "string", 656 + "const": "core:app:deny-register-listener", 657 + "markdownDescription": "Denies the register_listener command without any pre-configured scope." 658 + }, 659 + { 660 + "description": "Denies the remove_data_store command without any pre-configured scope.", 661 + "type": "string", 662 + "const": "core:app:deny-remove-data-store", 663 + "markdownDescription": "Denies the remove_data_store command without any pre-configured scope." 664 + }, 665 + { 666 + "description": "Denies the remove_listener command without any pre-configured scope.", 667 + "type": "string", 668 + "const": "core:app:deny-remove-listener", 669 + "markdownDescription": "Denies the remove_listener command without any pre-configured scope." 670 }, 671 { 672 "description": "Denies the set_app_theme command without any pre-configured scope.", 673 "type": "string", 674 + "const": "core:app:deny-set-app-theme", 675 + "markdownDescription": "Denies the set_app_theme command without any pre-configured scope." 676 + }, 677 + { 678 + "description": "Denies the set_dock_visibility command without any pre-configured scope.", 679 + "type": "string", 680 + "const": "core:app:deny-set-dock-visibility", 681 + "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope." 682 }, 683 { 684 "description": "Denies the tauri_version command without any pre-configured scope.", 685 "type": "string", 686 + "const": "core:app:deny-tauri-version", 687 + "markdownDescription": "Denies the tauri_version command without any pre-configured scope." 688 }, 689 { 690 "description": "Denies the version command without any pre-configured scope.", 691 "type": "string", 692 + "const": "core:app:deny-version", 693 + "markdownDescription": "Denies the version command without any pre-configured scope." 694 }, 695 { 696 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`", 697 "type": "string", 698 + "const": "core:event:default", 699 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`" 700 }, 701 { 702 "description": "Enables the emit command without any pre-configured scope.", 703 "type": "string", 704 + "const": "core:event:allow-emit", 705 + "markdownDescription": "Enables the emit command without any pre-configured scope." 706 }, 707 { 708 "description": "Enables the emit_to command without any pre-configured scope.", 709 "type": "string", 710 + "const": "core:event:allow-emit-to", 711 + "markdownDescription": "Enables the emit_to command without any pre-configured scope." 712 }, 713 { 714 "description": "Enables the listen command without any pre-configured scope.", 715 "type": "string", 716 + "const": "core:event:allow-listen", 717 + "markdownDescription": "Enables the listen command without any pre-configured scope." 718 }, 719 { 720 "description": "Enables the unlisten command without any pre-configured scope.", 721 "type": "string", 722 + "const": "core:event:allow-unlisten", 723 + "markdownDescription": "Enables the unlisten command without any pre-configured scope." 724 }, 725 { 726 "description": "Denies the emit command without any pre-configured scope.", 727 "type": "string", 728 + "const": "core:event:deny-emit", 729 + "markdownDescription": "Denies the emit command without any pre-configured scope." 730 }, 731 { 732 "description": "Denies the emit_to command without any pre-configured scope.", 733 "type": "string", 734 + "const": "core:event:deny-emit-to", 735 + "markdownDescription": "Denies the emit_to command without any pre-configured scope." 736 }, 737 { 738 "description": "Denies the listen command without any pre-configured scope.", 739 "type": "string", 740 + "const": "core:event:deny-listen", 741 + "markdownDescription": "Denies the listen command without any pre-configured scope." 742 }, 743 { 744 "description": "Denies the unlisten command without any pre-configured scope.", 745 "type": "string", 746 + "const": "core:event:deny-unlisten", 747 + "markdownDescription": "Denies the unlisten command without any pre-configured scope." 748 }, 749 { 750 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`", 751 "type": "string", 752 + "const": "core:image:default", 753 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`" 754 }, 755 { 756 "description": "Enables the from_bytes command without any pre-configured scope.", 757 "type": "string", 758 + "const": "core:image:allow-from-bytes", 759 + "markdownDescription": "Enables the from_bytes command without any pre-configured scope." 760 }, 761 { 762 "description": "Enables the from_path command without any pre-configured scope.", 763 "type": "string", 764 + "const": "core:image:allow-from-path", 765 + "markdownDescription": "Enables the from_path command without any pre-configured scope." 766 }, 767 { 768 "description": "Enables the new command without any pre-configured scope.", 769 "type": "string", 770 + "const": "core:image:allow-new", 771 + "markdownDescription": "Enables the new command without any pre-configured scope." 772 }, 773 { 774 "description": "Enables the rgba command without any pre-configured scope.", 775 "type": "string", 776 + "const": "core:image:allow-rgba", 777 + "markdownDescription": "Enables the rgba command without any pre-configured scope." 778 }, 779 { 780 "description": "Enables the size command without any pre-configured scope.", 781 "type": "string", 782 + "const": "core:image:allow-size", 783 + "markdownDescription": "Enables the size command without any pre-configured scope." 784 }, 785 { 786 "description": "Denies the from_bytes command without any pre-configured scope.", 787 "type": "string", 788 + "const": "core:image:deny-from-bytes", 789 + "markdownDescription": "Denies the from_bytes command without any pre-configured scope." 790 }, 791 { 792 "description": "Denies the from_path command without any pre-configured scope.", 793 "type": "string", 794 + "const": "core:image:deny-from-path", 795 + "markdownDescription": "Denies the from_path command without any pre-configured scope." 796 }, 797 { 798 "description": "Denies the new command without any pre-configured scope.", 799 "type": "string", 800 + "const": "core:image:deny-new", 801 + "markdownDescription": "Denies the new command without any pre-configured scope." 802 }, 803 { 804 "description": "Denies the rgba command without any pre-configured scope.", 805 "type": "string", 806 + "const": "core:image:deny-rgba", 807 + "markdownDescription": "Denies the rgba command without any pre-configured scope." 808 }, 809 { 810 "description": "Denies the size command without any pre-configured scope.", 811 "type": "string", 812 + "const": "core:image:deny-size", 813 + "markdownDescription": "Denies the size command without any pre-configured scope." 814 }, 815 { 816 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`", 817 "type": "string", 818 + "const": "core:menu:default", 819 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`" 820 }, 821 { 822 "description": "Enables the append command without any pre-configured scope.", 823 "type": "string", 824 + "const": "core:menu:allow-append", 825 + "markdownDescription": "Enables the append command without any pre-configured scope." 826 }, 827 { 828 "description": "Enables the create_default command without any pre-configured scope.", 829 "type": "string", 830 + "const": "core:menu:allow-create-default", 831 + "markdownDescription": "Enables the create_default command without any pre-configured scope." 832 }, 833 { 834 "description": "Enables the get command without any pre-configured scope.", 835 "type": "string", 836 + "const": "core:menu:allow-get", 837 + "markdownDescription": "Enables the get command without any pre-configured scope." 838 }, 839 { 840 "description": "Enables the insert command without any pre-configured scope.", 841 "type": "string", 842 + "const": "core:menu:allow-insert", 843 + "markdownDescription": "Enables the insert command without any pre-configured scope." 844 }, 845 { 846 "description": "Enables the is_checked command without any pre-configured scope.", 847 "type": "string", 848 + "const": "core:menu:allow-is-checked", 849 + "markdownDescription": "Enables the is_checked command without any pre-configured scope." 850 }, 851 { 852 "description": "Enables the is_enabled command without any pre-configured scope.", 853 "type": "string", 854 + "const": "core:menu:allow-is-enabled", 855 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 856 }, 857 { 858 "description": "Enables the items command without any pre-configured scope.", 859 "type": "string", 860 + "const": "core:menu:allow-items", 861 + "markdownDescription": "Enables the items command without any pre-configured scope." 862 }, 863 { 864 "description": "Enables the new command without any pre-configured scope.", 865 "type": "string", 866 + "const": "core:menu:allow-new", 867 + "markdownDescription": "Enables the new command without any pre-configured scope." 868 }, 869 { 870 "description": "Enables the popup command without any pre-configured scope.", 871 "type": "string", 872 + "const": "core:menu:allow-popup", 873 + "markdownDescription": "Enables the popup command without any pre-configured scope." 874 }, 875 { 876 "description": "Enables the prepend command without any pre-configured scope.", 877 "type": "string", 878 + "const": "core:menu:allow-prepend", 879 + "markdownDescription": "Enables the prepend command without any pre-configured scope." 880 }, 881 { 882 "description": "Enables the remove command without any pre-configured scope.", 883 "type": "string", 884 + "const": "core:menu:allow-remove", 885 + "markdownDescription": "Enables the remove command without any pre-configured scope." 886 }, 887 { 888 "description": "Enables the remove_at command without any pre-configured scope.", 889 "type": "string", 890 + "const": "core:menu:allow-remove-at", 891 + "markdownDescription": "Enables the remove_at command without any pre-configured scope." 892 }, 893 { 894 "description": "Enables the set_accelerator command without any pre-configured scope.", 895 "type": "string", 896 + "const": "core:menu:allow-set-accelerator", 897 + "markdownDescription": "Enables the set_accelerator command without any pre-configured scope." 898 }, 899 { 900 "description": "Enables the set_as_app_menu command without any pre-configured scope.", 901 "type": "string", 902 + "const": "core:menu:allow-set-as-app-menu", 903 + "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope." 904 }, 905 { 906 "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", 907 "type": "string", 908 + "const": "core:menu:allow-set-as-help-menu-for-nsapp", 909 + "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope." 910 }, 911 { 912 "description": "Enables the set_as_window_menu command without any pre-configured scope.", 913 "type": "string", 914 + "const": "core:menu:allow-set-as-window-menu", 915 + "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope." 916 }, 917 { 918 "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 919 "type": "string", 920 + "const": "core:menu:allow-set-as-windows-menu-for-nsapp", 921 + "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope." 922 }, 923 { 924 "description": "Enables the set_checked command without any pre-configured scope.", 925 "type": "string", 926 + "const": "core:menu:allow-set-checked", 927 + "markdownDescription": "Enables the set_checked command without any pre-configured scope." 928 }, 929 { 930 "description": "Enables the set_enabled command without any pre-configured scope.", 931 "type": "string", 932 + "const": "core:menu:allow-set-enabled", 933 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 934 }, 935 { 936 "description": "Enables the set_icon command without any pre-configured scope.", 937 "type": "string", 938 + "const": "core:menu:allow-set-icon", 939 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 940 }, 941 { 942 "description": "Enables the set_text command without any pre-configured scope.", 943 "type": "string", 944 + "const": "core:menu:allow-set-text", 945 + "markdownDescription": "Enables the set_text command without any pre-configured scope." 946 }, 947 { 948 "description": "Enables the text command without any pre-configured scope.", 949 "type": "string", 950 + "const": "core:menu:allow-text", 951 + "markdownDescription": "Enables the text command without any pre-configured scope." 952 }, 953 { 954 "description": "Denies the append command without any pre-configured scope.", 955 "type": "string", 956 + "const": "core:menu:deny-append", 957 + "markdownDescription": "Denies the append command without any pre-configured scope." 958 }, 959 { 960 "description": "Denies the create_default command without any pre-configured scope.", 961 "type": "string", 962 + "const": "core:menu:deny-create-default", 963 + "markdownDescription": "Denies the create_default command without any pre-configured scope." 964 }, 965 { 966 "description": "Denies the get command without any pre-configured scope.", 967 "type": "string", 968 + "const": "core:menu:deny-get", 969 + "markdownDescription": "Denies the get command without any pre-configured scope." 970 }, 971 { 972 "description": "Denies the insert command without any pre-configured scope.", 973 "type": "string", 974 + "const": "core:menu:deny-insert", 975 + "markdownDescription": "Denies the insert command without any pre-configured scope." 976 }, 977 { 978 "description": "Denies the is_checked command without any pre-configured scope.", 979 "type": "string", 980 + "const": "core:menu:deny-is-checked", 981 + "markdownDescription": "Denies the is_checked command without any pre-configured scope." 982 }, 983 { 984 "description": "Denies the is_enabled command without any pre-configured scope.", 985 "type": "string", 986 + "const": "core:menu:deny-is-enabled", 987 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 988 }, 989 { 990 "description": "Denies the items command without any pre-configured scope.", 991 "type": "string", 992 + "const": "core:menu:deny-items", 993 + "markdownDescription": "Denies the items command without any pre-configured scope." 994 }, 995 { 996 "description": "Denies the new command without any pre-configured scope.", 997 "type": "string", 998 + "const": "core:menu:deny-new", 999 + "markdownDescription": "Denies the new command without any pre-configured scope." 1000 }, 1001 { 1002 "description": "Denies the popup command without any pre-configured scope.", 1003 "type": "string", 1004 + "const": "core:menu:deny-popup", 1005 + "markdownDescription": "Denies the popup command without any pre-configured scope." 1006 }, 1007 { 1008 "description": "Denies the prepend command without any pre-configured scope.", 1009 "type": "string", 1010 + "const": "core:menu:deny-prepend", 1011 + "markdownDescription": "Denies the prepend command without any pre-configured scope." 1012 }, 1013 { 1014 "description": "Denies the remove command without any pre-configured scope.", 1015 "type": "string", 1016 + "const": "core:menu:deny-remove", 1017 + "markdownDescription": "Denies the remove command without any pre-configured scope." 1018 }, 1019 { 1020 "description": "Denies the remove_at command without any pre-configured scope.", 1021 "type": "string", 1022 + "const": "core:menu:deny-remove-at", 1023 + "markdownDescription": "Denies the remove_at command without any pre-configured scope." 1024 }, 1025 { 1026 "description": "Denies the set_accelerator command without any pre-configured scope.", 1027 "type": "string", 1028 + "const": "core:menu:deny-set-accelerator", 1029 + "markdownDescription": "Denies the set_accelerator command without any pre-configured scope." 1030 }, 1031 { 1032 "description": "Denies the set_as_app_menu command without any pre-configured scope.", 1033 "type": "string", 1034 + "const": "core:menu:deny-set-as-app-menu", 1035 + "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope." 1036 }, 1037 { 1038 "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", 1039 "type": "string", 1040 + "const": "core:menu:deny-set-as-help-menu-for-nsapp", 1041 + "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope." 1042 }, 1043 { 1044 "description": "Denies the set_as_window_menu command without any pre-configured scope.", 1045 "type": "string", 1046 + "const": "core:menu:deny-set-as-window-menu", 1047 + "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope." 1048 }, 1049 { 1050 "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", 1051 "type": "string", 1052 + "const": "core:menu:deny-set-as-windows-menu-for-nsapp", 1053 + "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope." 1054 }, 1055 { 1056 "description": "Denies the set_checked command without any pre-configured scope.", 1057 "type": "string", 1058 + "const": "core:menu:deny-set-checked", 1059 + "markdownDescription": "Denies the set_checked command without any pre-configured scope." 1060 }, 1061 { 1062 "description": "Denies the set_enabled command without any pre-configured scope.", 1063 "type": "string", 1064 + "const": "core:menu:deny-set-enabled", 1065 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 1066 }, 1067 { 1068 "description": "Denies the set_icon command without any pre-configured scope.", 1069 "type": "string", 1070 + "const": "core:menu:deny-set-icon", 1071 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1072 }, 1073 { 1074 "description": "Denies the set_text command without any pre-configured scope.", 1075 "type": "string", 1076 + "const": "core:menu:deny-set-text", 1077 + "markdownDescription": "Denies the set_text command without any pre-configured scope." 1078 }, 1079 { 1080 "description": "Denies the text command without any pre-configured scope.", 1081 "type": "string", 1082 + "const": "core:menu:deny-text", 1083 + "markdownDescription": "Denies the text command without any pre-configured scope." 1084 }, 1085 { 1086 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`", 1087 "type": "string", 1088 + "const": "core:path:default", 1089 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`" 1090 }, 1091 { 1092 "description": "Enables the basename command without any pre-configured scope.", 1093 "type": "string", 1094 + "const": "core:path:allow-basename", 1095 + "markdownDescription": "Enables the basename command without any pre-configured scope." 1096 }, 1097 { 1098 "description": "Enables the dirname command without any pre-configured scope.", 1099 "type": "string", 1100 + "const": "core:path:allow-dirname", 1101 + "markdownDescription": "Enables the dirname command without any pre-configured scope." 1102 }, 1103 { 1104 "description": "Enables the extname command without any pre-configured scope.", 1105 "type": "string", 1106 + "const": "core:path:allow-extname", 1107 + "markdownDescription": "Enables the extname command without any pre-configured scope." 1108 }, 1109 { 1110 "description": "Enables the is_absolute command without any pre-configured scope.", 1111 "type": "string", 1112 + "const": "core:path:allow-is-absolute", 1113 + "markdownDescription": "Enables the is_absolute command without any pre-configured scope." 1114 }, 1115 { 1116 "description": "Enables the join command without any pre-configured scope.", 1117 "type": "string", 1118 + "const": "core:path:allow-join", 1119 + "markdownDescription": "Enables the join command without any pre-configured scope." 1120 }, 1121 { 1122 "description": "Enables the normalize command without any pre-configured scope.", 1123 "type": "string", 1124 + "const": "core:path:allow-normalize", 1125 + "markdownDescription": "Enables the normalize command without any pre-configured scope." 1126 }, 1127 { 1128 "description": "Enables the resolve command without any pre-configured scope.", 1129 "type": "string", 1130 + "const": "core:path:allow-resolve", 1131 + "markdownDescription": "Enables the resolve command without any pre-configured scope." 1132 }, 1133 { 1134 "description": "Enables the resolve_directory command without any pre-configured scope.", 1135 "type": "string", 1136 + "const": "core:path:allow-resolve-directory", 1137 + "markdownDescription": "Enables the resolve_directory command without any pre-configured scope." 1138 }, 1139 { 1140 "description": "Denies the basename command without any pre-configured scope.", 1141 "type": "string", 1142 + "const": "core:path:deny-basename", 1143 + "markdownDescription": "Denies the basename command without any pre-configured scope." 1144 }, 1145 { 1146 "description": "Denies the dirname command without any pre-configured scope.", 1147 "type": "string", 1148 + "const": "core:path:deny-dirname", 1149 + "markdownDescription": "Denies the dirname command without any pre-configured scope." 1150 }, 1151 { 1152 "description": "Denies the extname command without any pre-configured scope.", 1153 "type": "string", 1154 + "const": "core:path:deny-extname", 1155 + "markdownDescription": "Denies the extname command without any pre-configured scope." 1156 }, 1157 { 1158 "description": "Denies the is_absolute command without any pre-configured scope.", 1159 "type": "string", 1160 + "const": "core:path:deny-is-absolute", 1161 + "markdownDescription": "Denies the is_absolute command without any pre-configured scope." 1162 }, 1163 { 1164 "description": "Denies the join command without any pre-configured scope.", 1165 "type": "string", 1166 + "const": "core:path:deny-join", 1167 + "markdownDescription": "Denies the join command without any pre-configured scope." 1168 }, 1169 { 1170 "description": "Denies the normalize command without any pre-configured scope.", 1171 "type": "string", 1172 + "const": "core:path:deny-normalize", 1173 + "markdownDescription": "Denies the normalize command without any pre-configured scope." 1174 }, 1175 { 1176 "description": "Denies the resolve command without any pre-configured scope.", 1177 "type": "string", 1178 + "const": "core:path:deny-resolve", 1179 + "markdownDescription": "Denies the resolve command without any pre-configured scope." 1180 }, 1181 { 1182 "description": "Denies the resolve_directory command without any pre-configured scope.", 1183 "type": "string", 1184 + "const": "core:path:deny-resolve-directory", 1185 + "markdownDescription": "Denies the resolve_directory command without any pre-configured scope." 1186 }, 1187 { 1188 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`", 1189 "type": "string", 1190 + "const": "core:resources:default", 1191 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`" 1192 }, 1193 { 1194 "description": "Enables the close command without any pre-configured scope.", 1195 "type": "string", 1196 + "const": "core:resources:allow-close", 1197 + "markdownDescription": "Enables the close command without any pre-configured scope." 1198 }, 1199 { 1200 "description": "Denies the close command without any pre-configured scope.", 1201 "type": "string", 1202 + "const": "core:resources:deny-close", 1203 + "markdownDescription": "Denies the close command without any pre-configured scope." 1204 }, 1205 { 1206 + "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`", 1207 "type": "string", 1208 + "const": "core:tray:default", 1209 + "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-show-menu-on-left-click`" 1210 }, 1211 { 1212 "description": "Enables the get_by_id command without any pre-configured scope.", 1213 "type": "string", 1214 + "const": "core:tray:allow-get-by-id", 1215 + "markdownDescription": "Enables the get_by_id command without any pre-configured scope." 1216 }, 1217 { 1218 "description": "Enables the new command without any pre-configured scope.", 1219 "type": "string", 1220 + "const": "core:tray:allow-new", 1221 + "markdownDescription": "Enables the new command without any pre-configured scope." 1222 }, 1223 { 1224 "description": "Enables the remove_by_id command without any pre-configured scope.", 1225 "type": "string", 1226 + "const": "core:tray:allow-remove-by-id", 1227 + "markdownDescription": "Enables the remove_by_id command without any pre-configured scope." 1228 }, 1229 { 1230 "description": "Enables the set_icon command without any pre-configured scope.", 1231 "type": "string", 1232 + "const": "core:tray:allow-set-icon", 1233 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1234 }, 1235 { 1236 "description": "Enables the set_icon_as_template command without any pre-configured scope.", 1237 "type": "string", 1238 + "const": "core:tray:allow-set-icon-as-template", 1239 + "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope." 1240 }, 1241 { 1242 "description": "Enables the set_menu command without any pre-configured scope.", 1243 "type": "string", 1244 + "const": "core:tray:allow-set-menu", 1245 + "markdownDescription": "Enables the set_menu command without any pre-configured scope." 1246 }, 1247 { 1248 "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", 1249 "type": "string", 1250 + "const": "core:tray:allow-set-show-menu-on-left-click", 1251 + "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope." 1252 }, 1253 { 1254 "description": "Enables the set_temp_dir_path command without any pre-configured scope.", 1255 "type": "string", 1256 + "const": "core:tray:allow-set-temp-dir-path", 1257 + "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope." 1258 }, 1259 { 1260 "description": "Enables the set_title command without any pre-configured scope.", 1261 "type": "string", 1262 + "const": "core:tray:allow-set-title", 1263 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1264 }, 1265 { 1266 "description": "Enables the set_tooltip command without any pre-configured scope.", 1267 "type": "string", 1268 + "const": "core:tray:allow-set-tooltip", 1269 + "markdownDescription": "Enables the set_tooltip command without any pre-configured scope." 1270 }, 1271 { 1272 "description": "Enables the set_visible command without any pre-configured scope.", 1273 "type": "string", 1274 + "const": "core:tray:allow-set-visible", 1275 + "markdownDescription": "Enables the set_visible command without any pre-configured scope." 1276 }, 1277 { 1278 "description": "Denies the get_by_id command without any pre-configured scope.", 1279 "type": "string", 1280 + "const": "core:tray:deny-get-by-id", 1281 + "markdownDescription": "Denies the get_by_id command without any pre-configured scope." 1282 }, 1283 { 1284 "description": "Denies the new command without any pre-configured scope.", 1285 "type": "string", 1286 + "const": "core:tray:deny-new", 1287 + "markdownDescription": "Denies the new command without any pre-configured scope." 1288 }, 1289 { 1290 "description": "Denies the remove_by_id command without any pre-configured scope.", 1291 "type": "string", 1292 + "const": "core:tray:deny-remove-by-id", 1293 + "markdownDescription": "Denies the remove_by_id command without any pre-configured scope." 1294 }, 1295 { 1296 "description": "Denies the set_icon command without any pre-configured scope.", 1297 "type": "string", 1298 + "const": "core:tray:deny-set-icon", 1299 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 1300 }, 1301 { 1302 "description": "Denies the set_icon_as_template command without any pre-configured scope.", 1303 "type": "string", 1304 + "const": "core:tray:deny-set-icon-as-template", 1305 + "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope." 1306 }, 1307 { 1308 "description": "Denies the set_menu command without any pre-configured scope.", 1309 "type": "string", 1310 + "const": "core:tray:deny-set-menu", 1311 + "markdownDescription": "Denies the set_menu command without any pre-configured scope." 1312 }, 1313 { 1314 "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", 1315 "type": "string", 1316 + "const": "core:tray:deny-set-show-menu-on-left-click", 1317 + "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope." 1318 }, 1319 { 1320 "description": "Denies the set_temp_dir_path command without any pre-configured scope.", 1321 "type": "string", 1322 + "const": "core:tray:deny-set-temp-dir-path", 1323 + "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope." 1324 }, 1325 { 1326 "description": "Denies the set_title command without any pre-configured scope.", 1327 "type": "string", 1328 + "const": "core:tray:deny-set-title", 1329 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 1330 }, 1331 { 1332 "description": "Denies the set_tooltip command without any pre-configured scope.", 1333 "type": "string", 1334 + "const": "core:tray:deny-set-tooltip", 1335 + "markdownDescription": "Denies the set_tooltip command without any pre-configured scope." 1336 }, 1337 { 1338 "description": "Denies the set_visible command without any pre-configured scope.", 1339 "type": "string", 1340 + "const": "core:tray:deny-set-visible", 1341 + "markdownDescription": "Denies the set_visible command without any pre-configured scope." 1342 }, 1343 { 1344 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`", 1345 "type": "string", 1346 + "const": "core:webview:default", 1347 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`" 1348 }, 1349 { 1350 "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", 1351 "type": "string", 1352 + "const": "core:webview:allow-clear-all-browsing-data", 1353 + "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope." 1354 }, 1355 { 1356 "description": "Enables the create_webview command without any pre-configured scope.", 1357 "type": "string", 1358 + "const": "core:webview:allow-create-webview", 1359 + "markdownDescription": "Enables the create_webview command without any pre-configured scope." 1360 }, 1361 { 1362 "description": "Enables the create_webview_window command without any pre-configured scope.", 1363 "type": "string", 1364 + "const": "core:webview:allow-create-webview-window", 1365 + "markdownDescription": "Enables the create_webview_window command without any pre-configured scope." 1366 }, 1367 { 1368 "description": "Enables the get_all_webviews command without any pre-configured scope.", 1369 "type": "string", 1370 + "const": "core:webview:allow-get-all-webviews", 1371 + "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope." 1372 }, 1373 { 1374 "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", 1375 "type": "string", 1376 + "const": "core:webview:allow-internal-toggle-devtools", 1377 + "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope." 1378 }, 1379 { 1380 "description": "Enables the print command without any pre-configured scope.", 1381 "type": "string", 1382 + "const": "core:webview:allow-print", 1383 + "markdownDescription": "Enables the print command without any pre-configured scope." 1384 }, 1385 { 1386 "description": "Enables the reparent command without any pre-configured scope.", 1387 "type": "string", 1388 + "const": "core:webview:allow-reparent", 1389 + "markdownDescription": "Enables the reparent command without any pre-configured scope." 1390 + }, 1391 + { 1392 + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", 1393 + "type": "string", 1394 + "const": "core:webview:allow-set-webview-auto-resize", 1395 + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." 1396 + }, 1397 + { 1398 + "description": "Enables the set_webview_background_color command without any pre-configured scope.", 1399 + "type": "string", 1400 + "const": "core:webview:allow-set-webview-background-color", 1401 + "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope." 1402 }, 1403 { 1404 "description": "Enables the set_webview_focus command without any pre-configured scope.", 1405 "type": "string", 1406 + "const": "core:webview:allow-set-webview-focus", 1407 + "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope." 1408 }, 1409 { 1410 "description": "Enables the set_webview_position command without any pre-configured scope.", 1411 "type": "string", 1412 + "const": "core:webview:allow-set-webview-position", 1413 + "markdownDescription": "Enables the set_webview_position command without any pre-configured scope." 1414 }, 1415 { 1416 "description": "Enables the set_webview_size command without any pre-configured scope.", 1417 "type": "string", 1418 + "const": "core:webview:allow-set-webview-size", 1419 + "markdownDescription": "Enables the set_webview_size command without any pre-configured scope." 1420 }, 1421 { 1422 "description": "Enables the set_webview_zoom command without any pre-configured scope.", 1423 "type": "string", 1424 + "const": "core:webview:allow-set-webview-zoom", 1425 + "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope." 1426 }, 1427 { 1428 "description": "Enables the webview_close command without any pre-configured scope.", 1429 "type": "string", 1430 + "const": "core:webview:allow-webview-close", 1431 + "markdownDescription": "Enables the webview_close command without any pre-configured scope." 1432 }, 1433 { 1434 "description": "Enables the webview_hide command without any pre-configured scope.", 1435 "type": "string", 1436 + "const": "core:webview:allow-webview-hide", 1437 + "markdownDescription": "Enables the webview_hide command without any pre-configured scope." 1438 }, 1439 { 1440 "description": "Enables the webview_position command without any pre-configured scope.", 1441 "type": "string", 1442 + "const": "core:webview:allow-webview-position", 1443 + "markdownDescription": "Enables the webview_position command without any pre-configured scope." 1444 }, 1445 { 1446 "description": "Enables the webview_show command without any pre-configured scope.", 1447 "type": "string", 1448 + "const": "core:webview:allow-webview-show", 1449 + "markdownDescription": "Enables the webview_show command without any pre-configured scope." 1450 }, 1451 { 1452 "description": "Enables the webview_size command without any pre-configured scope.", 1453 "type": "string", 1454 + "const": "core:webview:allow-webview-size", 1455 + "markdownDescription": "Enables the webview_size command without any pre-configured scope." 1456 }, 1457 { 1458 "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", 1459 "type": "string", 1460 + "const": "core:webview:deny-clear-all-browsing-data", 1461 + "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope." 1462 }, 1463 { 1464 "description": "Denies the create_webview command without any pre-configured scope.", 1465 "type": "string", 1466 + "const": "core:webview:deny-create-webview", 1467 + "markdownDescription": "Denies the create_webview command without any pre-configured scope." 1468 }, 1469 { 1470 "description": "Denies the create_webview_window command without any pre-configured scope.", 1471 "type": "string", 1472 + "const": "core:webview:deny-create-webview-window", 1473 + "markdownDescription": "Denies the create_webview_window command without any pre-configured scope." 1474 }, 1475 { 1476 "description": "Denies the get_all_webviews command without any pre-configured scope.", 1477 "type": "string", 1478 + "const": "core:webview:deny-get-all-webviews", 1479 + "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope." 1480 }, 1481 { 1482 "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", 1483 "type": "string", 1484 + "const": "core:webview:deny-internal-toggle-devtools", 1485 + "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope." 1486 }, 1487 { 1488 "description": "Denies the print command without any pre-configured scope.", 1489 "type": "string", 1490 + "const": "core:webview:deny-print", 1491 + "markdownDescription": "Denies the print command without any pre-configured scope." 1492 }, 1493 { 1494 "description": "Denies the reparent command without any pre-configured scope.", 1495 "type": "string", 1496 + "const": "core:webview:deny-reparent", 1497 + "markdownDescription": "Denies the reparent command without any pre-configured scope." 1498 + }, 1499 + { 1500 + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", 1501 + "type": "string", 1502 + "const": "core:webview:deny-set-webview-auto-resize", 1503 + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." 1504 + }, 1505 + { 1506 + "description": "Denies the set_webview_background_color command without any pre-configured scope.", 1507 + "type": "string", 1508 + "const": "core:webview:deny-set-webview-background-color", 1509 + "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope." 1510 }, 1511 { 1512 "description": "Denies the set_webview_focus command without any pre-configured scope.", 1513 "type": "string", 1514 + "const": "core:webview:deny-set-webview-focus", 1515 + "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope." 1516 }, 1517 { 1518 "description": "Denies the set_webview_position command without any pre-configured scope.", 1519 "type": "string", 1520 + "const": "core:webview:deny-set-webview-position", 1521 + "markdownDescription": "Denies the set_webview_position command without any pre-configured scope." 1522 }, 1523 { 1524 "description": "Denies the set_webview_size command without any pre-configured scope.", 1525 "type": "string", 1526 + "const": "core:webview:deny-set-webview-size", 1527 + "markdownDescription": "Denies the set_webview_size command without any pre-configured scope." 1528 }, 1529 { 1530 "description": "Denies the set_webview_zoom command without any pre-configured scope.", 1531 "type": "string", 1532 + "const": "core:webview:deny-set-webview-zoom", 1533 + "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope." 1534 }, 1535 { 1536 "description": "Denies the webview_close command without any pre-configured scope.", 1537 "type": "string", 1538 + "const": "core:webview:deny-webview-close", 1539 + "markdownDescription": "Denies the webview_close command without any pre-configured scope." 1540 }, 1541 { 1542 "description": "Denies the webview_hide command without any pre-configured scope.", 1543 "type": "string", 1544 + "const": "core:webview:deny-webview-hide", 1545 + "markdownDescription": "Denies the webview_hide command without any pre-configured scope." 1546 }, 1547 { 1548 "description": "Denies the webview_position command without any pre-configured scope.", 1549 "type": "string", 1550 + "const": "core:webview:deny-webview-position", 1551 + "markdownDescription": "Denies the webview_position command without any pre-configured scope." 1552 }, 1553 { 1554 "description": "Denies the webview_show command without any pre-configured scope.", 1555 "type": "string", 1556 + "const": "core:webview:deny-webview-show", 1557 + "markdownDescription": "Denies the webview_show command without any pre-configured scope." 1558 }, 1559 { 1560 "description": "Denies the webview_size command without any pre-configured scope.", 1561 "type": "string", 1562 + "const": "core:webview:deny-webview-size", 1563 + "markdownDescription": "Denies the webview_size command without any pre-configured scope." 1564 }, 1565 { 1566 + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`", 1567 "type": "string", 1568 + "const": "core:window:default", 1569 + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-internal-toggle-maximize`" 1570 }, 1571 { 1572 "description": "Enables the available_monitors command without any pre-configured scope.", 1573 "type": "string", 1574 + "const": "core:window:allow-available-monitors", 1575 + "markdownDescription": "Enables the available_monitors command without any pre-configured scope." 1576 }, 1577 { 1578 "description": "Enables the center command without any pre-configured scope.", 1579 "type": "string", 1580 + "const": "core:window:allow-center", 1581 + "markdownDescription": "Enables the center command without any pre-configured scope." 1582 }, 1583 { 1584 "description": "Enables the close command without any pre-configured scope.", 1585 "type": "string", 1586 + "const": "core:window:allow-close", 1587 + "markdownDescription": "Enables the close command without any pre-configured scope." 1588 }, 1589 { 1590 "description": "Enables the create command without any pre-configured scope.", 1591 "type": "string", 1592 + "const": "core:window:allow-create", 1593 + "markdownDescription": "Enables the create command without any pre-configured scope." 1594 }, 1595 { 1596 "description": "Enables the current_monitor command without any pre-configured scope.", 1597 "type": "string", 1598 + "const": "core:window:allow-current-monitor", 1599 + "markdownDescription": "Enables the current_monitor command without any pre-configured scope." 1600 }, 1601 { 1602 "description": "Enables the cursor_position command without any pre-configured scope.", 1603 "type": "string", 1604 + "const": "core:window:allow-cursor-position", 1605 + "markdownDescription": "Enables the cursor_position command without any pre-configured scope." 1606 }, 1607 { 1608 "description": "Enables the destroy command without any pre-configured scope.", 1609 "type": "string", 1610 + "const": "core:window:allow-destroy", 1611 + "markdownDescription": "Enables the destroy command without any pre-configured scope." 1612 }, 1613 { 1614 "description": "Enables the get_all_windows command without any pre-configured scope.", 1615 "type": "string", 1616 + "const": "core:window:allow-get-all-windows", 1617 + "markdownDescription": "Enables the get_all_windows command without any pre-configured scope." 1618 }, 1619 { 1620 "description": "Enables the hide command without any pre-configured scope.", 1621 "type": "string", 1622 + "const": "core:window:allow-hide", 1623 + "markdownDescription": "Enables the hide command without any pre-configured scope." 1624 }, 1625 { 1626 "description": "Enables the inner_position command without any pre-configured scope.", 1627 "type": "string", 1628 + "const": "core:window:allow-inner-position", 1629 + "markdownDescription": "Enables the inner_position command without any pre-configured scope." 1630 }, 1631 { 1632 "description": "Enables the inner_size command without any pre-configured scope.", 1633 "type": "string", 1634 + "const": "core:window:allow-inner-size", 1635 + "markdownDescription": "Enables the inner_size command without any pre-configured scope." 1636 }, 1637 { 1638 "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", 1639 "type": "string", 1640 + "const": "core:window:allow-internal-toggle-maximize", 1641 + "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope." 1642 + }, 1643 + { 1644 + "description": "Enables the is_always_on_top command without any pre-configured scope.", 1645 + "type": "string", 1646 + "const": "core:window:allow-is-always-on-top", 1647 + "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope." 1648 }, 1649 { 1650 "description": "Enables the is_closable command without any pre-configured scope.", 1651 "type": "string", 1652 + "const": "core:window:allow-is-closable", 1653 + "markdownDescription": "Enables the is_closable command without any pre-configured scope." 1654 }, 1655 { 1656 "description": "Enables the is_decorated command without any pre-configured scope.", 1657 "type": "string", 1658 + "const": "core:window:allow-is-decorated", 1659 + "markdownDescription": "Enables the is_decorated command without any pre-configured scope." 1660 }, 1661 { 1662 "description": "Enables the is_enabled command without any pre-configured scope.", 1663 "type": "string", 1664 + "const": "core:window:allow-is-enabled", 1665 + "markdownDescription": "Enables the is_enabled command without any pre-configured scope." 1666 }, 1667 { 1668 "description": "Enables the is_focused command without any pre-configured scope.", 1669 "type": "string", 1670 + "const": "core:window:allow-is-focused", 1671 + "markdownDescription": "Enables the is_focused command without any pre-configured scope." 1672 }, 1673 { 1674 "description": "Enables the is_fullscreen command without any pre-configured scope.", 1675 "type": "string", 1676 + "const": "core:window:allow-is-fullscreen", 1677 + "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope." 1678 }, 1679 { 1680 "description": "Enables the is_maximizable command without any pre-configured scope.", 1681 "type": "string", 1682 + "const": "core:window:allow-is-maximizable", 1683 + "markdownDescription": "Enables the is_maximizable command without any pre-configured scope." 1684 }, 1685 { 1686 "description": "Enables the is_maximized command without any pre-configured scope.", 1687 "type": "string", 1688 + "const": "core:window:allow-is-maximized", 1689 + "markdownDescription": "Enables the is_maximized command without any pre-configured scope." 1690 }, 1691 { 1692 "description": "Enables the is_minimizable command without any pre-configured scope.", 1693 "type": "string", 1694 + "const": "core:window:allow-is-minimizable", 1695 + "markdownDescription": "Enables the is_minimizable command without any pre-configured scope." 1696 }, 1697 { 1698 "description": "Enables the is_minimized command without any pre-configured scope.", 1699 "type": "string", 1700 + "const": "core:window:allow-is-minimized", 1701 + "markdownDescription": "Enables the is_minimized command without any pre-configured scope." 1702 }, 1703 { 1704 "description": "Enables the is_resizable command without any pre-configured scope.", 1705 "type": "string", 1706 + "const": "core:window:allow-is-resizable", 1707 + "markdownDescription": "Enables the is_resizable command without any pre-configured scope." 1708 }, 1709 { 1710 "description": "Enables the is_visible command without any pre-configured scope.", 1711 "type": "string", 1712 + "const": "core:window:allow-is-visible", 1713 + "markdownDescription": "Enables the is_visible command without any pre-configured scope." 1714 }, 1715 { 1716 "description": "Enables the maximize command without any pre-configured scope.", 1717 "type": "string", 1718 + "const": "core:window:allow-maximize", 1719 + "markdownDescription": "Enables the maximize command without any pre-configured scope." 1720 }, 1721 { 1722 "description": "Enables the minimize command without any pre-configured scope.", 1723 "type": "string", 1724 + "const": "core:window:allow-minimize", 1725 + "markdownDescription": "Enables the minimize command without any pre-configured scope." 1726 }, 1727 { 1728 "description": "Enables the monitor_from_point command without any pre-configured scope.", 1729 "type": "string", 1730 + "const": "core:window:allow-monitor-from-point", 1731 + "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope." 1732 }, 1733 { 1734 "description": "Enables the outer_position command without any pre-configured scope.", 1735 "type": "string", 1736 + "const": "core:window:allow-outer-position", 1737 + "markdownDescription": "Enables the outer_position command without any pre-configured scope." 1738 }, 1739 { 1740 "description": "Enables the outer_size command without any pre-configured scope.", 1741 "type": "string", 1742 + "const": "core:window:allow-outer-size", 1743 + "markdownDescription": "Enables the outer_size command without any pre-configured scope." 1744 }, 1745 { 1746 "description": "Enables the primary_monitor command without any pre-configured scope.", 1747 "type": "string", 1748 + "const": "core:window:allow-primary-monitor", 1749 + "markdownDescription": "Enables the primary_monitor command without any pre-configured scope." 1750 }, 1751 { 1752 "description": "Enables the request_user_attention command without any pre-configured scope.", 1753 "type": "string", 1754 + "const": "core:window:allow-request-user-attention", 1755 + "markdownDescription": "Enables the request_user_attention command without any pre-configured scope." 1756 }, 1757 { 1758 "description": "Enables the scale_factor command without any pre-configured scope.", 1759 "type": "string", 1760 + "const": "core:window:allow-scale-factor", 1761 + "markdownDescription": "Enables the scale_factor command without any pre-configured scope." 1762 }, 1763 { 1764 "description": "Enables the set_always_on_bottom command without any pre-configured scope.", 1765 "type": "string", 1766 + "const": "core:window:allow-set-always-on-bottom", 1767 + "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope." 1768 }, 1769 { 1770 "description": "Enables the set_always_on_top command without any pre-configured scope.", 1771 "type": "string", 1772 + "const": "core:window:allow-set-always-on-top", 1773 + "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope." 1774 + }, 1775 + { 1776 + "description": "Enables the set_background_color command without any pre-configured scope.", 1777 + "type": "string", 1778 + "const": "core:window:allow-set-background-color", 1779 + "markdownDescription": "Enables the set_background_color command without any pre-configured scope." 1780 + }, 1781 + { 1782 + "description": "Enables the set_badge_count command without any pre-configured scope.", 1783 + "type": "string", 1784 + "const": "core:window:allow-set-badge-count", 1785 + "markdownDescription": "Enables the set_badge_count command without any pre-configured scope." 1786 + }, 1787 + { 1788 + "description": "Enables the set_badge_label command without any pre-configured scope.", 1789 + "type": "string", 1790 + "const": "core:window:allow-set-badge-label", 1791 + "markdownDescription": "Enables the set_badge_label command without any pre-configured scope." 1792 }, 1793 { 1794 "description": "Enables the set_closable command without any pre-configured scope.", 1795 "type": "string", 1796 + "const": "core:window:allow-set-closable", 1797 + "markdownDescription": "Enables the set_closable command without any pre-configured scope." 1798 }, 1799 { 1800 "description": "Enables the set_content_protected command without any pre-configured scope.", 1801 "type": "string", 1802 + "const": "core:window:allow-set-content-protected", 1803 + "markdownDescription": "Enables the set_content_protected command without any pre-configured scope." 1804 }, 1805 { 1806 "description": "Enables the set_cursor_grab command without any pre-configured scope.", 1807 "type": "string", 1808 + "const": "core:window:allow-set-cursor-grab", 1809 + "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope." 1810 }, 1811 { 1812 "description": "Enables the set_cursor_icon command without any pre-configured scope.", 1813 "type": "string", 1814 + "const": "core:window:allow-set-cursor-icon", 1815 + "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope." 1816 }, 1817 { 1818 "description": "Enables the set_cursor_position command without any pre-configured scope.", 1819 "type": "string", 1820 + "const": "core:window:allow-set-cursor-position", 1821 + "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope." 1822 }, 1823 { 1824 "description": "Enables the set_cursor_visible command without any pre-configured scope.", 1825 "type": "string", 1826 + "const": "core:window:allow-set-cursor-visible", 1827 + "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope." 1828 }, 1829 { 1830 "description": "Enables the set_decorations command without any pre-configured scope.", 1831 "type": "string", 1832 + "const": "core:window:allow-set-decorations", 1833 + "markdownDescription": "Enables the set_decorations command without any pre-configured scope." 1834 }, 1835 { 1836 "description": "Enables the set_effects command without any pre-configured scope.", 1837 "type": "string", 1838 + "const": "core:window:allow-set-effects", 1839 + "markdownDescription": "Enables the set_effects command without any pre-configured scope." 1840 }, 1841 { 1842 "description": "Enables the set_enabled command without any pre-configured scope.", 1843 "type": "string", 1844 + "const": "core:window:allow-set-enabled", 1845 + "markdownDescription": "Enables the set_enabled command without any pre-configured scope." 1846 }, 1847 { 1848 "description": "Enables the set_focus command without any pre-configured scope.", 1849 "type": "string", 1850 + "const": "core:window:allow-set-focus", 1851 + "markdownDescription": "Enables the set_focus command without any pre-configured scope." 1852 + }, 1853 + { 1854 + "description": "Enables the set_focusable command without any pre-configured scope.", 1855 + "type": "string", 1856 + "const": "core:window:allow-set-focusable", 1857 + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." 1858 }, 1859 { 1860 "description": "Enables the set_fullscreen command without any pre-configured scope.", 1861 "type": "string", 1862 + "const": "core:window:allow-set-fullscreen", 1863 + "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope." 1864 }, 1865 { 1866 "description": "Enables the set_icon command without any pre-configured scope.", 1867 "type": "string", 1868 + "const": "core:window:allow-set-icon", 1869 + "markdownDescription": "Enables the set_icon command without any pre-configured scope." 1870 }, 1871 { 1872 "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", 1873 "type": "string", 1874 + "const": "core:window:allow-set-ignore-cursor-events", 1875 + "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope." 1876 }, 1877 { 1878 "description": "Enables the set_max_size command without any pre-configured scope.", 1879 "type": "string", 1880 + "const": "core:window:allow-set-max-size", 1881 + "markdownDescription": "Enables the set_max_size command without any pre-configured scope." 1882 }, 1883 { 1884 "description": "Enables the set_maximizable command without any pre-configured scope.", 1885 "type": "string", 1886 + "const": "core:window:allow-set-maximizable", 1887 + "markdownDescription": "Enables the set_maximizable command without any pre-configured scope." 1888 }, 1889 { 1890 "description": "Enables the set_min_size command without any pre-configured scope.", 1891 "type": "string", 1892 + "const": "core:window:allow-set-min-size", 1893 + "markdownDescription": "Enables the set_min_size command without any pre-configured scope." 1894 }, 1895 { 1896 "description": "Enables the set_minimizable command without any pre-configured scope.", 1897 "type": "string", 1898 + "const": "core:window:allow-set-minimizable", 1899 + "markdownDescription": "Enables the set_minimizable command without any pre-configured scope." 1900 + }, 1901 + { 1902 + "description": "Enables the set_overlay_icon command without any pre-configured scope.", 1903 + "type": "string", 1904 + "const": "core:window:allow-set-overlay-icon", 1905 + "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope." 1906 }, 1907 { 1908 "description": "Enables the set_position command without any pre-configured scope.", 1909 "type": "string", 1910 + "const": "core:window:allow-set-position", 1911 + "markdownDescription": "Enables the set_position command without any pre-configured scope." 1912 }, 1913 { 1914 "description": "Enables the set_progress_bar command without any pre-configured scope.", 1915 "type": "string", 1916 + "const": "core:window:allow-set-progress-bar", 1917 + "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope." 1918 }, 1919 { 1920 "description": "Enables the set_resizable command without any pre-configured scope.", 1921 "type": "string", 1922 + "const": "core:window:allow-set-resizable", 1923 + "markdownDescription": "Enables the set_resizable command without any pre-configured scope." 1924 }, 1925 { 1926 "description": "Enables the set_shadow command without any pre-configured scope.", 1927 "type": "string", 1928 + "const": "core:window:allow-set-shadow", 1929 + "markdownDescription": "Enables the set_shadow command without any pre-configured scope." 1930 + }, 1931 + { 1932 + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", 1933 + "type": "string", 1934 + "const": "core:window:allow-set-simple-fullscreen", 1935 + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." 1936 }, 1937 { 1938 "description": "Enables the set_size command without any pre-configured scope.", 1939 "type": "string", 1940 + "const": "core:window:allow-set-size", 1941 + "markdownDescription": "Enables the set_size command without any pre-configured scope." 1942 }, 1943 { 1944 "description": "Enables the set_size_constraints command without any pre-configured scope.", 1945 "type": "string", 1946 + "const": "core:window:allow-set-size-constraints", 1947 + "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope." 1948 }, 1949 { 1950 "description": "Enables the set_skip_taskbar command without any pre-configured scope.", 1951 "type": "string", 1952 + "const": "core:window:allow-set-skip-taskbar", 1953 + "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope." 1954 }, 1955 { 1956 "description": "Enables the set_theme command without any pre-configured scope.", 1957 "type": "string", 1958 + "const": "core:window:allow-set-theme", 1959 + "markdownDescription": "Enables the set_theme command without any pre-configured scope." 1960 }, 1961 { 1962 "description": "Enables the set_title command without any pre-configured scope.", 1963 "type": "string", 1964 + "const": "core:window:allow-set-title", 1965 + "markdownDescription": "Enables the set_title command without any pre-configured scope." 1966 }, 1967 { 1968 "description": "Enables the set_title_bar_style command without any pre-configured scope.", 1969 "type": "string", 1970 + "const": "core:window:allow-set-title-bar-style", 1971 + "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope." 1972 }, 1973 { 1974 "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", 1975 "type": "string", 1976 + "const": "core:window:allow-set-visible-on-all-workspaces", 1977 + "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope." 1978 }, 1979 { 1980 "description": "Enables the show command without any pre-configured scope.", 1981 "type": "string", 1982 + "const": "core:window:allow-show", 1983 + "markdownDescription": "Enables the show command without any pre-configured scope." 1984 }, 1985 { 1986 "description": "Enables the start_dragging command without any pre-configured scope.", 1987 "type": "string", 1988 + "const": "core:window:allow-start-dragging", 1989 + "markdownDescription": "Enables the start_dragging command without any pre-configured scope." 1990 }, 1991 { 1992 "description": "Enables the start_resize_dragging command without any pre-configured scope.", 1993 "type": "string", 1994 + "const": "core:window:allow-start-resize-dragging", 1995 + "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope." 1996 }, 1997 { 1998 "description": "Enables the theme command without any pre-configured scope.", 1999 "type": "string", 2000 + "const": "core:window:allow-theme", 2001 + "markdownDescription": "Enables the theme command without any pre-configured scope." 2002 }, 2003 { 2004 "description": "Enables the title command without any pre-configured scope.", 2005 "type": "string", 2006 + "const": "core:window:allow-title", 2007 + "markdownDescription": "Enables the title command without any pre-configured scope." 2008 }, 2009 { 2010 "description": "Enables the toggle_maximize command without any pre-configured scope.", 2011 "type": "string", 2012 + "const": "core:window:allow-toggle-maximize", 2013 + "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope." 2014 }, 2015 { 2016 "description": "Enables the unmaximize command without any pre-configured scope.", 2017 "type": "string", 2018 + "const": "core:window:allow-unmaximize", 2019 + "markdownDescription": "Enables the unmaximize command without any pre-configured scope." 2020 }, 2021 { 2022 "description": "Enables the unminimize command without any pre-configured scope.", 2023 "type": "string", 2024 + "const": "core:window:allow-unminimize", 2025 + "markdownDescription": "Enables the unminimize command without any pre-configured scope." 2026 }, 2027 { 2028 "description": "Denies the available_monitors command without any pre-configured scope.", 2029 "type": "string", 2030 + "const": "core:window:deny-available-monitors", 2031 + "markdownDescription": "Denies the available_monitors command without any pre-configured scope." 2032 }, 2033 { 2034 "description": "Denies the center command without any pre-configured scope.", 2035 "type": "string", 2036 + "const": "core:window:deny-center", 2037 + "markdownDescription": "Denies the center command without any pre-configured scope." 2038 }, 2039 { 2040 "description": "Denies the close command without any pre-configured scope.", 2041 "type": "string", 2042 + "const": "core:window:deny-close", 2043 + "markdownDescription": "Denies the close command without any pre-configured scope." 2044 }, 2045 { 2046 "description": "Denies the create command without any pre-configured scope.", 2047 "type": "string", 2048 + "const": "core:window:deny-create", 2049 + "markdownDescription": "Denies the create command without any pre-configured scope." 2050 }, 2051 { 2052 "description": "Denies the current_monitor command without any pre-configured scope.", 2053 "type": "string", 2054 + "const": "core:window:deny-current-monitor", 2055 + "markdownDescription": "Denies the current_monitor command without any pre-configured scope." 2056 }, 2057 { 2058 "description": "Denies the cursor_position command without any pre-configured scope.", 2059 "type": "string", 2060 + "const": "core:window:deny-cursor-position", 2061 + "markdownDescription": "Denies the cursor_position command without any pre-configured scope." 2062 }, 2063 { 2064 "description": "Denies the destroy command without any pre-configured scope.", 2065 "type": "string", 2066 + "const": "core:window:deny-destroy", 2067 + "markdownDescription": "Denies the destroy command without any pre-configured scope." 2068 }, 2069 { 2070 "description": "Denies the get_all_windows command without any pre-configured scope.", 2071 "type": "string", 2072 + "const": "core:window:deny-get-all-windows", 2073 + "markdownDescription": "Denies the get_all_windows command without any pre-configured scope." 2074 }, 2075 { 2076 "description": "Denies the hide command without any pre-configured scope.", 2077 "type": "string", 2078 + "const": "core:window:deny-hide", 2079 + "markdownDescription": "Denies the hide command without any pre-configured scope." 2080 }, 2081 { 2082 "description": "Denies the inner_position command without any pre-configured scope.", 2083 "type": "string", 2084 + "const": "core:window:deny-inner-position", 2085 + "markdownDescription": "Denies the inner_position command without any pre-configured scope." 2086 }, 2087 { 2088 "description": "Denies the inner_size command without any pre-configured scope.", 2089 "type": "string", 2090 + "const": "core:window:deny-inner-size", 2091 + "markdownDescription": "Denies the inner_size command without any pre-configured scope." 2092 }, 2093 { 2094 "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", 2095 "type": "string", 2096 + "const": "core:window:deny-internal-toggle-maximize", 2097 + "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope." 2098 + }, 2099 + { 2100 + "description": "Denies the is_always_on_top command without any pre-configured scope.", 2101 + "type": "string", 2102 + "const": "core:window:deny-is-always-on-top", 2103 + "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope." 2104 }, 2105 { 2106 "description": "Denies the is_closable command without any pre-configured scope.", 2107 "type": "string", 2108 + "const": "core:window:deny-is-closable", 2109 + "markdownDescription": "Denies the is_closable command without any pre-configured scope." 2110 }, 2111 { 2112 "description": "Denies the is_decorated command without any pre-configured scope.", 2113 "type": "string", 2114 + "const": "core:window:deny-is-decorated", 2115 + "markdownDescription": "Denies the is_decorated command without any pre-configured scope." 2116 }, 2117 { 2118 "description": "Denies the is_enabled command without any pre-configured scope.", 2119 "type": "string", 2120 + "const": "core:window:deny-is-enabled", 2121 + "markdownDescription": "Denies the is_enabled command without any pre-configured scope." 2122 }, 2123 { 2124 "description": "Denies the is_focused command without any pre-configured scope.", 2125 "type": "string", 2126 + "const": "core:window:deny-is-focused", 2127 + "markdownDescription": "Denies the is_focused command without any pre-configured scope." 2128 }, 2129 { 2130 "description": "Denies the is_fullscreen command without any pre-configured scope.", 2131 "type": "string", 2132 + "const": "core:window:deny-is-fullscreen", 2133 + "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope." 2134 }, 2135 { 2136 "description": "Denies the is_maximizable command without any pre-configured scope.", 2137 "type": "string", 2138 + "const": "core:window:deny-is-maximizable", 2139 + "markdownDescription": "Denies the is_maximizable command without any pre-configured scope." 2140 }, 2141 { 2142 "description": "Denies the is_maximized command without any pre-configured scope.", 2143 "type": "string", 2144 + "const": "core:window:deny-is-maximized", 2145 + "markdownDescription": "Denies the is_maximized command without any pre-configured scope." 2146 }, 2147 { 2148 "description": "Denies the is_minimizable command without any pre-configured scope.", 2149 "type": "string", 2150 + "const": "core:window:deny-is-minimizable", 2151 + "markdownDescription": "Denies the is_minimizable command without any pre-configured scope." 2152 }, 2153 { 2154 "description": "Denies the is_minimized command without any pre-configured scope.", 2155 "type": "string", 2156 + "const": "core:window:deny-is-minimized", 2157 + "markdownDescription": "Denies the is_minimized command without any pre-configured scope." 2158 }, 2159 { 2160 "description": "Denies the is_resizable command without any pre-configured scope.", 2161 "type": "string", 2162 + "const": "core:window:deny-is-resizable", 2163 + "markdownDescription": "Denies the is_resizable command without any pre-configured scope." 2164 }, 2165 { 2166 "description": "Denies the is_visible command without any pre-configured scope.", 2167 "type": "string", 2168 + "const": "core:window:deny-is-visible", 2169 + "markdownDescription": "Denies the is_visible command without any pre-configured scope." 2170 }, 2171 { 2172 "description": "Denies the maximize command without any pre-configured scope.", 2173 "type": "string", 2174 + "const": "core:window:deny-maximize", 2175 + "markdownDescription": "Denies the maximize command without any pre-configured scope." 2176 }, 2177 { 2178 "description": "Denies the minimize command without any pre-configured scope.", 2179 "type": "string", 2180 + "const": "core:window:deny-minimize", 2181 + "markdownDescription": "Denies the minimize command without any pre-configured scope." 2182 }, 2183 { 2184 "description": "Denies the monitor_from_point command without any pre-configured scope.", 2185 "type": "string", 2186 + "const": "core:window:deny-monitor-from-point", 2187 + "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope." 2188 }, 2189 { 2190 "description": "Denies the outer_position command without any pre-configured scope.", 2191 "type": "string", 2192 + "const": "core:window:deny-outer-position", 2193 + "markdownDescription": "Denies the outer_position command without any pre-configured scope." 2194 }, 2195 { 2196 "description": "Denies the outer_size command without any pre-configured scope.", 2197 "type": "string", 2198 + "const": "core:window:deny-outer-size", 2199 + "markdownDescription": "Denies the outer_size command without any pre-configured scope." 2200 }, 2201 { 2202 "description": "Denies the primary_monitor command without any pre-configured scope.", 2203 "type": "string", 2204 + "const": "core:window:deny-primary-monitor", 2205 + "markdownDescription": "Denies the primary_monitor command without any pre-configured scope." 2206 }, 2207 { 2208 "description": "Denies the request_user_attention command without any pre-configured scope.", 2209 "type": "string", 2210 + "const": "core:window:deny-request-user-attention", 2211 + "markdownDescription": "Denies the request_user_attention command without any pre-configured scope." 2212 }, 2213 { 2214 "description": "Denies the scale_factor command without any pre-configured scope.", 2215 "type": "string", 2216 + "const": "core:window:deny-scale-factor", 2217 + "markdownDescription": "Denies the scale_factor command without any pre-configured scope." 2218 }, 2219 { 2220 "description": "Denies the set_always_on_bottom command without any pre-configured scope.", 2221 "type": "string", 2222 + "const": "core:window:deny-set-always-on-bottom", 2223 + "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope." 2224 }, 2225 { 2226 "description": "Denies the set_always_on_top command without any pre-configured scope.", 2227 "type": "string", 2228 + "const": "core:window:deny-set-always-on-top", 2229 + "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope." 2230 + }, 2231 + { 2232 + "description": "Denies the set_background_color command without any pre-configured scope.", 2233 + "type": "string", 2234 + "const": "core:window:deny-set-background-color", 2235 + "markdownDescription": "Denies the set_background_color command without any pre-configured scope." 2236 + }, 2237 + { 2238 + "description": "Denies the set_badge_count command without any pre-configured scope.", 2239 + "type": "string", 2240 + "const": "core:window:deny-set-badge-count", 2241 + "markdownDescription": "Denies the set_badge_count command without any pre-configured scope." 2242 + }, 2243 + { 2244 + "description": "Denies the set_badge_label command without any pre-configured scope.", 2245 + "type": "string", 2246 + "const": "core:window:deny-set-badge-label", 2247 + "markdownDescription": "Denies the set_badge_label command without any pre-configured scope." 2248 }, 2249 { 2250 "description": "Denies the set_closable command without any pre-configured scope.", 2251 "type": "string", 2252 + "const": "core:window:deny-set-closable", 2253 + "markdownDescription": "Denies the set_closable command without any pre-configured scope." 2254 }, 2255 { 2256 "description": "Denies the set_content_protected command without any pre-configured scope.", 2257 "type": "string", 2258 + "const": "core:window:deny-set-content-protected", 2259 + "markdownDescription": "Denies the set_content_protected command without any pre-configured scope." 2260 }, 2261 { 2262 "description": "Denies the set_cursor_grab command without any pre-configured scope.", 2263 "type": "string", 2264 + "const": "core:window:deny-set-cursor-grab", 2265 + "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope." 2266 }, 2267 { 2268 "description": "Denies the set_cursor_icon command without any pre-configured scope.", 2269 "type": "string", 2270 + "const": "core:window:deny-set-cursor-icon", 2271 + "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope." 2272 }, 2273 { 2274 "description": "Denies the set_cursor_position command without any pre-configured scope.", 2275 "type": "string", 2276 + "const": "core:window:deny-set-cursor-position", 2277 + "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope." 2278 }, 2279 { 2280 "description": "Denies the set_cursor_visible command without any pre-configured scope.", 2281 "type": "string", 2282 + "const": "core:window:deny-set-cursor-visible", 2283 + "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope." 2284 }, 2285 { 2286 "description": "Denies the set_decorations command without any pre-configured scope.", 2287 "type": "string", 2288 + "const": "core:window:deny-set-decorations", 2289 + "markdownDescription": "Denies the set_decorations command without any pre-configured scope." 2290 }, 2291 { 2292 "description": "Denies the set_effects command without any pre-configured scope.", 2293 "type": "string", 2294 + "const": "core:window:deny-set-effects", 2295 + "markdownDescription": "Denies the set_effects command without any pre-configured scope." 2296 }, 2297 { 2298 "description": "Denies the set_enabled command without any pre-configured scope.", 2299 "type": "string", 2300 + "const": "core:window:deny-set-enabled", 2301 + "markdownDescription": "Denies the set_enabled command without any pre-configured scope." 2302 }, 2303 { 2304 "description": "Denies the set_focus command without any pre-configured scope.", 2305 "type": "string", 2306 + "const": "core:window:deny-set-focus", 2307 + "markdownDescription": "Denies the set_focus command without any pre-configured scope." 2308 + }, 2309 + { 2310 + "description": "Denies the set_focusable command without any pre-configured scope.", 2311 + "type": "string", 2312 + "const": "core:window:deny-set-focusable", 2313 + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." 2314 }, 2315 { 2316 "description": "Denies the set_fullscreen command without any pre-configured scope.", 2317 "type": "string", 2318 + "const": "core:window:deny-set-fullscreen", 2319 + "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope." 2320 }, 2321 { 2322 "description": "Denies the set_icon command without any pre-configured scope.", 2323 "type": "string", 2324 + "const": "core:window:deny-set-icon", 2325 + "markdownDescription": "Denies the set_icon command without any pre-configured scope." 2326 }, 2327 { 2328 "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", 2329 "type": "string", 2330 + "const": "core:window:deny-set-ignore-cursor-events", 2331 + "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope." 2332 }, 2333 { 2334 "description": "Denies the set_max_size command without any pre-configured scope.", 2335 "type": "string", 2336 + "const": "core:window:deny-set-max-size", 2337 + "markdownDescription": "Denies the set_max_size command without any pre-configured scope." 2338 }, 2339 { 2340 "description": "Denies the set_maximizable command without any pre-configured scope.", 2341 "type": "string", 2342 + "const": "core:window:deny-set-maximizable", 2343 + "markdownDescription": "Denies the set_maximizable command without any pre-configured scope." 2344 }, 2345 { 2346 "description": "Denies the set_min_size command without any pre-configured scope.", 2347 "type": "string", 2348 + "const": "core:window:deny-set-min-size", 2349 + "markdownDescription": "Denies the set_min_size command without any pre-configured scope." 2350 }, 2351 { 2352 "description": "Denies the set_minimizable command without any pre-configured scope.", 2353 "type": "string", 2354 + "const": "core:window:deny-set-minimizable", 2355 + "markdownDescription": "Denies the set_minimizable command without any pre-configured scope." 2356 + }, 2357 + { 2358 + "description": "Denies the set_overlay_icon command without any pre-configured scope.", 2359 + "type": "string", 2360 + "const": "core:window:deny-set-overlay-icon", 2361 + "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope." 2362 }, 2363 { 2364 "description": "Denies the set_position command without any pre-configured scope.", 2365 "type": "string", 2366 + "const": "core:window:deny-set-position", 2367 + "markdownDescription": "Denies the set_position command without any pre-configured scope." 2368 }, 2369 { 2370 "description": "Denies the set_progress_bar command without any pre-configured scope.", 2371 "type": "string", 2372 + "const": "core:window:deny-set-progress-bar", 2373 + "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope." 2374 }, 2375 { 2376 "description": "Denies the set_resizable command without any pre-configured scope.", 2377 "type": "string", 2378 + "const": "core:window:deny-set-resizable", 2379 + "markdownDescription": "Denies the set_resizable command without any pre-configured scope." 2380 }, 2381 { 2382 "description": "Denies the set_shadow command without any pre-configured scope.", 2383 "type": "string", 2384 + "const": "core:window:deny-set-shadow", 2385 + "markdownDescription": "Denies the set_shadow command without any pre-configured scope." 2386 + }, 2387 + { 2388 + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", 2389 + "type": "string", 2390 + "const": "core:window:deny-set-simple-fullscreen", 2391 + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." 2392 }, 2393 { 2394 "description": "Denies the set_size command without any pre-configured scope.", 2395 "type": "string", 2396 + "const": "core:window:deny-set-size", 2397 + "markdownDescription": "Denies the set_size command without any pre-configured scope." 2398 }, 2399 { 2400 "description": "Denies the set_size_constraints command without any pre-configured scope.", 2401 "type": "string", 2402 + "const": "core:window:deny-set-size-constraints", 2403 + "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope." 2404 }, 2405 { 2406 "description": "Denies the set_skip_taskbar command without any pre-configured scope.", 2407 "type": "string", 2408 + "const": "core:window:deny-set-skip-taskbar", 2409 + "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope." 2410 }, 2411 { 2412 "description": "Denies the set_theme command without any pre-configured scope.", 2413 "type": "string", 2414 + "const": "core:window:deny-set-theme", 2415 + "markdownDescription": "Denies the set_theme command without any pre-configured scope." 2416 }, 2417 { 2418 "description": "Denies the set_title command without any pre-configured scope.", 2419 "type": "string", 2420 + "const": "core:window:deny-set-title", 2421 + "markdownDescription": "Denies the set_title command without any pre-configured scope." 2422 }, 2423 { 2424 "description": "Denies the set_title_bar_style command without any pre-configured scope.", 2425 "type": "string", 2426 + "const": "core:window:deny-set-title-bar-style", 2427 + "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope." 2428 }, 2429 { 2430 "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", 2431 "type": "string", 2432 + "const": "core:window:deny-set-visible-on-all-workspaces", 2433 + "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope." 2434 }, 2435 { 2436 "description": "Denies the show command without any pre-configured scope.", 2437 "type": "string", 2438 + "const": "core:window:deny-show", 2439 + "markdownDescription": "Denies the show command without any pre-configured scope." 2440 }, 2441 { 2442 "description": "Denies the start_dragging command without any pre-configured scope.", 2443 "type": "string", 2444 + "const": "core:window:deny-start-dragging", 2445 + "markdownDescription": "Denies the start_dragging command without any pre-configured scope." 2446 }, 2447 { 2448 "description": "Denies the start_resize_dragging command without any pre-configured scope.", 2449 "type": "string", 2450 + "const": "core:window:deny-start-resize-dragging", 2451 + "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope." 2452 }, 2453 { 2454 "description": "Denies the theme command without any pre-configured scope.", 2455 "type": "string", 2456 + "const": "core:window:deny-theme", 2457 + "markdownDescription": "Denies the theme command without any pre-configured scope." 2458 }, 2459 { 2460 "description": "Denies the title command without any pre-configured scope.", 2461 "type": "string", 2462 + "const": "core:window:deny-title", 2463 + "markdownDescription": "Denies the title command without any pre-configured scope." 2464 }, 2465 { 2466 "description": "Denies the toggle_maximize command without any pre-configured scope.", 2467 "type": "string", 2468 + "const": "core:window:deny-toggle-maximize", 2469 + "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope." 2470 }, 2471 { 2472 "description": "Denies the unmaximize command without any pre-configured scope.", 2473 "type": "string", 2474 + "const": "core:window:deny-unmaximize", 2475 + "markdownDescription": "Denies the unmaximize command without any pre-configured scope." 2476 }, 2477 { 2478 "description": "Denies the unminimize command without any pre-configured scope.", 2479 "type": "string", 2480 + "const": "core:window:deny-unminimize", 2481 + "markdownDescription": "Denies the unminimize command without any pre-configured scope." 2482 }, 2483 { 2484 + "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`", 2485 "type": "string", 2486 + "const": "http:default", 2487 + "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`" 2488 }, 2489 { 2490 "description": "Enables the fetch command without any pre-configured scope.", 2491 "type": "string", 2492 + "const": "http:allow-fetch", 2493 + "markdownDescription": "Enables the fetch command without any pre-configured scope." 2494 }, 2495 { 2496 "description": "Enables the fetch_cancel command without any pre-configured scope.", 2497 "type": "string", 2498 + "const": "http:allow-fetch-cancel", 2499 + "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope." 2500 }, 2501 { 2502 "description": "Enables the fetch_read_body command without any pre-configured scope.", 2503 "type": "string", 2504 + "const": "http:allow-fetch-read-body", 2505 + "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope." 2506 }, 2507 { 2508 "description": "Enables the fetch_send command without any pre-configured scope.", 2509 "type": "string", 2510 + "const": "http:allow-fetch-send", 2511 + "markdownDescription": "Enables the fetch_send command without any pre-configured scope." 2512 }, 2513 { 2514 "description": "Denies the fetch command without any pre-configured scope.", 2515 "type": "string", 2516 + "const": "http:deny-fetch", 2517 + "markdownDescription": "Denies the fetch command without any pre-configured scope." 2518 }, 2519 { 2520 "description": "Denies the fetch_cancel command without any pre-configured scope.", 2521 "type": "string", 2522 + "const": "http:deny-fetch-cancel", 2523 + "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope." 2524 }, 2525 { 2526 "description": "Denies the fetch_read_body command without any pre-configured scope.", 2527 "type": "string", 2528 + "const": "http:deny-fetch-read-body", 2529 + "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope." 2530 }, 2531 { 2532 "description": "Denies the fetch_send command without any pre-configured scope.", 2533 "type": "string", 2534 + "const": "http:deny-fetch-send", 2535 + "markdownDescription": "Denies the fetch_send command without any pre-configured scope." 2536 }, 2537 { 2538 + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`", 2539 "type": "string", 2540 + "const": "process:default", 2541 + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`" 2542 }, 2543 { 2544 "description": "Enables the exit command without any pre-configured scope.", 2545 "type": "string", 2546 + "const": "process:allow-exit", 2547 + "markdownDescription": "Enables the exit command without any pre-configured scope." 2548 }, 2549 { 2550 "description": "Enables the restart command without any pre-configured scope.", 2551 "type": "string", 2552 + "const": "process:allow-restart", 2553 + "markdownDescription": "Enables the restart command without any pre-configured scope." 2554 }, 2555 { 2556 "description": "Denies the exit command without any pre-configured scope.", 2557 "type": "string", 2558 + "const": "process:deny-exit", 2559 + "markdownDescription": "Denies the exit command without any pre-configured scope." 2560 }, 2561 { 2562 "description": "Denies the restart command without any pre-configured scope.", 2563 "type": "string", 2564 + "const": "process:deny-restart", 2565 + "markdownDescription": "Denies the restart command without any pre-configured scope." 2566 }, 2567 { 2568 + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`", 2569 "type": "string", 2570 + "const": "shell:default", 2571 + "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`" 2572 }, 2573 { 2574 "description": "Enables the execute command without any pre-configured scope.", 2575 "type": "string", 2576 + "const": "shell:allow-execute", 2577 + "markdownDescription": "Enables the execute command without any pre-configured scope." 2578 }, 2579 { 2580 "description": "Enables the kill command without any pre-configured scope.", 2581 "type": "string", 2582 + "const": "shell:allow-kill", 2583 + "markdownDescription": "Enables the kill command without any pre-configured scope." 2584 }, 2585 { 2586 "description": "Enables the open command without any pre-configured scope.", 2587 "type": "string", 2588 + "const": "shell:allow-open", 2589 + "markdownDescription": "Enables the open command without any pre-configured scope." 2590 }, 2591 { 2592 "description": "Enables the spawn command without any pre-configured scope.", 2593 "type": "string", 2594 + "const": "shell:allow-spawn", 2595 + "markdownDescription": "Enables the spawn command without any pre-configured scope." 2596 }, 2597 { 2598 "description": "Enables the stdin_write command without any pre-configured scope.", 2599 "type": "string", 2600 + "const": "shell:allow-stdin-write", 2601 + "markdownDescription": "Enables the stdin_write command without any pre-configured scope." 2602 }, 2603 { 2604 "description": "Denies the execute command without any pre-configured scope.", 2605 "type": "string", 2606 + "const": "shell:deny-execute", 2607 + "markdownDescription": "Denies the execute command without any pre-configured scope." 2608 }, 2609 { 2610 "description": "Denies the kill command without any pre-configured scope.", 2611 "type": "string", 2612 + "const": "shell:deny-kill", 2613 + "markdownDescription": "Denies the kill command without any pre-configured scope." 2614 }, 2615 { 2616 "description": "Denies the open command without any pre-configured scope.", 2617 "type": "string", 2618 + "const": "shell:deny-open", 2619 + "markdownDescription": "Denies the open command without any pre-configured scope." 2620 }, 2621 { 2622 "description": "Denies the spawn command without any pre-configured scope.", 2623 "type": "string", 2624 + "const": "shell:deny-spawn", 2625 + "markdownDescription": "Denies the spawn command without any pre-configured scope." 2626 }, 2627 { 2628 "description": "Denies the stdin_write command without any pre-configured scope.", 2629 "type": "string", 2630 + "const": "shell:deny-stdin-write", 2631 + "markdownDescription": "Denies the stdin_write command without any pre-configured scope." 2632 } 2633 ] 2634 },
+1
src-tauri/rustfmt.toml
···
··· 1 + tab_spaces = 2
+18 -10
src-tauri/src/frontend_calls/change_final_path.rs
··· 1 use std::fs; 2 3 - #[tauri::command] 4 - pub fn change_final_path(new_path: &str) { 5 - let config_path = dirs::config_dir() 6 - .unwrap() 7 - .join("PhazeDev\\VRChatPhotoManager\\.photos_path"); 8 9 - fs::write(&config_path, new_path.as_bytes()).unwrap(); 10 11 match fs::metadata(&new_path) { 12 - Ok(_) => {} 13 Err(_) => { 14 - fs::create_dir(&new_path).unwrap(); 15 } 16 - }; 17 - }
··· 1 use std::fs; 2 3 + use tauri::{Emitter, State, Window}; 4 5 + use crate::util::cache::Cache; 6 7 + #[tauri::command] 8 + pub fn change_final_path(new_path: &str, window: Window, cache: State<Cache>) -> bool { 9 match fs::metadata(&new_path) { 10 + Ok(_) => { 11 + let config_path = dirs::config_dir() 12 + .unwrap() 13 + .join("PhazeDev/VRChatPhotoManager/.photos_path"); 14 + 15 + fs::write(&config_path, new_path.as_bytes()).unwrap(); 16 + cache.insert("photo-path".into(), new_path.to_owned()); 17 + 18 + true 19 + } 20 Err(_) => { 21 + window.emit("vrcpm-error", "Error Changing Path: Path does not exist.").unwrap(); 22 + false 23 } 24 + } 25 + }
+17 -5
src-tauri/src/frontend_calls/close_splashscreen.rs
··· 1 - use tauri::Manager; 2 use std::env; 3 4 #[tauri::command] 5 - pub fn close_splashscreen(window: tauri::Window) { 6 let args: Vec<String> = env::args().collect(); 7 8 let mut show = true; ··· 12 } 13 } 14 15 - if show{ 16 - window.get_webview_window("main").unwrap().show().unwrap(); 17 } 18 - }
··· 1 use std::env; 2 + use tauri::{ Emitter, Manager, State }; 3 + 4 + use crate::frontend_calls::config::Config; 5 + 6 + use super::config::get_config_value_string; 7 8 #[tauri::command] 9 + pub fn close_splashscreen( window: tauri::Window, config: State<Config> ) { 10 let args: Vec<String> = env::args().collect(); 11 12 let mut show = true; ··· 16 } 17 } 18 19 + let value: String = match get_config_value_string("start-in-bg".to_owned(), config) { Some(val) => val, None => "false".to_owned() }; 20 + if value == "true"{ 21 + show = false; 22 } 23 + 24 + if show { 25 + let webview = window.get_webview_window("main").unwrap(); 26 + 27 + webview.show().unwrap(); 28 + webview.emit("show-window", 0).unwrap(); 29 + } 30 + }
+49 -26
src-tauri/src/frontend_calls/config.rs
··· 1 - use std::{ fs, path::PathBuf }; 2 3 use serde_json::Value; 4 5 - pub fn get_config_path() -> PathBuf{ 6 let path = dirs::config_dir() 7 .unwrap() 8 - .join("PhazeDev\\VRChatPhotoManager\\.config"); 9 10 - match fs::metadata(&path){ 11 Ok(_) => {} 12 Err(_) => { 13 fs::write(&path, b"{}").unwrap(); ··· 17 path 18 } 19 20 - #[tauri::command] 21 - pub fn set_config_value_string( key: String, value: String ){ 22 - let path = get_config_path(); 23 24 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 25 - config[key] = Value::from(value); 26 27 - fs::write(path, config.to_string()).unwrap(); 28 } 29 30 #[tauri::command] 31 - pub fn get_config_value_string( key: String ) -> Option<String>{ 32 - let config: Value = serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 33 - let string = config[key].as_str(); 34 35 - if string.is_some(){ 36 Some(string.unwrap().to_owned()) 37 - } else{ 38 None 39 } 40 } 41 42 #[tauri::command] 43 - pub fn set_config_value_int( key: String, value: i64 ){ 44 - let path = get_config_path(); 45 - 46 - let mut config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 47 - config[key] = Value::from(value); 48 - 49 - fs::write(path, config.to_string()).unwrap(); 50 } 51 52 #[tauri::command] 53 - pub fn get_config_value_int( key: String ) -> Option<i64>{ 54 - let config: Value = serde_json::from_str(&fs::read_to_string(get_config_path()).unwrap()).unwrap(); 55 - config[key].as_i64() 56 - }
··· 1 + use std::{fs, path::PathBuf, sync::Mutex}; 2 3 use serde_json::Value; 4 + use tauri::State; 5 6 + pub fn get_config_path() -> PathBuf { 7 let path = dirs::config_dir() 8 .unwrap() 9 + .join("PhazeDev/VRChatPhotoManager/.config"); 10 11 + match fs::metadata(&path) { 12 Ok(_) => {} 13 Err(_) => { 14 fs::write(&path, b"{}").unwrap(); ··· 18 path 19 } 20 21 + pub struct Config{ 22 + config: Mutex<Value> 23 + } 24 + 25 + impl Config{ 26 + pub fn new() -> Config{ 27 + let path = get_config_path(); 28 + let config: Value = serde_json::from_str(&fs::read_to_string(&path).unwrap()).unwrap(); 29 + 30 + Config { 31 + config: Mutex::new(config) 32 + } 33 + } 34 + 35 + pub fn set( &self, key: String, value: Value ){ 36 + let mut lock = self.config.lock().unwrap(); 37 + lock[key] = value; 38 + } 39 + 40 + pub fn get( &self, key: String ) -> Value{ 41 + let lock = self.config.lock().unwrap(); 42 + lock[key].clone() 43 + } 44 + 45 + pub fn save( &self ){ 46 + let path = get_config_path(); 47 + let string = serde_json::to_string(&self.config).unwrap(); 48 49 + fs::write(path, string).unwrap(); 50 + } 51 + } 52 53 + #[tauri::command] 54 + pub fn set_config_value_string( key: String, value: String, config: State<Config> ) { 55 + config.set(key, Value::from(value)); 56 } 57 58 #[tauri::command] 59 + pub fn get_config_value_string( key: String, config: State<Config> ) -> Option<String> { 60 + let string = config.get(key); 61 + let string = string.as_str(); 62 63 + if string.is_some() { 64 Some(string.unwrap().to_owned()) 65 + } else { 66 None 67 } 68 } 69 70 #[tauri::command] 71 + pub fn set_config_value_int( key: String, value: i64, config: State<Config> ) { 72 + config.set(key, Value::from(value)); 73 } 74 75 #[tauri::command] 76 + pub fn get_config_value_int( key: String, config: State<Config> ) -> Option<i64> { 77 + let string = config.get(key); 78 + string.as_i64() 79 + }
+25
src-tauri/src/frontend_calls/copy_image.rs
···
··· 1 + use std::{ borrow::Cow, sync::Mutex }; 2 + 3 + use arboard::{ Clipboard, ImageData }; 4 + use image::GenericImageView; 5 + use tauri::State; 6 + 7 + use crate::{ frontend_calls::get_user_photos_path::get_user_photos_path, util::cache::Cache }; 8 + 9 + #[tauri::command] 10 + pub fn copy_image( path: String, clipboard: State<Mutex<Clipboard>>, cache: State<Cache> ) { 11 + let path = format!("{}/{}", get_user_photos_path(cache), path); 12 + println!("Copying Image: {}", &path); 13 + 14 + let img = image::open(path).unwrap(); 15 + let size = img.dimensions(); 16 + 17 + let img_data = ImageData { 18 + width: size.0 as usize, 19 + height: size.1 as usize, 20 + bytes: Cow::from(img.into_rgba8().to_vec()) 21 + }; 22 + 23 + let mut lock = clipboard.lock().unwrap(); 24 + lock.set_image(img_data).unwrap(); 25 + }
+9 -19
src-tauri/src/frontend_calls/delete_photo.rs
··· 1 - use std::{ fs, thread, time::Duration }; 2 - use crate::util::get_photo_path::get_photo_path; 3 4 // Delete a photo when the users confirms the prompt in the ui 5 #[tauri::command] 6 - pub fn delete_photo(path: String, token: String, is_syncing: bool) { 7 thread::spawn(move || { 8 - let p = get_photo_path().join(&path); 9 fs::remove_file(p).unwrap(); 10 - 11 - let photo = path.split("\\").last().unwrap(); 12 - 13 - if is_syncing { 14 - let client = reqwest::blocking::Client::new(); 15 - client 16 - .delete(format!( 17 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}&photo={}", 18 - token, photo 19 - )) 20 - .timeout(Duration::from_secs(120)) 21 - .send() 22 - .unwrap(); 23 - } 24 }); 25 - }
··· 1 + use tauri::State; 2 + 3 + use crate::util::cache::Cache; 4 + use std::{ fs, thread }; 5 6 // Delete a photo when the users confirms the prompt in the ui 7 #[tauri::command] 8 + pub fn delete_photo(path: String, cache: State<Cache>) { 9 + let photo_path = cache.get("photo-path".into()); 10 + 11 thread::spawn(move || { 12 + let p = photo_path.unwrap() + "/" + &path; 13 fs::remove_file(p).unwrap(); 14 }); 15 + }
+2 -2
src-tauri/src/frontend_calls/find_world_by_id.rs
··· 1 - use std::thread; 2 use crate::worldscraper::World; 3 use tauri::Emitter; 4 5 // Load vrchat world data ··· 9 let world = World::new(world_id); 10 window.emit("world_data", world).unwrap(); 11 }); 12 - }
··· 1 use crate::worldscraper::World; 2 + use std::thread; 3 use tauri::Emitter; 4 5 // Load vrchat world data ··· 9 let world = World::new(world_id); 10 window.emit("world_data", world).unwrap(); 11 }); 12 + }
+8
src-tauri/src/frontend_calls/get_os.rs
···
··· 1 + #[tauri::command] 2 + pub fn get_os() -> String { 3 + #[cfg(windows)] 4 + return "windows".into(); 5 + 6 + #[cfg(unix)] 7 + return "unix".into(); 8 + }
+7 -5
src-tauri/src/frontend_calls/get_user_photos_path.rs
··· 1 - use std::path; 2 - use crate::util::get_photo_path::get_photo_path; 3 4 // Check if the photo config file exists 5 // if not just return the default vrchat path 6 #[tauri::command] 7 - pub fn get_user_photos_path() -> path::PathBuf { 8 - get_photo_path() 9 - }
··· 1 + use tauri::State; 2 + 3 + use crate::util::cache::Cache; 4 5 // Check if the photo config file exists 6 // if not just return the default vrchat path 7 #[tauri::command] 8 + pub fn get_user_photos_path( cache: State<Cache> ) -> String { 9 + let photo_path = cache.get("photo-path".into()); 10 + photo_path.unwrap() 11 + }
+28 -9
src-tauri/src/frontend_calls/load_photo_meta.rs
··· 1 - use std::{ thread, fs, io::Read }; 2 - use crate::util::get_photo_path::get_photo_path; 3 - use tauri::Emitter; 4 use crate::PNGImage; 5 6 // Reads the PNG file and loads the image metadata from it 7 // then sends the metadata to the frontend, returns width, height, colour depth and so on... more info "pngmeta.rs" 8 #[tauri::command] 9 - pub fn load_photo_meta(photo: &str, window: tauri::Window) { 10 let photo = photo.to_string(); 11 12 thread::spawn(move || { 13 - let base_dir = get_photo_path().join(&photo); 14 15 let file = fs::File::open(base_dir.clone()); 16 ··· 19 let mut buffer = Vec::new(); 20 21 let _out = file.read_to_end(&mut buffer); 22 - window 23 - .emit("photo_meta_loaded", PNGImage::new(buffer, photo)) 24 - .unwrap(); 25 } 26 Err(_) => { 27 println!("Cannot read image file: {:?}", base_dir); 28 } 29 } 30 }); 31 - }
··· 1 + use crate::util::cache::Cache; 2 use crate::PNGImage; 3 + use std::{fs, io::Read, thread}; 4 + use tauri::{Emitter, State}; 5 6 // Reads the PNG file and loads the image metadata from it 7 // then sends the metadata to the frontend, returns width, height, colour depth and so on... more info "pngmeta.rs" 8 #[tauri::command] 9 + pub fn load_photo_meta(photo: &str, window: tauri::Window, cache: State<Cache> ) { 10 + let photo_path = cache.get("photo-path".into()); 11 let photo = photo.to_string(); 12 13 thread::spawn(move || { 14 + let base_dir = photo_path.unwrap() + "/" + &photo; 15 16 let file = fs::File::open(base_dir.clone()); 17 ··· 20 let mut buffer = Vec::new(); 21 22 let _out = file.read_to_end(&mut buffer); 23 + let png = PNGImage::new(buffer, photo.clone()); 24 + 25 + if png.is_err(){ 26 + println!("Failed to load: {} => {}", base_dir, png.unwrap_err()); 27 + 28 + window.emit("photo_meta_loaded", PNGImage { 29 + width: 1920, 30 + height: 1080, 31 + bit_depth: 0, 32 + colour_type: 0, 33 + compression_method: 0, 34 + filter_method: 0, 35 + interlace_method: 0, 36 + metadata: "".into(), 37 + error: true, 38 + path: photo 39 + }).unwrap(); 40 + } else{ 41 + println!("Loaded: {}", base_dir); 42 + window.emit("photo_meta_loaded", png.unwrap()).unwrap(); 43 + } 44 } 45 Err(_) => { 46 println!("Cannot read image file: {:?}", base_dir); 47 } 48 } 49 }); 50 + }
+25 -21
src-tauri/src/frontend_calls/load_photos.rs
··· 1 - use std::{ thread, fs, path }; 2 - use crate::util::get_photo_path::get_photo_path; 3 use regex::Regex; 4 - use tauri::Emitter; 5 6 // Scans all files under the "Pictures/VRChat" path 7 // then sends the list of photos to the frontend ··· 12 } 13 14 #[tauri::command] 15 - pub fn load_photos(window: tauri::Window) { 16 - thread::spawn(move || { 17 - let base_dir = get_photo_path(); 18 19 let mut photos: Vec<path::PathBuf> = Vec::new(); 20 let mut size: usize = 0; 21 22 for folder in fs::read_dir(&base_dir).unwrap() { 23 let f = folder.unwrap(); 24 25 if f.metadata().unwrap().is_dir() { 26 for photo in fs::read_dir(f.path()).unwrap() { ··· 29 if p.metadata().unwrap().is_file() { 30 let fname = p.path(); 31 32 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 33 - let re2 = Regex::new( 34 - r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap(); 35 - let re3 = Regex::new("VRChat_[0-9]{4}x[0-9]{4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap(); 36 - 37 let name = p.file_name(); 38 let name = name.to_str().unwrap(); 39 40 - let re3_match = re3.is_match(name); 41 42 - if re1.is_match(name) 43 - || re2.is_match(name) 44 - || re3_match 45 - { 46 let path = fname.to_path_buf().clone(); 47 let metadata = fs::metadata(&path).unwrap(); 48 ··· 51 52 let pth = path.strip_prefix(&base_dir).unwrap().to_path_buf(); 53 54 - if re3_match{ 55 photos.push(path::PathBuf::from("legacy://").join(pth)); 56 - } else{ 57 photos.push(pth); 58 } 59 } ··· 71 72 println!("Found {} photos", photos.len()); 73 window 74 - .emit("photos_loaded", PhotosLoadedResponse { photos, size }) 75 - .unwrap(); 76 }); 77 - }
··· 1 + use crate::util::cache::Cache; 2 use regex::Regex; 3 + use std::{fs, path, thread}; 4 + use tauri::{Emitter, State}; 5 6 // Scans all files under the "Pictures/VRChat" path 7 // then sends the list of photos to the frontend ··· 12 } 13 14 #[tauri::command] 15 + pub fn load_photos(window: tauri::Window, cache: State<Cache> ) { 16 + let base_dir = cache.get("photo-path".into()).unwrap(); 17 18 + thread::spawn(move || { 19 let mut photos: Vec<path::PathBuf> = Vec::new(); 20 let mut size: usize = 0; 21 22 + let re = Regex::new(r"^[0-9]{4}-[0-9]{2}$").unwrap(); 23 + 24 for folder in fs::read_dir(&base_dir).unwrap() { 25 let f = folder.unwrap(); 26 + if !re.is_match(f.file_name().to_str().unwrap()){ continue; } 27 28 if f.metadata().unwrap().is_dir() { 29 for photo in fs::read_dir(f.path()).unwrap() { ··· 32 if p.metadata().unwrap().is_file() { 33 let fname = p.path(); 34 35 let name = p.file_name(); 36 let name = name.to_str().unwrap(); 37 38 + let re1_match = // This is the current format used by VRChat 39 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(name) || 40 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(name) || 41 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(name); 42 43 + let re2_match = // This is the format VRCX uses if you enable renaming photos 44 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(name); 45 + 46 + let re3_match = // This is an old format VRChat used for naming photos 47 + Regex::new(r"(?m)VRChat_[0-9]{3,4}x[0-9]{3,4}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}.png").unwrap().is_match(name); 48 + 49 + if re1_match || re2_match || re3_match { 50 let path = fname.to_path_buf().clone(); 51 let metadata = fs::metadata(&path).unwrap(); 52 ··· 55 56 let pth = path.strip_prefix(&base_dir).unwrap().to_path_buf(); 57 58 + if re3_match { 59 photos.push(path::PathBuf::from("legacy://").join(pth)); 60 + } else { 61 photos.push(pth); 62 } 63 } ··· 75 76 println!("Found {} photos", photos.len()); 77 window 78 + .emit("photos_loaded", PhotosLoadedResponse { photos, size }) 79 + .unwrap(); 80 }); 81 + }
+10 -11
src-tauri/src/frontend_calls/mod.rs
··· 1 pub mod close_splashscreen; 2 - pub mod start_user_auth; 3 pub mod open_url; 4 - pub mod open_folder; 5 - pub mod get_user_photos_path; 6 pub mod start_with_win; 7 - pub mod find_world_by_id; 8 - pub mod sync_photos; 9 - pub mod load_photos; 10 - pub mod load_photo_meta; 11 - pub mod change_final_path; 12 - pub mod delete_photo; 13 - pub mod relaunch; 14 - pub mod config;
··· 1 + pub mod change_final_path; 2 pub mod close_splashscreen; 3 + pub mod config; 4 + pub mod delete_photo; 5 + pub mod find_world_by_id; 6 + pub mod get_os; 7 + pub mod get_user_photos_path; 8 + pub mod load_photo_meta; 9 + pub mod load_photos; 10 + pub mod open_folder; 11 pub mod open_url; 12 pub mod start_with_win; 13 + pub mod copy_image;
+27 -5
src-tauri/src/frontend_calls/open_folder.rs
··· 2 3 #[tauri::command] 4 pub fn open_folder(url: &str) { 5 - Command::new("explorer.exe") 6 - .arg(format!("/select,{}", url)) 7 - .spawn() 8 - .unwrap(); 9 - }
··· 2 3 #[tauri::command] 4 pub fn open_folder(url: &str) { 5 + #[cfg(target_os = "windows")] 6 + Command::new("explorer.exe").arg(format!("/select,{}", url)).spawn().unwrap(); 7 + 8 + #[cfg(target_os = "linux")] 9 + { 10 + let path = url.replace("\\", "/"); 11 + 12 + let mut dir_path: Vec<_> = path.split("/").collect(); 13 + dir_path.pop(); 14 + let dir_path = dir_path.join("/"); 15 + 16 + let commands = vec![ 17 + ( "nautilus", vec![ path.clone() ] ), 18 + ( "nemo", vec![ path.clone() ] ), 19 + ( "thunar", vec![ path.clone() ] ), 20 + ( "caja", vec![ "--select".into(), path.clone() ] ), 21 + ( "pcmanfm-qt", vec![ dir_path.clone() ] ), 22 + ( "pcmanfm", vec![ dir_path.clone() ] ), 23 + ( "dolphin", vec![ "--select".into(), path.clone() ] ), 24 + ( "konqueror", vec![ "--select".into(), path.clone() ] ), 25 + ( "xdg-open", vec![ dir_path.clone() ] ) 26 + ]; 27 + 28 + for command in commands{ 29 + if Command::new(command.0).args(command.1).spawn().is_ok() { break; } } 30 + } 31 + }
+2 -2
src-tauri/src/frontend_calls/open_url.rs
··· 1 #[tauri::command] 2 pub fn open_url(url: &str) { 3 - if url.starts_with("https://"){ 4 open::that(url).unwrap(); 5 } 6 - }
··· 1 #[tauri::command] 2 pub fn open_url(url: &str) { 3 + if url.starts_with("https://") { 4 open::that(url).unwrap(); 5 } 6 + }
-16
src-tauri/src/frontend_calls/relaunch.rs
··· 1 - use std::process::{ self, Command }; 2 - 3 - #[tauri::command] 4 - pub fn relaunch() { 5 - #[cfg(windows)]{ 6 - let container_folder = dirs::config_dir() 7 - .unwrap() 8 - .join("PhazeDev\\VRChatPhotoManager"); 9 - 10 - let mut cmd = Command::new(&container_folder.join("./vrchat-photo-manager.exe")); 11 - cmd.current_dir(container_folder); 12 - cmd.spawn().expect("Cannot run updater"); 13 - 14 - process::exit(0); 15 - } 16 - }
···
-4
src-tauri/src/frontend_calls/start_user_auth.rs
··· 1 - #[tauri::command] 2 - pub fn start_user_auth() { 3 - open::that("https://photos.phazed.xyz/api/v1/auth").unwrap(); 4 - }
···
+7 -5
src-tauri/src/frontend_calls/start_with_win.rs
··· 1 - use std::{ thread, fs }; 2 3 #[cfg(windows)] 4 use mslnk::ShellLink; ··· 13 if start { 14 let target = dirs::config_dir() 15 .unwrap() 16 - .join("PhazeDev\\VRChatPhotoManager\\vrchat-photo-manager.exe"); 17 18 match fs::metadata(&target) { 19 Ok(_) => { 20 - let lnk = dirs::home_dir().unwrap().join("AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\VRChat Photo Manager.lnk"); 21 22 let sl = ShellLink::new(target).unwrap(); 23 sl.create_lnk(lnk).unwrap(); ··· 25 Err(_) => {} 26 } 27 } else { 28 - let lnk = dirs::home_dir().unwrap().join("AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\VRChat Photo Manager.lnk"); 29 fs::remove_file(lnk).unwrap(); 30 } 31 }); 32 } else { 33 panic!("Cannot start with windows... on not windows..."); 34 } 35 - }
··· 1 + use std::{ fs, thread }; 2 3 #[cfg(windows)] 4 use mslnk::ShellLink; ··· 13 if start { 14 let target = dirs::config_dir() 15 .unwrap() 16 + .join("PhazeDev/VRChatPhotoManager/vrchat-photo-manager.exe"); 17 18 match fs::metadata(&target) { 19 Ok(_) => { 20 + let lnk = dirs::home_dir().unwrap().join("AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/VRChat Photo Manager.lnk"); 21 22 let sl = ShellLink::new(target).unwrap(); 23 sl.create_lnk(lnk).unwrap(); ··· 25 Err(_) => {} 26 } 27 } else { 28 + let lnk = dirs::home_dir().unwrap().join( 29 + "AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/VRChat Photo Manager.lnk", 30 + ); 31 fs::remove_file(lnk).unwrap(); 32 } 33 }); 34 } else { 35 panic!("Cannot start with windows... on not windows..."); 36 } 37 + }
-11
src-tauri/src/frontend_calls/sync_photos.rs
··· 1 - use crate::photosync; 2 - use std::thread; 3 - use crate::util::get_photo_path::get_photo_path; 4 - 5 - // On requested sync the photos to the cloud 6 - #[tauri::command] 7 - pub fn sync_photos(token: String, window: tauri::Window) { 8 - thread::spawn(move || { 9 - photosync::sync_photos(token, get_photo_path(), window); 10 - }); 11 - }
···
+96 -44
src-tauri/src/main.rs
··· 1 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 3 - mod photosync; 4 mod pngmeta; 5 mod worldscraper; 6 - mod frontend_calls; 7 - mod util; 8 9 use core::time; 10 use frontend_calls::*; 11 12 - use notify::{EventKind, RecursiveMode, Watcher}; 13 use pngmeta::PNGImage; 14 use regex::Regex; 15 - use std::{ env, fs, thread, }; 16 - use tauri::{ Emitter, Manager, WindowEvent }; 17 18 - // TODO: Linux support 19 20 fn main() { 21 - tauri_plugin_deep_link::prepare("uk.phaz.vrcpm"); 22 23 // Double check the app has an install directory 24 let container_folder = dirs::config_dir() 25 .unwrap() 26 - .join("PhazeDev\\VRChatPhotoManager"); 27 28 match fs::metadata(&container_folder) { 29 Ok(meta) => { ··· 32 } 33 } 34 Err(_) => { 35 fs::create_dir(&container_folder).unwrap(); 36 } 37 } 38 39 let sync_lock_path = dirs::config_dir() 40 .unwrap() 41 - .join("PhazeDev\\VRChatPhotoManager\\.sync_lock"); 42 43 match fs::metadata(&sync_lock_path) { 44 Ok(_) => { ··· 49 50 println!("Loading App..."); 51 let photos_path = util::get_photo_path::get_photo_path(); 52 53 match fs::metadata(&photos_path) { 54 Ok(_) => {} ··· 56 fs::create_dir(&photos_path).unwrap(); 57 } 58 }; 59 - 60 - util::check_updates::check_updates(container_folder); 61 62 // Listen for file updates, store each update in an mpsc channel and send to the frontend 63 let (sender, receiver) = std::sync::mpsc::channel(); 64 let mut watcher = notify::recommended_watcher(move | res: Result<notify::Event, notify::Error> | { 65 - // TODO: Fix this, why does it not work?? 66 match res { 67 - Ok(event) => { 68 match event.kind{ 69 EventKind::Remove(_) => { 70 let path = event.paths.first().unwrap(); 71 72 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 73 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 74 75 - if 76 - re1.is_match(path.to_str().unwrap()) || 77 - re2.is_match(path.to_str().unwrap()) 78 - { 79 - sender.send((2, path.clone().strip_prefix(util::get_photo_path::get_photo_path()).unwrap().to_path_buf())).unwrap(); 80 } 81 }, 82 EventKind::Create(_) => { 83 let path = event.paths.first().unwrap(); 84 85 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 86 - let re2 = Regex::new(r"(?m)/VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png/gm").unwrap(); 87 88 - if 89 - re1.is_match(path.to_str().unwrap()) || 90 - re2.is_match(path.to_str().unwrap()) 91 - { 92 thread::sleep(time::Duration::from_millis(1000)); 93 - sender.send((1, path.clone().strip_prefix(util::get_photo_path::get_photo_path()).unwrap().to_path_buf())).unwrap(); 94 } 95 }, 96 _ => {} ··· 100 } 101 }).unwrap(); 102 103 watcher 104 - .watch(&util::get_photo_path::get_photo_path(), RecursiveMode::Recursive) 105 .unwrap(); 106 107 tauri::Builder::default() 108 .plugin(tauri_plugin_process::init()) 109 .plugin(tauri_plugin_http::init()) 110 .plugin(tauri_plugin_shell::init()) 111 - .register_asynchronous_uri_scheme_protocol("photo", | _ctx, req, res | { 112 - util::handle_uri_proto::handle_uri_proto(req, res); 113 }) 114 .on_window_event(|window, event| match event { 115 - WindowEvent::CloseRequested { api, .. } => { 116 - window.hide().unwrap(); 117 - api.prevent_close(); 118 } 119 - _ => {} 120 }) 121 .setup(|app| { 122 let handle = app.handle(); 123 - 124 util::setup_traymenu::setup_traymenu(handle); 125 - util::setup_deeplink::setup_deeplink(handle); 126 127 - // I hate this approach but i have no clue how else to do this... 128 - // reads the mpsc channel and sends the events to the frontend 129 let window = app.get_webview_window("main").unwrap(); 130 thread::spawn(move || { 131 thread::sleep(time::Duration::from_millis(100)); ··· 146 Ok(()) 147 }) 148 .invoke_handler(tauri::generate_handler![ 149 - start_user_auth::start_user_auth, 150 load_photos::load_photos, 151 close_splashscreen::close_splashscreen, 152 load_photo_meta::load_photo_meta, ··· 154 open_url::open_url, 155 open_folder::open_folder, 156 find_world_by_id::find_world_by_id, 157 - #[cfg(windows)] start_with_win::start_with_win, 158 get_user_photos_path::get_user_photos_path, 159 change_final_path::change_final_path, 160 - sync_photos::sync_photos, 161 util::get_version::get_version, 162 - relaunch::relaunch, 163 config::set_config_value_string, 164 config::get_config_value_string, 165 config::set_config_value_int, 166 - config::get_config_value_int 167 ]) 168 .run(tauri::generate_context!()) 169 .expect("error while running tauri application");
··· 1 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 3 + mod frontend_calls; 4 mod pngmeta; 5 + mod util; 6 mod worldscraper; 7 8 use core::time; 9 + use arboard::Clipboard; 10 use frontend_calls::*; 11 12 + use notify::{ EventKind, RecursiveMode, Watcher }; 13 use pngmeta::PNGImage; 14 use regex::Regex; 15 + use util::{ cache::Cache, get_photo_path::get_photo_path }; 16 + use std::{ env, fs, sync::Mutex, thread }; 17 + use tauri::{ Emitter, Manager, State, WindowEvent }; 18 19 + use crate::frontend_calls::config::{get_config_value_string, Config}; 20 21 fn main() { 22 + #[cfg(target_os = "linux")] 23 + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); // Fix webkitgtk being shit 24 + 25 + let cache = Cache::new(); 26 27 // Double check the app has an install directory 28 let container_folder = dirs::config_dir() 29 .unwrap() 30 + .join("PhazeDev/VRChatPhotoManager"); 31 32 match fs::metadata(&container_folder) { 33 Ok(meta) => { ··· 36 } 37 } 38 Err(_) => { 39 + let folder = dirs::config_dir().unwrap(); 40 + match fs::metadata(&folder) { 41 + Ok(meta) => { 42 + if meta.is_file() { 43 + panic!("Cannot launch app as the container path is a file not a directory"); 44 + } 45 + } 46 + Err(_) => { 47 + fs::create_dir(&folder).unwrap(); 48 + } 49 + } 50 + 51 + let phaz_folder = dirs::config_dir().unwrap().join("PhazeDev"); 52 + match fs::metadata(&phaz_folder) { 53 + Ok(meta) => { 54 + if meta.is_file() { 55 + panic!("Cannot launch app as the container path is a file not a directory"); 56 + } 57 + } 58 + Err(_) => { 59 + fs::create_dir(&phaz_folder).unwrap(); 60 + } 61 + } 62 + 63 fs::create_dir(&container_folder).unwrap(); 64 } 65 } 66 67 let sync_lock_path = dirs::config_dir() 68 .unwrap() 69 + .join("PhazeDev/VRChatPhotoManager/.sync_lock"); 70 71 match fs::metadata(&sync_lock_path) { 72 Ok(_) => { ··· 77 78 println!("Loading App..."); 79 let photos_path = util::get_photo_path::get_photo_path(); 80 + println!("Loading photos from: {:#?}", &photos_path); 81 + 82 + cache.insert("photo-path".into(), photos_path.to_str().unwrap().to_owned()); 83 84 match fs::metadata(&photos_path) { 85 Ok(_) => {} ··· 87 fs::create_dir(&photos_path).unwrap(); 88 } 89 }; 90 91 // Listen for file updates, store each update in an mpsc channel and send to the frontend 92 let (sender, receiver) = std::sync::mpsc::channel(); 93 let mut watcher = notify::recommended_watcher(move | res: Result<notify::Event, notify::Error> | { 94 match res { 95 + Ok(event) => { 96 match event.kind{ 97 EventKind::Remove(_) => { 98 let path = event.paths.first().unwrap(); 99 + let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 100 101 + let re1_match = // This is the current format used by VRChat 102 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 103 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 104 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 105 106 + let re2_match = // This is the format VRCX uses if you enable renaming photos 107 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name); 108 + 109 + if re1_match || re2_match{ 110 + sender.send((2, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 111 } 112 }, 113 EventKind::Create(_) => { 114 let path = event.paths.first().unwrap(); 115 + let name = path.file_name().unwrap().to_str().unwrap().to_owned(); 116 117 + let re1_match = // This is the current format used by VRChat 118 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}.png").unwrap().is_match(&name) || 119 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Player.png").unwrap().is_match(&name) || 120 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_Environment.png").unwrap().is_match(&name); 121 122 + let re2_match = // This is the format VRCX uses if you enable renaming photos 123 + Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{3,4}x[0-9]{3,4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap().is_match(&name); 124 + 125 + if re1_match || re2_match{ 126 thread::sleep(time::Duration::from_millis(1000)); 127 + sender.send((1, path.strip_prefix(get_photo_path()).unwrap().to_str().unwrap().to_owned())).unwrap(); 128 } 129 }, 130 _ => {} ··· 134 } 135 }).unwrap(); 136 137 + println!("Watching dir: {:?}", util::get_photo_path::get_photo_path()); 138 watcher 139 + .watch( 140 + &util::get_photo_path::get_photo_path(), 141 + RecursiveMode::Recursive, 142 + ) 143 .unwrap(); 144 145 + let clipboard = Clipboard::new().unwrap(); 146 + 147 tauri::Builder::default() 148 + .plugin(tauri_plugin_single_instance::init(| app, _argv, _cwd | { 149 + app.get_webview_window("main").unwrap().show().unwrap(); 150 + })) 151 .plugin(tauri_plugin_process::init()) 152 .plugin(tauri_plugin_http::init()) 153 .plugin(tauri_plugin_shell::init()) 154 + .register_asynchronous_uri_scheme_protocol("photo", |ctx, req, res| { 155 + let cache: State<Cache> = ctx.app_handle().state(); 156 + util::handle_uri_proto::handle_uri_proto(req, res, cache); 157 }) 158 .on_window_event(|window, event| match event { 159 + WindowEvent::CloseRequested { api, .. } => { 160 + let config: State<Config> = window.state(); 161 + 162 + let val = get_config_value_string("close-to-tray".into(), config.clone()); 163 + if val.is_none() || val.unwrap() != "true"{ 164 + config.save(); 165 + return; 166 } 167 + 168 + window.hide().unwrap(); 169 + api.prevent_close(); 170 + } 171 + _ => {} 172 }) 173 + .manage(Config::new()) 174 + .manage(cache) 175 + .manage(Mutex::new(clipboard)) 176 .setup(|app| { 177 let handle = app.handle(); 178 util::setup_traymenu::setup_traymenu(handle); 179 180 + // reads the file update mpsc channel and sends the events to the frontend 181 let window = app.get_webview_window("main").unwrap(); 182 thread::spawn(move || { 183 thread::sleep(time::Duration::from_millis(100)); ··· 198 Ok(()) 199 }) 200 .invoke_handler(tauri::generate_handler![ 201 load_photos::load_photos, 202 close_splashscreen::close_splashscreen, 203 load_photo_meta::load_photo_meta, ··· 205 open_url::open_url, 206 open_folder::open_folder, 207 find_world_by_id::find_world_by_id, 208 + #[cfg(windows)] 209 + start_with_win::start_with_win, 210 get_user_photos_path::get_user_photos_path, 211 change_final_path::change_final_path, 212 util::get_version::get_version, 213 config::set_config_value_string, 214 config::get_config_value_string, 215 config::set_config_value_int, 216 + config::get_config_value_int, 217 + get_os::get_os, 218 + copy_image::copy_image 219 ]) 220 .run(tauri::generate_context!()) 221 .expect("error while running tauri application");
-264
src-tauri/src/photosync.rs
··· 1 - use regex::Regex; 2 - use reqwest; 3 - use serde::Serialize; 4 - use serde_json::{Error, Value}; 5 - use std::{fs, io::Write, path, time::Duration}; 6 - use tauri::Emitter; 7 - 8 - #[derive(Clone, Serialize)] 9 - struct PhotoUploadMeta { 10 - photos_uploading: usize, 11 - photos_total: usize, 12 - } 13 - 14 - pub fn sync_photos(token: String, path: path::PathBuf, window: tauri::Window) { 15 - let sync_lock_path = dirs::config_dir() 16 - .unwrap() 17 - .join("PhazeDev\\VRChatPhotoManager\\.sync_lock"); 18 - 19 - match fs::metadata(&sync_lock_path) { 20 - Ok(_) => { 21 - return; 22 - } 23 - Err(_) => {} 24 - } 25 - 26 - fs::write(&sync_lock_path, "Currently Syncing").unwrap(); 27 - 28 - match fs::metadata(&path) { 29 - Ok(_) => {} 30 - Err(_) => { 31 - fs::create_dir(&path).unwrap(); 32 - } 33 - }; 34 - 35 - let mut photos: Vec<String> = Vec::new(); 36 - 37 - for folder in fs::read_dir(&path).unwrap() { 38 - let f = folder.unwrap(); 39 - 40 - if f.metadata().unwrap().is_dir() { 41 - match fs::read_dir(f.path()) { 42 - Ok(dir) => { 43 - for photo in dir { 44 - let p = photo.unwrap(); 45 - 46 - let re1 = Regex::new(r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}.png").unwrap(); 47 - let re2 = Regex::new( 48 - r"(?m)VRChat_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}.[0-9]{3}_[0-9]{4}x[0-9]{4}_wrld_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.png").unwrap(); 49 - 50 - if re1.is_match(p.file_name().to_str().unwrap()) 51 - || re2.is_match(p.file_name().to_str().unwrap()) 52 - { 53 - photos.push(p.file_name().into_string().unwrap()); 54 - } 55 - } 56 - } 57 - Err(_) => {} 58 - } 59 - } 60 - } 61 - 62 - let body = reqwest::blocking::get(format!( 63 - "https://photos-cdn.phazed.xyz/api/v1/photos/exists?token={}", 64 - &token 65 - )) 66 - .unwrap() 67 - .text() 68 - .unwrap(); 69 - 70 - let body: Value = serde_json::from_str(&body).unwrap(); 71 - 72 - let mut photos_to_upload: Vec<String> = Vec::new(); 73 - let uploaded_photos = body["files"].as_array().unwrap(); 74 - 75 - let photos_len = photos.len(); 76 - 77 - for photo in &photos { 78 - let mut found_photo = false; 79 - 80 - for uploaded_photo in uploaded_photos { 81 - if photo == uploaded_photo.as_str().unwrap() { 82 - found_photo = true; 83 - break; 84 - } 85 - } 86 - 87 - if !found_photo { 88 - photos_to_upload.push(photo.clone()); 89 - } 90 - } 91 - 92 - window 93 - .emit( 94 - "photos-upload-meta", 95 - PhotoUploadMeta { 96 - photos_uploading: photos_to_upload.len(), 97 - photos_total: photos_len, 98 - }, 99 - ) 100 - .unwrap(); 101 - 102 - let mut photos_left = photos_to_upload.len(); 103 - 104 - let client = reqwest::blocking::Client::new(); 105 - 106 - loop { 107 - match photos_to_upload.pop() { 108 - Some(photo) => { 109 - let folder_name = photo.clone().replace("VRChat_", ""); 110 - let mut folder_name = folder_name.split("-"); 111 - let folder_name = format!( 112 - "{}-{}", 113 - folder_name.nth(0).unwrap(), 114 - folder_name.nth(0).unwrap() 115 - ); 116 - 117 - let full_path = format!("{}\\{}\\{}", path.to_str().unwrap(), folder_name, photo); 118 - let file = fs::File::open(full_path); 119 - 120 - match file { 121 - Ok(file) => { 122 - let res = client 123 - .put(format!( 124 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}", 125 - &token 126 - )) 127 - .header("Content-Type", "image/png") 128 - .header("filename", photo) 129 - .body(file) 130 - .timeout(Duration::from_secs(120)) 131 - .send() 132 - .unwrap() 133 - .text() 134 - .unwrap(); 135 - 136 - let res: Result<Value, Error> = serde_json::from_str(&res); 137 - 138 - match res { 139 - Ok(res) => { 140 - if !res["ok"].as_bool().unwrap() { 141 - println!( 142 - "Failed to upload: {}", 143 - res["error"].as_str().unwrap() 144 - ); 145 - 146 - window 147 - .emit("sync-failed", res["error"].as_str().unwrap()) 148 - .unwrap(); 149 - 150 - break; 151 - } 152 - } 153 - Err(err) => { 154 - dbg!(err); 155 - } 156 - } 157 - } 158 - Err(_) => {} 159 - } 160 - 161 - photos_left -= 1; 162 - window 163 - .emit( 164 - "photos-upload-meta", 165 - PhotoUploadMeta { 166 - photos_uploading: photos_left, 167 - photos_total: photos_len, 168 - }, 169 - ) 170 - .unwrap(); 171 - } 172 - None => { 173 - break; 174 - } 175 - } 176 - } 177 - 178 - println!("Finished Uploading."); 179 - let mut photos_to_download: Vec<String> = Vec::new(); 180 - 181 - for photo in uploaded_photos { 182 - let mut found_photo = false; 183 - let photo = photo.as_str().unwrap().to_string(); 184 - 185 - for uploaded_photo in &photos { 186 - if &photo == uploaded_photo { 187 - found_photo = true; 188 - break; 189 - } 190 - } 191 - 192 - if !found_photo { 193 - photos_to_download.push(photo); 194 - } 195 - } 196 - 197 - photos_to_download.reverse(); 198 - 199 - let photos_len = photos_to_download.len(); 200 - let mut photos_left = photos_to_download.len(); 201 - 202 - loop { 203 - match photos_to_download.pop() { 204 - Some(photo) => { 205 - let folder_name = photo.clone().replace("VRChat_", ""); 206 - let mut folder_name = folder_name.split("-"); 207 - let folder_name = format!( 208 - "{}-{}", 209 - folder_name.nth(0).unwrap(), 210 - folder_name.nth(0).unwrap() 211 - ); 212 - 213 - let full_path = format!("{}\\{}\\{}", path.to_str().unwrap(), folder_name, photo); 214 - 215 - let res = client 216 - .get(format!( 217 - "https://photos-cdn.phazed.xyz/api/v1/photos?token={}&photo={}", 218 - &token, &photo 219 - )) 220 - .timeout(Duration::from_secs(120)) 221 - .send() 222 - .unwrap() 223 - .bytes(); 224 - 225 - match res { 226 - Ok(res) => { 227 - let folder_path = format!("{}\\{}", path.to_str().unwrap(), folder_name); 228 - match fs::metadata(&folder_path) { 229 - Ok(_) => {} 230 - Err(_) => { 231 - fs::create_dir(folder_path).unwrap(); 232 - } 233 - } 234 - 235 - let mut file = fs::File::create(full_path).unwrap(); 236 - file.write_all(&res).unwrap(); 237 - } 238 - Err(err) => { 239 - dbg!(err); 240 - } 241 - } 242 - 243 - photos_left -= 1; 244 - window 245 - .emit( 246 - "photos-download-meta", 247 - PhotoUploadMeta { 248 - photos_uploading: photos_left, 249 - photos_total: photos_len, 250 - }, 251 - ) 252 - .unwrap(); 253 - } 254 - None => { 255 - break; 256 - } 257 - } 258 - } 259 - 260 - println!("Finished Downloading."); 261 - 262 - fs::remove_file(&sync_lock_path).unwrap(); 263 - window.emit("sync-finished", "h").unwrap(); 264 - }
···
+32 -52
src-tauri/src/pngmeta.rs
··· 1 - use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 use std::str; 3 4 - #[derive(Clone)] 5 pub struct PNGImage { 6 - width: u32, 7 - height: u32, 8 - bit_depth: u8, 9 - colour_type: u8, 10 - compression_method: u8, 11 - filter_method: u8, 12 - interlace_method: u8, 13 - metadata: String, 14 - path: String, 15 } 16 17 impl PNGImage { 18 - pub fn new(buff: Vec<u8>, path: String) -> PNGImage { 19 let mut img = PNGImage { 20 width: 0, 21 height: 0, ··· 26 interlace_method: 0, 27 metadata: "".to_string(), 28 path: path, 29 }; 30 31 - if buff[0] != 0x89 32 - || buff[1] != 0x50 33 - || buff[2] != 0x4E 34 - || buff[3] != 0x47 35 - || buff[4] != 0x0D 36 - || buff[5] != 0x0A 37 - || buff[6] != 0x1A 38 - || buff[7] != 0x0A 39 - { 40 - panic!("Image is not a PNG file"); 41 - } 42 - 43 img.read_png_chunk(8, buff); 44 - img 45 } 46 47 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 52 53 match chunk_type { 54 "IHDR" => { 55 - self.width = 56 - u32::from_le_bytes([data_buff[11], data_buff[10], data_buff[9], data_buff[8]]); 57 58 - self.height = u32::from_le_bytes([ 59 - data_buff[15], 60 - data_buff[14], 61 - data_buff[13], 62 - data_buff[12], 63 - ]); 64 65 self.bit_depth = data_buff[16]; 66 self.colour_type = data_buff[17]; ··· 86 } 87 } 88 } 89 - 90 - impl Serialize for PNGImage { 91 - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 92 - where 93 - S: Serializer, 94 - { 95 - let mut s = serializer.serialize_struct("PNGImage", 7)?; 96 - s.serialize_field("width", &self.width)?; 97 - s.serialize_field("height", &self.height)?; 98 - s.serialize_field("bit_depth", &self.bit_depth)?; 99 - s.serialize_field("colour_type", &self.colour_type)?; 100 - s.serialize_field("compression_method", &self.compression_method)?; 101 - s.serialize_field("filter_method", &self.filter_method)?; 102 - s.serialize_field("interlace_method", &self.interlace_method)?; 103 - s.serialize_field("metadata", &self.metadata)?; 104 - s.serialize_field("path", &self.path)?; 105 - s.end() 106 - } 107 - }
··· 1 use std::str; 2 3 + use serde::Serialize; 4 + 5 + #[derive(Clone, Debug, Serialize)] 6 pub struct PNGImage { 7 + pub width: u32, 8 + pub height: u32, 9 + pub bit_depth: u8, 10 + pub colour_type: u8, 11 + pub compression_method: u8, 12 + pub filter_method: u8, 13 + pub interlace_method: u8, 14 + pub metadata: String, 15 + pub path: String, 16 + pub error: bool 17 } 18 19 impl PNGImage { 20 + pub fn new(buff: Vec<u8>, path: String) -> Result<PNGImage, &'static str> { 21 + if buff[0] != 0x89 22 + || buff[1] != 0x50 23 + || buff[2] != 0x4E 24 + || buff[3] != 0x47 25 + || buff[4] != 0x0D 26 + || buff[5] != 0x0A 27 + || buff[6] != 0x1A 28 + || buff[7] != 0x0A 29 + { 30 + dbg!(path); 31 + return Err("Image is not a PNG file"); 32 + } 33 + 34 let mut img = PNGImage { 35 width: 0, 36 height: 0, ··· 41 interlace_method: 0, 42 metadata: "".to_string(), 43 path: path, 44 + error: false 45 }; 46 47 img.read_png_chunk(8, buff); 48 + Ok(img) 49 } 50 51 fn read_png_chunk(&mut self, start_byte: usize, buff: Vec<u8>) { ··· 56 57 match chunk_type { 58 "IHDR" => { 59 + self.width = u32::from_le_bytes([data_buff[11], data_buff[10], data_buff[9], data_buff[8]]); 60 61 + self.height = 62 + u32::from_le_bytes([data_buff[15], data_buff[14], data_buff[13], data_buff[12]]); 63 64 self.bit_depth = data_buff[16]; 65 self.colour_type = data_buff[17]; ··· 85 } 86 } 87 }
+28
src-tauri/src/util/cache.rs
···
··· 1 + use std::{ collections::HashMap, sync::Mutex }; 2 + 3 + pub struct Cache{ 4 + store: Mutex<HashMap<String, String>>, 5 + } 6 + 7 + impl Cache{ 8 + pub fn new() -> Self{ 9 + Cache { 10 + store: Mutex::new(HashMap::new()) 11 + } 12 + } 13 + 14 + pub fn insert( &self, key: String, value: String ){ 15 + self.store.lock().unwrap().insert(key, value); 16 + } 17 + 18 + pub fn get( &self, key: String ) -> Option<String>{ 19 + let store = self.store.lock().unwrap(); 20 + let val = store.get(&key); 21 + 22 + if val.is_none(){ 23 + None 24 + } else{ 25 + Some(val.unwrap().clone()) 26 + } 27 + } 28 + }
-51
src-tauri/src/util/check_updates.rs
··· 1 - use std::{ env, fs, path, process::{ self, Command }, thread, time::Duration }; 2 - use crate::util; 3 - 4 - pub fn check_updates( container_folder: path::PathBuf ){ 5 - let args: Vec<String> = env::args().collect(); 6 - 7 - let mut update = true; 8 - for arg in args { 9 - if arg == "--no-update" { 10 - update = false; 11 - } 12 - } 13 - 14 - if update { 15 - // Auto update 16 - thread::spawn(move || { 17 - let client = reqwest::blocking::Client::new(); 18 - 19 - let latest_version = client 20 - .get("https://cdn.phaz.uk/vrcpm/latest") 21 - .send() 22 - .unwrap() 23 - .text() 24 - .unwrap(); 25 - 26 - if latest_version != util::get_version::get_version() { 27 - match fs::metadata(&container_folder.join("./updater.exe")) { 28 - Ok(_) => {} 29 - Err(_) => { 30 - let latest_installer = client 31 - .get("https://cdn.phaz.uk/vrcpm/vrcpm-installer.exe") 32 - .timeout(Duration::from_secs(120)) 33 - .send() 34 - .unwrap() 35 - .bytes() 36 - .unwrap(); 37 - 38 - fs::write(&container_folder.join("./updater.exe"), latest_installer) 39 - .unwrap(); 40 - } 41 - } 42 - 43 - let mut cmd = Command::new(&container_folder.join("./updater.exe")); 44 - cmd.current_dir(container_folder); 45 - cmd.spawn().expect("Cannot run updater"); 46 - 47 - process::exit(0); 48 - } 49 - }); 50 - } 51 - }
···
+12 -13
src-tauri/src/util/get_photo_path.rs
··· 3 pub fn get_photo_path() -> path::PathBuf { 4 let config_path = dirs::config_dir() 5 .unwrap() 6 - .join("PhazeDev\\VRChatPhotoManager\\.photos_path"); 7 8 match fs::read_to_string(config_path) { 9 Ok(path) => { 10 - if path 11 - != dirs::picture_dir() 12 - .unwrap() 13 - .join("VRChat") 14 - .to_str() 15 - .unwrap() 16 - .to_owned() 17 - { 18 - path::PathBuf::from(path) 19 - } else { 20 dirs::picture_dir().unwrap().join("VRChat") 21 } 22 } 23 - Err(_) => dirs::picture_dir().unwrap().join("VRChat"), 24 } 25 - }
··· 3 pub fn get_photo_path() -> path::PathBuf { 4 let config_path = dirs::config_dir() 5 .unwrap() 6 + .join("PhazeDev/VRChatPhotoManager/.photos_path"); 7 8 match fs::read_to_string(config_path) { 9 Ok(path) => { 10 + let p = path::PathBuf::from(path); 11 + 12 + if fs::exists(&p).unwrap(){ 13 + p 14 + } else{ 15 dirs::picture_dir().unwrap().join("VRChat") 16 } 17 + }, 18 + Err(_) => { 19 + let p = dirs::picture_dir().unwrap().join("VRChat"); 20 + 21 + p 22 } 23 } 24 + }
+1 -1
src-tauri/src/util/get_version.rs
··· 3 #[tauri::command] 4 pub fn get_version() -> String { 5 String::from(VERSION) 6 - }
··· 3 #[tauri::command] 4 pub fn get_version() -> String { 5 String::from(VERSION) 6 + }
+65 -46
src-tauri/src/util/handle_uri_proto.rs
··· 1 - use std::{ fs, io::{ BufReader, Read }, thread }; 2 - use fast_image_resize::{ images::Image, IntoImageView, ResizeOptions, Resizer }; 3 - use image::{ codecs::png::{ PngDecoder, PngEncoder }, DynamicImage, ImageEncoder }; 4 - use tauri::{ http::{ Request, Response }, UriSchemeResponder }; 5 6 - pub fn handle_uri_proto( request: Request<Vec<u8>>, responder: UriSchemeResponder ){ 7 thread::spawn(move || { 8 // Loads the requested image file, sends data back to the user 9 let uri = request.uri(); ··· 20 return; 21 } 22 23 - // TODO: Only accept files that are in the vrchat photos folder 24 - // Slightly more complex than originally thought, need to find a way to cache the VRC photos path 25 - // since i need to be able to load lots of photos very quickly. This shouldn't be a security issue 26 - // because tauri should only let the frontend of VRCPhotoManager read files throught this. Only 27 - // becomes a potential issue if the frontend gets modified or there's an issue with tauri. 28 29 - let path = uri.path().split_at(1).1; 30 let file = fs::File::open(path); 31 32 match file { 33 - Ok(mut file) => { 34 - match uri.query().unwrap(){ 35 - "downscale" => { 36 - let decoder = PngDecoder::new(BufReader::new(&file)).unwrap(); 37 - let src_image = DynamicImage::from_decoder(decoder).unwrap(); 38 39 - let size_multiplier: f32 = 200.0 / src_image.height() as f32; 40 41 - let dst_width = (src_image.width() as f32 * size_multiplier).floor() as u32; 42 - let dst_height: u32 = 200; 43 44 - let mut dst_image = Image::new(dst_width, dst_height, src_image.pixel_type().unwrap()); 45 - let mut resizer = Resizer::new(); 46 47 - let opts = ResizeOptions::new() 48 - .resize_alg(fast_image_resize::ResizeAlg::Nearest); 49 50 - resizer.resize(&src_image, &mut dst_image, Some(&opts)).unwrap(); 51 52 - let mut buf = Vec::new(); 53 - let encoder = PngEncoder::new(&mut buf); 54 55 - encoder.write_image(dst_image.buffer(), dst_width, dst_height, src_image.color().into()).unwrap(); 56 57 - let res = Response::builder() 58 - .status(200) 59 - .header("Access-Control-Allow-Origin", "*") 60 - .body(buf) 61 - .unwrap(); 62 63 - responder.respond(res); 64 - }, 65 - _ => { 66 - let mut buf = Vec::new(); 67 - file.read_to_end(&mut buf).unwrap(); 68 69 - let res = Response::builder() 70 - .status(200) 71 - .header("Access-Control-Allow-Origin", "*") 72 - .body(buf) 73 - .unwrap(); 74 75 - responder.respond(res); 76 - } 77 } 78 - } 79 Err(_) => { 80 responder.respond( 81 Response::builder() ··· 87 } 88 } 89 }); 90 - }
··· 1 + use fast_image_resize::{images::Image, IntoImageView, ResizeOptions, Resizer}; 2 + use image::{ 3 + codecs::png::{PngDecoder, PngEncoder}, 4 + DynamicImage, ImageEncoder, 5 + }; 6 + use std::{ 7 + fs, 8 + io::{BufReader, Read}, 9 + thread, 10 + }; 11 + use tauri::{ 12 + http::{Request, Response}, State, UriSchemeResponder 13 + }; 14 + 15 + use super::cache::Cache; 16 17 + pub fn handle_uri_proto( request: Request<Vec<u8>>, responder: UriSchemeResponder, cache: State<Cache> ) { 18 + let photo_path = cache.get("photo-path".into()); 19 + 20 thread::spawn(move || { 21 // Loads the requested image file, sends data back to the user 22 let uri = request.uri(); ··· 33 return; 34 } 35 36 + #[cfg(windows)] 37 + let path = uri.path().split_at(1).1; 38 39 + #[cfg(unix)] 40 + let path = uri.path(); 41 + 42 + let path = format!("{}/{}", photo_path.unwrap(), path); 43 let file = fs::File::open(path); 44 45 match file { 46 + Ok(mut file) => match uri.query().unwrap() { 47 + "downscale" => { 48 + let decoder = PngDecoder::new(BufReader::new(&file)).unwrap(); 49 + let src_image = DynamicImage::from_decoder(decoder).unwrap(); 50 51 + let size_multiplier: f32 = 200.0 / src_image.height() as f32; 52 53 + let dst_width = (src_image.width() as f32 * size_multiplier).floor() as u32; 54 + let dst_height: u32 = 200; 55 56 + let mut dst_image = Image::new(dst_width, dst_height, src_image.pixel_type().unwrap()); 57 + let mut resizer = Resizer::new(); 58 59 + let opts = ResizeOptions::new().resize_alg(fast_image_resize::ResizeAlg::Convolution(fast_image_resize::FilterType::Bilinear)); 60 61 + resizer 62 + .resize(&src_image, &mut dst_image, Some(&opts)) 63 + .unwrap(); 64 65 + let mut buf = Vec::new(); 66 + let encoder = PngEncoder::new(&mut buf); 67 68 + encoder 69 + .write_image( 70 + dst_image.buffer(), 71 + dst_width, 72 + dst_height, 73 + src_image.color().into(), 74 + ) 75 + .unwrap(); 76 77 + let res = Response::builder() 78 + .status(200) 79 + .header("Access-Control-Allow-Origin", "*") 80 + .body(buf) 81 + .unwrap(); 82 83 + responder.respond(res); 84 + } 85 + _ => { 86 + let mut buf = Vec::new(); 87 + file.read_to_end(&mut buf).unwrap(); 88 89 + let res = Response::builder() 90 + .status(200) 91 + .header("Access-Control-Allow-Origin", "*") 92 + .body(buf) 93 + .unwrap(); 94 95 + responder.respond(res); 96 } 97 + }, 98 Err(_) => { 99 responder.respond( 100 Response::builder() ··· 106 } 107 } 108 }); 109 + }
+2 -3
src-tauri/src/util/mod.rs
··· 1 pub mod get_photo_path; 2 pub mod get_version; 3 - pub mod check_updates; 4 pub mod setup_traymenu; 5 - pub mod setup_deeplink; 6 - pub mod handle_uri_proto;
··· 1 pub mod get_photo_path; 2 pub mod get_version; 3 + pub mod handle_uri_proto; 4 pub mod setup_traymenu; 5 + pub mod cache;
-28
src-tauri/src/util/setup_deeplink.rs
··· 1 - use tauri::{ AppHandle, Emitter }; 2 - 3 - pub fn setup_deeplink( handle: &AppHandle ){ 4 - let handle = handle.clone(); 5 - 6 - // Register "deep link" for authentication via vrcpm:// 7 - tauri_plugin_deep_link::register("vrcpm", move |request| { 8 - let mut command: u8 = 0; 9 - let mut index: u8 = 0; 10 - 11 - for part in request.split('/').into_iter() { 12 - index += 1; 13 - 14 - if index == 3 && part == "auth-callback" { 15 - command = 1; 16 - } 17 - 18 - if index == 3 && part == "auth-denied" { 19 - handle.emit("auth-denied", "null").unwrap(); 20 - } 21 - 22 - if index == 4 && command == 1 { 23 - handle.emit("auth-callback", part).unwrap(); 24 - } 25 - } 26 - }) 27 - .unwrap(); 28 - }
···
+30 -19
src-tauri/src/util/setup_traymenu.rs
··· 1 - use tauri::{ menu::{ MenuBuilder, MenuItemBuilder }, tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, AppHandle, Manager, Emitter }; 2 3 #[derive(serde::Serialize, Clone)] 4 - struct EmptyEvent{} 5 6 - pub fn setup_traymenu( handle: &AppHandle ){ 7 // Setup the tray icon and menu buttons 8 let quit = MenuItemBuilder::new("Quit") 9 .id("quit") ··· 23 TrayIconBuilder::with_id("main") 24 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 25 .menu(&tray_menu) 26 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 27 - "quit" => { 28 - std::process::exit(0); 29 - } 30 - "hide" => { 31 - let window = app.get_webview_window("main").unwrap(); 32 33 - if window.is_visible().unwrap() { 34 - window.hide().unwrap(); 35 36 - window.emit("hide-window", EmptyEvent {}).unwrap(); 37 - } else { 38 - window.show().unwrap(); 39 - window.set_focus().unwrap(); 40 41 - window.emit("show-window", EmptyEvent {}).unwrap(); 42 - } 43 } 44 - _ => {} 45 }) 46 .on_tray_icon_event(|tray, event| { 47 if let TrayIconEvent::Click { 48 button: MouseButton::Left, 49 button_state: MouseButtonState::Up, 50 - .. 51 } = event 52 { 53 let window = tray.app_handle().get_webview_window("main").unwrap(); ··· 60 }) 61 .build(handle) 62 .unwrap(); 63 - }
··· 1 + use tauri::{ 2 + menu::{MenuBuilder, MenuItemBuilder}, 3 + tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, 4 + AppHandle, Emitter, Manager, State, 5 + }; 6 + 7 + use crate::frontend_calls::config::Config; 8 9 #[derive(serde::Serialize, Clone)] 10 + struct EmptyEvent {} 11 12 + pub fn setup_traymenu(handle: &AppHandle) { 13 // Setup the tray icon and menu buttons 14 let quit = MenuItemBuilder::new("Quit") 15 .id("quit") ··· 29 TrayIconBuilder::with_id("main") 30 .icon(tauri::image::Image::from_bytes(include_bytes!("../../icons/32x32.png")).unwrap()) 31 .menu(&tray_menu) 32 + .title("VRChat Photo Manager") 33 + .tooltip("VRChat Photo Manager") 34 .on_menu_event(move |app: &AppHandle, event| match event.id().as_ref() { 35 + "quit" => { 36 + let config: State<Config> = app.state(); 37 + config.save(); 38 + 39 + std::process::exit(0); 40 + } 41 + "hide" => { 42 + let window = app.get_webview_window("main").unwrap(); 43 44 + if window.is_visible().unwrap() { 45 + window.hide().unwrap(); 46 47 + window.emit("hide-window", EmptyEvent {}).unwrap(); 48 + } else { 49 + window.show().unwrap(); 50 + window.set_focus().unwrap(); 51 52 + window.emit("show-window", EmptyEvent {}).unwrap(); 53 } 54 + } 55 + _ => {} 56 }) 57 .on_tray_icon_event(|tray, event| { 58 if let TrayIconEvent::Click { 59 button: MouseButton::Left, 60 button_state: MouseButtonState::Up, 61 + .. 62 } = event 63 { 64 let window = tray.app_handle().get_webview_window("main").unwrap(); ··· 71 }) 72 .build(handle) 73 .unwrap(); 74 + }
+17 -52
src-tauri/src/worldscraper.rs
··· 1 use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 - use serde_json::json; 3 4 #[derive(Clone)] 5 pub struct World { ··· 12 max_users: u64, 13 visits: u64, 14 favourites: u64, 15 - tags: String, 16 - from: String, 17 - from_site: String, 18 found: bool, 19 } 20 ··· 32 max_users: 0, 33 visits: 0, 34 favourites: 0, 35 - tags: "".into(), 36 - from: "https://vrclist.com/worlds/".into(), 37 - from_site: "vrclist.com".into(), 38 found: false, 39 }; 40 41 let client = reqwest::blocking::Client::new(); 42 43 - let world_id_str = world_id.to_owned(); 44 - let fixed_id_req = client 45 - .post("https://api.vrclist.com/worlds/id-convert") 46 - .header("Content-Type", "application/json") 47 .header("User-Agent", "VRChat-Photo-Manager-Rust/0.0.1") 48 - .body(json!({ "world_id": world_id_str }).to_string()) 49 .send() 50 - .unwrap() 51 - .text() 52 .unwrap(); 53 54 - if &fixed_id_req == "" { 55 - println!("World {} not found", world_id); 56 - return world; 57 - } 58 - 59 world.found = true; 60 61 - let fixed_id: serde_json::Value = serde_json::from_str(&fixed_id_req).unwrap(); 62 - world.from = format!("https://vrclist.com/worlds/{}", fixed_id["id"].to_string()); 63 - 64 - let world_data = client 65 - .post("https://api.vrclist.com/worlds/single") 66 - .header("Content-Type", "application/json") 67 - .header("User-Agent", "VRChat-Photo-Manager-Rust/0.0.1") 68 - .body(json!({ "id": fixed_id["id"].to_string() }).to_string()) 69 - .send() 70 - .unwrap() 71 - .text() 72 - .unwrap(); 73 - 74 let world_data: serde_json::Value = serde_json::from_str(&world_data).unwrap(); 75 76 - world.name = world_data["name"].to_string(); 77 - world.author = world_data["authorName"].to_string(); 78 - world.author_id = world_data["authorId"].to_string(); 79 - world.desc = world_data["description"].to_string(); 80 - world.img = world_data["imageUrl"].to_string(); 81 - world.tags = world_data["tags"].to_string(); 82 - 83 - match world_data["vrchat_visits"].as_u64() { 84 - Some(visits) => world.visits = visits, 85 - None => {} 86 - } 87 - 88 - match world_data["capacity"].as_u64() { 89 - Some(cap) => { 90 - world.max_users = cap; 91 - } 92 - None => {} 93 - } 94 95 println!("Fetched world data for {}", &world_id); 96 world ··· 113 s.serialize_field("visits", &self.visits)?; 114 s.serialize_field("favourites", &self.favourites)?; 115 s.serialize_field("tags", &self.tags)?; 116 - s.serialize_field("from", &self.from)?; 117 - s.serialize_field("fromSite", &self.from_site)?; 118 s.serialize_field("found", &self.found)?; 119 120 s.end()
··· 1 use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 3 #[derive(Clone)] 4 pub struct World { ··· 11 max_users: u64, 12 visits: u64, 13 favourites: u64, 14 + tags: Vec<String>, 15 found: bool, 16 } 17 ··· 29 max_users: 0, 30 visits: 0, 31 favourites: 0, 32 + tags: vec!["".into()], 33 found: false, 34 }; 35 36 let client = reqwest::blocking::Client::new(); 37 38 + let world_data = client 39 + .get(format!("https://api.vrchat.cloud/api/1/worlds/{}", world_id)) 40 .header("User-Agent", "VRChat-Photo-Manager-Rust/0.0.1") 41 .send() 42 .unwrap(); 43 44 + if world_data.status() != 200{ return world; } 45 world.found = true; 46 47 + let world_data = world_data.text().unwrap(); 48 let world_data: serde_json::Value = serde_json::from_str(&world_data).unwrap(); 49 50 + world.name = world_data["name"].as_str().unwrap().to_owned(); 51 + world.author = world_data["authorName"].as_str().unwrap().to_owned(); 52 + world.author_id = world_data["authorId"].as_str().unwrap().to_owned(); 53 + world.desc = world_data["description"].as_str().unwrap().to_owned(); 54 + world.img = world_data["imageUrl"].as_str().unwrap().to_owned(); 55 + world.tags = world_data["tags"].as_array().unwrap().clone().iter() 56 + .map(| item | item.as_str().unwrap().to_owned()) 57 + .collect(); 58 + world.visits = world_data["visits"].as_u64().unwrap(); 59 + world.favourites = world_data["favorites"].as_u64().unwrap(); 60 + world.max_users = world_data["capacity"].as_u64().unwrap(); 61 62 println!("Fetched world data for {}", &world_id); 63 world ··· 80 s.serialize_field("visits", &self.visits)?; 81 s.serialize_field("favourites", &self.favourites)?; 82 s.serialize_field("tags", &self.tags)?; 83 s.serialize_field("found", &self.found)?; 84 85 s.end()
+7 -6
src-tauri/tauri.conf.json
··· 15 "icons/icon.ico" 16 ] 17 }, 18 - "productName": "vrchat-photo-manager", 19 "version": "0.0.1", 20 "identifier": "uk.phaz.vrcpm", 21 - "plugins": {}, 22 "app": { 23 "security": { 24 - "csp": "https://photos.phazed.xyz; connect-src ipc: http://ipc.localhost" 25 }, 26 "windows": [ 27 { ··· 33 "minWidth": 600, 34 "minHeight": 400, 35 "visible": false, 36 - "decorations": false, 37 - "transparent": true, 38 - "titleBarStyle": "Transparent" 39 } 40 ] 41 }
··· 15 "icons/icon.ico" 16 ] 17 }, 18 + "productName": "VRChat Photo Manager", 19 "version": "0.0.1", 20 "identifier": "uk.phaz.vrcpm", 21 + "plugins": { 22 + "shell": { "open": true } 23 + }, 24 "app": { 25 "security": { 26 + "csp": "connect-src https://api.github.com ipc: http://ipc.localhost" 27 }, 28 "windows": [ 29 { ··· 35 "minWidth": 600, 36 "minHeight": 400, 37 "visible": false, 38 + "decorations": true, 39 + "transparent": true 40 } 41 ] 42 }
+10 -2
vite.config.ts
··· 1 - import { defineConfig } from "vite"; 2 import solid from "vite-plugin-solid"; 3 4 // https://vitejs.dev/config/ 5 export default defineConfig(async () => ({ 6 - plugins: [solid()], 7 8 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 9 //
··· 1 + import { defineConfig, Plugin } from "vite"; 2 import solid from "vite-plugin-solid"; 3 4 + const fullReloadAlways: Plugin = { 5 + name: 'full-reload', 6 + handleHotUpdate({ server }) { 7 + server.ws.send({ type: "full-reload" }); 8 + return []; 9 + }, 10 + }; 11 + 12 // https://vitejs.dev/config/ 13 export default defineConfig(async () => ({ 14 + plugins: [solid(), fullReloadAlways], 15 16 // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 17 //