diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..83c88ac --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,26 @@ +name: CI +on: [push] +jobs: + build: + name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} + + runs-on: ${{ matrix.os }} + strategy: + matrix: + node: ['14.x'] + os: [ubuntu-latest, windows-latest, macOS-latest] + + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Use Node ${{ matrix.node }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + + - name: Install deps and build (with cache) + uses: bahmutov/npm-install@v1 + + - name: Build + run: yarn build diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4de8fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.log +.DS_Store +node_modules +.cache +dist diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..e5f045b --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..03b8c25 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/scenify-sdk.iml b/.idea/scenify-sdk.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/scenify-sdk.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1d013ff --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..66439c5 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Scenify SDK + +_Warning: this project is not production ready, API might change without notice._ + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +**View full documentation and examples on [Scenify SDK Docs](https://docs.scenify.dev)** + +## Join us on Discord + +

+ + Discord Banner 2 + +

+ diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..fbea7fd --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,7 @@ +node_modules +.next +.DS_Store +yarn-error.log +dist +examples +packages \ No newline at end of file diff --git a/docs/.prettierignore b/docs/.prettierignore new file mode 100644 index 0000000..f74c781 --- /dev/null +++ b/docs/.prettierignore @@ -0,0 +1,2 @@ +.next +node_modules diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000..6734428 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Shu Ding + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..d4d2792 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,8 @@ +# [Scenify](https://github.com/scenify/scenify-sdk) + +_Warning: this project is a work in progress, API might change without notice._ + + +**Scenify** is a [fabric.js](https://nextjs.org) based SDK that will help you build canvas-like editors for several business use cases. + +![](/public/preview.png) diff --git a/docs/next.config.js b/docs/next.config.js new file mode 100644 index 0000000..851af14 --- /dev/null +++ b/docs/next.config.js @@ -0,0 +1,2 @@ +const withNextra = require('nextra')('nextra-theme-docs', './theme.config.js') +module.exports = withNextra() diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..60439ae --- /dev/null +++ b/docs/package.json @@ -0,0 +1,27 @@ +{ + "name": "nextra", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "next", + "start": "next start", + "build": "next build" + }, + "author": "Shu Ding", + "license": "MIT", + "dependencies": { + "next": "^10.0.8-canary.9", + "nextra": "^0.4.1", + "nextra-theme-docs": "^1.1.2", + "react": "^17.0.1", + "react-dom": "^17.0.1" + }, + "devDependencies": { + "prettier": "^2.0.5" + }, + "prettier": { + "semi": false, + "singleQuote": true + } +} diff --git a/docs/pages/_app.js b/docs/pages/_app.js new file mode 100644 index 0000000..3e7701b --- /dev/null +++ b/docs/pages/_app.js @@ -0,0 +1,5 @@ +import 'nextra-theme-docs/style.css' + +export default function Nextra({ Component, pageProps }) { + return +} diff --git a/docs/pages/design.mdx b/docs/pages/design.mdx new file mode 100644 index 0000000..10cbf9b --- /dev/null +++ b/docs/pages/design.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Design + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/pages/events.mdx b/docs/pages/events.mdx new file mode 100644 index 0000000..d77413d --- /dev/null +++ b/docs/pages/events.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Events + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/pages/history.mdx b/docs/pages/history.mdx new file mode 100644 index 0000000..72576bd --- /dev/null +++ b/docs/pages/history.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# History + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/pages/hooks/meta.json b/docs/pages/hooks/meta.json new file mode 100644 index 0000000..8ebe1dc --- /dev/null +++ b/docs/pages/hooks/meta.json @@ -0,0 +1,4 @@ +{ + "useEditor": "useEditor", + "useActiveObject": "useActiveObject" +} diff --git a/docs/pages/hooks/useActiveObject.mdx b/docs/pages/hooks/useActiveObject.mdx new file mode 100644 index 0000000..dd8d073 --- /dev/null +++ b/docs/pages/hooks/useActiveObject.mdx @@ -0,0 +1,18 @@ +# useActiveObject + +Will receive the selecte object + +### Usage + +```tsx +import { useActiveObject } from '@scenify/sdk' + +export default function App() { + const activeObject = useActiveObject() + + useEffect(() => { + console.log(activeObject) + }, [activeObject]) + return <>... +} +``` diff --git a/docs/pages/hooks/useEditor.mdx b/docs/pages/hooks/useEditor.mdx new file mode 100644 index 0000000..2a0569e --- /dev/null +++ b/docs/pages/hooks/useEditor.mdx @@ -0,0 +1,206 @@ +# useEditor + +Get access to editor controllers + +### Usage + +```tsx +import { useEditor } from '@scenify/sdk' + +export default function App() { + const editor = useEditor() + + const handleAction = () => { + editor.do(...) + } + return <>... +} +``` + +## Add + +Add objects to the editor. + +```tsx +const options = { + type: 'StaticText', + width: 160, + metadata: { + fontWeight: 700, + fontFamily: 'Noto Sans KR', + textAlign: 'center', + fontSize: 28, + text: 'Add heading', + }, +} +const handleAdd = () => { + editor.add(options) +} +``` + +## Update + +Update selected object properties + +```tsx +const handleUpdate = () => { + editor.update({ + fontWeight: 500, + fontSize: 100, + }) +} +``` + +## Copy + +Add select object to clipboard + +```tsx +const handleCopy = () => { + editor.copy() +} +``` + +## Cut + +Cuts sel object and adds it to clipboard. + +```tsx +const handleCut = () => { + editor.cut() +} +``` + +## Paste + +Paste object from clipboard + +```tsx +const handlePaste = () => { + editor.paste() +} +``` + +## Copy Style + +Will add selected object properties to clipboard. User needs to click another object to apply these properties. It works for same object types. + +```tsx +const handleCopyStyle = () => { + editor.copyStyle() +} +``` + +## Clone + +Clone selected object + +```tsx +const handleClone = () => { + editor.clone() +} +``` + +## Delete + +Delete selected object. + +```tsx +const handleDelete = () => { + editor.delete() +} +``` + +## Clear + +Will remove all objects from editor + +```tsx +const handleClear = () => { + editor.clear() +} +``` + +## Deselect + +Will deselect selected object + +```tsx +const handleDeselect = () => { + editor.deselect() +} +``` + +## Undo + +Reverses the last action + +```tsx +const handleUndo = () => { + editor.undo() +} +``` + +## Redo + +Re-applies reversed changes + +```tsx +const handleRedo = () => { + editor.redo() +} +``` + +## ZoomIn + +## ZoomOut + +## ZoomToOne + +## ZoomToFit + +## ZoomToRatio + +## alignTop + +## alignMiddle + +## alignBottom + +## alignLeft + +## alignCenter + +## alignRight + +## bringForward + +## bringToFront + +## sendBackwards + +## sendToBack + +## group + +## ungroup + +## lock + +## unlock + +## setGradient + +## setShadow + +## exportToJSON + +## importFromJSON + +## toSVG + +## toPNG + +## cancelContextMenu + +## destroy diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx new file mode 100644 index 0000000..3192c7b --- /dev/null +++ b/docs/pages/index.mdx @@ -0,0 +1,32 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Scenify + +**Scenify** is a [fabric.js](https://nextjs.org) based SDK that will help you build canvas-like editors for several business use cases. + +There are many powerful JavaScript frameworks and tools that can help you make a canvas editor. But almost all of them are "low-level" and you may need to write a lot of code to make a full canvas editor app. + +The idea is to provide a SDK that will abstract all complexities and give you a clean interface for building design editors with almost no code. + +### Features + +| Description | Status | +| ----------------------------- | ------ | +| Add/Update/Remove elements | ✔️ | +| Copy/Paste/Duplicate elements | ✔️ | +| Group Ungroup | ✔️ | +| Lock Unlock | ✔️ | +| Object layering | ✔️ | +| Shadow | ✔️ | +| Gradient | ✔️ | +| Object Positioning | ✔️ | +| Scrollbar support | ✔️ | +| Dynamic frame support | ✔️ | +| Preview | ✔️ | +| Smart guidelines | ✔️ | +| Undo Redo | ✔️ | +| Export and Load from JSON | ✔️ | +| Export to PNG | ✔️ | +| Shortcuts | | +| Animations | | diff --git a/docs/pages/meta.json b/docs/pages/meta.json new file mode 100644 index 0000000..5a14cfc --- /dev/null +++ b/docs/pages/meta.json @@ -0,0 +1,10 @@ +{ + "index": "Intro", + "setup": "Setup", + "hooks": "Hooks", + "objects": "Objects", + "history": "History", + "zoom": "Zoom", + "events": "Events", + "design": "Design" +} diff --git a/docs/pages/objects/create.md b/docs/pages/objects/create.md new file mode 100644 index 0000000..66ea5a1 --- /dev/null +++ b/docs/pages/objects/create.md @@ -0,0 +1,30 @@ +# Adding objects + +## Text + +### Adding Text + +Nextra supports [Next.js i18n](https://nextjs.org/docs/advanced-features/i18n-routing) out of the box. + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + type: 'StaticImage', + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` + +### Updating Text + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` diff --git a/docs/pages/objects/group.md b/docs/pages/objects/group.md new file mode 100644 index 0000000..9ad206b --- /dev/null +++ b/docs/pages/objects/group.md @@ -0,0 +1,28 @@ +# Elements + +### Adding elements + +Nextra supports [Next.js i18n](https://nextjs.org/docs/advanced-features/i18n-routing) out of the box. + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + type: "StaticImage", + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` + +### Updating elements + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` diff --git a/docs/pages/objects/meta.json b/docs/pages/objects/meta.json new file mode 100644 index 0000000..814a94d --- /dev/null +++ b/docs/pages/objects/meta.json @@ -0,0 +1,5 @@ +{ + "create": "Create", + "update": "Update", + "group": "Group" +} diff --git a/docs/pages/objects/update.md b/docs/pages/objects/update.md new file mode 100644 index 0000000..83afa8e --- /dev/null +++ b/docs/pages/objects/update.md @@ -0,0 +1,28 @@ +# Images + +### Adding images + +Nextra supports [Next.js i18n](https://nextjs.org/docs/advanced-features/i18n-routing) out of the box. + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + type: "StaticImage", + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` + +### Updating images + +To add multi-language pages to your Nextra application, just need to config `i18n` in `next.config.js`: + +```js +const imageOptions = { + metadata: { + src: 'https://uploda.coma.up/download.png', + }, +} +``` diff --git a/docs/pages/setup.mdx b/docs/pages/setup.mdx new file mode 100644 index 0000000..13b3326 --- /dev/null +++ b/docs/pages/setup.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Setup + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/pages/shortcuts.mdx b/docs/pages/shortcuts.mdx new file mode 100644 index 0000000..d99c7d6 --- /dev/null +++ b/docs/pages/shortcuts.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Shortcuts + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/pages/zoom.mdx b/docs/pages/zoom.mdx new file mode 100644 index 0000000..66b46c8 --- /dev/null +++ b/docs/pages/zoom.mdx @@ -0,0 +1,55 @@ +import Image from 'next/image' +import Bleed from 'nextra-theme-docs/bleed' + +# Zoom + +### Installation + +Scenify SDK is available on npm as @scenify/sdk. This single package contains all components required to build a design editor. + +```sh +# using yarn +yarn add @scenify/sdk + +# using npm +npm install @scenify/sdk +``` + +### Integration + +In order to use Scenify SDK, you need to do a small setup and wrap the root of your application with EditorProvider: + +```tsx +import { EditorProvider } from '@scenify/sdk' +import YourAPP from './App' + +export default function App() { + return Other components +} +``` + +Then, you can use Editor component in any part of your application. + +```tsx +import Editor from '@scenify/sdk' + +const editorConfig = { + clipToFrame: true, + scrollLimit: 0, +} + +export default function MyEditor() { + return ( +
+ +
+ ) +} +``` + +import Callout from 'nextra-theme-docs/callout' + + + It is recommended to wrap the Editor component inside a flexible container. It + will allow the Editor component to detect resize changes. + diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico new file mode 100644 index 0000000..e91d3b7 Binary files /dev/null and b/docs/public/favicon.ico differ diff --git a/docs/public/preview.png b/docs/public/preview.png new file mode 100644 index 0000000..43b2003 Binary files /dev/null and b/docs/public/preview.png differ diff --git a/docs/theme.config.js b/docs/theme.config.js new file mode 100644 index 0000000..f8999f0 --- /dev/null +++ b/docs/theme.config.js @@ -0,0 +1,36 @@ +export default { + repository: 'https://github.com/shuding/nextra', + titleSuffix: ' – Scenify', + logo: ( + <> + Scenify + + Build design editors + + + ), + head: ( + <> + + + + + + + + + + + + + + + + ), + search: true, + prevLinks: true, + nextLinks: true, + footer: true, + footerEditOnGitHubLink: true, + footerText: <>MIT {new Date().getFullYear()} © Scenify., +} diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 0000000..82cb405 --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,2813 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.5" + "@babel/types" "^7.10.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.5", "@babel/generator@^7.11.5": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@7.10.4", "@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.8.0": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" + integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + +"@babel/plugin-proposal-object-rest-spread@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-syntax-jsx@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/runtime@7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.5": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/boom@9.x.x": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.0.tgz#0d9517657a56ff1e0b42d0aca9da1b37706fec56" + integrity sha512-4nZmpp4tXbm162LaZT45P7F7sgiem8dwAh2vHWT6XX24dozNjGMg6BvKCRvtCUcmcXqeMIUqWN8Rc5X8yKuROQ== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/hoek@9.x.x": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6" + integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw== + +"@mdx-js/loader@^2.0.0-next.8": + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-2.0.0-next.8.tgz#04ae87369b340f1a163b65b52405060b38a3caac" + integrity sha512-BScRR37MMohfkIlnMajYfDeuaLYlk6r1+A/5DMVlQEp8pcUUJDIcnwnow4iBwwj1aPSUVlTGIY00R1ibt+IyLA== + dependencies: + "@mdx-js/mdx" "^2.0.0-next.8" + "@mdx-js/react" "^2.0.0-next.8" + loader-utils "2.0.0" + +"@mdx-js/mdx@^2.0.0-next.8": + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.0.0-next.8.tgz#7d29d7ee634ab0c37cf44bd8d9b1e93c5e09649f" + integrity sha512-OT3bkvsA+rmqv378+UWFgeQuchaafhVgOO46+hc5U7KrGK3iPI2yGTcFwD3/KzSu+JGPCEUBREE96ncpvYqKjA== + dependencies: + "@babel/core" "7.10.5" + "@babel/plugin-syntax-jsx" "7.10.4" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "^2.0.0-next.8" + babel-plugin-apply-mdx-type-prop "^2.0.0-next.8" + babel-plugin-extract-export-names "^2.0.0-next.8" + babel-plugin-extract-import-names "^2.0.0-next.8" + camelcase-css "2.0.1" + detab "2.0.3" + hast-to-hyperscript "9.0.0" + hast-util-raw "6.0.0" + lodash.uniq "4.5.0" + mdast-util-to-hast "9.1.0" + remark-footnotes "1.0.0" + remark-mdx "^2.0.0-next.8" + remark-mdxjs "^2.0.0-next.8" + remark-parse "8.0.2" + remark-squeeze-paragraphs "4.0.0" + unified "9.0.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.16": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.16.tgz#538eb14473194d0b3c54020cb230e426174315cd" + integrity sha512-+FhuSVOPo7+4fZaRwWuCSRUcZkJOkZu0rfAbBKvoCg1LWb1Td8Vzi0DTLORdSvgWNbU6+EL40HIgwTOs00x2Jw== + +"@mdx-js/react@^2.0.0-next.8": + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.0.0-next.8.tgz#fa774dc781600eb075513eebaae6bd705776ac34" + integrity sha512-I/ped8Wb1L4sUlumQmUlYQsH0tjd2Zj2eyCWbqgigpg+rtRlNFO9swkeyr0GY9hNZnwI8QOnJtNe+UdIZim8LQ== + +"@mdx-js/util@^2.0.0-next.8": + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-2.0.0-next.8.tgz#66ecc27b78e07a3ea2eb1a8fc5a99dfa0ba96690" + integrity sha512-T0BcXmNzEunFkuxrO8BFw44htvTPuAoKbLvTG41otyZBDV1Rs+JMddcUuaP5vXpTWtgD3grhcrPEwyx88RUumQ== + +"@next/env@10.0.8-canary.9": + version "10.0.8-canary.9" + resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.8-canary.9.tgz#25ef619bab4ad3dd48e0d9967b5c7477395b9221" + integrity sha512-hcD/lLRSvRyuP5dT1Y3AYJdY7GibkbM9lLitcGaky1mm5L+QLOYJgS+wwtVixCpxwot8JkLAcAYtzvkyWJiXaw== + +"@next/polyfill-module@10.0.8-canary.9": + version "10.0.8-canary.9" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.8-canary.9.tgz#bfade1519d26eb32a331444c51ca1efaf6feb089" + integrity sha512-FLZEupqM6W45R9JVqCXsS6sp7taJu1TKzG3qPKknW7l8NOLMWIxInXnij1oeYvHkMBeffnAWgvnGcDERLJd1qA== + +"@next/react-dev-overlay@10.0.8-canary.9": + version "10.0.8-canary.9" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.8-canary.9.tgz#51efbe68ec926f7ad9333ee410aaad9d80ef8629" + integrity sha512-rlHyxpkb32hL/UTyaWXpTkvxvd87SD8/RCPiyupuwFslkkkdYw4dn+ChWBwSzm/mluUUkJ7o5+5LMz7xbswvWg== + dependencies: + "@babel/code-frame" "7.12.11" + anser "1.4.9" + chalk "4.0.0" + classnames "2.2.6" + css.escape "1.5.1" + data-uri-to-buffer "3.0.1" + platform "1.3.6" + shell-quote "1.7.2" + source-map "0.8.0-beta.0" + stacktrace-parser "0.1.10" + strip-ansi "6.0.0" + +"@next/react-refresh-utils@10.0.8-canary.9": + version "10.0.8-canary.9" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.8-canary.9.tgz#486d0502153907ede37848a62db6dee6e52353ae" + integrity sha512-hcPWueOSNKScvUjIeOHUlwLaZJx9cGCM+sa73lWt1x3FyD7iMdgyWmnGXjYpCe96yvOlEfi0bg94cDMMgd6V8w== + +"@opentelemetry/api@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" + integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== + dependencies: + "@opentelemetry/context-base" "^0.14.0" + +"@opentelemetry/context-base@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" + integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== + +"@reach/skip-nav@^0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@reach/skip-nav/-/skip-nav-0.11.2.tgz#015498b2125ad8ef1e48cb8ab33dca93925fcbc8" + integrity sha512-cXGQJodYcyUBLBv59oxB4ywwgFDHnoyt8+W+ZgdR1LR9eDxx6170shP0yPcwf/5KV2tXJtNF2McRUObkUW90+Q== + dependencies: + "@reach/utils" "0.11.2" + tslib "^2.0.0" + +"@reach/utils@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.11.2.tgz#be1f03650db56fd67a16d3fc70e5262cdb139cec" + integrity sha512-fBTolYj+rKTROXmf0zHO0rCWSvw7J0ALmYj5QxW4DmITMOH5uyRuWDWOfqohIGFbOtF/sum50WTB3tvx76d+Aw== + dependencies: + "@types/warning" "^3.0.0" + tslib "^2.0.0" + warning "^4.0.3" + +"@researchgate/react-intersection-observer@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@researchgate/react-intersection-observer/-/react-intersection-observer-1.3.5.tgz#0321d2dd609aaacdb9bace8004d99c72824fb142" + integrity sha512-aYlsex5Dd6BAHMJvJrUoFp8gzgMSL27xFvrxkVYW0bV1RMAapVsO+QeYLtTaSF/QCflktODodvv+wJm49oMnnQ== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/hast@^2.0.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" + integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + dependencies: + "@types/unist" "*" + +"@types/mdast@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + dependencies: + "@types/unist" "*" + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + +anser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" + integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.1.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arch@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== + +arg@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/arg/-/arg-1.0.0.tgz#444d885a4e25b121640b55155ef7cd03975d6050" + integrity sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +ast-types@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== + +babel-plugin-apply-mdx-type-prop@^2.0.0-next.8: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-2.0.0-next.8.tgz#f598b236ac1e5fd250d93bfbb179c771c9a9caf5" + integrity sha512-Mcr9VAMxfS3ltNm3SXnSgP+7uqxx2zYS4xya2t8KvnLGejzSNsODSgjpNHUyfLihoDnfYaeCH7VFewZRKaRT8g== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "^2.0.0-next.8" + +babel-plugin-extract-export-names@^2.0.0-next.8: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-export-names/-/babel-plugin-extract-export-names-2.0.0-next.8.tgz#96a4d7fc7b4dbaa67e10a0f9d156848b43b1f20f" + integrity sha512-W0DbJHAIlxSlb110h7uVq0aHmxPS985YSiEloTM7irvt8YkOFhxn4WkSAoOfTAJY/+xecRgwhMd8YTAZfoLq5A== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-extract-import-names@^2.0.0-next.8: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-2.0.0-next.8.tgz#80f77e92853e3074c6a1907342ba720de5861366" + integrity sha512-jdk6h7FaArjwMKqlF0hdozMwum5JDzLse99D5wWVbZWe0P7w/ghXDpE0VbooqJ/jyYwei5a6tHeTTU59Ds4WXg== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-syntax-jsx@6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.16.1: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== + dependencies: + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179: + version "1.0.30001192" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001192.tgz#b848ebc0ab230cf313d194a4775a30155d50ae40" + integrity sha512-63OrUnwJj5T1rUmoyqYTdRWBqFFxZFlyZnRRjDR8NSUQFB6A+j/uBORU/SyJ5WzDLg4SPiZH40hQCBNdZ/jmAw== + +ccount@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== + +chalk@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +classnames@2.2.6, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clipboardy@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.2.tgz#2ce320b9ed9be1514f79878b53ff9765420903e2" + integrity sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw== + dependencies: + arch "^2.1.0" + execa "^0.8.0" + +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +convert-source-map@1.7.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css.escape@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +cssnano-preset-simple@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413" + integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ== + dependencies: + caniuse-lite "^1.0.30001179" + postcss "^7.0.32" + +cssnano-simple@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007" + integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g== + dependencies: + cssnano-preset-simple "1.2.2" + postcss "^7.0.32" + +data-uri-to-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + +debug@2: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detab@2.0.3, detab@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.3.tgz#33e5dd74d230501bd69985a0d2b9a3382699a130" + integrity sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A== + dependencies: + repeat-string "^1.5.4" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +electron-to-chromium@^1.3.634: + version "1.3.675" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.675.tgz#7ad29f98d7b48da581554eb28bb9a71fd5fd4956" + integrity sha512-GEQw+6dNWjueXGkGfjgm7dAMtXfEqrfDG3uWcZdeaD4cZ3dKYdPRQVruVXQRXtPLtOr5GNVVlNLRMChOZ611pQ== + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +focus-visible@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.1.0.tgz#4b9d40143b865f53eafbd93ca66672b3bf9e7b6a" + integrity sha512-nPer0rjtzdZ7csVIu233P2cUm/ks/4aVSI+5KUkYrYpgA7ujgC3p6J7FtFU+AIMWwnwYQOB/yeiOITxFeYIXiw== + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-orientation@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947" + integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== + dependencies: + stream-parser "^0.3.1" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +github-slugger@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-to-hyperscript@9.0.0, hast-to-hyperscript@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz#768fb557765fe28749169c885056417342d71e83" + integrity sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz#b38793c81e1a99f5fd592a4a88fc2731dccd0f30" + integrity sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q== + dependencies: + "@types/parse5" "^5.0.0" + ccount "^1.0.0" + hastscript "^5.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974" + integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA== + +hast-util-raw@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.0.tgz#49a38f5107d483f83a139709f2f705f22e7e7d32" + integrity sha512-IQo6tv3bMMKxk53DljswliucCJOQxaZFCuKEJ7X80249dmJ1nA9LtOnnylsLlqTG98NjQ+iGcoLAYo9q5FRhRg== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +intersection-observer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.0.tgz#6c84628f67ce8698e5f9ccf857d97718745837aa" + integrity sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ== + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-decimal@^1.0.0, is-decimal@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +jest-worker@24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.11.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.uniq@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.13, lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +longest-streak@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +match-sorter@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-4.2.0.tgz#70c4e7443dacf5fa2503bc5afc189024092e9d27" + integrity sha512-oEvLn8R+a30YZ9l5XdCTkYQuLsOs8frxEqQTAuxoqkQx/qV5pQpx/NqAWvJ5xbYecqfXoF/ZevaIS1+NkbRymg== + dependencies: + "@babel/runtime" "^7.10.5" + remove-accents "0.4.2" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-compact@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" + integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-definitions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86" + integrity sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.0.tgz#6ef121dd3cd3b006bf8650b1b9454da0faf79ffe" + integrity sha512-Akl2Vi9y9cSdr19/Dfu58PVwifPXuFt1IrHe7l+Crme1KvgUT+5z+cHLVcQVGCiNTZZcdqjnuv9vPkGsqWytWA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.3" + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^3.0.0" + mdurl "^1.0.0" + trim-lines "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.1.16: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +native-url@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" + integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== + dependencies: + querystring "^0.2.0" + +next-themes@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.0.8.tgz#2a1748317085afbc2509e2c32bd04af4f0f6cb7d" + integrity sha512-dyrh+/bZW4hkecFEg2rfwOLLzU2UnE7KfiwcV0mIwkPrO+1n1WvwkC8nabgKA5Eoi8stkYfjmA72FxTaWEOHtg== + +next@^10.0.8-canary.9: + version "10.0.8-canary.9" + resolved "https://registry.yarnpkg.com/next/-/next-10.0.8-canary.9.tgz#e3619c55442dec67763d89e0e8d398c6b1236d25" + integrity sha512-f3J65pxgsV7tPl1/ul8bb2gPDC3BeC9T5kFaGObeMltXlwHUb72r8mlgI/rYUE3tIOxpEBUp6WfOoUBfQ7It1Q== + dependencies: + "@babel/runtime" "7.12.5" + "@hapi/accept" "5.0.1" + "@next/env" "10.0.8-canary.9" + "@next/polyfill-module" "10.0.8-canary.9" + "@next/react-dev-overlay" "10.0.8-canary.9" + "@next/react-refresh-utils" "10.0.8-canary.9" + "@opentelemetry/api" "0.14.0" + ast-types "0.13.2" + browserslist "4.16.1" + buffer "5.6.0" + caniuse-lite "^1.0.30001179" + chalk "2.4.2" + chokidar "3.5.1" + crypto-browserify "3.12.0" + cssnano-simple "1.2.2" + etag "1.8.1" + find-cache-dir "3.3.1" + get-orientation "1.1.2" + jest-worker "24.9.0" + native-url "0.3.4" + node-fetch "2.6.1" + node-html-parser "1.4.9" + node-libs-browser "^2.2.1" + p-limit "3.1.0" + path-browserify "1.0.1" + pnp-webpack-plugin "1.6.4" + postcss "8.1.7" + process "0.11.10" + prop-types "15.7.2" + raw-body "2.4.1" + react-is "16.13.1" + react-refresh "0.8.3" + stream-browserify "3.0.0" + styled-jsx "3.3.2" + use-subscription "1.5.1" + vm-browserify "1.1.2" + watchpack "2.1.1" + +nextra-theme-docs@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-1.1.2.tgz#345117cd9db77f7d76cd448194e8be6adc648828" + integrity sha512-mFNWCTgXRfZ6LzaUQORRd3VRD5n4a0nqm3kZt22uNcyJuhuv9apUM0ivslPcTCB//2iRi4KEb+Gh1tjuUfKWbw== + dependencies: + "@mdx-js/react" "^1.6.16" + "@reach/skip-nav" "^0.11.2" + "@researchgate/react-intersection-observer" "^1.3.5" + classnames "^2.2.6" + focus-visible "^5.1.0" + github-slugger "^1.3.0" + intersection-observer "^0.12.0" + match-sorter "^4.2.0" + next-themes "^0.0.8" + prism-react-renderer "^1.1.1" + react-innertext "^1.1.5" + title "^3.4.2" + +nextra@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/nextra/-/nextra-0.4.1.tgz#e3c3c9ac8bd64b255a2e43c6b03a1cce433f4f6e" + integrity sha512-rdhNLU55XQjyjH2C95nILMyJT0iOU3/SxZAJRGi/IDb1SJ85BnIeup5P9qPVp40PxxLSOE63dligQVPE2sg1Og== + dependencies: + "@mdx-js/loader" "^2.0.0-next.8" + gray-matter "^4.0.2" + loader-utils "^2.0.0" + slash "^3.0.0" + +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-html-parser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" + integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== + dependencies: + he "1.2.0" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.69: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-browserify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +platform@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +postcss@8.1.7: + version "8.1.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f" + integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.16" + source-map "^0.6.1" + +postcss@^7.0.32: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + +prism-react-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44" + integrity sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@0.11.10, process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +prop-types@15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" + integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== + dependencies: + xtend "^4.0.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +raw-body@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-dom@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.1" + +react-innertext@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/react-innertext/-/react-innertext-1.1.5.tgz#8147ac54db3f7067d95f49e2d2c05a720d27d8d0" + integrity sha512-PWAqdqhxhHIv80dT9znP2KvS+hfkbRovFp4zFYHFFlOoQLRiawIic81gKb3U1wEyJZgMwgs3JoLtwryASRWP3Q== + +react-is@16.13.1, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-refresh@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +remark-footnotes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011" + integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g== + +remark-mdx@^2.0.0-next.8: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.0.0-next.8.tgz#db1c3cbc606ea0d01526242199bb134d99020363" + integrity sha512-mjP0yo6BgjYrx5a+gKWYRFWbGnRiWi4Fdf17xGCr9VkSMnG4Dyo06spqbaLfHwl0KkQ/RQZlR2sn1mKnYduJdw== + dependencies: + parse-entities "^2.0.0" + remark-stringify "^8.1.0" + stringify-entities "^3.0.1" + strip-indent "^3.0.0" + unist-util-stringify-position "^2.0.3" + +remark-mdxjs@^2.0.0-next.8: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/remark-mdxjs/-/remark-mdxjs-2.0.0-next.8.tgz#ff603ebfcb17f19503ee3fab78447445eaa08783" + integrity sha512-Z/+0eWc7pBEABwg3a5ptL+vCTWHYMFnYzpLoJxTm2muBSk8XyB/CL+tEJ6SV3Q/fScHX2dtG4JRcGSpbZFLazQ== + dependencies: + "@babel/core" "7.10.5" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.10.4" + "@babel/plugin-syntax-jsx" "7.10.4" + "@mdx-js/util" "^2.0.0-next.8" + +remark-parse@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b" + integrity sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +remark-stringify@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" + integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^2.0.0" + mdast-util-compact "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^3.0.0" + unherit "^1.0.4" + xtend "^4.0.1" + +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= + +repeat-string@^1.0.0, repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stacktrace-parser@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-parser@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" + integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= + dependencies: + debug "2" + +string-hash@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^3.0.0, stringify-entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.1.tgz#32154b91286ab0869ab2c07696223bd23b6dbfc0" + integrity sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.2" + is-hexadecimal "^1.0.0" + +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +styled-jsx@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018" + integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g== + dependencies: + "@babel/types" "7.8.3" + babel-plugin-syntax-jsx "6.18.0" + convert-source-map "1.7.0" + loader-utils "1.2.3" + source-map "0.7.3" + string-hash "1.1.3" + stylis "3.5.4" + stylis-rule-sheet "0.0.10" + +stylis-rule-sheet@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" + integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== + +stylis@3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" + integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +title@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/title/-/title-3.4.2.tgz#1c0acd159c6437296cc73ec743a4b9f7510c6a6f" + integrity sha512-cSNFZ/ChKlX2SfF+k9XvvXkjVa1JrzdGt6v/hoxVig5VaDGRmNHANfawcAdW2mfkd7y+uBHH6n9EHAxJmkO5Hw== + dependencies: + arg "1.0.0" + chalk "2.3.0" + clipboardy "1.2.2" + titleize "1.0.0" + +titleize@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a" + integrity sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" + integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== + +trim-trailing-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" + integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tslib@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.2.tgz#462295631185db44b21b1ea3615b63cd1c038242" + integrity sha512-wAH28hcEKwna96/UacuWaVspVLkg4x1aDM9JlzqaQTOFczCktkVAb5fmXChgandR1EraDPs2w8P+ozM+oafwxg== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unified@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d" + integrity sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42" + integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw== + +unist-util-is@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de" + integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488" + integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0, unist-util-stringify-position@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz#d4076af3011739c71d2ce99d05de37d545f4351d" + integrity sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unist-util-visit@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7" + integrity sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-subscription@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== + dependencies: + object-assign "^4.1.1" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +vfile-location@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3" + integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.1.1.tgz#282d28cebb609183ac51703001bc18b3e3f17de9" + integrity sha512-lRjkpyDGjVlBA7cDQhQ+gNcvB1BGaTHYuSOcY3S7OhDmBtnzX95FhtZZDecSTDm6aajFymyve6S5DN4ZHGezdQ== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vm-browserify@1.1.2, vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== diff --git a/example/.npmignore b/example/.npmignore new file mode 100644 index 0000000..587e4ec --- /dev/null +++ b/example/.npmignore @@ -0,0 +1,3 @@ +node_modules +.cache +dist \ No newline at end of file diff --git a/example/package.json b/example/package.json new file mode 100644 index 0000000..735a475 --- /dev/null +++ b/example/package.json @@ -0,0 +1,38 @@ +{ + "name": "example", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "start": "parcel src/index.html", + "build": "parcel build index.html" + }, + "dependencies": { + "@types/css-font-loading-module": "^0.0.7", + "@types/lodash": "^4.14.177", + "@types/styletron-engine-atomic": "^1.1.1", + "@types/styletron-react": "^5.0.3", + "@types/styletron-standard": "^2.0.2", + "axios": "^0.24.0", + "baseui": "^10.6.0", + "lodash": "^4.17.21", + "nanoid": "^3.1.30", + "react-app-polyfill": "^1.0.0", + "react-colorful": "^5.5.0", + "react-custom-scrollbars": "^4.2.1", + "styletron-engine-atomic": "^1.4.8", + "styletron-react": "^6.0.2", + "use-debounce": "^7.0.1" + }, + "alias": { + "react": "../node_modules/react", + "react-dom": "../node_modules/react-dom/profiling", + "scheduler/tracing": "../node_modules/scheduler/tracing-profiling" + }, + "devDependencies": { + "@types/react": "^16.9.11", + "@types/react-dom": "^16.8.4", + "parcel": "1.12.3", + "typescript": "^3.4.5" + } +} diff --git a/example/src/Container.tsx b/example/src/Container.tsx new file mode 100644 index 0000000..b24cbff --- /dev/null +++ b/example/src/Container.tsx @@ -0,0 +1,78 @@ +//@ts-nocheck +import * as React from 'react' +import { useEffect, useRef, useState } from 'react' +import ResizeObserver from 'resize-observer-polyfill' +import useAppContext from './hooks/useAppContext' +import Loading from './components/Loading' +import { editorFonts } from './constants/fonts' + +function Container({ children }) { + const containerRef = useRef() + const { isMobile, setIsMobile } = useAppContext() + const [loaded, setLoaded] = useState(false) + + const updateMediaQuery = (value: number) => { + if (!isMobile && value >= 800) { + setIsMobile(false) + } else if (!isMobile && value < 800) { + setIsMobile(true) + } else { + setIsMobile(false) + } + } + useEffect(() => { + const containerElement = containerRef.current + const containerWidth = containerElement.clientWidth + updateMediaQuery(containerWidth) + const resizeObserver = new ResizeObserver(entries => { + const { width = containerWidth } = (entries[0] && entries[0].contentRect) || {} + updateMediaQuery(width) + }) + resizeObserver.observe(containerElement) + return () => { + if (containerElement) { + resizeObserver.unobserve(containerElement) + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + useEffect(() => { + loadFonts() + setTimeout(() => { + setLoaded(true) + }, 10) + }, []) + + const loadFonts = () => { + const promisesList = editorFonts.map(font => { + // @ts-ignore + return new FontFace(font.name, `url(${font.url})`, font.options).load().catch(err => err) + }) + Promise.all(promisesList) + .then(res => { + res.forEach(uniqueFont => { + if (uniqueFont && uniqueFont.family) { + document.fonts.add(uniqueFont) + } + }) + }) + .catch(err => console.log({ err })) + } + + return ( +
+ {loaded ? <>{children} : } +
+ ) +} + +export default Container diff --git a/example/src/Providers.tsx b/example/src/Providers.tsx new file mode 100644 index 0000000..f0869ed --- /dev/null +++ b/example/src/Providers.tsx @@ -0,0 +1,22 @@ +import * as React from 'react' +import { FC } from 'react' +import { Client as Styletron } from 'styletron-engine-atomic' +import { Provider as StyletronProvider } from 'styletron-react' +import { LightTheme, BaseProvider } from 'baseui' +import { EditorProvider } from '../../src' +import { AppProvider } from './contexts/AppContext' +const engine = new Styletron() + +const Providers: FC = ({ children }) => { + return ( + + + + {children} + + + + ) +} + +export default Providers diff --git a/example/src/assets/images/full-color.png b/example/src/assets/images/full-color.png new file mode 100644 index 0000000..e3f020e Binary files /dev/null and b/example/src/assets/images/full-color.png differ diff --git a/example/src/common/interfaces.ts b/example/src/common/interfaces.ts new file mode 100644 index 0000000..3b55850 --- /dev/null +++ b/example/src/common/interfaces.ts @@ -0,0 +1,46 @@ +import { fabric } from 'fabric' + +interface BaseObject { + id: string + name: string + description?: string +} +export type FabricRect = fabric.Rect & BaseObject +export type FabricCircle = fabric.Circle & BaseObject +export type FabricTriangle = fabric.Triangle & BaseObject +export type FabricObject = fabric.Object & BaseObject +export type FabricObjects = FabricObject | FabricRect | FabricCircle | FabricTriangle + +export type FabricRectOptions = fabric.IRectOptions & BaseObject +export type FabricCircleOptions = fabric.ICircleOptions & BaseObject +export type FabricTriangleOptions = fabric.ITriangleOptions & BaseObject +export type FabricObjectOptions = fabric.IObjectOptions & BaseObject + +export type FabricObjectsOptions = FabricObjectOptions | FabricRect | FabricCircle | FabricTriangle + +// CONTEXT TYPES + +export type CanvasType = 'editor' | 'previews' +export type ToolboxType = 'textbox' | 'image' | 'previews' | 'default' +export type ContextMenuType = 'canvas' | 'object' +export interface ContextMenu { + type: ContextMenuType + visible: boolean + top: number + left: number +} + +type FontVariant = '300' | 'regular' | '400' | '500' | '600' | '700' | '800' + +type FontFile = Record +export interface IFontFamily { + id: string + family: string + variants: FontVariant[] + files: FontFile[] + subsets: string[] + version: string + lastModified: string + category: string + kind: string +} diff --git a/example/src/components/Loading/Loading.tsx b/example/src/components/Loading/Loading.tsx new file mode 100644 index 0000000..5aa38d9 --- /dev/null +++ b/example/src/components/Loading/Loading.tsx @@ -0,0 +1,27 @@ +import * as React from 'react' +function Loading() { + return ( +
+ + + + + + + + + + + +
+ ) +} + +export default Loading diff --git a/example/src/components/Loading/index.ts b/example/src/components/Loading/index.ts new file mode 100644 index 0000000..cff6dc4 --- /dev/null +++ b/example/src/components/Loading/index.ts @@ -0,0 +1,3 @@ +import Loading from "./Loading"; + +export default Loading \ No newline at end of file diff --git a/example/src/components/icons/Background.tsx b/example/src/components/icons/Background.tsx new file mode 100644 index 0000000..efa60f1 --- /dev/null +++ b/example/src/components/icons/Background.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Background({ size }: { size: number }) { + return ( + + + + ) +} + +export default Background diff --git a/example/src/components/icons/Elements.tsx b/example/src/components/icons/Elements.tsx new file mode 100644 index 0000000..be219a8 --- /dev/null +++ b/example/src/components/icons/Elements.tsx @@ -0,0 +1,16 @@ +import * as React from 'react' +function Elements({ size }: { size: number }) { + return ( + + + + ) +} + +export default Elements diff --git a/example/src/components/icons/Illustrations.tsx b/example/src/components/icons/Illustrations.tsx new file mode 100644 index 0000000..15a9f08 --- /dev/null +++ b/example/src/components/icons/Illustrations.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Illustrations({ size }: { size: number }) { + return ( + + + + ) +} + +export default Illustrations diff --git a/example/src/components/icons/Images.tsx b/example/src/components/icons/Images.tsx new file mode 100644 index 0000000..3333aff --- /dev/null +++ b/example/src/components/icons/Images.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Images({ size }: { size: number }) { + return ( + + + + ) +} + +export default Images diff --git a/example/src/components/icons/Logo.tsx b/example/src/components/icons/Logo.tsx new file mode 100644 index 0000000..cee32d8 --- /dev/null +++ b/example/src/components/icons/Logo.tsx @@ -0,0 +1,33 @@ +import * as React from 'react' +function Logo({ size }: { size: number }) { + return ( + + + + + + ) +} + +export default Logo diff --git a/example/src/components/icons/Search.tsx b/example/src/components/icons/Search.tsx new file mode 100644 index 0000000..ba9e6b3 --- /dev/null +++ b/example/src/components/icons/Search.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Search({ size }: { size: number }) { + return ( + + + + ) +} + +export default Search diff --git a/example/src/components/icons/Templates.tsx b/example/src/components/icons/Templates.tsx new file mode 100644 index 0000000..f64b0b3 --- /dev/null +++ b/example/src/components/icons/Templates.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' +function Templates({ size }: { size: number }) { + return ( + + + + ) +} + +export default Templates diff --git a/example/src/components/icons/Text.tsx b/example/src/components/icons/Text.tsx new file mode 100644 index 0000000..9c086f9 --- /dev/null +++ b/example/src/components/icons/Text.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Text({ size }: { size: number }) { + return ( + + + + ) +} +export default Text diff --git a/example/src/components/icons/Uploads.tsx b/example/src/components/icons/Uploads.tsx new file mode 100644 index 0000000..04711a3 --- /dev/null +++ b/example/src/components/icons/Uploads.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Uploads({ size }: { size: number }) { + return ( + + + + ) +} + +export default Uploads diff --git a/example/src/components/icons/index.ts b/example/src/components/icons/index.ts new file mode 100644 index 0000000..75ca6e1 --- /dev/null +++ b/example/src/components/icons/index.ts @@ -0,0 +1,18 @@ +import Background from './Background' +import Elements from './Elements' +import Text from './Text' +import Templates from './Templates' +import Search from './Search' +import Images from './Images' +import Illustrations from './Illustrations' +class Icons { + static Background = Background + static Elements = Elements + static Text = Text + static Templates = Templates + static Search = Search + static Images = Images + static Illustrations = Illustrations +} + +export default Icons diff --git a/example/src/constants/app-options.ts b/example/src/constants/app-options.ts new file mode 100644 index 0000000..aaf7ca8 --- /dev/null +++ b/example/src/constants/app-options.ts @@ -0,0 +1,31 @@ +export const panelListItems = [ + { + id: 'templates', + name: 'Templates', + }, + { + id: 'elements', + name: 'Elements', + }, + { + id: 'image', + name: 'Images', + }, + { + id: 'text', + name: 'Text', + }, + { + id: 'illustrations', + name: 'Illustrations', + }, + { + id: 'background', + name: 'Background', + }, +] + +export enum PanelType { + TEMPLATES = 'Templates', + BACKGROUND = 'Background', +} diff --git a/example/src/constants/contants.ts b/example/src/constants/contants.ts new file mode 100644 index 0000000..48c9cac --- /dev/null +++ b/example/src/constants/contants.ts @@ -0,0 +1 @@ +export const propertiesToInclude = ['id', 'selectable'] diff --git a/example/src/constants/editor.ts b/example/src/constants/editor.ts new file mode 100644 index 0000000..25b61b0 --- /dev/null +++ b/example/src/constants/editor.ts @@ -0,0 +1,9 @@ +export const SecondLevelMenus = ['FontFamily'] +export const FirstLevelMenus = ['Background'] + +export enum SubMenuType { + FONT_FAMILY = 'FontFamily', + BACKGROUND = 'Background', + COLOR = 'Color', + ANIMATIONS = 'Animations' +} diff --git a/example/src/constants/fonts.ts b/example/src/constants/fonts.ts new file mode 100644 index 0000000..54f15e0 --- /dev/null +++ b/example/src/constants/fonts.ts @@ -0,0 +1,887 @@ +import { IFontFamily } from '../common/interfaces' + +export const editorFonts = ([ + { + family: 'ABeeZee', + variants: ['regular', 'italic'], + subsets: ['latin'], + version: 'v14', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/abeezee/v14/esDR31xSG-6AGleN6tKukbcHCpE.ttf', + italic: 'http://fonts.gstatic.com/s/abeezee/v14/esDT31xSG-6AGleN2tCklZUCGpG-GQ.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'XlkY15br4YAcR5t4XkOLbqMa' + }, + { + family: 'Abel', + variants: ['regular'], + subsets: ['latin'], + version: 'v12', + lastModified: '2020-09-10', + files: { + regular: 'http://fonts.gstatic.com/s/abel/v12/MwQ5bhbm2POE6VhLPJp6qGI.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: '8scXWwSI9TCSHsrYS10BnvVd' + }, + { + family: 'Abhaya Libre', + variants: ['regular', '500', '600', '700', '800'], + subsets: ['latin', 'latin-ext', 'sinhala'], + version: 'v6', + lastModified: '2020-09-02', + files: { + '500': 'http://fonts.gstatic.com/s/abhayalibre/v6/e3t5euGtX-Co5MNzeAOqinEYj2ryqtxI6oYtBA.ttf', + '600': 'http://fonts.gstatic.com/s/abhayalibre/v6/e3t5euGtX-Co5MNzeAOqinEYo23yqtxI6oYtBA.ttf', + '700': 'http://fonts.gstatic.com/s/abhayalibre/v6/e3t5euGtX-Co5MNzeAOqinEYx2zyqtxI6oYtBA.ttf', + '800': 'http://fonts.gstatic.com/s/abhayalibre/v6/e3t5euGtX-Co5MNzeAOqinEY22_yqtxI6oYtBA.ttf', + regular: 'http://fonts.gstatic.com/s/abhayalibre/v6/e3tmeuGtX-Co5MNzeAOqinEge0PWovdU4w.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: '4yllXEs7lVlXuC5EDWcpSO7V' + }, + { + family: 'Abril Fatface', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v12', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/abrilfatface/v12/zOL64pLDlL1D99S8g8PtiKchm-BsjOLhZBY.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'LAVPVVaQbPAS5XjpQDbXYWR6' + }, + { + family: 'Aclonica', + variants: ['regular'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/aclonica/v11/K2FyfZJVlfNNSEBXGb7TCI6oBjLz.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'AxM9S32XRblijwyz1DtpnjhY' + }, + { + family: 'Acme', + variants: ['regular'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-10-22', + files: { + regular: 'http://fonts.gstatic.com/s/acme/v11/RrQfboBx-C5_bx3Lb23lzLk.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'QgIstLeC4d8s_PF5Xd8dkqTM' + }, + { + family: 'Actor', + variants: ['regular'], + subsets: ['latin'], + version: 'v10', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/actor/v10/wEOzEBbCkc5cO3ekXygtUMIO.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'xIYnUtn9yQ3DOtF7QLhqnzmN' + }, + { + family: 'Adamina', + variants: ['regular'], + subsets: ['latin'], + version: 'v14', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/adamina/v14/j8_r6-DH1bjoc-dwu-reETl4Bno.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: '_Mnig6JlzNfT2gEJ4Y9LP89Q' + }, + { + family: 'Advent Pro', + variants: ['100', '200', '300', 'regular', '500', '600', '700'], + subsets: ['greek', 'latin', 'latin-ext'], + version: 'v11', + lastModified: '2020-09-02', + files: { + '100': 'http://fonts.gstatic.com/s/adventpro/v11/V8mCoQfxVT4Dvddr_yOwjVmtLZxcBtItFw.ttf', + '200': 'http://fonts.gstatic.com/s/adventpro/v11/V8mDoQfxVT4Dvddr_yOwjfWMDbZyCts0DqQ.ttf', + '300': 'http://fonts.gstatic.com/s/adventpro/v11/V8mDoQfxVT4Dvddr_yOwjZGPDbZyCts0DqQ.ttf', + '500': 'http://fonts.gstatic.com/s/adventpro/v11/V8mDoQfxVT4Dvddr_yOwjcmODbZyCts0DqQ.ttf', + '600': 'http://fonts.gstatic.com/s/adventpro/v11/V8mDoQfxVT4Dvddr_yOwjeWJDbZyCts0DqQ.ttf', + '700': 'http://fonts.gstatic.com/s/adventpro/v11/V8mDoQfxVT4Dvddr_yOwjYGIDbZyCts0DqQ.ttf', + regular: 'http://fonts.gstatic.com/s/adventpro/v11/V8mAoQfxVT4Dvddr_yOwtT2nKb5ZFtI.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'OEjH4UArZ0tMpUlGPctLvYuT' + }, + { + family: 'Aguafina Script', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v9', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/aguafinascript/v9/If2QXTv_ZzSxGIO30LemWEOmt1bHqs4pgicOrg.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: 'efJfnAlLK1Z2PnhrQKOhG2n7' + }, + { + family: 'Akaya Kanadaka', + variants: ['regular'], + subsets: ['kannada', 'latin', 'latin-ext'], + version: 'v4', + lastModified: '2021-03-24', + files: { + regular: 'http://fonts.gstatic.com/s/akayakanadaka/v4/N0bM2S5CPO5oOQqvazoRRb-8-PfRS5VBBSSF.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'OB3Qf9cBFhsWPhYJTz5_Y_G5' + }, + { + family: 'Akaya Telivigala', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'telugu'], + version: 'v13', + lastModified: '2021-07-01', + files: { + regular: 'http://fonts.gstatic.com/s/akayatelivigala/v13/lJwc-oo_iG9wXqU3rCTD395tp0uifdLdsIH0YH8.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'SbH_scxtOIXhEDvsFKHG_n6g' + }, + { + family: 'Akronim', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v12', + lastModified: '2021-03-19', + files: { + regular: 'http://fonts.gstatic.com/s/akronim/v12/fdN-9sqWtWZZlHRp-gBxkFYN-a8.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'q7Yzt5p1GYumb79TSnwN2BIT' + }, + { + family: 'Aladin', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v9', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/aladin/v9/ZgNSjPJFPrvJV5f16Sf4pGT2Ng.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: '0GeK50POPDZgOiIQO4KBSVqQ' + }, + { + family: 'Alata', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v2', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/alata/v2/PbytFmztEwbIofe6xKcRQEOX.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'AqaSuLdqsHNu0gP1GP_oeQa9' + }, + { + family: 'Alatsi', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v2', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/alatsi/v2/TK3iWkUJAxQ2nLNGHjUHte5fKg.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'XHZ8LjaOCuCwR5NGjNWGZYxj' + }, + { + family: 'Aldrich', + variants: ['regular'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/aldrich/v11/MCoTzAn-1s3IGyJMZaAS3pP5H_E.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'UQsCEpD9MbWatsslBDDELfIH' + }, + { + family: 'Alef', + variants: ['regular', '700'], + subsets: ['hebrew', 'latin'], + version: 'v12', + lastModified: '2020-09-02', + files: { + '700': 'http://fonts.gstatic.com/s/alef/v12/FeVQS0NQpLYglo50L5la2bxii28.ttf', + regular: 'http://fonts.gstatic.com/s/alef/v12/FeVfS0NQpLYgrjJbC5FxxbU.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'Bp9jSqLHoWQI0kXY6o5UhfyD' + }, + { + family: 'Alegreya', + variants: [ + 'regular', + '500', + '600', + '700', + '800', + '900', + 'italic', + '500italic', + '600italic', + '700italic', + '800italic', + '900italic' + ], + subsets: ['cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v19', + lastModified: '2021-02-12', + files: { + '500': 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNGxBUI_KCisSGVrw.ttf', + '600': 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNGKBII_KCisSGVrw.ttf', + '700': 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNGERII_KCisSGVrw.ttf', + '800': 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNGdhII_KCisSGVrw.ttf', + '900': 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNGXxII_KCisSGVrw.ttf', + regular: 'http://fonts.gstatic.com/s/alegreya/v19/4UacrEBBsBhlBjvfkQjt71kZfyBzPgNG9hUI_KCisSGVrw.ttf', + italic: 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlbgv6qmkySFr9V9.ttf', + '500italic': + 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlbSv6qmkySFr9V9.ttf', + '600italic': + 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlY-uKqmkySFr9V9.ttf', + '700italic': + 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlYHuKqmkySFr9V9.ttf', + '800italic': + 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlZguKqmkySFr9V9.ttf', + '900italic': + 'http://fonts.gstatic.com/s/alegreya/v19/4UaSrEBBsBhlBjvfkSLk3abBFkvpkARTPlZJuKqmkySFr9V9.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'MgEE7nBReRp_ASHRjd0tH8yy' + }, + { + family: 'Alegreya SC', + variants: [ + 'regular', + 'italic', + '500', + '500italic', + '700', + '700italic', + '800', + '800italic', + '900', + '900italic' + ], + subsets: ['cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v15', + lastModified: '2021-03-24', + files: { + '500': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiTGmRtCJ62-O0HhNEa-ZZc-rUxQqu2FXKD.ttf', + '700': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiTGmRtCJ62-O0HhNEa-ZYU_LUxQqu2FXKD.ttf', + '800': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiTGmRtCJ62-O0HhNEa-ZYI_7UxQqu2FXKD.ttf', + '900': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiTGmRtCJ62-O0HhNEa-ZYs_rUxQqu2FXKD.ttf', + regular: 'http://fonts.gstatic.com/s/alegreyasc/v15/taiOGmRtCJ62-O0HhNEa-a6o05E5abe_.ttf', + italic: 'http://fonts.gstatic.com/s/alegreyasc/v15/taiMGmRtCJ62-O0HhNEa-Z6q2ZUbbKe_DGs.ttf', + '500italic': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiRGmRtCJ62-O0HhNEa-Z6q4WEySK-UEGKDBz4.ttf', + '700italic': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiRGmRtCJ62-O0HhNEa-Z6q4Sk0SK-UEGKDBz4.ttf', + '800italic': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiRGmRtCJ62-O0HhNEa-Z6q4TU3SK-UEGKDBz4.ttf', + '900italic': 'http://fonts.gstatic.com/s/alegreyasc/v15/taiRGmRtCJ62-O0HhNEa-Z6q4RE2SK-UEGKDBz4.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'TqvUhSZ_J59Fncjxsf5xmKCG' + }, + { + family: 'Alegreya Sans', + variants: [ + '100', + '100italic', + '300', + '300italic', + 'regular', + 'italic', + '500', + '500italic', + '700', + '700italic', + '800', + '800italic', + '900', + '900italic' + ], + subsets: ['cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v14', + lastModified: '2021-03-24', + files: { + '100': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUt9_-1phKLFgshYDvh6Vwt5TltuGdShm5bsg.ttf', + '300': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUu9_-1phKLFgshYDvh6Vwt5fFPmE18imdCqxI.ttf', + '500': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUu9_-1phKLFgshYDvh6Vwt5alOmE18imdCqxI.ttf', + '700': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUu9_-1phKLFgshYDvh6Vwt5eFImE18imdCqxI.ttf', + '800': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUu9_-1phKLFgshYDvh6Vwt5f1LmE18imdCqxI.ttf', + '900': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUu9_-1phKLFgshYDvh6Vwt5dlKmE18imdCqxI.ttf', + '100italic': 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUv9_-1phKLFgshYDvh6Vwt7V9V3G1WpGtLsgu7.ttf', + '300italic': + 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUo9_-1phKLFgshYDvh6Vwt7V9VFE92jkVHuxKiBA.ttf', + regular: 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUz9_-1phKLFgshYDvh6Vwt3V1nvEVXlm4.ttf', + italic: 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUt9_-1phKLFgshYDvh6Vwt7V9tuGdShm5bsg.ttf', + '500italic': + 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUo9_-1phKLFgshYDvh6Vwt7V9VTE52jkVHuxKiBA.ttf', + '700italic': + 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUo9_-1phKLFgshYDvh6Vwt7V9VBEh2jkVHuxKiBA.ttf', + '800italic': + 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUo9_-1phKLFgshYDvh6Vwt7V9VGEt2jkVHuxKiBA.ttf', + '900italic': + 'http://fonts.gstatic.com/s/alegreyasans/v14/5aUo9_-1phKLFgshYDvh6Vwt7V9VPEp2jkVHuxKiBA.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'n5JBM4UQdzAxK3rFrqZfyYlD' + }, + { + family: 'Alegreya Sans SC', + variants: [ + '100', + '100italic', + '300', + '300italic', + 'regular', + 'italic', + '500', + '500italic', + '700', + '700italic', + '800', + '800italic', + '900', + '900italic' + ], + subsets: ['cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v13', + lastModified: '2021-03-24', + files: { + '100': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGn4-RGJqfMvt7P8FUr0Q1j-Hf1Dipl8g5FPYtmMg.ttf', + '300': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DuJH0iRrMYJ_K-4.ttf', + '500': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DrpG0iRrMYJ_K-4.ttf', + '700': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DvJA0iRrMYJ_K-4.ttf', + '800': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1Du5D0iRrMYJ_K-4.ttf', + '900': 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DspC0iRrMYJ_K-4.ttf', + '100italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGl4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdlgRBH452Mvds.ttf', + '300italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdXiZhNaB6O-51OA.ttf', + regular: 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGh4-RGJqfMvt7P8FUr0Q1j-Hf1Nk5v9ixALYs.ttf', + italic: 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGn4-RGJqfMvt7P8FUr0Q1j-Hf1Bkxl8g5FPYtmMg.ttf', + '500italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdBidhNaB6O-51OA.ttf', + '700italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdTiFhNaB6O-51OA.ttf', + '800italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdUiJhNaB6O-51OA.ttf', + '900italic': + 'http://fonts.gstatic.com/s/alegreyasanssc/v13/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxddiNhNaB6O-51OA.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: '3C3qEHvn7LuHz2ExN20P1Xz9' + }, + { + family: 'Aleo', + variants: ['300', '300italic', 'regular', 'italic', '700', '700italic'], + subsets: ['latin', 'latin-ext'], + version: 'v4', + lastModified: '2020-09-02', + files: { + '300': 'http://fonts.gstatic.com/s/aleo/v4/c4mg1nF8G8_syKbr9DVDno985KM.ttf', + '700': 'http://fonts.gstatic.com/s/aleo/v4/c4mg1nF8G8_syLbs9DVDno985KM.ttf', + '300italic': 'http://fonts.gstatic.com/s/aleo/v4/c4mi1nF8G8_swAjxeDdJmq159KOnWA.ttf', + regular: 'http://fonts.gstatic.com/s/aleo/v4/c4mv1nF8G8_s8ArD0D1ogoY.ttf', + italic: 'http://fonts.gstatic.com/s/aleo/v4/c4mh1nF8G8_swAjJ1B9tkoZl_Q.ttf', + '700italic': 'http://fonts.gstatic.com/s/aleo/v4/c4mi1nF8G8_swAjxaDBJmq159KOnWA.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'gW7TNTmQ90r8cslT6aaP9KhD' + }, + { + family: 'Alex Brush', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v13', + lastModified: '2021-07-01', + files: { + regular: 'http://fonts.gstatic.com/s/alexbrush/v13/SZc83FzrJKuqFbwMKk6EtUL57DtOmCc.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: 'xDQf1x4zU1yQBLcPXAQjME6p' + }, + { + family: 'Alfa Slab One', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v10', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/alfaslabone/v10/6NUQ8FmMKwSEKjnm5-4v-4Jh6dVretWvYmE.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: '19uFlX_LbzMmnG0AR5_zPuuT' + }, + { + family: 'Alice', + variants: ['regular'], + subsets: ['cyrillic', 'cyrillic-ext', 'latin'], + version: 'v12', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/alice/v12/OpNCnoEEmtHa6FcJpA_chzJ0.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'cJUIp3B1EZEAFeCsX3xuxFri' + }, + { + family: 'Alike', + variants: ['regular'], + subsets: ['latin'], + version: 'v13', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/alike/v13/HI_EiYEYI6BIoEjBSZXAQ4-d.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'ylFapnyHVAUY3530lapwftwW' + }, + { + family: 'Alike Angular', + variants: ['regular'], + subsets: ['latin'], + version: 'v13', + lastModified: '2021-03-19', + files: { + regular: 'http://fonts.gstatic.com/s/alikeangular/v13/3qTrojWunjGQtEBlIcwMbSoI3kM6bB7FKjE.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'JJKojhgOrIxttW0CR9Vn4Peh' + }, + { + family: 'Allan', + variants: ['regular', '700'], + subsets: ['latin', 'latin-ext'], + version: 'v13', + lastModified: '2020-09-02', + files: { + '700': 'http://fonts.gstatic.com/s/allan/v13/ea8aadU7WuTxEu5KEPCN2WpNgEKU.ttf', + regular: 'http://fonts.gstatic.com/s/allan/v13/ea8XadU7WuTxEtb2P9SF8nZE.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'vYb0wSKygKOZceYs5iF8gjIA' + }, + { + family: 'Allerta', + variants: ['regular'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/allerta/v11/TwMO-IAHRlkbx940UnEdSQqO5uY.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'K0gsYg7XcVJthiicYMcdkH_A' + }, + { + family: 'Allerta Stencil', + variants: ['regular'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-09-02', + files: { + regular: 'http://fonts.gstatic.com/s/allertastencil/v11/HTx0L209KT-LmIE9N7OR6eiycOeF-zz313DuvQ.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'MHke7JsMQ4JUbr8ZIl6xtO9T' + }, + { + family: 'Allison', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v1', + lastModified: '2021-08-18', + files: { + regular: 'http://fonts.gstatic.com/s/allison/v1/X7nl4b88AP2nkbvZOCaQ4MTgAgk.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: 'KyNYqe6TTTPfBykKWozHNmVF' + }, + { + family: 'Allura', + variants: ['regular'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v15', + lastModified: '2021-11-04', + files: { + regular: 'http://fonts.gstatic.com/s/allura/v15/9oRPNYsQpS4zjuAPjAIXPtrrGA.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: 'xpkYqszH89nZ48FFsdBv8s0b' + }, + { + family: 'Almarai', + variants: ['300', 'regular', '700', '800'], + subsets: ['arabic'], + version: 'v5', + lastModified: '2021-03-24', + files: { + '300': 'http://fonts.gstatic.com/s/almarai/v5/tssoApxBaigK_hnnS_anhnicoq72sXg.ttf', + '700': 'http://fonts.gstatic.com/s/almarai/v5/tssoApxBaigK_hnnS-aghnicoq72sXg.ttf', + '800': 'http://fonts.gstatic.com/s/almarai/v5/tssoApxBaigK_hnnS_qjhnicoq72sXg.ttf', + regular: 'http://fonts.gstatic.com/s/almarai/v5/tsstApxBaigK_hnnc1qPonC3vqc.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'MGDB89vntp85yHZi0zqfPUwx' + }, + { + family: 'Almendra', + variants: ['regular', 'italic', '700', '700italic'], + subsets: ['latin', 'latin-ext'], + version: 'v15', + lastModified: '2021-03-19', + files: { + '700': 'http://fonts.gstatic.com/s/almendra/v15/H4cjBXKAlMnTn0Cskx6G7Zu4qKK-aihq.ttf', + regular: 'http://fonts.gstatic.com/s/almendra/v15/H4ckBXKAlMnTn0CskyY6wr-wg763.ttf', + italic: 'http://fonts.gstatic.com/s/almendra/v15/H4ciBXKAlMnTn0CskxY4yLuShq63czE.ttf', + '700italic': 'http://fonts.gstatic.com/s/almendra/v15/H4chBXKAlMnTn0CskxY48Ae9oqacbzhqDtg.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'Bm6p10ZUl9oI_G9pEj9eMv5P' + }, + { + family: 'Almendra Display', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v13', + lastModified: '2021-03-19', + files: { + regular: 'http://fonts.gstatic.com/s/almendradisplay/v13/0FlPVOGWl1Sb4O3tETtADHRRlZhzXS_eTyer338.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'lIcnBcEBw6zuy54eQfQwVPhi' + }, + { + family: 'Almendra SC', + variants: ['regular'], + subsets: ['latin'], + version: 'v13', + lastModified: '2021-03-19', + files: { + regular: 'http://fonts.gstatic.com/s/almendrasc/v13/Iure6Yx284eebowr7hbyTZZJprVA4XQ0.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'c0UV9cgkABPRAoKaNRM3W_QL' + }, + { + family: 'Alumni Sans', + variants: [ + '100', + '200', + '300', + 'regular', + '500', + '600', + '700', + '800', + '900', + '100italic', + '200italic', + '300italic', + 'italic', + '500italic', + '600italic', + '700italic', + '800italic', + '900italic' + ], + subsets: ['cyrillic', 'cyrillic-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v1', + lastModified: '2021-08-18', + files: { + '100': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9OO5QqFsJ3C8qng.ttf', + '200': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9uO9QqFsJ3C8qng.ttf', + '300': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9Zu9QqFsJ3C8qng.ttf', + '500': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9Cu9QqFsJ3C8qng.ttf', + '600': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd95uhQqFsJ3C8qng.ttf', + '700': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd93-hQqFsJ3C8qng.ttf', + '800': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9uOhQqFsJ3C8qng.ttf', + '900': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9kehQqFsJ3C8qng.ttf', + regular: + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpHtKqkOwdO2aOIwhWudEWpx_zq_Xna-Xd9OO9QqFsJ3C8qng.ttf', + '100italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Ky46lEN_io6npfB.ttf', + '200italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Kw461EN_io6npfB.ttf', + '300italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Kzm61EN_io6npfB.ttf', + italic: + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Ky461EN_io6npfB.ttf', + '500italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8KyK61EN_io6npfB.ttf', + '600italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Kxm7FEN_io6npfB.ttf', + '700italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Kxf7FEN_io6npfB.ttf', + '800italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8Kw47FEN_io6npfB.ttf', + '900italic': + 'http://fonts.gstatic.com/s/alumnisans/v1/nwpBtKqkOwdO2aOIwhWudG-g9QMylBJAV3Bo8KwR7FEN_io6npfB.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'yshzhsGTjx_oSjODYpf9AkwY' + }, + { + family: 'Amarante', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v10', + lastModified: '2021-03-19', + files: { + regular: 'http://fonts.gstatic.com/s/amarante/v10/xMQXuF1KTa6EvGx9bq-3C3rAmD-b.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'sriH_XoNVnQoFQXIHKTKhfn_' + }, + { + family: 'Amaranth', + variants: ['regular', 'italic', '700', '700italic'], + subsets: ['latin'], + version: 'v11', + lastModified: '2020-09-02', + files: { + '700': 'http://fonts.gstatic.com/s/amaranth/v11/KtkpALODe433f0j1zMF-OPWi6WDfFpuc.ttf', + regular: 'http://fonts.gstatic.com/s/amaranth/v11/KtkuALODe433f0j1zPnCF9GqwnzW.ttf', + italic: 'http://fonts.gstatic.com/s/amaranth/v11/KtkoALODe433f0j1zMnAHdWIx2zWD4I.ttf', + '700italic': 'http://fonts.gstatic.com/s/amaranth/v11/KtkrALODe433f0j1zMnAJWmn42T9E4ucRY8.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'ATIEhaVInF5ahKbOn7hh_NHr' + }, + { + family: 'Amatic SC', + variants: ['regular', '700'], + subsets: ['cyrillic', 'hebrew', 'latin', 'latin-ext', 'vietnamese'], + version: 'v16', + lastModified: '2021-03-24', + files: { + '700': 'http://fonts.gstatic.com/s/amaticsc/v16/TUZ3zwprpvBS1izr_vOMscG6eb8D3WTy-A.ttf', + regular: 'http://fonts.gstatic.com/s/amaticsc/v16/TUZyzwprpvBS1izr_vO0De6ecZQf1A.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: '9ABwLd4UBbQLkT4Hmiu7L5ga' + }, + { + family: 'Amethysta', + variants: ['regular'], + subsets: ['latin'], + version: 'v9', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/amethysta/v9/rP2Fp2K15kgb_F3ibfWIGDWCBl0O8Q.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'EhOjI9NSHbUAT9B67DTTclR_' + }, + { + family: 'Amiko', + variants: ['regular', '600', '700'], + subsets: ['devanagari', 'latin', 'latin-ext'], + version: 'v5', + lastModified: '2020-07-23', + files: { + '600': 'http://fonts.gstatic.com/s/amiko/v5/WwkdxPq1DFK04uJ9XXrEGoQAUco5.ttf', + '700': 'http://fonts.gstatic.com/s/amiko/v5/WwkdxPq1DFK04uIZXHrEGoQAUco5.ttf', + regular: 'http://fonts.gstatic.com/s/amiko/v5/WwkQxPq1DFK04tqlc17MMZgJ.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'KQ_f9GlfOU7IRGBfDaLT0LfM' + }, + { + family: 'Amiri', + variants: ['regular', 'italic', '700', '700italic'], + subsets: ['arabic', 'latin', 'latin-ext'], + version: 'v17', + lastModified: '2021-03-24', + files: { + '700': 'http://fonts.gstatic.com/s/amiri/v17/J7acnpd8CGxBHp2VkZY4xJ9CGyAa.ttf', + regular: 'http://fonts.gstatic.com/s/amiri/v17/J7aRnpd8CGxBHqUpvrIw74NL.ttf', + italic: 'http://fonts.gstatic.com/s/amiri/v17/J7afnpd8CGxBHpUrtLYS6pNLAjk.ttf', + '700italic': 'http://fonts.gstatic.com/s/amiri/v17/J7aanpd8CGxBHpUrjAo9zptgHjAavCA.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: 'ozZcWXJsujk20wcgM5zZ4TwA' + }, + { + family: 'Amita', + variants: ['regular', '700'], + subsets: ['devanagari', 'latin', 'latin-ext'], + version: 'v9', + lastModified: '2021-03-24', + files: { + '700': 'http://fonts.gstatic.com/s/amita/v9/HhyXU5si9Om7PTHTLtCCOopCTKkI.ttf', + regular: 'http://fonts.gstatic.com/s/amita/v9/HhyaU5si9Om7PQlvAfSKEZZL.ttf' + }, + category: 'handwriting', + kind: 'webfonts#webfont', + id: 'a39EypF2FgsnZuP3X4CMZ_8l' + }, + { + family: 'Anaheim', + variants: ['regular'], + subsets: ['latin', 'latin-ext'], + version: 'v8', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/anaheim/v8/8vII7w042Wp87g4G0UTUEE5eK_w.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'Q3kn0VGzzZ3uI6Wp8logpApr' + }, + { + family: 'Andada Pro', + variants: [ + 'regular', + '500', + '600', + '700', + '800', + 'italic', + '500italic', + '600italic', + '700italic', + '800italic' + ], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v2', + lastModified: '2021-09-16', + files: { + '500': 'http://fonts.gstatic.com/s/andadapro/v2/HhyEU5Qi9-SuOEhPe4LtKoVCuWGURPcg3DP7BY8cFLzvIt2S.ttf', + '600': 'http://fonts.gstatic.com/s/andadapro/v2/HhyEU5Qi9-SuOEhPe4LtKoVCuWGURPcg3DMXAo8cFLzvIt2S.ttf', + '700': 'http://fonts.gstatic.com/s/andadapro/v2/HhyEU5Qi9-SuOEhPe4LtKoVCuWGURPcg3DMuAo8cFLzvIt2S.ttf', + '800': 'http://fonts.gstatic.com/s/andadapro/v2/HhyEU5Qi9-SuOEhPe4LtKoVCuWGURPcg3DNJAo8cFLzvIt2S.ttf', + regular: 'http://fonts.gstatic.com/s/andadapro/v2/HhyEU5Qi9-SuOEhPe4LtKoVCuWGURPcg3DPJBY8cFLzvIt2S.ttf', + italic: + 'http://fonts.gstatic.com/s/andadapro/v2/HhyGU5Qi9-SuOEhPe4LtAIxwRrn9L22O2yYBRmdfHrjNJ82Stjw.ttf', + '500italic': + 'http://fonts.gstatic.com/s/andadapro/v2/HhyGU5Qi9-SuOEhPe4LtAIxwRrn9L22O2yYBRlVfHrjNJ82Stjw.ttf', + '600italic': + 'http://fonts.gstatic.com/s/andadapro/v2/HhyGU5Qi9-SuOEhPe4LtAIxwRrn9L22O2yYBRrlYHrjNJ82Stjw.ttf', + '700italic': + 'http://fonts.gstatic.com/s/andadapro/v2/HhyGU5Qi9-SuOEhPe4LtAIxwRrn9L22O2yYBRoBYHrjNJ82Stjw.ttf', + '800italic': + 'http://fonts.gstatic.com/s/andadapro/v2/HhyGU5Qi9-SuOEhPe4LtAIxwRrn9L22O2yYBRudYHrjNJ82Stjw.ttf' + }, + category: 'serif', + kind: 'webfonts#webfont', + id: '9XbFDIS3bIqFA7LLupXgLMfL' + }, + { + family: 'Andika', + variants: ['regular'], + subsets: ['cyrillic', 'cyrillic-ext', 'latin', 'latin-ext', 'vietnamese'], + version: 'v12', + lastModified: '2020-07-23', + files: { + regular: 'http://fonts.gstatic.com/s/andika/v12/mem_Ya6iyW-LwqgAbbwRWrwGVA.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'H0klrPPeX_1Y4XzczCqKuC1x' + }, + { + family: 'Andika New Basic', + variants: ['regular', 'italic', '700', '700italic'], + subsets: ['latin', 'latin-ext', 'vietnamese'], + version: 'v5', + lastModified: '2021-03-24', + files: { + '700': 'http://fonts.gstatic.com/s/andikanewbasic/v5/taiWGn9tCp-44eleq5Q-mszJivxScBO7NGqoGzdME84.ttf', + regular: 'http://fonts.gstatic.com/s/andikanewbasic/v5/taiRGn9tCp-44eleq5Q-mszJivxSSK-UEGKDBz4.ttf', + italic: 'http://fonts.gstatic.com/s/andikanewbasic/v5/taiXGn9tCp-44eleq5Q-mszJivxSeK2eFECGFz5VCg.ttf', + '700italic': + 'http://fonts.gstatic.com/s/andikanewbasic/v5/taiUGn9tCp-44eleq5Q-mszJivxSeK2mqG-iHxVJA85Okw.ttf' + }, + category: 'sans-serif', + kind: 'webfonts#webfont', + id: 'WvO5mApFjJUjV9XCVE4RZE_X' + }, + { + family: 'Angkor', + variants: ['regular'], + subsets: ['khmer', 'latin'], + version: 'v19', + lastModified: '2021-09-16', + files: { + regular: 'http://fonts.gstatic.com/s/angkor/v19/H4cmBXyAlsPdnlb-8iw-4Lqggw.ttf' + }, + category: 'display', + kind: 'webfonts#webfont', + id: 'GwrZ3dBMobS7qbYQq9hGK1Ud' + } +] as unknown) as IFontFamily[] diff --git a/example/src/constants/format-sizes.ts b/example/src/constants/format-sizes.ts new file mode 100644 index 0000000..a9c433c --- /dev/null +++ b/example/src/constants/format-sizes.ts @@ -0,0 +1,121 @@ +const formatSizes = [ + { + id: 1, + name: 'Facebook Image', + description: '1200 x 1200', + size: { + width: 1200, + height: 1200, + }, + }, + { + id: 2, + name: 'Facebook Link', + description: '1200 x 627', + size: { + width: 1200, + height: 627, + }, + }, + { + id: 3, + name: 'Facebook Cover', + description: '820 x 312', + size: { + width: 820, + height: 312, + }, + }, + { + id: 4, + name: 'Facebook Mobile Cover', + description: '640 x 360', + size: { + width: 640, + height: 360, + }, + }, + { + id: 5, + name: 'Facebook Story', + description: '1080 x 1920', + size: { + width: 1080, + height: 1920, + }, + }, + { + id: 6, + name: 'Instagram Story', + description: '1080 x 1920', + size: { + width: 1080, + height: 1920, + }, + }, + { + id: 7, + name: 'Instagram Post', + description: '1080 x 1080', + size: { + width: 1080, + height: 1080, + }, + }, + { + id: 8, + name: 'Twitter Post', + description: '1024 x 521', + size: { + width: 1024, + height: 512, + }, + }, + { + id: 9, + name: 'Twitter Banner', + description: '1500 x 500', + size: { + width: 1500, + height: 500, + }, + }, + { + id: 10, + name: 'Pinterest Post', + description: '736 x 1128', + size: { + width: 736, + height: 1128, + }, + }, + { + id: 11, + name: 'Email Header', + description: '600 x 300', + size: { + width: 600, + height: 300, + }, + }, + { + id: 12, + name: 'Presentation', + description: '1024 x 768', + size: { + width: 1024, + height: 768, + }, + }, + { + id: 13, + name: 'Coupon', + description: '1800 x 750', + size: { + width: 1800, + height: 750, + }, + }, +] + +export default formatSizes diff --git a/example/src/contexts/AppContext.tsx b/example/src/contexts/AppContext.tsx new file mode 100644 index 0000000..3e0f355 --- /dev/null +++ b/example/src/contexts/AppContext.tsx @@ -0,0 +1,52 @@ +import * as React from 'react' +import { PanelType } from '../constants/app-options' +import { SubMenuType } from '../constants/editor' +import { createContext, useState, FC } from 'react' + +type Template = any +interface IAppContext { + isMobile: boolean | undefined + setIsMobile: React.Dispatch> + templates: Template[] + setTemplates: (templates: Template[]) => void + shapes: any[] + setShapes: (templates: any[]) => void + activePanel: PanelType + setActivePanel: (option: PanelType) => void + activeSubMenu: SubMenuType | null + setActiveSubMenu: (option: SubMenuType) => void +} + +export const AppContext = createContext({ + isMobile: false, + setIsMobile: () => {}, + templates: [], + setTemplates: () => {}, + shapes: [], + setShapes: () => {}, + activePanel: PanelType.TEMPLATES, + setActivePanel: () => {}, + activeSubMenu: null, + setActiveSubMenu: (value: SubMenuType) => {} +}) + +export const AppProvider: FC = ({ children }) => { + const [isMobile, setIsMobile] = useState(undefined) + const [templates, setTemplates] = useState([]) + const [shapes, setShapes] = useState([]) + const [activePanel, setActivePanel] = useState(PanelType.TEMPLATES) + const [activeSubMenu, setActiveSubMenu] = useState(null) + const context = { + isMobile, + setIsMobile, + templates, + setTemplates, + activePanel, + setActivePanel, + shapes, + setShapes, + activeSubMenu, + setActiveSubMenu + } + return {children} +} diff --git a/example/src/hooks/useAppContext.tsx b/example/src/hooks/useAppContext.tsx new file mode 100644 index 0000000..52cbb5d --- /dev/null +++ b/example/src/hooks/useAppContext.tsx @@ -0,0 +1,31 @@ +import { AppContext } from '../contexts/AppContext' +import { useContext } from 'react' + +function useAppContext() { + const { + isMobile, + setIsMobile, + activePanel, + setActivePanel, + templates, + setTemplates, + shapes, + setShapes, + activeSubMenu, + setActiveSubMenu, + } = useContext(AppContext) + return { + isMobile, + setIsMobile, + activePanel, + setActivePanel, + templates, + setTemplates, + shapes, + setShapes, + activeSubMenu, + setActiveSubMenu, + } +} + +export default useAppContext diff --git a/example/src/index.html b/example/src/index.html new file mode 100644 index 0000000..f948b1f --- /dev/null +++ b/example/src/index.html @@ -0,0 +1,21 @@ + + + + + + + Playground + + + + + + + +
+ + + diff --git a/example/src/index.tsx b/example/src/index.tsx new file mode 100644 index 0000000..a3d085b --- /dev/null +++ b/example/src/index.tsx @@ -0,0 +1,15 @@ +import 'react-app-polyfill/ie11' +import * as React from 'react' +import * as ReactDOM from 'react-dom' +import Providers from './Providers' +import Editor from './scenes/Editor' +import Container from './Container' + +ReactDOM.render( + + + + + , + document.getElementById('root') +) diff --git a/example/src/scenes/Editor/Editor.tsx b/example/src/scenes/Editor/Editor.tsx new file mode 100644 index 0000000..9f7e3eb --- /dev/null +++ b/example/src/scenes/Editor/Editor.tsx @@ -0,0 +1,50 @@ +import * as React from 'react' +import useAppContext from '../../hooks/useAppContext' +import api from '../../services/api' +import { useEffect } from 'react' +import Navbar from './components/Navbar' +import Panels from './components/Panels' +import Toolbox from './components/Toolbox' +import Footer from './components/Footer' +import Editor from '../../../../src' + +function App() { + const { setTemplates, setShapes } = useAppContext() + + useEffect(() => { + api.getTemplates().then(templates => setTemplates(templates)) + api.getShapes().then(shapes => setShapes(shapes)) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + const editorConfig = { + clipToFrame: true, + scrollLimit: 0 + } + return ( +
+ +
+ +
+ +
+ +
+
+
+
+
+ ) +} + +export default App diff --git a/example/src/scenes/Editor/components/Footer/Footer.tsx b/example/src/scenes/Editor/components/Footer/Footer.tsx new file mode 100644 index 0000000..459bbae --- /dev/null +++ b/example/src/scenes/Editor/components/Footer/Footer.tsx @@ -0,0 +1,105 @@ +import * as React from 'react' +import { Button, KIND, SHAPE, SIZE } from 'baseui/button' +import { styled } from 'baseui' +import { Plus, CheckIndeterminate } from 'baseui/icon' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { Scrollbars } from 'react-custom-scrollbars' +import { useEditor, useEditorContext } from '../../../../../../src' + +const Container = styled('div', props => ({ + backgroundColor: '#f6f7f9', + display: 'flex', + position: 'absolute', + bottom: '20px', + right: '20px' +})) + +const zoomValues = [0.27, 0.5, 0.75, 0.92, 1, 1.25, 1.5, 1.75, 2, 3, 4, 5] + +const ZoomItemContainer = styled('div', () => ({ + height: '38px', + display: 'flex', + alignItems: 'center', + fontSize: '0.85rem', + paddingLeft: '1rem', + ':hover': { + backgroundColor: 'rgba(0,0,0,0.075)', + cursor: 'pointer' + } +})) +function Footer() { + const editor = useEditor() + const { zoomRatio } = useEditorContext() + return ( + +
+ + ( +
+ + { + editor.zoomToFit() + close() + }} + > + Fit canvas + + {zoomValues.map(zv => ( + { + editor.zoomToRatio(zv) + close() + }} + key={zv} + > + {Math.round(zv * 100) + '%'} + + ))} + +
+ )} + > + +
+ +
+
+ ) +} + +export default Footer diff --git a/example/src/scenes/Editor/components/Footer/index.ts b/example/src/scenes/Editor/components/Footer/index.ts new file mode 100644 index 0000000..9c7e831 --- /dev/null +++ b/example/src/scenes/Editor/components/Footer/index.ts @@ -0,0 +1,3 @@ +import Footer from './Footer' + +export default Footer diff --git a/example/src/scenes/Editor/components/Navbar/Navbar.tsx b/example/src/scenes/Editor/components/Navbar/Navbar.tsx new file mode 100644 index 0000000..d9ca601 --- /dev/null +++ b/example/src/scenes/Editor/components/Navbar/Navbar.tsx @@ -0,0 +1,121 @@ +import * as React from 'react' +import { styled, ThemeProvider, DarkTheme } from 'baseui' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import Icons from '../icons' +import Logo from '../../components/icons/Logo' +import { useEditor } from '../../../../../../src' +import Resize from './components/Resize' +import { template } from './template' +const Container = styled('div', props => ({ + height: '70px', + background: props.$theme.colors.background, + display: 'flex', + padding: '0 2rem', + justifyContent: 'space-between', + alignItems: 'center' +})) + +const LogoContainer = styled('div', props => ({ + color: props.$theme.colors.primary, + display: 'flex', + alignItems: 'center' +})) + +function NavbarEditor() { + const editor = useEditor() + const downloadImage = async () => { + if (editor) { + // editor.toGif({}) + const data = await editor.toGif({}) + if (data) { + const a = document.createElement('a') + // @ts-ignore + a.href = data + a.download = 'drawing.gif' + a.click() + } + } + } + + const handleLoadTemplate = async () => { + const fonts = [] + template.objects.forEach(object => { + if (object.type === 'StaticText' || object.type === 'DynamicText') { + fonts.push({ + name: object.metadata.fontFamily, + url: object.metadata.fontURL, + options: { style: 'normal', weight: 400 } + }) + } + }) + await loadFonts(fonts) + editor.importFromJSON(template) + } + + const loadFonts = fonts => { + const promisesList = fonts.map(font => { + // @ts-ignore + return new FontFace(font.name, `url(${font.url})`, font.options).load().catch(err => err) + }) + return new Promise((resolve, reject) => { + Promise.all(promisesList) + .then(res => { + res.forEach(uniqueFont => { + // @ts-ignore + if (uniqueFont && uniqueFont.family) { + // @ts-ignore + document.fonts.add(uniqueFont) + resolve(true) + } + }) + }) + .catch(err => reject(err)) + }) + } + + return ( + + +
+ + + + +
+ + +
+
+ +
+ + +
+
+
+ ) +} + +export default NavbarEditor diff --git a/example/src/scenes/Editor/components/Navbar/components/File.tsx b/example/src/scenes/Editor/components/Navbar/components/File.tsx new file mode 100644 index 0000000..eb3a1ea --- /dev/null +++ b/example/src/scenes/Editor/components/Navbar/components/File.tsx @@ -0,0 +1,40 @@ +import * as React from 'react' + +import { Button, KIND } from 'baseui/button' +import { styled, ThemeProvider, LightTheme } from 'baseui' +import { ListItem, ListItemLabel } from 'baseui/list' + +import { StatefulPopover, PLACEMENT } from 'baseui/popover' + +const Container = styled('div', props => ({ + background: props.$theme.colors.background, + color: props.$theme.colors.primary, + width: '240px', + fontFamily: 'Uber Move Text', + padding: '1rem 1rem' +})) +export default function Resize() { + return ( + ( + + + + Facebook cover + + + Facebook add + + + Facebook post + + + + )} + > + + + ) +} diff --git a/example/src/scenes/Editor/components/Navbar/components/Resize.tsx b/example/src/scenes/Editor/components/Navbar/components/Resize.tsx new file mode 100644 index 0000000..ca69650 --- /dev/null +++ b/example/src/scenes/Editor/components/Navbar/components/Resize.tsx @@ -0,0 +1,97 @@ +import * as React from 'react' + +import { Button, KIND } from 'baseui/button' +import { styled, ThemeProvider, LightTheme } from 'baseui' +import { Select, Value } from 'baseui/select' +import { Input } from 'baseui/input' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { useEffect, useState } from 'react' +import formatSizes from '../../../../../constants/format-sizes' +import { useEditor, useEditorContext } from '../../../../../../../src' + +const getLabel = ({ option }: any) => { + return ( +
+
{option.name}
+
{option.description}
+
+ ) +} + +const Container = styled('div', props => ({ + background: props.$theme.colors.background, + color: props.$theme.colors.primary, + width: '320px', + fontFamily: 'Uber Move Text', + padding: '2rem 2rem' +})) + +export default function Resize() { + const editor = useEditor() + const [value, setValue] = useState([]) + const [customSize, setCustomSize] = useState({ width: 0, height: 0 }) + const { frameSize } = useEditorContext() as any + + const updateFormatSize = value => { + setValue(value) + const [frame] = value + + editor.frame.update(frame.size) + } + const applyCustomSize = () => { + if (customSize.width && customSize.height) { + editor.frame.update(customSize) + } + } + useEffect(() => { + if (frameSize) { + setCustomSize(frameSize) + } + }, [frameSize]) + + return ( + ( + + +
+
Size templates
+ setCustomSize({ ...customSize, width: (e.target as any).value })} + startEnhancer="W" + placeholder="width" + /> + setCustomSize({ ...customSize, height: (e.target as any).value })} + startEnhancer="H" + placeholder="width" + /> +
+ + +
+
+ )} + > + +
+ ) +} diff --git a/example/src/scenes/Editor/components/Navbar/index.ts b/example/src/scenes/Editor/components/Navbar/index.ts new file mode 100644 index 0000000..445d24a --- /dev/null +++ b/example/src/scenes/Editor/components/Navbar/index.ts @@ -0,0 +1,2 @@ +import Navbar from './Navbar' +export default Navbar diff --git a/example/src/scenes/Editor/components/Navbar/template.ts b/example/src/scenes/Editor/components/Navbar/template.ts new file mode 100644 index 0000000..50c9801 --- /dev/null +++ b/example/src/scenes/Editor/components/Navbar/template.ts @@ -0,0 +1,74 @@ +export const template = { + name: 'Untitled design', + objects: [ + { + id: 'background', + name: 'Initial Frame', + angle: 0, + stroke: null, + strokeWidth: 0, + left: 0, + top: 0, + width: 1280, + height: 720, + opacity: 1, + originX: 'left', + originY: 'top', + scaleX: 1, + scaleY: 1, + type: 'Background', + flipX: false, + flipY: false, + skewX: 0, + skewY: 0, + visible: true, + metadata: { + fill: '#ffffff' + } + }, + { + angle: 0, + stroke: '#ffffff', + strokeWidth: 0, + left: 240, + top: 314.8, + width: 800, + height: 90.4, + opacity: 1, + originX: 'left', + originY: 'top', + scaleX: 1, + scaleY: 1, + type: 'StaticText', + flipX: false, + flipY: false, + skewX: 0, + skewY: 0, + visible: true, + metadata: { + fontURL: 'http://fonts.gstatic.com/s/aguafinascript/v9/If2QXTv_ZzSxGIO30LemWEOmt1bHqs4pgicOrg.ttf', + angle: 0, + fill: '#000000', + fontWeight: 700, + charspacing: 0, + fontSize: 80, + template: 'Default Text', + fontFamily: 'Aguafina Script', + textAlign: 'center', + lineheight: 1.16, + text: 'Default Text' + } + } + ], + background: { + type: 'color', + value: '#ffffff' + }, + frame: { + width: 1280, + height: 720 + }, + metadata: { + animated: false + } +} diff --git a/example/src/scenes/Editor/components/Panels/PanelItem.tsx b/example/src/scenes/Editor/components/Panels/PanelItem.tsx new file mode 100644 index 0000000..1586b3a --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItem.tsx @@ -0,0 +1,32 @@ +// @ts-nocheck +import * as React from 'react' +import useAppContext from '../../../../hooks/useAppContext' +import { useEditorContext } from '../../../../../../src' +import { styled } from 'baseui' +import { useEffect } from 'react' +import PanelItems from './PanelItems' + +const Container = styled('div', props => ({ + background: '#ffffff', + width: '360px', + flex: 'none', + boxShadow: '1px 0px 1px rgba(0, 0, 0, 0.15)' +})) + +function PanelsList() { + const { activePanel, activeSubMenu, setActiveSubMenu } = useAppContext() + const { activeObject } = useEditorContext() + + useEffect(() => { + if (!activeObject) { + setActiveSubMenu(null) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [activeObject]) + + const Component = activeObject && activeSubMenu ? PanelItems[activeSubMenu] : PanelItems[activePanel] + + return {Component && } +} + +export default PanelsList diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Animations.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Animations.tsx new file mode 100644 index 0000000..bd41907 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Animations.tsx @@ -0,0 +1,112 @@ +import * as React from 'react' +import { StatefulTabs, Tab } from 'baseui/tabs' +import { useEditor } from '../../../../../../../src' +import { Scrollbars } from 'react-custom-scrollbars' + +import { useState } from 'react' + +const animations = [ + { + type: 'NONE', + name: 'None', + preview: ' ' + }, + { + type: 'STOMP', + name: 'Stomp', + preview: ' ' + }, + { + type: 'TUMBLE', + name: 'Tumble', + preview: ' ' + }, + { + type: 'RISE', + name: 'Rise', + preview: ' ' + }, + { + type: 'PAN', + name: 'Pan', + preview: ' ' + }, + { + type: 'FADE', + name: 'Fade', + preview: ' ' + }, + { + type: 'BREATHE', + name: 'Breathe', + preview: ' ' + } +] + +function Panel() { + const [value, setValue] = useState('') + const editor = useEditor() + + return ( +
+ + + Page animations + +
+ {animations.map(animation => { + return ( +
editor.animate(animation.type)} + style={{ + alignItems: 'center', + cursor: 'pointer', + padding: '10px', + display: 'flex', + justifyContent: 'center', + flexDirection: 'column', + fontSize: '12px' + }} + > + preview +
{animation.name}
+
+ ) + })} +
+
+ {/* Tab 3 content */} +
+
+
+ ) +} + +export default Panel diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Background.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Background.tsx new file mode 100644 index 0000000..3ceaf95 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Background.tsx @@ -0,0 +1,133 @@ +import * as React from 'react' +import { useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { useEditor } from '../../../../../../../src' +import { HexColorPicker } from 'react-colorful' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { Plus } from 'baseui/icon' +// @ts-ignore +import throttle from 'lodash/throttle' + +const colors = [ + '#f19066', + '#f5cd79', + '#546de5', + '#e15f41', + '#c44569', + '#574b90', + '#f78fb3', + '#3dc1d3', + '#e66767', + '#303952' +] +function Background() { + const editor = useEditor() + const [color, setColor] = useState('#b32aa9') + const [value, setValue] = useState('') + + const updateBackgrounColor = throttle((color: string) => { + editor.background.setBackgroundColor(color) + setColor(color) + }, 100) + + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search background" + clearOnEscape + /> +
+
+ +
+
Document colors
+ + + setValue((e.target as any).value)} + placeholder="#000000" + clearOnEscape + /> +
+ } + accessibilityType={'tooltip'} + > +
+
+
+ +
+
+
+ +
+
+
Default colors
+
+ +
+ {colors.map(color => ( +
editor.background.setBackgroundColor(color)} + key={color} + style={{ height: '42px', background: color, borderRadius: '4px', cursor: 'pointer' }} + >
+ ))} +
+ +
+ + ) +} + +export default Background diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Color.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Color.tsx new file mode 100644 index 0000000..3010598 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Color.tsx @@ -0,0 +1,133 @@ +import * as React from 'react' +import { useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { useEditor } from '../../../../../../../src' +import { HexColorPicker } from 'react-colorful' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { Plus } from 'baseui/icon' +// @ts-ignore +import throttle from 'lodash/throttle' + +const colors = [ + '#f19066', + '#f5cd79', + '#546de5', + '#e15f41', + '#c44569', + '#574b90', + '#f78fb3', + '#3dc1d3', + '#e66767', + '#303952' +] +function Color() { + const editor = useEditor() + const [color, setColor] = useState('#b32aa9') + const [value, setValue] = useState('') + + const updateObjectFill = throttle((color: string) => { + editor.update({ fill: color }) + setColor(color) + }, 100) + + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search color" + clearOnEscape + /> +
+
+ +
+
Document colors
+ + + setValue((e.target as any).value)} + placeholder="#000000" + clearOnEscape + /> +
+ } + accessibilityType={'tooltip'} + > +
+
+
+ +
+
+
+ +
+
+
Default colors
+
+ +
+ {colors.map(color => ( +
editor.update({ fill: color })} + key={color} + style={{ height: '42px', background: color, borderRadius: '4px', cursor: 'pointer' }} + >
+ ))} +
+ +
+ + ) +} + +export default Color diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Elements.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Elements.tsx new file mode 100644 index 0000000..0050fa2 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Elements.tsx @@ -0,0 +1,57 @@ +import * as React from 'react' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { Scrollbars } from 'react-custom-scrollbars' +import { useState } from 'react' +import useAppContext from '../../../../../hooks/useAppContext' +import { useEditor } from '../../../../../../../src' + +function Panel() { + const editor = useEditor() + const [value, setValue] = useState('') + const { shapes } = useAppContext() + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search elements" + clearOnEscape + /> +
+
+ +
+ {shapes.map(shape => ( +
editor.add({ ...shape, originX: 'center', originY: 'center' })} + > + preview +
+ ))} +
+
+
+
+ ) +} + +export default Panel diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/FontFamily.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/FontFamily.tsx new file mode 100644 index 0000000..ed06106 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/FontFamily.tsx @@ -0,0 +1,76 @@ +import * as React from 'react' +import { useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import { styled } from 'baseui' +import { IFontFamily } from '../../../../../common/interfaces' +import { useEditor } from '../../../../../../../src' +import { editorFonts } from '../../../../../constants/fonts' +import Icons from '../../icons' + +function FontFamily() { + const [value, setValue] = useState('') + const editor = useEditor() + const handleFontFamilyChange = async (fontFamily: IFontFamily) => { + if (editor) { + const fontFile = fontFamily.files['regular' as any] + const font = { + name: fontFamily.family, + url: fontFile, + options: { style: 'normal', weight: 400 } + } + // @ts-ignore + const fontFace = new FontFace(font.name, `url(${font.url})`, font.options) + fontFace + .load() + .then(loadedFont => { + // @ts-ignore + document.fonts.add(loadedFont) + fontFace.loaded.then(() => { + editor.update({ + fontFamily: fontFamily.family, + metadata: { + fontURL: font.url + } + }) + }) + }) + .catch(err => console.log(err)) + } + } + + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search font" + clearOnEscape + /> +
+
+ +
+ {editorFonts.map(font => ( + handleFontFamilyChange(font)} key={font.id}> + {font.family} + + ))} +
+
+
+
+ ) +} + +const FontItem = styled('div', props => ({ + cursor: 'pointer', + padding: '14px 5px 14px 5px', + ':hover': { + background: 'rgba(0,0,0,0.045)' + } +})) + +export default FontFamily diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Illustrations.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Illustrations.tsx new file mode 100644 index 0000000..3840826 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Illustrations.tsx @@ -0,0 +1,78 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { getImage, getImages } from '../../../../../services/iconscout' +import { useEditor } from '../../../../../../../src' +import { useDebounce } from 'use-debounce' + +function Illustrations() { + const [search, setSearch] = useState('') + const [objects, setObjects] = useState([]) + const [value] = useDebounce(search, 1000) + const editor = useEditor() + + useEffect(() => { + getImages('people') + .then((data: any) => setObjects(data)) + .catch(console.log) + }, []) + + useEffect(() => { + if (value) { + getImages(value) + .then((data: any) => setObjects(data)) + .catch(console.log) + } + }, [value]) + const downloadImage = uuid => { + getImage(uuid) + .then(url => { + const options = { + type: 'StaticVector', + metadata: { src: url } + } + editor.add(options) + }) + .catch(console.log) + } + + return ( +
+
+ } + value={search} + onChange={e => setSearch((e.target as any).value)} + placeholder="Search illustrations" + clearOnEscape + /> +
+
+ +
+ {objects.map(obj => ( +
downloadImage(obj.uuid)} + > + svg object +
+ ))} +
+
+
+
+ ) +} + +export default Illustrations diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Images.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Images.tsx new file mode 100644 index 0000000..278a63b --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Images.tsx @@ -0,0 +1,74 @@ +import * as React from 'react' + +import { useEffect, useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { getPixabayImages, PixabayImage } from '../../../../../services/pixabay' +import { useEditor } from '../../../../../../../src' +import { useDebounce } from 'use-debounce' + +function Images() { + const [search, setSearch] = useState('') + const [images, setImages] = useState([]) + const [value] = useDebounce(search, 1000) + const editor = useEditor() + useEffect(() => { + getPixabayImages('people') + .then(data => setImages(data)) + .catch(console.log) + }, []) + + useEffect(() => { + if (value) { + getPixabayImages(value) + .then((data: any) => setImages(data)) + .catch(console.log) + } + }, [value]) + + const addImageToCanvas = url => { + const options = { + type: 'StaticImage', + metadata: { src: url } + } + editor.add(options) + } + + return ( +
+
+ } + value={search} + onChange={e => setSearch((e.target as any).value)} + placeholder="Search images" + clearOnEscape + /> +
+
+ +
+ {images.map(img => ( +
addImageToCanvas(img.webformatURL)} + > + preview +
+ ))} +
+
+
+
+ ) +} + +export default Images diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Layers.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Layers.tsx new file mode 100644 index 0000000..4286e73 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Layers.tsx @@ -0,0 +1,9 @@ +import * as React from 'react' + +import { Fragment } from 'react' + +function Panel() { + return Layers +} + +export default Panel diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Templates.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Templates.tsx new file mode 100644 index 0000000..8153385 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Templates.tsx @@ -0,0 +1,51 @@ +import * as React from 'react' + +import useAppContext from '../../../../../hooks/useAppContext' +import { useState } from 'react' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { useEditor } from '../../../../../../../src' + +function Templates() { + const editor = useEditor() + const { templates } = useAppContext() + const [value, setValue] = useState('') + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search templates" + clearOnEscape + /> +
+
+ +
+ {templates.map(template => ( +
editor.importFromJSON(template)} + > + preview +
+ ))} +
+
+
+
+ ) +} + +export default Templates diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/Text.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/Text.tsx new file mode 100644 index 0000000..85d5c1b --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/Text.tsx @@ -0,0 +1,127 @@ +import * as React from 'react' + +import { useEditor } from '../../../../../../../src' +import { Scrollbars } from 'react-custom-scrollbars' +import { Input } from 'baseui/input' +import Icons from '../../../../../components/icons' +import { useState } from 'react' + +function Panel() { + const [value, setValue] = useState('') + const editor = useEditor() + + const addHeading = () => { + const options = { + type: 'StaticText', + width: 800, + metadata: { + fontWeight: 700, + fontFamily: 'Lexend', + textAlign: 'center', + fontSize: 80, + value: 'Add a heading' + } + } + editor.add(options) + } + + const addSubheading = () => { + const options = { + type: 'StaticText', + width: 800, + metadata: { + value: 'Add a subheading', + fontSize: 60, + fontWeight: 500, + fontFamily: 'Lexend', + textAlign: 'center' + } + } + editor.add(options) + } + + const addTextBody = () => { + const options = { + type: 'StaticText', + width: 800, + metadata: { + value: 'Add a little bit of body text', + fontSize: 40, + fontWeight: 300, + fontFamily: 'Lexend', + textAlign: 'center' + } + } + editor.add(options) + } + return ( +
+
+ } + value={value} + onChange={e => setValue((e.target as any).value)} + placeholder="Search text" + clearOnEscape + /> +
+
+ +
+
+ Add a heading +
+
+ Add a subheading +
+
+ Add a litle bit of body text +
+
+
+
+
+ ) +} + +export default Panel diff --git a/example/src/scenes/Editor/components/Panels/PanelItems/index.tsx b/example/src/scenes/Editor/components/Panels/PanelItems/index.tsx new file mode 100644 index 0000000..3eb8402 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelItems/index.tsx @@ -0,0 +1,25 @@ +import Background from './Background' +import Templates from './Templates' +import Layers from './Layers' +import Text from './Text' +import Elements from './Elements' +import FontFamily from './FontFamily' +import Color from './Color' +import Images from './Images' +import Illustrations from './Illustrations' +import Animations from './Animations' + +class PanelItems { + static Background = Background + static Text = Text + static Layers = Layers + static Templates = Templates + static Elements = Elements + static FontFamily = FontFamily + static Color = Color + static Images = Images + static Illustrations = Illustrations + static Animations = Animations +} + +export default PanelItems diff --git a/example/src/scenes/Editor/components/Panels/PanelListItem.tsx b/example/src/scenes/Editor/components/Panels/PanelListItem.tsx new file mode 100644 index 0000000..dbf7bbc --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelListItem.tsx @@ -0,0 +1,40 @@ +import * as React from 'react' +import { useStyletron } from 'baseui' +import Icons from '../../../../components/icons' +import useAppContext from '../../../../hooks/useAppContext' + +function PanelListItem({ label, icon, activePanel }: any) { + const { setActivePanel } = useAppContext() + const [css, theme] = useStyletron() + const Icon = Icons[icon] + return ( +
setActivePanel(label)} + className={css({ + width: '84px', + height: '80px', + backgroundColor: label === activePanel ? theme.colors.background : theme.colors.primary100, + display: 'flex', + alignItems: 'center', + flexDirection: 'column', + justifyContent: 'center', + fontFamily: 'Uber Move Text', + fontWeight: 500, + fontSize: '0.8rem', + userSelect: 'none', + transition: 'all 0.5s', + gap: '0.1rem', + ':hover': { + cursor: 'pointer', + backgroundColor: theme.colors.background, + transition: 'all 1s' + } + })} + > + +
{label}
+
+ ) +} + +export default PanelListItem diff --git a/example/src/scenes/Editor/components/Panels/Panels.tsx b/example/src/scenes/Editor/components/Panels/Panels.tsx new file mode 100644 index 0000000..749141c --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/Panels.tsx @@ -0,0 +1,15 @@ +import * as React from 'react' +import { Fragment } from 'react' +import PanelItem from './PanelItem' +import PanelsList from './PanelsList' + +function Panels() { + return ( + + + + + ) +} + +export default Panels diff --git a/example/src/scenes/Editor/components/Panels/PanelsList.tsx b/example/src/scenes/Editor/components/Panels/PanelsList.tsx new file mode 100644 index 0000000..6fbc939 --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/PanelsList.tsx @@ -0,0 +1,29 @@ +import * as React from 'react' +import { panelListItems } from '../../../../constants/app-options' +import useAppContext from '../../../../hooks/useAppContext' +import { styled } from 'baseui' +import PanelListItem from './PanelListItem' + +const Container = styled('div', props => ({ + width: '84px', + backgroundColor: props.$theme.colors.primary100 +})) + +function PanelsList() { + const { activePanel } = useAppContext() + return ( + + {panelListItems.map(panelListItem => ( + + ))} + + ) +} + +export default PanelsList diff --git a/example/src/scenes/Editor/components/Panels/index.tsx b/example/src/scenes/Editor/components/Panels/index.tsx new file mode 100644 index 0000000..836abbf --- /dev/null +++ b/example/src/scenes/Editor/components/Panels/index.tsx @@ -0,0 +1,2 @@ +import Panels from './Panels' +export default Panels diff --git a/example/src/scenes/Editor/components/Toolbox/Toolbox.tsx b/example/src/scenes/Editor/components/Toolbox/Toolbox.tsx new file mode 100644 index 0000000..a80bbfe --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/Toolbox.tsx @@ -0,0 +1,19 @@ +import * as React from 'react' +import { useEditorContext } from '../../../../../../src' +import { styled } from 'baseui' +import ToolboxItems from './ToolboxItems' + +const Container = styled('div', props => ({ + height: '56px', + backgroundColor: props.$theme.colors.background, + boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.15)', + marginLeft: '1px', + display: 'flex' +})) +function EditorToolbox() { + const { activeObject } = useEditorContext() + const Toolbox = activeObject ? ToolboxItems[activeObject.type] : null + return {Toolbox ? : } +} + +export default EditorToolbox diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Default.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Default.tsx new file mode 100644 index 0000000..35248fd --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Default.tsx @@ -0,0 +1,31 @@ +import * as React from 'react' +import Icons from '../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import useAppContext from '../../../../../hooks/useAppContext' +import { PanelType } from '../../../../../constants/app-options' + +function Default() { + const { setActivePanel } = useAppContext() + return ( +
+ +
+ ) +} + +export default Default diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Illustration.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Illustration.tsx new file mode 100644 index 0000000..300b2a8 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Illustration.tsx @@ -0,0 +1,43 @@ +import * as React from 'react' +import Icons from '../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import useAppContext from '../../../../../hooks/useAppContext' +import { SubMenuType } from '../../../../../constants/editor' +import Delete from './components/Delete' +import Duplicate from './components/Duplicate' +import Opacity from './components/Opacity' +import Position from './components/Position' +import Animate from './components/Animate' +function Illustration() { + const { setActiveSubMenu } = useAppContext() + + return ( +
+ + +
+ + + + +
+
+ ) +} + +export default Illustration diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Image.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Image.tsx new file mode 100644 index 0000000..c91cb40 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Image.tsx @@ -0,0 +1,46 @@ +import * as React from 'react' +import Icons from '../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import useAppContext from '../../../../../hooks/useAppContext' +import { SubMenuType } from '../../../../../constants/editor' +import Delete from './components/Delete' +import Duplicate from './components/Duplicate' +import Opacity from './components/Opacity' +import Position from './components/Position' +import { useEditor } from '../../../../../../../src' +import Animate from './components/Animate' + +function Image() { + const { setActiveSubMenu } = useAppContext() + return ( +
+
+ + +
+
+ + + + +
+
+ ) +} + +export default Image diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Path.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Path.tsx new file mode 100644 index 0000000..539e0bd --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Path.tsx @@ -0,0 +1,44 @@ +import * as React from 'react' +import Icons from '../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import useAppContext from '../../../../../hooks/useAppContext' +import { SubMenuType } from '../../../../../constants/editor' +import Delete from './components/Delete' +import Duplicate from './components/Duplicate' +import Opacity from './components/Opacity' +import Position from './components/Position' +import Animate from './components/Animate' +function Path() { + const { setActiveSubMenu } = useAppContext() + return ( +
+
+ + +
+
+ + + + +
+
+ ) +} + +export default Path diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Text.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Text.tsx new file mode 100644 index 0000000..5ae73ba --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/Text.tsx @@ -0,0 +1,280 @@ +// @ts-nocheck +import * as React from 'react' +import Icons from '../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import { ChevronDown } from 'baseui/icon' +import useAppContext from '../../../../../hooks/useAppContext' +import { SubMenuType } from '../../../../../constants/editor' +import { useEffect, useState } from 'react' +import { useActiveObject, useEditor } from '../../../../../../../src' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { StatefulMenu } from 'baseui/menu' +import Delete from './components/Delete' +import Duplicate from './components/Duplicate' +import Opacity from './components/Opacity' +import Position from './components/Position' +import Animate from './components/Animate' + +interface TextOptions { + fontFamily: string + fontSize: number + fontWeight: string | number + opacity: number[] + italic: string + textAligh: string + underline: string + fill: string +} + +const defaultOptions = { + fontFamily: 'Open Sans', + fontWeight: 'normal', + fontSize: 12, + opacity: [1], + italic: 'true', + textAligh: 'center', + underline: 'true', + fill: '#000000' +} + +const ITEMS = [ + { label: 8 }, + { label: 10 }, + { label: 12 }, + { label: 14 }, + { label: 16 }, + { label: 18 }, + { label: 20 }, + { label: 22 }, + { label: 24 }, + { label: 32 }, + { label: 36 }, + { label: 64 } +] + +function Text() { + const { setActiveSubMenu } = useAppContext() + const activeObject = useActiveObject() + const [options, setOptions] = useState(defaultOptions) + const editor = useEditor() + useEffect(() => { + updateOptions(activeObject) + }, [activeObject]) + + useEffect(() => { + editor.on('history:changed', () => { + updateOptions(activeObject) + }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [editor]) + + const updateOptions = (object: fabric.TextOptions) => { + const textOptions = ({ + fontFamily: object.fontFamily, + fontSize: object.fontSize, + fontWeight: object.fontWeight, + opacity: [object.opacity * 100], + italic: object.fontStyle, + textAligh: object.textAlign, + underline: object.underline, + fill: object.fill + } as unknown) as TextOptions + setOptions(textOptions) + } + + const checkBold = (value: string | number) => { + return value === 'bold' || value === 700 + } + + const toggleBold = () => { + const isBold = checkBold(options.fontWeight) + editor.update({ fontWeight: isBold ? 400 : 700 }) + } + + const toggleUnderline = () => { + editor.update({ underline: activeObject.underline ? false : true }) + } + + const checkIsItalic = (value: string) => { + const isItalic = value === 'italic' + return isItalic + } + + const toggleItalic = () => { + const isItalic = checkIsItalic(activeObject.fontStyle) + editor.update({ fontStyle: isItalic ? 'normal' : 'italic' }) + } + + const getNextTextAlign = (current: string) => { + const positions = ['left', 'center', 'right', 'justify', 'left'] + const currentIndex = positions.findIndex(v => v === current) + const nextAlign = positions[currentIndex + 1] + return nextAlign + } + + const toggleTextAlign = () => { + const currentValue = activeObject.textAlign + const nextTextAlign = getNextTextAlign(currentValue) + editor.update({ textAlign: nextTextAlign }) + } + + const getTextAlignIcon = () => { + const currentValue = activeObject.textAlign + const Icon = + currentValue === 'left' + ? Icons.TextAlignLeft + : currentValue === 'center' + ? Icons.TextAlignCenter + : currentValue === 'right' + ? Icons.TextAlignRight + : Icons.TextAlignJustify + return Icon + } + + const updateFontSize = (value: number) => { + editor.update({ fontSize: value }) + } + + const TextAlignIcon = getTextAlignIcon() + return ( +
+
+ + + ( + { + updateFontSize(event.item.label) + close() + }} + overrides={{ + List: { style: { width: '72px', textAlign: 'center', height: '240px' } } + }} + /> + )} + > + + + +
+ + + + + + +
+
+
+ + + + +
+
+ ) +} + +export default Text diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Animate.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Animate.tsx new file mode 100644 index 0000000..2ebb659 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Animate.tsx @@ -0,0 +1,30 @@ +import * as React from 'react' +import { useEditor } from '../../../../../../../../src' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import Icons from '../../../icons' +import useAppContext from '../../../../../../hooks/useAppContext' +import { SubMenuType } from '../../../../../../constants/editor' + +function Duplicate() { + const { setActiveSubMenu } = useAppContext() + + return ( + + ) +} + +export default Duplicate diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Delete.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Delete.tsx new file mode 100644 index 0000000..8f992f2 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Delete.tsx @@ -0,0 +1,15 @@ +import * as React from 'react' +import { useEditor } from '../../../../../../../../src' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import Icons from '../../../icons' + +function Delete() { + const editor = useEditor() + return ( + + ) +} + +export default Delete diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Duplicate.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Duplicate.tsx new file mode 100644 index 0000000..3d01e95 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Duplicate.tsx @@ -0,0 +1,22 @@ +import * as React from 'react' +import { useEditor } from '../../../../../../../../src' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import Icons from '../../../icons' + +function Duplicate() { + const editor = useEditor() + return ( + + ) +} + +export default Duplicate diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Opacity.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Opacity.tsx new file mode 100644 index 0000000..1f2deb6 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Opacity.tsx @@ -0,0 +1,86 @@ +// @ts-nocheck +import * as React from 'react' +import Icons from '../../../icons' +import { Button, SHAPE, KIND, SIZE } from 'baseui/button' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { Slider } from 'baseui/slider' +import { useActiveObject, useEditor } from '../../../../../../../../src' +import { useEffect, useState } from 'react' + +function Opacity() { + const [value, setValue] = useState([1]) + const activeObject = useActiveObject() + const editor = useEditor() + useEffect(() => { + updateOptions(activeObject) + }, [activeObject]) + + useEffect(() => { + editor.on('history:changed', () => { + updateOptions(activeObject) + }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [editor]) + + const updateOptions = (object: fabric.IObjectOptions) => { + const updatedValue = [object.opacity * 100] + setValue(updatedValue) + } + + const updateOpacity = (value: number[]) => { + const opacityValue = value[0] / 100 + editor.update({ opacity: opacityValue }) + } + + return ( + ( +
+
+
Transparency
+ null, + ThumbValue: () => null, + TickBar: () => null, + Thumb: { + style: { + height: '20px', + width: '20px' + } + } + }} + min={0} + max={100} + marks={false} + value={value} + onChange={({ value }) => updateOpacity(value)} + /> +
{Math.round(value[0])}
+
+
+ )} + > + +
+ ) +} + +export default Opacity diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Position.tsx b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Position.tsx new file mode 100644 index 0000000..d2880d5 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/components/Position.tsx @@ -0,0 +1,84 @@ +import * as React from 'react' +import Icons from '../../../icons' +import { Button, KIND, SIZE } from 'baseui/button' +import { StatefulPopover, PLACEMENT } from 'baseui/popover' +import { useEditor } from '../../../../../../../../src' + +function Position() { + const editor = useEditor() + return ( + ( +
+
+
+ + +
+
+ + +
+
+
+ )} + > + +
+ ) +} +interface PositionItemProps { + icon: string + label: string + shortcut: string + onClick: Function +} +const PositionItem = ({ icon, label, shortcut, onClick }: PositionItemProps) => { + const Icon = Icons[icon] + return ( +
onClick()} style={{ display: 'flex', alignItems: 'center' }}> +
+ +
{label}
+
+
{shortcut}
+
+ ) +} + +export default Position diff --git a/example/src/scenes/Editor/components/Toolbox/ToolboxItems/index.ts b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/index.ts new file mode 100644 index 0000000..89c3402 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/ToolboxItems/index.ts @@ -0,0 +1,14 @@ +import Default from './Default' +import Text from './Text' +import Path from './Path' +import Illustration from './Illustration' +import Image from './Image' +class ToolboxItems { + static Default = Default + static StaticText = Text + static StaticPath = Path + static StaticVector = Illustration + static StaticImage = Image +} + +export default ToolboxItems diff --git a/example/src/scenes/Editor/components/Toolbox/index.tsx b/example/src/scenes/Editor/components/Toolbox/index.tsx new file mode 100644 index 0000000..a862285 --- /dev/null +++ b/example/src/scenes/Editor/components/Toolbox/index.tsx @@ -0,0 +1,2 @@ +import Toolbox from './Toolbox' +export default Toolbox diff --git a/example/src/scenes/Editor/components/icons/Background.tsx b/example/src/scenes/Editor/components/icons/Background.tsx new file mode 100644 index 0000000..efa60f1 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Background.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Background({ size }: { size: number }) { + return ( + + + + ) +} + +export default Background diff --git a/example/src/scenes/Editor/components/icons/Backward.tsx b/example/src/scenes/Editor/components/icons/Backward.tsx new file mode 100644 index 0000000..fc7f2cb --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Backward.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Backward({ size }: { size: number }) { + return ( + + + + ) +} + +export default Backward diff --git a/example/src/scenes/Editor/components/icons/Bold.tsx b/example/src/scenes/Editor/components/icons/Bold.tsx new file mode 100644 index 0000000..d02c63e --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Bold.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' +function Bold({ size }: { size: number }) { + return ( + + + + ) +} + +export default Bold diff --git a/example/src/scenes/Editor/components/icons/Delete.tsx b/example/src/scenes/Editor/components/icons/Delete.tsx new file mode 100644 index 0000000..ce011ee --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Delete.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Delete({ size }: { size: number }) { + return ( + + + + ) +} + +export default Delete diff --git a/example/src/scenes/Editor/components/icons/Duplicate.tsx b/example/src/scenes/Editor/components/icons/Duplicate.tsx new file mode 100644 index 0000000..5b4657c --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Duplicate.tsx @@ -0,0 +1,21 @@ +import * as React from 'react' +function Duplicate({ size }: { size: number }) { + return ( + + + + + ) +} + +export default Duplicate diff --git a/example/src/scenes/Editor/components/icons/Elements.tsx b/example/src/scenes/Editor/components/icons/Elements.tsx new file mode 100644 index 0000000..be219a8 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Elements.tsx @@ -0,0 +1,16 @@ +import * as React from 'react' +function Elements({ size }: { size: number }) { + return ( + + + + ) +} + +export default Elements diff --git a/example/src/scenes/Editor/components/icons/FillColor.tsx b/example/src/scenes/Editor/components/icons/FillColor.tsx new file mode 100644 index 0000000..7b38066 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/FillColor.tsx @@ -0,0 +1,17 @@ +import * as React from 'react' +// @ts-ignore +import FullColor from '../../../../assets/images/full-color.png' + +function FillColor({ color = '#000000' }: { size?: number; color: string }) { + return ( +
+ {color === '#000000' || color === '#ffffff' ? ( + color picker + ) : ( +
+ )} +
+ ) +} + +export default FillColor diff --git a/example/src/scenes/Editor/components/icons/Forward.tsx b/example/src/scenes/Editor/components/icons/Forward.tsx new file mode 100644 index 0000000..64b9a95 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Forward.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Forward({ size }: { size: number }) { + return ( + + + + ) +} + +export default Forward diff --git a/example/src/scenes/Editor/components/icons/Images.tsx b/example/src/scenes/Editor/components/icons/Images.tsx new file mode 100644 index 0000000..885738a --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Images.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Images({ size }: { size: number }) { + return ( + + + + ) +} + +export default Images diff --git a/example/src/scenes/Editor/components/icons/Italic.tsx b/example/src/scenes/Editor/components/icons/Italic.tsx new file mode 100644 index 0000000..b394841 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Italic.tsx @@ -0,0 +1,15 @@ +import * as React from 'react' + +function Italic({ size }: { size: number }) { + return ( + + + + ) +} + +export default Italic diff --git a/example/src/scenes/Editor/components/icons/Locked.tsx b/example/src/scenes/Editor/components/icons/Locked.tsx new file mode 100644 index 0000000..f67e2db --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Locked.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Locked({ size }: { size: number }) { + return ( + + + + ) +} + +export default Locked diff --git a/example/src/scenes/Editor/components/icons/Logo.tsx b/example/src/scenes/Editor/components/icons/Logo.tsx new file mode 100644 index 0000000..7d5debf --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Logo.tsx @@ -0,0 +1,34 @@ +import * as React from 'react' + +function Logo({ size }: { size: number }) { + return ( + + + + + + ) +} + +export default Logo diff --git a/example/src/scenes/Editor/components/icons/Opacity..tsx b/example/src/scenes/Editor/components/icons/Opacity..tsx new file mode 100644 index 0000000..638d9c4 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Opacity..tsx @@ -0,0 +1,29 @@ +import * as React from 'react' + +function Opacity({ size }: { size: number }) { + return ( + + + + + + + + + + ) +} + +export default Opacity diff --git a/example/src/scenes/Editor/components/icons/Redo.tsx b/example/src/scenes/Editor/components/icons/Redo.tsx new file mode 100644 index 0000000..85e3204 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Redo.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Redo({ size }: { size: number }) { + return ( + + + + ) +} + +export default Redo diff --git a/example/src/scenes/Editor/components/icons/Search.tsx b/example/src/scenes/Editor/components/icons/Search.tsx new file mode 100644 index 0000000..ba9e6b3 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Search.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +function Search({ size }: { size: number }) { + return ( + + + + ) +} + +export default Search diff --git a/example/src/scenes/Editor/components/icons/Spacing.tsx b/example/src/scenes/Editor/components/icons/Spacing.tsx new file mode 100644 index 0000000..d71026f --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Spacing.tsx @@ -0,0 +1,26 @@ +import * as React from 'react' + +function Spacing({ size }: { size: number }) { + return ( + + + + + + ) +} + +export default Spacing diff --git a/example/src/scenes/Editor/components/icons/Templates.tsx b/example/src/scenes/Editor/components/icons/Templates.tsx new file mode 100644 index 0000000..9eb25a8 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Templates.tsx @@ -0,0 +1,15 @@ +import * as React from 'react' + +function Templates({ size }: { size: number }) { + return ( + + + + ) +} + +export default Templates diff --git a/example/src/scenes/Editor/components/icons/Text.tsx b/example/src/scenes/Editor/components/icons/Text.tsx new file mode 100644 index 0000000..26c9672 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Text.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Text({ size }: { size: number }) { + return ( + + + + ) +} +export default Text diff --git a/example/src/scenes/Editor/components/icons/TextAlignCenter.tsx b/example/src/scenes/Editor/components/icons/TextAlignCenter.tsx new file mode 100644 index 0000000..5395e81 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TextAlignCenter.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function TextAlignCenter({ size }: { size: number }) { + return ( + + + + ) +} +export default TextAlignCenter diff --git a/example/src/scenes/Editor/components/icons/TextAlignJustify.tsx b/example/src/scenes/Editor/components/icons/TextAlignJustify.tsx new file mode 100644 index 0000000..0927c2e --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TextAlignJustify.tsx @@ -0,0 +1,16 @@ +import * as React from 'react' + +function TextAlignJustify({ size }: { size: number }) { + return ( + + + + + + ) +} + +export default TextAlignJustify diff --git a/example/src/scenes/Editor/components/icons/TextAlignLeft.tsx b/example/src/scenes/Editor/components/icons/TextAlignLeft.tsx new file mode 100644 index 0000000..2b43248 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TextAlignLeft.tsx @@ -0,0 +1,15 @@ +import * as React from 'react' + +function TextAlignLeft({ size }: { size: number }) { + return ( + + + + ) +} + +export default TextAlignLeft diff --git a/example/src/scenes/Editor/components/icons/TextAlignRight.tsx b/example/src/scenes/Editor/components/icons/TextAlignRight.tsx new file mode 100644 index 0000000..5ae49f4 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TextAlignRight.tsx @@ -0,0 +1,12 @@ +import * as React from 'react' + +function TextAlignRight({ size }: { size: number }) { + return ( + + + + + ) +} + +export default TextAlignRight diff --git a/example/src/scenes/Editor/components/icons/TextColor.tsx b/example/src/scenes/Editor/components/icons/TextColor.tsx new file mode 100644 index 0000000..440912d --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TextColor.tsx @@ -0,0 +1,30 @@ +import * as React from 'react' + +function TextColor({ size, color = '#000000' }: { size: number; color: string }) { + return ( +
+ + + + {color === '#000000' || color === '#ffffff' ? ( +
+ color picker +
+ ) : ( +
+ )} +
+ ) +} + +export default TextColor diff --git a/example/src/scenes/Editor/components/icons/TimeFast.tsx b/example/src/scenes/Editor/components/icons/TimeFast.tsx new file mode 100644 index 0000000..8dce3c3 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/TimeFast.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Underline({ size }: { size: number }) { + return ( + + + + ) +} + +export default Underline diff --git a/example/src/scenes/Editor/components/icons/ToBack.tsx b/example/src/scenes/Editor/components/icons/ToBack.tsx new file mode 100644 index 0000000..5d6cfcf --- /dev/null +++ b/example/src/scenes/Editor/components/icons/ToBack.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function ToBack({ size }: { size: number }) { + return ( + + + + ) +} + +export default ToBack diff --git a/example/src/scenes/Editor/components/icons/ToFront.tsx b/example/src/scenes/Editor/components/icons/ToFront.tsx new file mode 100644 index 0000000..b8c4ca1 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/ToFront.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' + +function ToFront({ size }: { size: number }) { + return ( + + + + ) +} +export default ToFront diff --git a/example/src/scenes/Editor/components/icons/Underline.tsx b/example/src/scenes/Editor/components/icons/Underline.tsx new file mode 100644 index 0000000..07ed2b7 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Underline.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Underline({ size }: { size: number }) { + return ( + + + + ) +} + +export default Underline diff --git a/example/src/scenes/Editor/components/icons/Undo.tsx b/example/src/scenes/Editor/components/icons/Undo.tsx new file mode 100644 index 0000000..9052372 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Undo.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Undo({ size }: { size: number }) { + return ( + + + + ) +} + +export default Undo diff --git a/example/src/scenes/Editor/components/icons/Unlocked.tsx b/example/src/scenes/Editor/components/icons/Unlocked.tsx new file mode 100644 index 0000000..d50e01d --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Unlocked.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Elements({ size }: { size: number }) { + return ( + + + + ) +} + +export default Elements diff --git a/example/src/scenes/Editor/components/icons/Uploads.tsx b/example/src/scenes/Editor/components/icons/Uploads.tsx new file mode 100644 index 0000000..2d53e7c --- /dev/null +++ b/example/src/scenes/Editor/components/icons/Uploads.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' + +function Uploads({ size }: { size: number }) { + return ( + + + + ) +} + +export default Uploads diff --git a/example/src/scenes/Editor/components/icons/index.ts b/example/src/scenes/Editor/components/icons/index.ts new file mode 100644 index 0000000..5756282 --- /dev/null +++ b/example/src/scenes/Editor/components/icons/index.ts @@ -0,0 +1,59 @@ +import Background from './Background' +import Elements from './Elements' +import Text from './Text' +import Templates from './Templates' +import Delete from './Delete' +import Locked from './Locked' +import UnLocked from './Unlocked' +import Bold from './Bold' +import Italic from './Italic' +import TextColor from './TextColor' +import FillColor from './FillColor' +import Images from './Images' +import TextAlignCenter from './TextAlignCenter' +import TextAlignRight from './TextAlignRight' +import TextAlignLeft from './TextAlignLeft' +import TextAlignJustify from './TextAlignJustify' +import Underline from './Underline' +import Opacity from './Opacity.' +import Duplicate from './Duplicate' +import ToFront from './ToFront' +import Forward from './Forward' +import ToBack from './ToBack' +import Backward from './Backward' +import Undo from './Undo' +import Redo from './Redo' +import TimeFast from './TimeFast' +import Search from './Search' + +class Icons { + static Background = Background + static Elements = Elements + static Text = Text + static Templates = Templates + static Delete = Delete + static Locked = Locked + static UnLocked = UnLocked + static Bold = Bold + static Italic = Italic + static TextColor = TextColor + static FillColor = FillColor + static Images = Images + static TextAlignRight = TextAlignRight + static TextAlignCenter = TextAlignCenter + static TextAlignLeft = TextAlignLeft + static TextAlignJustify = TextAlignJustify + static Underline = Underline + static Opacity = Opacity + static Duplicate = Duplicate + static ToFront = ToFront + static Forward = Forward + static ToBack = ToBack + static Backward = Backward + static Undo = Undo + static Redo = Redo + static TimeFast = TimeFast + static Search = Search +} + +export default Icons diff --git a/example/src/scenes/Editor/index.ts b/example/src/scenes/Editor/index.ts new file mode 100644 index 0000000..ecf8d4c --- /dev/null +++ b/example/src/scenes/Editor/index.ts @@ -0,0 +1,2 @@ +import Editor from './Editor' +export default Editor diff --git a/example/src/services/api.ts b/example/src/services/api.ts new file mode 100644 index 0000000..9bb70e9 --- /dev/null +++ b/example/src/services/api.ts @@ -0,0 +1,66 @@ +import axios, { AxiosInstance } from 'axios' + +type Template = any +class ApiService { + base: AxiosInstance + constructor() { + this.base = axios.create({ + baseURL: 'https://api.scenify.io', + }) + } + + createTemplate(props: Partial